Microservices – Is This the Right Architecture for Me? Part One – The Problem

Microservices – have you heard the buzzword?

Does this describe you?

  • You are responsible for the architecture or product management of an enterprise sized software system. This could be an in-house system, or some software as a service system you are offering to your customers, vendors or partners.
  • You manage or coordinate several teams of developers working on the system
  • There may be multiple versions of the system with different configurations and features, deployed to different environments, sites or customers
  • The system has evolved over time, maybe 5-10 years or more, and some of its starting to feel a  little dated
  • You are struggling to get new versions out the door. Release cadence has dropped drastically over time, and now you are happy if you can even release new features at all – maybe only once or perhaps twice a year!

If so, then you must have heard about microservices and wondered if this is just a buzzword, or something you should seriously look into. If not… you are free to go read another blog!

I spent much of this year migrating a large legacy system onto a microservice architecture, which ended up looking much like the diagram below – and I’ll go into it in some detail later on. As you can see, the diagram includes lots of concepts you probably came across when researching this pattern, such as API gateways, microservices, message brokers, containers and maybe even Kubernetes. I’ll add a few that are not in the diagram itself… “loosely coupled”, “eventually consistent” and “distributed”.

Chances are you don’t have any of these things in your current architecture! Does it sound like this will be a lot of work? Should you do it? Why? What are the gotchas? This blog aims to help you reason about this decision.

Starting with the obvious: yes, this will be a lot of work. It can be done in phases, but it’s a pretty daunting undertaking, so I wanted to spend some time first talking about why you would want to do this – or not!

Architecture Diagram

What is the problem you are trying to solve?

The usual reason to actually start out on this microservices journey, rather than just read about it, is that you have some serious pain with the way your system is currently architected and the cadence of releases. 

The typical “current state” is a legacy system that has bloated over time. It’s written in a somewhat older technology stack, and you would love to take advantage of new tools, frameworks and processes, but your app has grown into a monolith. The system has all kinds of important business logic, but it’s a bit of a mess, with tentacles of code written by different developers and architects, some of which are no longer with you. There are many customizations, special cases, configurable features and hacks that weren’t supposed to be permanent, but just became part of the system. You have customers (internal or external) clamoring for new features, which sound really easy to develop with modern tools – but you can’t because you are stuck with this huge beast. To make it worse, the database has grown to a sprawling web of tables, many of which are just for some custom one off, but there are all kinds of references between the tables, shared data access layer logic and business logic, and APIs, that seem to make it impossible to change anything without breaking something seemingly unrelated. The system is also burdened by all kinds of nightly batch jobs which seem to run longer and longer despite throwing more and more costly hardware at them, and a myriad of system integrations. When you do release new versions, they are full of bugs that only get discovered months later in production.

Here are some of the issues that our team and our system was facing:

  • Stuck in the past – we wanted to use dotnet core, now .NET 6, where all the energy is nowadays. We wanted to use built in dependency injection of aspnetcore, and the new entity framework core, instead of a homegrown Data Access Layer. We wanted to use the more flexible configuration options of dotnet core. We wanted to take advantage of the performance optimizations of the newer frameworks. But our codebase was classic ASP.NET WebAPI and MVC, with legacy .NET Framework 4.6, and a range of quite old dependencies. Any time we tried to introduce newer NuGet packages, we would run into all kinds of incompatibilities. When we ran into bugs, the answers on Stack Overflow all seemed to point to using techniques that didn’t work with our stack. 
  • Inflexible storage – our system used SQL Server, but a lot of our data was highly dynamic in nature, with an evolving schema, and would be better served by a document or NoSQL database. But at the same time, a RDBMS was better suited for the static aspects for the system and for performance and reporting
  • Siloed authentication – we wanted to do Single Sign On between our system and others, and Federated Authentication to Active Directory and other OpenIdConnect providers, but we were stuck in the old aspnet membership username/password scheme
  • Costly hosting – each customer installation and environment required several beefy VMs and installing heavyweight components like SQL Server and Internet Information Server on Windows. We wanted to be able to do Linux and lightweight Docker containers.
  • Security Vulnerabilities – our heavy application stack meant countless layers and components to install and secure, with a large surface attack area, something we could better avoid with hardened linux containers and smaller, single purpose applications and APIs
  • Release Cadence – we were struggling to even release once a year! We needed at least quarterly release, but the whole monolith was such a pain to regression test, and every new feature that was introduced broke something older, which often wasn’t even noticed until months later.
  • Large, slow teams – we wanted to be able to scale out the development effort to more teams working in parallel, but the monolithic nature of the system required all changes to be coordinated among teams and move at the pace of the slowest changing component, while new teams were not free to use the technology and tools of their preference, but instead be immediately mired down by the legacy status quo.

