Serious question: why though? I can't think of a backend system where a single regression could bring the whole thing down. If something blows it up, it rarely takes the whole application down. What's this scenario exactly? Maybe I'm only thinking of certain types of applications, but a single failure somewhere needn't bring the whole thing down.
> Poor separation of concerns. It was difficult to maintain good separations of concerns with a huge code base. In an exponential growth environment, expediency sometimes led to poor boundaries between logic and components.
I kind of get this...The idea is that if the other area of code simply isn't accessible to you, you're forced to keep the concerns separate? Seems like this could be dealt with by applying more discipline and just making sure to design things to be more modular and.. separate. This is the hallmark of any good code base. Do we need an entirely different architecture, with all the pitfalls that microservices entail, because we can't seem to keep things clean and separate?
I really am asking these questions in good faith. I won't hide the fact that I'm skeptical of the microservices fashion (and I know that Uber is at least trying to be more thoughtful here), but I am totally open to being convinced otherwise. I'm at this very moment gearing up to begin a new large project and am wondering what design makes the most sense and whether there's a place for separate services so I'm curious to hear what people think. The one area I'm thinking about specifically is the fact that difference parts of a monolith might have different scaling requirements and if you have a single application then everything has to scale out or in as a unit. But it seems like this doesn't require a separate code base necessarily...just the ability to run different parts of a single code base as its own applications or unit of deployment, no?
This old post from Michael DeHaan comes to mind as I'm thinking about this https://archive.ph/YMRYx