Live data from Hacker News

Software Architecture Guide

martinfowler.com

211–220 of 303 posts

Re: Software Architecture Guide

#211
post #95

People have asked for evidence on this thread, so let me share my experience. A couple of years ago, I was developing an E-Commerce platformm internally for my company. I follow Martin Fowlers' articles on using DDD (Domain Driven Design) and Microservices to architect applications. What should have been a month long project took us 8 months! I'm not including the time I took to read about, understand and practice DD…

Even Martin Fowler writes that DDD is for large, complex software. He also recommends monoliths before microservices.

If you're writing something that should take you one month it is not large and complex. It is not suitable for DDD or microservices.

Microservices are not always micro. It's a bad name. Teams of 5-10 oftentimes work on only a single microservice. 1 microservice can be millions of lines of code.

Re: Software Architecture Guide

#212

Earlier quoted context omitted.

> He treats this stuff like it's 100% art Is this true? I'm just picturing in my mind juxtaposing Fowler's writings and I dunno, an art critic's. Category theory is cool and important, but to insinuate that all design problems can be "derived" by it sounds like a mathematician declaring that the work of all civil engineers as just "applied math".

>Is this true? I'm just picturing in my mind juxtaposing Fowler's writings and I dunno, an art critic's. He does. The language is different. He uses technical buzz words from the tech industry rather then the jargon from the art industry. A paper with science will have data and statistics. A paper with logic will have formal descriptions, axioms and theorems. Martin Fowlers papers contain little of any of these thing…

> I never said that all solutions can be derived from category theory

But I think what you're saying is that they should. I don't understand how this is possible or desirable.

However formally described the internals of a system are, it must interact with the world, and designing those boundaries depends entirely on what you want your system to do, which is an art. Just like you can't get an ought from an is, you can't derive a solution to "will this satisfy the user" or "will this be done in time for market" from correctness proofs of code.

You might be referring purely to the computational soundness of a system, but that is to system design as the structural soundness of concrete is to the architecture of a bridge.

Re: Software Architecture Guide

#213
Head closer to the rocks of chaos rather than suffocating control. But being on that side of the channel still means we have to avoid the rocks, and a way to maximize local decision making in a way that minimizes the real costs involved. - Martin Fowler

... added to https://github.com/globalcitizen/taoup

Re: Software Architecture Guide

#214
post #164

Earlier quoted context omitted.

> I'm poking holes in that hypothesis because there's always n + 1 conceivable use case where the opposite is true. And it's conceivable that the sun will not rise tomorrow, or that the law of gravity will pass an inflection point and reverse itself. Also based on "set theory and computational algebra", and the impossibly of testing each possibly. What's your plan for tomorrow, and does it depend on gravity?

I'll take logical fallacies and rethorical devices for 200, Alex.

And what logical fallacy was Hume committing when he explored the limits of inductive reasoning with that example, precisely?

Re: Software Architecture Guide

#215
post #187
post #179

Earlier quoted context omitted.

Software development does have a certain Darwinian character - whatever survives and thrives can't be wrong. Embracing this seems misguided, because as software becomes more complex, it's no longer enough to have software blacksmiths banging away with their software hammers and unit testing the end result into a releasable shape. Teams working on high-availability, high-reliability software know this and take a rigor…

> Software development does have a certain Darwinian character - whatever survives and thrives can't be wrong. I am not sure of that. A lot of what we see today is just adding an abstraction on top of other abstractions. People use five frameworks for a static webpage that could have been easily made in half a day using editor, css and html without ever writing a single line of javascript. In a evolutionary sense it…

A lot of what we see today is just adding an abstraction on top of other abstractions. People use five frameworks for a static webpage that could have been easily made in half a day using editor, css and html without ever writing a single line of javascript.

Not to speak for them, but I think it's more that despite decades of ridicule, there's still a lot of COBOL out there humming along. Some of it might even be deciding whether or not your health insurance is going to cover that thing that you went to the doctor for the other day. See also: Visual Basic, ColdFusion and so on.

Re: Software Architecture Guide

#216

Earlier quoted context omitted.

>Is this true? I'm just picturing in my mind juxtaposing Fowler's writings and I dunno, an art critic's. He does. The language is different. He uses technical buzz words from the tech industry rather then the jargon from the art industry. A paper with science will have data and statistics. A paper with logic will have formal descriptions, axioms and theorems. Martin Fowlers papers contain little of any of these thing…

> I never said that all solutions can be derived from category theory But I think what you're saying is that they should . I don't understand how this is possible or desirable. However formally described the internals of a system are, it must interact with the world, and designing those boundaries depends entirely on what you want your system to do, which is an art. Just like you can't get an ought from an is, you ca…

>But I think what you're saying is that they should. I don't understand how this is possible or desirable.

Definitely not possible (yet) but this may be possible in the future. Whether it should be or not is not something I talked about. But since you brought it up, my opinion is that if there exists a function that can definitively derive the best possible system for a problem given a set of requirements then YES absolutely I would use it rather then design a system myself.

Whenever we design a system we have no idea whether that system is the "best" possible solution. Better to derive the best then to "design" or aka "estimate" a solution.

