4 ms·
> The network should only be tolerated as long as it provides benefits that outweigh the costs. I agree. There should be no need to use network calls to enforc
by adamkl 6y ago
> The network should only be tolerated as long as it provides benefits that outweigh the costs.
I agree. There should be no need to use network calls to enforce interface boundaries if you have a cohesive bounded context.
Or to be snarky about it, welcome to 2004 Uber! Eric Evans sends his regards!
- gen220 6y agoUnfortunately, picking and enforcing bounded contexts is hard work in a big organization, even with strong code review processes. There will always be people who don’t want to respect where the boundaries are drawn (not in a constructive, “it could be better” kind of way, but in a “but this works, too” kind of way). If a group of such people get together, microservices compartmentalizes their capacity to drag down the ship, so to speak. I think this risk compartmentalization is a benefit that must be weighed against the costs (in terms of latency, maintenance of shared libs, opentracing, etc). These days the costs are vanishing, as tools are quite good and becoming easier to manage. All that said, if you’re a small team of senior engineers working with a shared mental model, a single binary with internally-bounded contexts works really well and I agree with you, having seen it done well.
- etxm 6y agoIt’s important to respect the boundaries, but also have the flexibility to change them as the business changes. I’ve seen many times where people were afraid to change boundaries because they assumed the first person got the architecture exactly right.
- adamkl 6y agoI was lucky enough to be in the right place, at the right time, to lead a group that scaled this approach across half a dozen different development teams. Fortunately everyone bought into the architecture, and respected the boundaries. Not everyone was senior, and not all the code was great, but we adopted the viewpoint that so long as the bad code is in the right spot (and not talking to things it shouldn’t) everything would be ok in the end. And it was. Half a dozen teams working in one codebase was definitely pushing it though, and the need to scale much beyond that would have definitely required some service-level compartmentalization to keep the ship from sinking, as you said. Even then, it would still be a far cry from the “microservices should be small enough to re-write in 2 weeks” approach.
- pjmlp 6y agoIf the programming language is compiled and modules are distributed as binaries across teams, they have no means than to comply with modularity.