Ask HN: What are good books on SW architecture that don't sell microservices?
There have been multiple discussions of how the microservices movement did more harm than good, how a modular monolith can be a much better option.
I wish there was a comprehensive book (ideally) that is practical, pragmatic, doesn't advocate the use of microservices just because it is cool, etc.
Some books that are often recommended have "microservices" in their names which is a pretty bad start.
For example, I am thinking of how two services should communicate (I am unfortunately guilty of having more services that I really needed). There are multiple options and the choice depends on factors like synchronous vs asynchronous so I would like to read a detailed analysis of all tradeoffs and considerations. Ideally, from authors that really know what they're talking about.
28 comments
[ 3.2 ms ] story [ 49.1 ms ] threadHave you read it? Do you know what angle he takes on them?
both predate microservices, and both are still very useful today.
Hopefully it will give you new perspectives.
There are still many new ways of architecture to be found. For example, making software with an extension language could result in way better systems than a system envisioned by a customer who has no clue about computers. But unfortunately, it is often a nonsensical output constraint that determines how software evolves.
Knowing how to manage these constraints is key. And this requires understanding and being able to successfully communicate with people, and keeping track of contemporary hardware and software to interface with. The actual software design seems largely irrelevant to me.
Just use good names, and subdivide complexity into modules with a lower cumulative complexity.
Good architecture tends to break up complexity into common building blocks, and avoiding patterns that might cause instability or failure. Or seeing the cause of the instability and then fixing it. IOW, there's really no need to recreate the wheel....
Over time, as you get good at it, you'll see the exact same patterns over and over again, so rather than need to experiment with new technologies or software architectures, you can just reach into your experience and bring things out you know work already.
I don't think there are lots of examples of the distributed systems discussion though, since most of the writing is about how to structure the source code of a single program. That's not unrelated, since most of what you're asking about is how different interfaces or modules should interact. In a distributed system, that happens over RPCs, but it can just as easily happen within a program with separate threads.
Note: they've added some other books, which show up at the top of the page, but I've only read select chapters from AOSA Volume 1.
Here is a blog post from Robert C. Martin about microservices and clean architecture: https://blog.cleancoder.com/uncle-bob/2014/10/01/CleanMicros...
So: 1) Read classic books about monolith software. 2) Read decent books about microservices approach.
a) Microservices are a 20+ year old concept and for the right use cases are a better choice than monoliths. Likewise the reverse is true. Being successful with your architecture is all about being pragmatic and choosing the right tool for the job.
b) Don't fall into the trap of being obsessed about what is cool or not. No one really cares other than you and it isn't going to affect your career prospects despite this being a popular myth.
c) What does affect your career is being narrow minded, acting like you're smarter than other engineers and being closed off to other ideas. You should understand micro services, monoliths, 90s style SOA etc. You should understand everything. Why they were invented and their relative strengths and weaknesses. Being able to articulartly defend your architecture is a fundamental aspect of working in IT.
https://www.oreilly.com/library/view/software-architecture-t...
One part it discusses is in fact communication patterns along the dimensions of:
- sync/async
- atomic/eventual consistent
- orechestrated/choreographed
What is your build time? How long to go from PR to deployed?
In my experience, this is usually _hours_ at least. In my microservice shop at my previous org, full end to end regression tests included, meant code was in production in 10-20 minutes.
A friend of mine is working on a 30+ years old micro-services system. Worst piece of garbage I have ever seen in my long career.
So my conclusion is that it is the team not the architecture that ultimately decides how good the resulting software is.