Anyway this stuff is mostly speculative not entirely worth debating over speculation. If it never happens what's the point?

>However formally described the internals of a system are, it must interact with the world, and designing those boundaries depends entirely on what you want your system to do, which is an art.

This is true. Designing the specifications of a system is largely an art because you could be trying to satisfy a customer who needs and wants are unknown and varying. This is not what I am referring too.

I am talking about implementing a solution to MEET those specifications. This part unfortunately is also largely an art. I'm speculating about a function that can potentially FIND the BEST solution to meet a specification and therefore eliminating the artistic portion of this part of the problem, not the specification part.

>You might be referring purely to the computational soundness of a system, but that is to system design as the structural soundness of concrete is to the architecture of a bridge.

The architecture of a bridge is different from software architecture. I am talking about the "architecture" of a system to meet the high level needs of a specification.

The product designer translates the world of vagueness and opinion into a set of exact specifications.

The software architect builds a system to meet those specification or potentially changing specification. I am referring to the process being implemented by the software guy, not the product designer.

The bridge architect usually is a hybrid role he does a bit of translating requirements and implementation as well. It's less clear cut.

To fit your analogy lets use a designer instead. The designer gives me a shape he wants the bridge to be in, and how many people are going to walk across the bridge per day. The civil engineer builds the bridge to meet that specification using the cheapest materials possible. The civil engineer is not concerned with whether or not the shape of the bridge is pleasing to the people who walk over the bridge. That part is the responsibility of the designer.

Think about it, even for systems implemented by the software architect today, even when the architect has knowledge about the EXACT specifications needed to be fulfilled by the system he is largely doing a lot of design work. He has no way of verifying whether his design is the best way to do things.

Re: Software Architecture Guide

#217
post #98

I looked at this thread a while back and closed the window, hoping that those early comments don't influence the younger practitioners who are on HN. As someone nearing 40 (mainly doing consulting work around boring business apps for a long time), my view is that Martin Folwer's biggest contribution is indeed the documentation, and defining the vocabulary to enable discussion around frequently encountered (but perhap…

I know one guy who thinks that Fowler is wrong in very large number of points. He works as an architect in big company now (FAANG) and he did some great projects before, so I certainly trust him. For example he thinks that anemic model is the right way to do and putting methods into data objects is wrong. Unfortunately he does not want to write a book yet, so I can't reveal anything, but I just want to underline that a good engineer should not blindly trust anything, even if it seems to be written by a well received author. I, myself, read his Refactoring book and it was great.

Unfortunately I'm not qualified enough to judge those things myself, I just learned that I must doubt about anything, even if it seems to come from big names.

Re: Software Architecture Guide

#218

Lots of hate in this thread.. People asking for proof: what sort of evidence would convince you? I take these blog posts, apply it to my experience, and take what I think makes sense. Sometimes, an idea will solve an obvious pain I've had. Sometimes, an idea will show me a pain I didn't know I have. Sometimes I disagree with the idea because it won't work for me. That's fine. I'm still much better off thanks to this…

There are many arguments that sound logical on their face but completely miss the mark.

Laffer curve is one that comes to mind immediately. The saying goes: "It can be explained to congress in 6 minutes and used for 6 months."

It can be argued (with data) that it failed.

Martin Fowler is no doubt a smart and greatly respected person in this industry.

Saying something qualitatively doesn't mean there isn't quantifiable data behind it...but with his vantage point I believe we should press for a higher source of truth.

I assume he can understand how important that higher source of truth is in having these conversations regarding what moves the architectural needle.

Else we stay in this echo chamber.

Re: Software Architecture Guide

#219
post #179

Earlier quoted context omitted.

>Your objections are invalid; one does not need to be better at a task than an individual in order to criticize them. Asking for references and proof is perfectly legitimate, at least if we want to approach our discipline more as engineering and less as "Strunk & White" as someone comically suggested in another comment Software development, as often as comparisons are made to engineering or science is neither. It's a…

Software development does have a certain Darwinian character - whatever survives and thrives can't be wrong. Embracing this seems misguided, because as software becomes more complex, it's no longer enough to have software blacksmiths banging away with their software hammers and unit testing the end result into a releasable shape. Teams working on high-availability, high-reliability software know this and take a rigor…

> Teams working on high-availability, high-reliability software know this and take a rigorous approach

Approaches that are, nevertheless, still more akin to philosophy than engineering.

Re: Software Architecture Guide

#220
post #158

Earlier quoted context omitted.

If you want to see how a properly referenced text looks like, pick any of the following: * Code Complete - McConnell * The Economics of Software Quality - Capers Jones * Facts and Fallacies of Software Engineering - Robert Glass * Making Software - Oram & Wilson ... and there are many others. Not all references have survived the test of time, L. Bossavit describes in his book " Leprechauns of Software Engineering" ho…

>Your objections are invalid; one does not need to be better at a task than an individual in order to criticize them. Asking for references and proof is perfectly legitimate, at least if we want to approach our discipline more as engineering and less as "Strunk & White" as someone comically suggested in another comment Software development, as often as comparisons are made to engineering or science is neither. It's a…

[deleted]
Post reply on HN