TLDR: Often overlooked in discussions of micro-services are their positive effects on the human organization. Following Conway's Law, micro-services are a modular, vertically integrated technical architecture matching a loosely coupled, vertically integrated human organization structure. Both together enable efficiency and agility in large organizations.

Micro-services are a radical, counter-intuitive, controversial, and at the same time enlightening topic. In my opinion, the debate around them focuses too much on technical aspects like code and DevOps complexity. Often overlooked is that micro-services increase the efficiency and agility of human organizations.

A common theme across all projects and companies I have worked with was that most of the challenges in technology projects come from the human part of the system and not the technology side. Company-wide dependency gridlock slows every initiative in a large organization down to molasses. Endless meetings take up most of the working hours and leave little room for actual work.

This happens because human organizations scale much worse than codebases. Humans work very well in teams of no more than 10 people and organizations of up to 100. Such small groups allow direct relationships and communication between all members. Go beyond that and things inevitably become bureaucratic, inefficient, and political. Communication needs grow exponentially but communication capabilities don't grow much at all. This makes it hard for centralized management to have a sufficiently comprehensive and nuanced understanding of what is happening in a large organization at any time and place and respond both timely and thoughtfully.

Conway's law describes that human organizations tend to produce systems that mirror their communication structure. If, for example, an organization has one big data department, it will end up with one big database system that contains all the company's data. An organization structure with department per function led to relatively monolithic N-tier architectures in which a backend department manages the servers and APIs and a frontend department develops the company's web, mobile, and desktop applications. A product department ideates new features, InfoSec ensures business continuity, and Operations keeps all the servers running. Sometimes these functions get organized into larger product verticals, but even these department-sized organizations are monolithic and tightly coupled.

In such an N-tier organization, the product group develops ideas for new features or business capabilities. To build it, the data department must first add new fields to the database. Once that is done, the server team can add the needed backend systems and APIs. Once those are in place, the front-end team can add the feature to the web, desktop, and mobile applications. Before we can deploy anything, the operations team must provision the needed server capacity and we need sign-off from the InfoSec department. Each work item spends orders of magnitudes more time waiting in queues than it takes to implement them. Such delays and bottlenecks quickly compound into widespread gridlock throughout the organization. Keeping so many stakeholders from so many different parts of the company engaged, aligned, and supportive requires countless meetings.

dependencies

Most individuals in the organization see, understand, and empathize stronger with people and things in their direct vicinity than with those further away. Team members sit in the same room, know each other personally, and can easily get on the same page. Teams within the same department usually have decent cohesion. Relationships between departments are often tainted by politics and competition for resources. Collaboration between companies is even more difficult.

circles

Tightly interlock departments that have limited awareness and empathy for each other and you get an organization that cannot execute fast despite throwing money and talent at market opportunities.

The solution to both problems -- tight coupling with limited visibility -- is to deliver each business capability by a single team. To remove the direct dependencies on other teams, each team contains all functions needed to plan, design, build, operate, and course-correct on their own: performing database changes, server and frontend updates, designing new interfaces, and expertise to make the solution secure and resilient. Supporting functions like operations and InfoSec have roles in these vertically integrated teams. This gets them closer to the action and more pragmatic. Meetings become small and more dynamic.

conversion

Such a vertically integrated human organization can develop business capabilities a lot faster, i.e. is substantially more agile and efficient. Following Conway's Law, the IT architecture must match this highly modularized layout. We organize the architecture into small sets of independent, vertically integrated code bases. Each codebase delivers one business capability, is managed by a dedicated, vertically integrated team, and is separately deployable -- micro-services.

Product management can compose business capabilities provided this way like lego bricks into a variety of solutions. Modular organizations are easier to reorganize, split, and merge. Ramping up to work on such "micro-capabilities" can happen much faster than ramping up to work on a large monolith that implements hundreds of capabilities. This mitigates the mythical man-month problem somewhat. The smaller and simpler codebases allow using a wider range of developer talent and experience levels.

To summarize, one of the largest benefits of micro-services is that they bring human organizations to manageable sizes. This enables agility and efficiency in large organizations by fostering collaboration while leaving space for self-organization.