Reminder: Microservices ate my application - an anti-pattern

You are receiving this email because you subscribed to microservices.io.


Learn about the service collaboration patterns (Saga, API composition, etc) in my online, self-paced bootcamp. It's available for USD $95 - limited time early. Find out more and enroll.

I'm available to help your organization accelerate software delivery: architecture consulting and workshops. Learn more


Microservices adoption anti-pattern: microservices ate my application

It’s been a while since I’ve written about anti-patterns of microservices adoption. These days, however, I often encounter a previously undocumented anti-pattern that I’ve named Microservices ate my application. It describes a situation where technology - in this case the microservice architecture - becomes a scapegoat for the mistakes made by the engineering organization. The anti-pattern’s name is inspired by the English expression The dog ate my homework, which refers to an implausible excuse for failing to complete a homework assignment.

The anti-pattern: microservices ate my architecture

An instance of this anti-pattern looks something like this. An organization struggles to use the microservice architecture pattern to build an application. They encounter numerous persistent problems, including slow development, inconsistent data, poor performance, and low availability. But instead of taking ownership of the decisions that they made, which is the reason for the trainwreck, the organization blames the microservice architecture.

Swarms of microservices don’t attack projects

While it’s easy and convenient to blame the microservice architecture, the reality is that microservices do not travel in swarms attacking innocent projects. The root cause of the train wreck lies elsewhere - specifically in a combination of two problems. The first problem is that organizations sometimes make poor architectural design decisions. The second problem is that organizations often ignore the warning signs that something is amiss. Let’s look at each problem in turn starting with poor architectural decision making.

Problem #1: Poor architectural design decisions => poor architecture

An application’s architecture is the composition of a set of design decisions. The quality of an architecture is, therefore, a reflection of the quality of the architectural design decisions. Poor design decisions often lead to architectural problems - an issue that is especially true when using the microservice architecture pattern. There are numerous design decisions to make, many of which are highly consequential, even small missteps can have far-reaching impacts.

Problem #2: Ignoring signs that something is amiss

The second reason train wreck projects occur is that organizations ignore clear warning signs signaling the need for a course correction. Development projects don’t fail overnight — there are always early indicators that something is going wrong. An organization must be vigilant and act when there are signs that something is amiss. For example, if development is slowing down, it’s essential to investigate why.

Let’s now look at ways to avoid this anti-pattern.

Avoiding the Microservices ate my application anti-pattern

There are four recommended ways to avoid the Microservices ate my application anti-pattern:

  1. Own your design decisions
  2. Improve your design decision making process
  3. Reduce risk by make smaller, safer and reversible changes.
  4. Track and improve metrics

Let’s look at each recommendation in turn.

Recommendation #1: own your design decisions

The first of three recommendations is for you and your organization to take ownership of your design decisions.
If a decision turns out to be flawed, take responsibility for it — that’s part of the process.
Mistakes are inevitable, but they also present valuable learning opportunities.
Freedom to admit your mistakes, of course, requires a generative culture that encourages learning and growth.

Recommendation #2: improve your design decision making process

The second recommendation is for you and your organization to improve your process for making architectural design decisions. A good way to make better design decisions it is to practice deliberative design. Deliberative design is a 7 step process:

  1. Understand the context
  2. Define the problem
  3. Define the criteria for assessing suitability of a solution
  4. Find candidate solutions
  5. Evaluate the trade-offs of each candidate solution
  6. Pick the best solution
  7. Document the solution

Examples of critical architectural design decisions that should be made using a deliberative design process include:

Recommendation #3: make smaller, safer and reversible changes

The third recommendation is to reduce risk by making smaller, safer and reversible changes. You will get feedback from production and users much faster if you make smaller changes. It will also make it much easier to recover from mistakes. For example, an organization should incrementally refactor a monolith to microservices using the Strangler Fig pattern rather than doing a big bang rewrite. For more details, see the series of articles that starts with Microservices rules #10: Make smaller, safer, and reversible changes - part 1/

Recommendation #4: track and improve metrics