Does this sound like your system? Maybe you don’t have all of these issues, but several? How are you going to move forward?

If you are still reading, it’s a safe bet you might think microservices might be the silver bullet. Maybe it is – but let’s talk about how this architecture addresses some of the issues detailed above, and even more importantly, what effect it’s going to have on your organization, and what kind of work you will be needing to do with possibly brand new skill sets. This will be the topic of the next blog in the series – stay tuned!

John Waters

John Waters

As a highly respected and recommended technology leader, entrepreneur, and software architect extraordinaire, John Waters provides guidance for Trailhead teams and projects. His remarkable project requirements gathering and project estimation skills allow him to oversee teams that deliver client projects on time and on budget. John’s background includes over two decades of systems architecting, implementations for a range of high-performance business solutions, and speaking at conferences worldwide.

Related Blog Posts

We hope you’ve found this to be helpful and are walking away with some new, useful insights. If you want to learn more, here are a couple of related articles that others also usually find to be interesting:

Manage Your Windows Applications With Winget

Winget, Microsoft’s native package manager for Windows 10 (version 1709 and later) and Windows 11, offers a streamlined CLI for efficient application management. This blog post introduces Winget’s installation and basic commands for installing, updating, and removing software. It highlights the tool’s ability to manage non-Winget-installed apps and explores curated package lists for batch installations. The post also recommends top Winget packages, noting some may require a paid subscription.

Read More

Our Gear Is Packed and We're Excited to Explore With You

Ready to come with us? 

Together, we can map your company’s software journey and start down the right trails. If you’re set to take the first step, simply fill out our contact form. We’ll be in touch quickly – and you’ll have a partner who is ready to help your company take the next step on its software journey. 

We can’t wait to hear from you! 

Main Contact

This field is for validation purposes and should be left unchanged.

Together, we can map your company’s tech journey and start down the trails. If you’re set to take the first step, simply fill out the form below. We’ll be in touch – and you’ll have a partner who cares about you and your company. 

We can’t wait to hear from you! 

Montage Portal

Montage Furniture Services provides furniture protection plans and claims processing services to a wide selection of furniture retailers and consumers.

Project Background

Montage was looking to build a new web portal for both Retailers and Consumers, which would integrate with Dynamics CRM and other legacy systems. The portal needed to be multi tenant and support branding and configuration for different Retailers. Trailhead architected the new Montage Platform, including the Portal and all of it’s back end integrations, did the UI/UX and then delivered the new system, along with enhancements to DevOps and processes.

Logistics

We’ve logged countless miles exploring the tech world. In doing so, we gained the experience that enables us to deliver your unique software and systems architecture needs. Our team of seasoned tech vets can provide you with:

Custom App and Software Development

We collaborate with you throughout the entire process because your customized tech should fit your needs, not just those of other clients.

Cloud and Mobile Applications

The modern world demands versatile technology, and this is exactly what your mobile and cloud-based apps will give you.

User Experience and Interface (UX/UI) Design

We want your end users to have optimal experiences with tech that is highly intuitive and responsive.

DevOps

This combination of Agile software development and IT operations provides you with high-quality software at reduced cost, time, and risk.

Trailhead stepped into a challenging project – building our new web architecture and redeveloping our portals at the same time the business was migrating from a legacy system to our new CRM solution. They were able to not only significantly improve our web development architecture but our development and deployment processes as well as the functionality and performance of our portals. The feedback from customers has been overwhelmingly positive. Trailhead has proven themselves to be a valuable partner.

– BOB DOERKSEN, Vice President of Technology Services
at Montage Furniture Services

Technologies Used

When you hit the trails, it is essential to bring appropriate gear. The same holds true for your digital technology needs. That’s why Trailhead builds custom solutions on trusted platforms like .NET, Angular, React, and Xamarin.

Expertise

We partner with businesses who need intuitive custom software, responsive mobile applications, and advanced cloud technologies. And our extensive experience in the tech field allows us to help you map out the right path for all your digital technology needs.

  • Project Management
  • Architecture
  • Web App Development
  • Cloud Development
  • DevOps
  • Process Improvements
  • Legacy System Integration
  • UI Design
  • Manual QA
  • Back end/API/Database development

We partner with businesses who need intuitive custom software, responsive mobile applications, and advanced cloud technologies. And our extensive experience in the tech field allows us to help you map out the right path for all your digital technology needs.

Our Gear Is Packed and We're Excited to Explore with You

Ready to come with us? 

Together, we can map your company’s tech journey and start down the trails. If you’re set to take the first step, simply fill out the contact form. We’ll be in touch – and you’ll have a partner who cares about you and your company. 

We can’t wait to hear from you! 

Thank you for reaching out.

You’ll be getting an email from our team shortly. If you need immediate assistance, please call (616) 371-1037.