Are your applications stuck in the muck? Microservice architectures not only allow you to scale traffic and improve user experience, but also boost your development teamโs productivity.
Your application is large. You have many customers, and they make good use of your many features and capabilities. You have a large catalog of products, and your store is big and feature-rich. You are doing well.
Except, you are having problems.
Your application crashes too often. Your developers are always on it when it fails, and they are very fast at fixing your site, but it takes time and energy. You are down at least once a month or soโand you can be down for hours at a time. Imagine the lost business.
Your developers would like to fix the problemโtheyโd like to do a lot of things. They keep talking about these great new features theyโd like to implement, but they simply canโt get it done. Theyโre too focused on bug fixing and firefighting.
Youโve talked about hiring more people, but your budget doesnโt support it. Besides, you are hiring constantly to replace the people who are leaving. Judy left for a bigger tech company. Joe left because he got burned out handling too many late-night emergencies.
The tech problems are weighing on you, and they are weighing on your team. You donโt see any way out of it. You and your company are trapped.
You have fallen into the trap that many software companiesโand many IT departments of non-software companiesโhave fallen into. Theyโve created large, monolithic applications that seem to handle everything. But these applications have become so large and so complicated that they are unwieldy. No one person can understand everything thatโs going on in the application.
Things break, and they take forever to fix. You try to add new or improved capabilities, but the changes are so intertwined that you canโt get them done quicklyโand when they are complete, they are full of bugs. Your development pace is slow and getting slower. You try to add more developers, and they donโt seem to make things go any faster. And the learning curve for the new developers is insanely steep.
You are stuck in the muck.
The muck is not inevitable. You can re-architect your application to scale with your company, not against it.
The growing application
You started out OK with a simple application, written and managed by a single person or a small development team or two. Your application looks like Figure 1, nice and simple.
IDG
Figure 1. A simple but growing application.
But time goes on, the application grows. Your application is a success, and traffic increases dramatically. You add new features and capabilities, and you hire more developers to work on the application. Soon, it looks like Figure 2.
IDG
Figure 2. A complex, stagnant application.
Now, youโve got problems. Nobody knows which parts of the application they own. Team 1 makes a change and it impacts Team 3. Tensions are high, productivity is low. Bugs creep into the application, and your site begins to fail, seemingly randomly. And when thereโs a failure, your teams struggle to figure out whatโs wrong, because no single person can understand everything thatโs going on in the application. This is a prime example of muck.
Your independent development teams arenโt truly independent, because the changes that one team makes has a big impact on what the other teams are working on. You canโt work on independent projects, because all projects are intertwined. Innovation is stifled, and so is your business.
The value of microservices
Now take a look at Figure 3.
IDG
Figure 3. A microservice application.
Here, each service is independent and isolated from every other service. Each service is smaller, but there are more of them. Each has a well-defined interface between them, and each represents a piece of well-defined business logic.
More importantly, each service has a single owner. One development team is responsible for all aspects of each individual service.
The application is cleaner, making the ownership and responsibilities clearer.
In short, your application has scaled. Not scaled in the sense of the number of customers it can support, but scaled in the sense of the number of independent developers, projects, and initiatives it maintains to support your growing business.
Your development teams arenโt stepping on each otherโs toes, and they are more productive because there is less muck involved. They are happier, and they are more likely to stay with the company longer.
Further, you can grow the number of development teams, hence the number of developers, by simply rebalancing ownership responsibilities. More developers become more productive, and you can make better progress on those all-important business projects that are critical to your growing business.
And if a problem occurs, by analyzing the interaction between services you can much more easily determine where the problem originates, and which team should fix it. Additionally, each team has a much smaller set of responsibilities, hence greater knowledge about how the services they are responsible for function, so they can fix problems much faster and much more effectively. And because they have a better understanding of the areas they are responsible for, they are less likely to introduce errors into the system.
Microservices help you scale
Microservice architectures help you scale in many dimensions:
- Traffic and customers. Microservices enable you to support more customers with more traffic and more data.
- Number of developers and development teams. Microservices enable you to add more development teams, hence more developers to your application. Developers are more productive, because they arenโt stepping on one anotherโs toes as much as they are in a monolithic development process.
- Complexity and capabilities. Teams have less application โsurface areaโ to think about, allowing them to work on more complex problems within their domain. With more teams working on more problem domains, more complex projects are possible.
Single Team Oriented Service Architecture (STOSA)
Simply moving your application to a microservice-based architecture is not sufficient. It is still possible to have a microservice-based architecture, but have your development teams work on projects that span services and create complex interactions between your teams. Bottom line: You can still be in the development muck, even if you move to a microservice-based architecture.
To avoid these problems, you must have a clean service ownership and responsibility model. Each and every service needs a single, clear, well-defined owner who is wholly responsible for the service, and work needs to be managed and delegated at a service level. I suggest a model such as the Single Team Oriented Service Architecture (STOSA). This model, which I talk about in my book Architecting for Scale, provides the clarity that allows your applicationโand your development teamsโto scale to match your business needs.
The cost of microservices
Microservice architectures do come at a cost. While individual services are easier to understand and manage, a microservices application as a whole has significantly more moving parts and becomes a more complex beast of its own. This can lead to application complexity and the problems complexity brings to other aspects of your application, and these issues should not be ignored.
Additionally, many companies stuck in the muck (as shown in Figure 2) will begin a project to migrate to a microservice architecture (as shown in Figure 3). However, they will often find the transition more difficult and more expensive than they hoped or anticipated. And so, partway through the migration, they abandon the effort. They are partially migrated and often in worse shape than when they started.
Before you undertake a migration to a microservice architecture, make sure that you understand the costs, the benefits, and the challenges ahead. You must have proper expectations set in order to make the transitionโand your future-state applicationโa success.