The fourth recommendation is for an organization to continuously track and review key metrics (microservices rules #1) including:

  • The DORA metrics
  • Design-time coupling metrics, e.g. analyze Git histories to identify services that regularly change in lock step and track frequency of breaking changes made to each service’s API
  • Team sentiment including the DevEx metrics

These metrics should be regularly reviewed and action taken if there are problems.

Need help with accelerating software delivery?

I’m available to help your organization improve agility and competitiveness through better software architecture: training workshops, architecture reviews, etc.

Learn more about how I can help

Older messages

Reminder: The problem with tight runtime coupling and how to avoid it

Tuesday, January 14, 2025

You are receiving this email because you subscribed to microservices.io On Wednesday, January 22, 2025 at 6pm, I'll be giving a talk in Melbourne Australia.The talk is: Enabling DevOps and Team

The problem with tight runtime coupling and how to avoid it

Thursday, January 9, 2025

You are receiving this email because you subscribed to microservices.io On Wednesday, January 22, 2025 at 6pm, I'll be giving a talk in Melbourne Australia.The talk is: Enabling DevOps and Team

Reminder: Loose design-time coupling: part of the wiring of a winning organization

Friday, November 15, 2024

You are receiving this email because you subscribed to microservices.io Next week, I'll be teaching a public workshop in Milan. I hope you will enroll. Loose design-time coupling: part of the

Loose design-time coupling: part of the wiring of a winning organization

Tuesday, November 12, 2024

You are receiving this email because you subscribed to microservices.io Next week, I'll be teaching a public workshop in Milan. I hope you will enroll. Loose design-time coupling: part of the

Reducing insider trading in a microservice architecture

Wednesday, November 6, 2024

You are receiving this email because you subscribed to microservices.io In November, I'll be teaching public workshops in Berlin and Milan. I hope you will enroll. My service collaboration patterns

You Might Also Like

Say Goodbye to Type Erasure

Thursday, February 27, 2025

View in browser 🔖 Articles Practical Kotlin: When and How to Use inline reified, noinline, and crossinline Master Kotlin's inline reified functions to tackle type erasure and boost performance!

SRE Weekly Issue #464

Thursday, February 27, 2025

View on sreweekly.com A message from our sponsor, incident.io: For years, on-call has felt more like a burden than a solution. But modern teams are making a change. On Feb 26 at 1 PM EST, hear why—and

Hands On: New VS Code Insiders Build Creates Web Page from Image in Seconds, More

Thursday, February 27, 2025

Home | News | How To | Webcasts | Whitepapers | Advertise .NET Insight February 27, 2025 THIS ISSUE SPONSORED BY: ■ Visual Studio Live! Las Vegas: .NET Developer Training Conference ■ VSLive! 4-Day

Re: Tomorrow's Password Class: How to sign up!

Thursday, February 27, 2025

Hi there, Do you reuse passwords? Do you struggle to remember unique passwords across accounts? Have you tried setting up a password manager but found it to be a hassle? You might not realize how

Documenting Event-Driven Architecture with EventCatalog and David Boyne

Thursday, February 27, 2025

If you're wondering on how to document Event-Driven Architecture, or you don't know that you should, I have something for you. We discussed with David Boyne, why data governance practices and

wpmail.me issue#708

Thursday, February 27, 2025

wpMail.me wpmail.me issue#708 - The weekly WordPress newsletter. No spam, no nonsense. - February 27, 2025 Is this email not displaying correctly? View it in your browser. News & Articles Shaping

Hackers stole 1Password logins - here's how

Thursday, February 27, 2025

Amazon AI races ahead; Research agents; Smartwatch trade-in -- ZDNET ZDNET Tech Today - US February 27, 2025 thief stealing passwords Hackers stole this engineer's 1Password database. Could it

New Golang-Based Backdoor Uses Telegram Bot API for Evasive C2 Operations

Thursday, February 27, 2025

THN Daily Updates Newsletter cover ⚡ LIVE WEBINAR ➟ Building Resilient Identity: Reducing Security Debt in 2025 Attacks Evolve, So Can Your Defenses--Learn How to Mitigate Risk and Optimize Identity

Reminder: What developer productivity metrics actually measure

Thursday, February 27, 2025

You are receiving this email because you subscribed to microservices.io. Considering migrating a monolith to microservices? Struggling with the microservice architecture? I can help: architecture

⚡ THN Weekly Recap: Google Secrets Stolen, Windows Hack, New Crypto Scams & More

Thursday, February 27, 2025

From Google espionage to crypto scams, this week's Cyber Recap uncovers it all—read more now ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