When Microservices Actually Make Sense

https://www.youtube.com/watch?v=8OGexAJs8Lc

The video explains that microservices should only be adopted when they clearly reduce coordination costs by establishing truly independent boundaries in terms of change, data ownership, runtime, and team ownership, emphasizing that without these benefits, they introduce unnecessary complexity. It highlights three valid reasons for microservices—differing delivery cadences, distinct failure/performance profiles, and durable domain ownership—and advises careful evaluation, clear contracts, and operational readiness before splitting services, otherwise favoring a modular monolith.

The video discusses when adopting microservices architecture truly makes sense, emphasizing that the key question is identifying which expensive coordination constraint becomes cheaper when a boundary is turned into a network boundary. It cautions against blindly splitting applications into microservices just because it’s trendy or because companies like Netflix have done so. The speaker argues that microservices are an expensive operating model and should only be adopted if they reduce specific costs related to coordination and complexity. Without clear benefits, splitting an application into microservices merely replaces one set of problems with a distributed set of challenges.

A critical test for deciding whether to create a microservice is whether the service exhibits real independence in terms of change, data ownership, runtime, and team ownership. If a team cannot release changes without coordinating with others, or if multiple services share and write to the same database tables, the boundary is not truly independent but rather a source of hidden coupling. Additionally, the runtime behavior should allow for graceful degradation and isolation of failures, preventing cascading outages across services. These factors highlight the operational costs and complexities inherent in managing distributed systems.

The video also stresses the importance of capacity and ownership in microservices. Services with different resource usage patterns, such as video transcoding or reporting, can justify separation to avoid impacting critical paths like checkout or account management. Ownership matters as well; a stable team should fully own the code, data, quality, and lifecycle of a service. Simply moving code into separate repositories does not create autonomy if the same engineers must approve every change. True microservices require clear boundaries and dedicated teams to manage them effectively.

There are three main valid reasons to adopt microservices: differing delivery cadences, distinct failure and performance profiles, and durable domain ownership. For example, a pricing engine that changes frequently should not be tied to a billing ledger with strict financial controls. Similarly, services with different reliability requirements, such as recommendations versus payment authorization, benefit from separation. When a mature capability can be owned end-to-end by a team with a stable contract, local decisions can be made faster, improving agility and reducing coordination overhead.

Finally, the speaker advises caution and rigor before approving new microservices. Teams should clearly define the business capability, identify the expensive constraint being addressed, establish contracts, assign data ownership, and design for failure scenarios. After extracting a service, they should measure improvements in lead time, blast radius, and operational load. If these metrics do not improve, it’s better to maintain a modular monolith, which provides real seams while the product and team boundaries evolve. Microservices represent a promise of autonomy that requires leadership support for authority, platform investment, and operational responsibilities; without this, keeping the monolith is a more honest and practical choice.

Useful Links