UNPKG

arela

Version:

AI-powered CTO with multi-agent orchestration, code summarization, visual testing (web + mobile) for blazing fast development.

122 lines (78 loc) 31.2 kB
# **Practical Deployment Strategies for Vertical Slice Architecture (VSA) in Modular Monoliths and Beyond** ## **Executive Summary** Vertical Slice Architecture (VSA) is a code-level implementation pattern that makes the Modular Monolith deployment model operationally viable. The dominant deployment strategy is a single deployable unit , which combines the operational simplicity of a monolith with the strong internal boundaries of VSA. This model achieves release agility not through per-slice deployments, but by decoupling deployment from release, primarily using feature flags for dynamic module management and canary rollouts of the entire application artifact. The primary operational challenges are mitigating the monolithic CI pipeline and the single runtime blast radius. The solution to the former is an intelligent, change-aware CI pipeline that selectively tests only affected slices and their dependents. The solution to the latter involves applying in-process resilience patterns, such as bulkheads and circuit breakers, to isolate module-to-module calls. Observability is managed by enriching structured logs and traces with a "Module" or "Slice" tag, typically via a Mapped Diagnostic Context (MDC), which enables precise, slice-aware debugging. Evolution to microservices is an organizational and economic decision, not an inevitable technical goal. When required, VSA makes this transition trivial via the Strangler Fig pattern , as the modules already represent well-defined, extractable vertical slices. ## **The VSA Modular Monolith: Practical Deployment Models** A critical distinction must be made: Vertical Slice Architecture (VSA) is a *code organization* strategy, while the Modular Monolith is a *deployment* pattern. VSA is the most effective implementation strategy for achieving the goals of a modular monolith. VSA organizes code by business feature, or "slice," grouping all concerns (API, logic, data access) for that feature in one place. This contrasts with layered architectures that group by technical concern (e.g., Controllers, Services, Repositories). A Modular Monolith is an architectural style that deploys as a single unit but enforces strong, domain-driven boundaries internally. VSA provides the natural, feature-aligned boundaries that make this modularity achievable and maintainable. ### **Model 1: The Single Deployable Unit (The "Majestic Monolith")** This is the default and most common model. The entire application, composed of all its internal VSA modules, is compiled, containerized, and deployed as a single artifact. All inter-module communication occurs via high-performance, in-process method calls. This model is famously championed by Basecamp as the "Majestic Monolith". The rationale is that for most teams, the operational simplicity of a single codebase, unified deployment, and simplified debugging (e.g., single stack trace) provides a massive advantage. * **Trade-Offs:** The gains are maximum development speed and operational simplicity. The suffering is the largest possible blast radius: a failure in one module (e.g., a memory leak or unhandled exception) can crash the entire process. ### **Model 2: Single Unit with Dynamic Release (Feature Flags)** This model enhances the single deployable unit by decoupling deployment from release. The application is still deployed as a single artifact (Model 1), but the behavior of individual slices or modules is controlled at runtime via feature flags. This is the practical, battle-tested answer to "per-slice" control. Teams can "dark launch" entire features or modules by deploying them in a disabled state. For example, new API endpoints for a "Promotions" module are deployed but not registered with the web server, or new event handlers are not subscribed, until a feature flag promotions-module-enabled is activated. This allows code to be safely tested in the production environment without impacting users. * **Trade-Offs:** The gain is extremely high release safety and the ability to enable continuous delivery. The suffering is increased code complexity (managing code paths for both flag-on and flag-off states) and a dependency on a robust feature flag management system. ### **Model 3: Phased Rollouts (Canary & Blue-Green) of the Monolith** This model applies advanced deployment strategies to the *entire monolithic artifact*. This is a common point of confusion; these are *not* per-slice deployments. A prominent case study is Shopify, which runs one of the world's largest modular monoliths (a Ruby on Rails "Majestic Monolith"). Their deployment strategy is **Canary Testing**. A new version of the *entire monolith* is first deployed to a small subset of production instances. The team monitors error rates and performance before proceeding with a full rollout. A true "per-slice canary" is achieved by combining Model 2 and Model 3: the new monolithic artifact is deployed to a canary group (Model 3), and a feature flag for the new slice is enabled *only* for that canary group. This provides two distinct layers of safety: deployment safety (the new binary is stable) and feature safety (the new logic is correct). ## **CI/CD and Testing Strategies for Feature Slices** The primary operational challenge of a modular monolith is avoiding the "monolithic build" bottleneck, where any small change forces a full build and test of the entire system. This negates the agility gained from modularity. The solution is an intelligent, change-aware CI pipeline. Shopify, for example, built custom tooling to run test suites *only* "on the smaller subset of components affected by a change," making the pipeline faster and more stable. This pattern is confirmed in other engineering reports, which describe custom scripts to track module dependencies and "selectively rebuild only the things that changed". A robust testing strategy for a VSA monolith includes three layers: 1. **Unit Tests (Per-Slice):** Fast, in-memory tests that validate logic within a single slice or handler. 2. **Integration Tests (Per-Module):** Tests that validate the full flow of a module, including its database. A common pattern is to use Testcontainers to spin up a real database instance (e.g., in Docker) during the CI run, ensuring the slice works end-to-end. 3. **Architecture Tests:** This is the most critical and non-obvious test category. The primary risk of a monolith is boundary erosion—a developer on a deadline directly referencing another module's database. Architecture tests (using libraries like NetArchTest or ArchUnit) programmatically enforce these boundaries. The CI pipeline fails the build if a forbidden dependency is detected (e.g., "The '\[span\_1\](start\_span)\[span\_1\](end\_span)Orders' module should not reference 'User.Infrastructure'"). This automated enforcement is the only practical way to maintain modularity long-term. Inter-module communication is handled via shared \*.Contracts assemblies (containing only DTOs and interfaces), which are what the architecture tests validate. External-facing APIs are validated using standard OpenAPI contract tests. ## **Runtime Isolation and Resilience in a Single Process** This section confronts the single blast radius problem. Since all modules share the same process, memory, and thread pool, a fault in one slice (e.g., a slow downstream call, a "poison pill" request) can cascade and bring down the entire application. The solution is to apply network resilience patterns *in-process*. ### **Pattern 1: The In-Process Bulkhead** The Bulkhead pattern isolates system elements so a failure in one does not cascade. Using libraries like Polly (.NET) or Resilience4j (Java) , a semaphore-based bulkhead can be applied to in-process module calls. For example, a call to a slow, non-critical IRecommendationsService.GetRecommendations() method can be limited to 10 *concurrent* executions. The 11th request will be rejected *immediately* , preventing it from consuming a thread and starving the rest of the application. ### **Pattern 2: The In-Process Circuit Breaker** The Circuit Breaker pattern prevents an application from repeatedly attempting an operation that is likely to fail. If the "Orders" module calls the in-process "Payments" module, and the "Payments" module is timing out (due to its *own* failing external network call), the "Orders" module's thread pool will be exhausted. By wrapping the in-process call in a circuit breaker, the breaker will "trip" after 5 consecutive failures. Subsequent calls fail *instantly* (open circuit) for the next 60 seconds, protecting the "Orders" module and the application as a whole. ## **Slice-Aware Observability: Debugging the Monolith** While centralized logging is simpler than in microservices , it creates a new problem: a single, massive, interleaved log stream. It becomes impossible for an on-call engineer for the "Payments" team to find their logs amidst noise from "Users" and "Shipping". ### **Pattern 1: Structured Logging with Module Enrichment** The solution is to *enrich* every log message with a "Module" or "FeatureSlice" tag. This is achieved using a **Mapped Diagnostic Context (MDC)** or its equivalent (e.g., Serilog's LogContext). A middleware is added to the request pipeline that inspects the request path (e.g., /api/payments/\*) and pushes a property onto the thread-local context: LogContext.PushProperty("Module", "Payments"). Every log message written by that thread is now automatically enriched. This makes debugging trivial: an engineer can filter by CorrelationId to see the full request, then filter by Module \= "Payments" to see only the logs from their domain. ### **Pattern 2: Distributed Tracing with Custom Span Attributes** The same principle applies to tracing with tools like OpenTelemetry. A default trace for a monolith is often one long, useless span. The best practice is to manually create *new child spans* at each logical module boundary. When a request enters the "Orders" service, a new span is started. When "Orders" makes an in-process call to "Shipping," the "Shipping" service starts *another* child span. These spans are then enriched with custom attributes like span.SetAttribute("code.module", "Orders") and span.SetAttribute("feature.slice", "CreateOrder"). This transforms the trace from a flat line into a hierarchical flame graph that pinpoints in-process latency and errors. ## **The Evolutionary Path: From Modular Monolith to Microservices** The decision to extract a slice into a microservice is rarely technical; it is an organizational and economic decision driven by specific scaling bottlenecks. The primary triggers are: 1. **Organizational Scaling:** The team grows too large (e.g., 50-100+ engineers) for a single codebase, and team contention becomes the primary bottleneck to velocity. 2. **Independent Resource Scaling:** A specific slice has vastly different, and economically significant, resource needs (e.g., a new AI/ML feature needs GPUs, while the rest of the app is simple CRUD). 3. **Independent Release or Compliance Needs:** A module requires a different release cadence (e.g., "Mobile API" deploys daily, "Billing" deploys quarterly) or has unique compliance requirements (e.g., "Payments" must be in a PCI-compliant environment). When these triggers are met, the **Strangler Fig** pattern is the universally recommended migration strategy. VSA makes this pattern trivial. The hardest part of a "Strangler" migration is identifying and refactoring the "vertical slice" to extract. In a VSA/Modular Monolith, this work is *already done*. The "Orders" module is already a self-contained, loosely coupled component with a clean, public Contracts API. The "carve-out" migration becomes a simple, low-risk process : 1. Deploy a reverse proxy (the "façade"). 2. Copy the src/Modules/Orders folder into a new microservice project. 3. Deploy the new "Orders" microservice. 4. Configure the proxy to route /api/orders/\* traffic to the new service. 5. Delete the module from the monolith. This migration is not a one-way street. A significant counter-trend has emerged of companies migrating *from* microservices *back* to a modular monolith, driven by massive cost reductions (e.g., Amazon Prime Video's 90% reduction ) and a desire to escape the crippling operational complexity of distributed systems. ## **Comparison and Recommendations** The VSA-enabled Modular Monolith is not a compromise; it is a distinct, pragmatic, and operationally robust architectural choice. ### **Operational Trade-Offs: Traditional vs. Modular Monolith vs. Microservices** | Operational Dimension | 1\. Traditional Monolith ("Big Ball of Mud") | 2\. VSA / Modular Monolith (The "Pragmatic Middle") | 3\. Microservices (The "Distributed System") | | :---- | :---- | :---- | :---- | | **Deployment Complexity** | **Low.** Single artifact, simple script. | **Low.** Still a single artifact. | **Very High.** Requires orchestration (e.g., Kubernetes), service discovery, API gateways. | | **CI/CD Speed & Agility** | **Very Low.** "Test Everything" trap. Long builds, high team contention. | **Medium-High.** *Requires investment* in intelligent, change-aware pipelines and architecture tests. | **High.** Fully independent pipelines per service. Fastest cycle for a single team. | | **Runtime Blast Radius** | **Critical.** 100% of the application. A single fault crashes the entire system. | **High (but Mitigated).** Still a single process. Mitigated by in-process bulkheads & circuit breakers. | **Low.** Blast radius is isolated to a single service. A crash in "Recommendations" does not affect "Payments". | | **Observability (Debug)** | **Low.** A single, massive, interleaved log stream. "Needle in a haystack" debugging. | **High.** Simple, centralized logging combined with *slice-aware enrichment*. Often *easier* to debug than microservices. | **Medium-Hard.** Requires complex distributed tracing. Correlation across network boundaries is a major challenge. | | **Team Autonomy** | **Very Low.** High "Conway's Law" friction. All teams must coordinate releases. | **Medium.** Teams are autonomous in their *module*. Feature flags provide release autonomy. | **Very High.** Teams own their service end-to-end: development, deployment, and scaling. | | **Infrastructure Cost** | **Low.** Single process, single server/container. | **Low.** Same as Traditional Monolith. | **High.** Significant overhead for orchestration, service mesh, and redundant instances of many small services. | | **Ideal Team Fit** | 1-5 engineers. Pre-product-market fit. | 5-50 engineers. Post-product-market fit, scaling pragmatically. | 50+ engineers, organized into many autonomous, domain-focused teams. | ### **Recommendations for Small, Fast-Moving Teams** 1. **DO Start with the VSA Modular Monolith.** The evidence is overwhelming: do not start with microservices. The operational simplicity and low cost of the VSA-enabled monolith allow a small team to move fast. 2. **DO Invest in Observability from Day 1\.** This is the cheapest, highest-ROI investment. Implement structured logging (e.g., Serilog) and configure middleware to *enrich all logs* with a "Module" tag from Day 1\. 3. **DO Enforce Boundaries with \*.Contracts Assemblies.** This is the simplest way to enforce modularity. The "Orders" module should reference Billing.Contracts, *not* Billing.Infras\[span\_47\](start\_span)\[span\_47\](end\_span)\[span\_51\](start\_span)\[span\_51\](end\_span)tructure. 4. **DO Decouple Deployment from Release with Feature Flags.** Use feature flags to manage all new features. This is the primary tool for agility and safety, allowing continuous deployment to main while the business controls the release. 5. **DON'T Prematurely Optimize CI/CD.** A "test everything" CI pipeline is acceptable for a small team. Wait until the build time becomes a tangible bottleneck. *Then*, invest in (a) Architecture Tests to enforce boundaries, and (b) a change-aware pipeline to selectively test. 6. **DON'T Prematurely Optimize for Runtime Resilience.** Do not implement in-process bulkheads or circuit breakers on Day 1\. Wait for a real production outage, use the observability data to identify the misbehaving slice, and *then* apply a targeted resilience policy. 7. **DON'T Migrate to Microservices Until Your *Organization* Breaks.** Your VSA monolith will not fail for technical reasons; it will fail when your *team* gets too big. When deployment contention and team friction are the primary problems, *that* is the trigger to plan the first Strangler Fig extraction. ## **Bibliography** (Note: A full list of 160+ citations as provided in the research material would be included here, formatted for clarity. Below is a sample of the key sources.) Jovanovic, M. (2025). *Vertical Slice Architecture Is Easier Than You Think*. milanjovanovic.tech. Anton. (2025). *Building a modular monolith with Vertical Slice Architecture*. antondevtips.com. Naveen. (2024). *Behold the Modular Monolith: The Architecture Balancing Simplicity and Scalability*. dev.to. Razkevich, A. (2025). *Modular Monoliths: The architecture that dares to stay together*. medium.com. CloudArchitect, R. (2024). *Microservices to Modular Monolith: A Pragmatic Approach*. roshancloudarchitect.me. Baczek, K. (2024). *Utilizing Feature Flags in Monoliths: A Simple Yet Powerful Enhancement for Agility*. dev.to. Ozkaya, M. (2024). *Shopify's Modular Monolithic Architecture: A Deep Dive*. mehmetozkaya.medium.com. Jovanovic, M. (2024). *Internal vs. Public APIs in Modular Monoliths*. milanjovanovic.tech. Pashkevich, D. (2023). *Breaking up Rails monoliths and contact-driven API development*. dev.to. Microsoft. (2024). *Implement the Circuit Breaker pattern*. learn.microsoft.com. Microsoft. (2023). *Bulkhead pattern*. learn.microsoft.com. Kuran, Y. (2024). *Using Polly and the Bulkhead Pattern in.NET*. medium.com. Jovanovic, M. (2024). *Breaking It Down: How to Migrate Your Modular Monolith to Microservices*. milanjovanovic.tech. Reddit. (2021). *When would you start transitioning from monolith to microservices?*. reddit.com. Microsoft. (2023). *Strangler Fig pattern*. learn.microsoft.com. Chaudhari, A. (2024). *Monolith vs Microservices? Or is it a Modern Monolith vs Microservices?*. medium.com. He, B., et al. (2024). *Switching Back from Microservice to Monolith*. MDPI. OpenTelemetry. (2024). *Traces*. opentelemetry.io. Stack Overflow. (2022). *Directing logging depending on call context in modular monolith*. stackoverflow.com. Jovanovic, M. (2023). *Serilog logging context for modular monolith*. youtube.com. Jovanovic, M. (2023). *5 Serilog Best Practices For Better Structured Logging*. milanjovanovic.tech. AnswerOverflow. (2024). *Designing a logging system for a.NET modular monolith*. answeroverflow.com. Singh, H. (2024). *How Shopify Handles 30TB of Data Every Minute with a Monolithic Architecture*. medium.com. Westeinde, K. (2019). *Shopify's Modular Monolith*. infoq.com. Shopify Engineering. (2021). *Making our Rails Monolith More Modular*. shopify.engineering. Thoughtworks. (2023). *When (‌modular) monolith is the better way to build software*. thoughtworks.com. Heinemeier Hansson, D. (2016). *The Majestic Monolith*. signalvnoise.com. Kolny, M. (2023). *Amazon Prime Video cost reduction case study*. arxiv.org. Al-JOD, F. H., et al. (2024). *Modular Monolithic Architecture in Cloud Environments: A Systematic Literature Review*. MDPI. Ozkaya, M. (2024). *.NET 8 Backend Bootcamp*. oreilly.com. Ozkaya, M. (2024). *Shopify's modular monolith architecture and canary testing*. mehmetozkaya.medium.com. Grzybek, K. (2024). *Modular Monolith with DDD \- CI/CD Pipeline*. github.com. #### **Works cited** 1\. Modular Monoliths: The Architecture That Dares to Stay Together | by Alex Razkevich, https://medium.com/@razkevich8/modular-monoliths-the-architecture-that-dares-to-stay-together-b000a339d37c 2\. Behold the Modular Monolith: The Architecture Balancing Simplicity ..., https://dev.to/naveens16/behold-the-modular-monolith-the-architecture-balancing-simplicity-and-scalability-2d4 3\. Utilizing Feature Flags in Monoliths: A Simple yet Powerful Enhancement for Agility \- DEV Community, https://dev.to/kamilbaczek/utilizing-feature-flags-in-monoliths-a-simple-yet-powerful-enhancement-for-agility-59n8 4\. Shopify's Modular Monolithic Architecture: A Deep Dive 🛠️ | by ..., https://mehmetozkaya.medium.com/shopifys-modular-monolithic-architecture-a-deep-dive-%EF%B8%8F-a2f88c172797 5\. Under Deconstruction: The State of Shopify's Monolith, https://shopify.engineering/shopify-monolith 6\. Breaking Up Rails Monoliths and Contact-Driven API Development ..., https://dev.to/newrelic/breaking-up-rails-monoliths-and-contact-driven-api-development-with-dmitry-pashkevich-1ba2 7\. Implementing the Circuit Breaker pattern \- .NET \- Microsoft Learn, https://learn.microsoft.com/en-us/dotnet/architecture/microservices/implement-resilient-applications/implement-circuit-breaker-pattern 8\. Using Polly and the Bulkhead Pattern in .NET | by Yunus Kiran \- Medium, https://medium.com/@ynskrn54/using-polly-and-the-bulkhead-pattern-in-net-f4a9639e2fcd 9\. Directing logging depending on call context in modular monolith web application, https://stackoverflow.com/questions/70863330/directing-logging-depending-on-call-context-in-modular-monolith-web-application 10\. Logging System Design Advice for .NET CQRS Modular Monolith \- C\# \- Answer Overflow, https://www.answeroverflow.com/m/1366456975319367751 11\. Breaking It Down: How to Migrate Your Modular Monolith to Microservices \- Milan Jovanović, https://www.milanjovanovic.tech/blog/breaking-it-down-how-to-migrate-your-modular-monolith-to-microservices 12\. monolith vs microservices — or is it a modern-monolith vs microservices ? | by aditya chaudhari | Sep, 2025 | Medium, https://medium.com/@chaudhari.aditya24/monolith-vs-microservices-or-is-it-a-modern-monolith-vs-microservices-ab3320ab765f 13\. Strangler Fig Pattern \- Azure Architecture Center | Microsoft Learn, https://learn.microsoft.com/en-us/azure/architecture/patterns/strangler-fig 14\. .NET 8 Backend Bootcamp \- Modulith, VSA, DDD, CQRS and ..., https://www.oreilly.com/videos/net-8-backend/9781837028757/ 15\. The core question: Are Vertical Slices just modular monoliths, https://sd.blackball.lv/en/articles/read/19458-the-core-question-are-vertical-slices-just-modular-monoliths 16\. Vertical Slice Architecture Is Easier Than You Think, https://www.milanjovanovic.tech/blog/vertical-slice-architecture-is-easier-than-you-think 17\. Vertical Slice Architecture \- Milan Jovanović, https://www.milanjovanovic.tech/blog/vertical-slice-architecture 18\. Clean Architecture with Modular Monolith and Vertical Slice | by Eda Belge | Medium, https://medium.com/@eda.belge/clean-architecture-with-modular-monolith-and-vertical-slice-896b7ee22e3e 19\. Why Vertical Slices Won't Evolve from Clean Architecture \- Rico Fritzsche, https://ricofritzsche.me/why-vertical-slices-wont-evolve-from-clean-architecture/ 20\. Modular Monolith Architecture in Cloud Environments: A Systematic Literature Review, https://www.mdpi.com/1999-5903/17/11/496 21\. Modular Monolith \- Implementation Deep Dive \- Dan Does Code, https://www.dandoescode.com/blog/modular-monolith/implementation-deep-dive 22\. Microservices to Modular Monolith: A Pragmatic Approach to Simplifying Complex Systems, https://roshancloudarchitect.me/microservices-to-modular-monolith-a-pragmatic-approach-to-simplifying-complex-systems-4f23722b87c0 23\. The Modular Monolith Revolution: Enterprise Grade Architecture-Part I Theory \- Medium, https://medium.com/@bhargavkoya56/the-modular-monolith-revolution-enterprise-grade-architecture-part-i-theory-b3705ca70a5f 24\. The Majestic Monolith \- Signal v. Noise, https://signalvnoise.com/svn3/the-majestic-monolith/ 25\. What Is a Modular Monolith? \- GeeksforGeeks, https://www.geeksforgeeks.org/system-design/what-is-a-modular-monolith/ 26\. Building a Modular Monolith With Vertical Slice Architecture in .NET \- Anton DevTips, https://antondevtips.com/blog/building-a-modular-monolith-with-vertical-slice-architecture-in-dotnet 27\. Majestic Monolith vs Headless eCommerce: Less is More \- Spree Commerce, https://spreecommerce.org/majestic-monolith-vs-headless-ecommerce-less-is-more/ 28\. Modular monolith and microservices: Modularity is what matters | Hacker News, https://news.ycombinator.com/item?id=45810482 29\. Monolithic vs Microservices \- Difference Between Software Development Architectures, https://aws.amazon.com/compare/the-difference-between-monolithic-and-microservices-architecture/ 30\. Monolith with Feature Flags as alternative to Microservices? \- jpintelli \-, https://jpintelli.com/2021/01/04/monolith-with-feature-flags-as-alternative-to-microservices/ 31\. How Shopify Handles 30TB of Data Every Minute with a Monolithic Architecture \- Medium, https://medium.com/@himanshusingour7/how-shopify-handles-30tb-of-data-every-minute-with-a-monolithic-architecture-cad54df86955 32\. How Shopify Migrated to a Modular Monolith \- InfoQ, https://www.infoq.com/news/2019/07/shopify-modular-monolith/ 33\. Deconstructing the Monolith: Designing Software that Maximizes Developer Productivity \- Shopify, https://www.shopify.com/partners/blog/monolith-software 34\. Continuous Integration and Delivery for Monolithic Applications | by Platform Engineers, https://medium.com/@platform.engineers/continuous-integration-and-delivery-for-monolithic-applications-352e97e3bc7d 35\. Understand the Value of Migrating to Microservices | Consul | HashiCorp Developer, https://developer.hashicorp.com/consul/tutorials/archive/kubernetes-migrate-to-microservices 36\. Monoliths vs. Microservices: The Brutally Honest Guide to Splitting Your App (Without Regrets) ⚖️ \- DEV Community, https://dev.to/alex\_aslam/monoliths-vs-microservices-the-brutally-honest-guide-to-splitting-your-app-without-regrets-1m2m 37\. Vertical Slice Architecture in .NET \#8 \- Testing Slices \- YouTube, https://www.youtube.com/watch?v=HekEj\_mu3oM 38\. Vertical Slicing with MediatR and Unit Testing : r/dotnet \- Reddit, https://www.reddit.com/r/dotnet/comments/191529f/vertical\_slicing\_with\_mediatr\_and\_unit\_testing/ 39\. Testing Modular Monoliths: System Integration Testing \- Milan Jovanović, https://www.milanjovanovic.tech/blog/testing-modular-monoliths-system-integration-testing 40\. kgrzybek/modular-monolith-with-ddd: Full Modular Monolith ... \- GitHub, https://github.com/kgrzybek/modular-monolith-with-ddd 41\. Internal vs. Public APIs in Modular Monoliths \- Milan Jovanović, https://www.milanjovanovic.tech/blog/internal-vs-public-apis-in-modular-monoliths 42\. Learn how to build Modular Monoliths in .NET \- Dometrain, https://dometrain.com/blog/getting-started-with-modular-monoliths-in-dotnet/ 43\. Microservices vs. Monolith: 5 Key Differences \- Codefresh, https://codefresh.io/learn/microservices/microservices-vs-monolith-5-key-differences/ 44\. Bulkhead Pattern with Spring Boot \- Vinsguru, https://www.vinsguru.com/bulkhead-pattern/ 45\. Bulkhead pattern \- Azure Architecture Center \- Microsoft Learn, https://learn.microsoft.com/en-us/azure/architecture/patterns/bulkhead 46\. Bulkhead Pattern \- GeeksforGeeks, https://www.geeksforgeeks.org/system-design/bulkhead-pattern/ 47\. App-vNext/Polly: Polly is a .NET resilience and transient-fault-handling library that allows developers to express policies such as Retry, Circuit Breaker, Timeout, Bulkhead Isolation, and Fallback in a fluent and thread-safe manner. From version 6.0.1, Polly targets .NET Standard 1.1 and \- GitHub, https://github.com/App-vNext/Polly 48\. Understanding the Bulkhead Design Pattern in Microservices: Enhancing System Resilience, https://medium.com/@thufaila\_89746/understanding-the-bulkhead-design-pattern-in-microservices-enhancing-system-resilience-f656a8cbb072 49\. Bulkhead \- resilience4j, https://resilience4j.readme.io/docs/bulkhead 50\. Easy Modular Monolith — Part 3 — Logging (Serilog and Seq) | by Norbert Dębosz | ITNEXT, https://itnext.io/easy-modular-monolith-part-3-logging-57caceac1ff5 51\. Modular Monolith and Microservices: Modularity is what truly matters \- Binary Igor, https://binaryigor.com/modular-monolith-and-microservices-modularity-is-what-truly-matters.html 52\. 7 Serilog Best Practices for Better Structured Logging \- YouTube, https://www.youtube.com/watch?v=w7yDuoCLVvQ 53\. 5 Serilog Best Practices For Better Structured Logging \- Milan Jovanović, https://www.milanjovanovic.tech/blog/5-serilog-best-practices-for-better-structured-logging 54\. Telemetry Tracing: Best Practices & Use Cases, https://www.mezmo.com/learn-observability/telemetry-tracing-best-practices-use-cases 55\. Traces \- OpenTelemetry, https://opentelemetry.io/docs/concepts/signals/traces/ 56\. When would you start transitioning from monolith to microservices? : r/devops \- Reddit, https://www.reddit.com/r/devops/comments/qp3s5p/when\_would\_you\_start\_transitioning\_from\_monolith/ 57\. Strangler Fig Design Pattern \- DevIQ, https://deviq.com/design-patterns/strangler-fig-pattern/ 58\. Refactoring a monolith to microservices, https://microservices.io/refactoring/ 59\. Application Strangler Pattern Experiences & Thoughts \[closed\] \- Stack Overflow, https://stackoverflow.com/questions/1118804/application-strangler-pattern-experiences-thoughts 60\. The Strangler-Fig Pattern: My Favourite Way to Upgrade Legacy Angular Projects, https://javascript.plainenglish.io/the-strangler-fig-pattern-my-favourite-way-to-upgrade-legacy-angular-projects-761fcc727ed1 61\. Strangler Fig Pattern for Refactoring Monolith into Microservices ➡️ | by Mehmet Ozkaya, https://mehmetozkaya.medium.com/strangler-fig-pattern-for-refactoring-monolith-into-microservices-%EF%B8%8F-88e667c096c8 62\. How to break a Monolith into Microservices \- Martin Fowler, https://martinfowler.com/articles/break-monolith-into-microservices.html 63\. The trade-offs between Monolithic vs. Distributed Architectures \- arXiv, https://arxiv.org/html/2405.03619v1 64\. Microservices Are Dead? The Rise of Modular Monoliths in 2025 | by Harshavardhan Mamidipaka | Nov, 2025 | Medium, https://medium.com/@mamidipaka2003/%EF%B8%8F-microservices-are-dead-the-rise-of-modular-monoliths-in-2025-647f7cb00f5b 65\. From Microservice to Monolith: A Multivocal Literature Review \- MDPI, https://www.mdpi.com/2079-9292/13/8/1452 66\. Building a Modular Monolith With Vertical Slice Architecture in .NET : r/dotnet \- Reddit, https://www.reddit.com/r/dotnet/comments/1kda70x/building\_a\_modular\_monolith\_with\_vertical\_slice/ 67\. From Monolith to Microservices: How to Know the Right Time to Migrate | by Nikhil Garg | Sep, 2025 | Medium, https://medium.com/@nikhilngarg/from-monolith-to-microservices-how-to-know-the-right-time-to-migrate-79a3a430fa97 68\. When (‌modular) monolith is the better way to build software | Thoughtworks United States, https://www.thoughtworks.com/en-us/insights/blog/microservices/modular-monolith-better-way-build-software