I randomly ran across this tweet earlier today:
I reckon we’re about 18 months out from the first “Escaping microservice hell” conference talks. #ndcoslo
The tweet is from about two years ago, and it turned out to be a pretty accurate prediction.
If you are building a complicated system, I tend to think that there is no framework or architectural design principles you can use that will not end up with your system being difficult to scale, unpick, and re-engineer down the road.
That is not to say that architecture and design do not matter—they obviously do. If you do not give any thought to them, then the thing you are building is probably more likely to fail sooner rather than later. Even if you do give a lot of thought to them and make what you believe to be the best choice at the time, though, if the thing you are building is complicated, it is still going to fail or mis-perform in unpredictable ways, because that is what complicated systems do.
I wonder if these debates (microservices v. monolithic, etc.) don’t represent a sort of category error, and that rather than thinking primarily about the design and componentry of the things we are building, we ought instead to focus first on what we are asking or expecting the things we are building to do.
I should also add that, while the original tweet was referring to technology systems, I think everything I have said is probably applicable to non-technical systems as well.