Why Shopify Rejected Microservices (And What They Did Instead)
73K views · Apr 7, 2026 · Science & Technology
Comments · 133
@MilanJovanovicTech · 5 months ago (edited) · pinned
Check out Modular Monolith Architecture: <a href="https://www.milanjovanovic.tech/modular-monolith-architecture">https://www.milanjovanovic.tech/modular-monolith-architecture</a><br>Get the source code for this video here → <a href="https://the-dotnet-weekly.kit.com/shopify-modulith">https://the-dotnet-weekly.kit.com/shopify-modulith</a>
5
@ggwp8618 · 5 months ago
More videos on Big tech architecture please
43
@Drysart · 5 months ago (edited)
We (a large real estate transaction platform that will go unnamed) use a modular monolith approach where we separate modules out into separate assemblies (each module consists of an interface assembly and one or more implementation assemblies; and any module's implementation assembly can reference any other module's interface assembly). Then our build process builds everything, all modules, into a single container image. And then our host startup process can pull in configuration to specify which specific modules should be loaded at startup time -- whether that's "load all modules" or "load this specific subset of modules only".<br><br>It straddles the boundaries between running as a traditional monolith and running as micro services; because we <b>can</b> run the entire application all in one process by just configuring it to load all modules; but if one aspect of the application needs to be scaled out differently than the rest of the application, we can start up new containers that are configured to just load those modules we want to scale separately; and so those running containers don't pay any runtime costs (CPU/Memory/etc.) for the rest of the monolithic codebase, they only load the assemblies they need. Any modules a specific container configuration chose not to load just sit there untouched on disk as DLL files and cost nothing. Then our API gateway proxy can route requests for that subset of our application to the specialized container instances running just those modules.<br><br>Because of the clean separation between modules, this is easy to do; and it allows us operational flexibility as if they were microservices, but it avoids nearly all of the pains of actual microservices -- everything runs from the same build so nothing is ever out of date in the deployed service fleet; instead of 'cross microservice' messaging, the code you need is going to be right there in the container with you so it's just a regular method call; and we still have only one codebase and one build, it's easy to do refactoring across modules with comprehensive unit testing that can reach over the whole system at once. It also means all of our serverless functions can also live in the same codebase and still have fast startups, and our scheduled jobs and background workers can too; and we have full flexibility of how and where those run.
29
@MilanJovanovicTech · 5 months ago
More resources from Shopify:<br>- <a href="https://shopify.engineering/deconstructing-monolith-designing-software-maximizes-developer-productivity">https://shopify.engineering/deconstructing-monolith-designing-software-maximizes-developer-productivity</a><br>- <a href="https://shopify.engineering/shopify-monolith">https://shopify.engineering/shopify-monolith</a><br>- <a href="https://shopify.engineering/enforcing-modularity-rails-apps-packwerk">https://shopify.engineering/enforcing-modularity-rails-apps-packwerk</a><br>- <a href="https://shopify.engineering/a-packwerk-retrospective">https://shopify.engineering/a-packwerk-retrospective</a><br>- <a href="https://www.shopify.com/enterprise/blog/monolithic-to-microservices">https://www.shopify.com/enterprise/blog/monolithic-to-microservices</a><br>- <a href="https://shopify.engineering/e-commerce-at-scale-inside-shopifys-tech-stack">https://shopify.engineering/e-commerce-at-scale-inside-shopifys-tech-stack</a>
6
@tonym5857 · 5 months ago
Thank you, Great video 💪💯👌
@МаксГаврилюк-й3х · 5 months ago
Thanks a lot Milan. I'd like to see more videos like this
2
@jackoflacko69 · 5 months ago
So like a Django's `startapp` command
1
@onurakmese2129 · 5 months ago
You took maybe two to three days to make this videos, and share all your knowledge with us. Thanks !
1
@aakashpoojary3968 · 5 months ago
I think database section of the refactoring is where the actual pain is in modular monolith. When we start with a monolith it's easy to get started and establish pk to fk relationships in the database. But let's say, we start with a simple schema as a service segregation to establish boundaries and we try to influence it into modules the efcore context will also be wildly different and this will automatically impact the way code is written. And, also database design will change. I think api refactoring from monolith to modular is pretty doable if we have defined boundaries from the backend.
12
@antonmartyniuk · 5 months ago
Interesting: what infrastructure does Shopify run their modular monolith on, and how many API Gateway instances and modular monolith instances are there?
1
@mreshboboyev · 5 months ago
THANKS FOR SHARING
@Ramblewithmme · 5 months ago
Thanks a lot Milan for giving this real world example this gives us confidence to think of Modular monolith for larger products.
Up next

Tokenmaxxing: My Claude Code Workflow
Milan Jovanović · 16K views

Microservices Communication Patterns Explained in .NET
Milan Jovanović · 20K views

Day 19 - Monolith vs Microservices
Suraj Prajapati · 3 views

The Microservices Scam Nobody Talks About
The Serious CTO · 91K views

[SD] Tianqi Chen - Building ML Systems Foundations at the Age of AI
Michael J. Klaiber · 432 views

ChatGPT-Like Wikipedia Assistant with RAG, ReAct & LlamaIndex in Under 300 Lines
Cloudvala · 80 views

The Only .NET Caching Library You’ll Ever Need?
Milan Jovanović · 15K views

The SAP Migration Scandal Nobody Is Talking About
Kaushik Prakash · 516K views

Modular Monoliths and Other Facepalms - Kevlin Henney - NDC London 2026
NDC Conferences · 45K views

Microsoft Rewrote Copilot in Rust. .NET Devs Are Mad
Milan Jovanović · 105K views

Anthropic’s Financials Revealed — The Losses Are Stunning
Prof G Markets · 437K views

The Modular Monolith: Scale Without Microservices
CodeOpinion · 30K views

The Strangler Fig Pattern Explained With .NET 10
Milan Jovanović · 9.8K views

Pete Hegseth Purges Weirdos and Wimps & Trump Drops a New Hispanic Stereotype | The Daily Show
The Daily Show · 438K views

My Complete Tech Stack for Side Projects in 2026
Milan Jovanović · 32K views

Kafka vs RabbitMQ
Hello Interview · 305K views

Bill Gates: A.I. ‘Makes Nuclear Weapons Look Like Nothing’ | The Ezra Klein Show
The Ezra Klein Show and 2 more · 830K views

ASP.NET Core Full Course For Beginners (.NET 10)
Julio Casal · 336K views

Distributed Transactions Explained: 2 Phase Commit vs Saga Pattern
Hello Interview · 264K views

The FTC Is Investigating OpenAI — Here’s Why
Prof G Markets and Platypus Economics with Justin Wolfers · 194K views

Why Coding Agents Keep Making Your Codebase Worse
Beyond Coding and Agentic AI Foundation · 41K views

How to Secure .NET 10 APIs with Keycloak and OAuth 2.0
Milan Jovanović · 19K views

The Right Way to Scale Long-Running API Requests
Milan Jovanović · 16K views

Kent Beck: Software Engineering in the Age of AI | Prodacity 2026
Rise8 · 29K views

I replaced my entire stack with Postgres...
The Coding Gopher · 752K views

Kubernetes Zero to Hero: The Complete Beginner’s Guide (2025 Edition)
Alta3 Research · 357K views