Programming

Monolith Decomposition: Business-First Boundaries, Microservices Second

Monolith Decomposition isn’t a refactor—it’s an organizational reset. Carve along the business seams—code follows. Principled Microservices Playbook This article is a standalone deep dive on how to properly decompose a monolith and is a chapter in our comprehensive series. You don’t need any prior context to get the full value from this post. To explore…

Spring @Transactional: Class vs Method — A Critical Design Choice

Most developers see @Transactional as a magic spell for data integrity. But a deeper understanding reveals it’s a powerful policy enforced by a proxy. This perspective immediately leads to a critical design question that is often overlooked: where should this policy be declared? This is not a simple coding convention. This decision directly impacts your…

@Transactional is Not Enough: A Deep Dive into Spring’s PlatformTransactionManager

We’ve all seen it. A critical operation fails halfway through, leaving data in a corrupted, inconsistent state. The @Transactional annotation was supposed to be the safety net, but it failed. The problem isn’t the tool. It’s the blind faith we place in it. To build truly resilient systems, we can’t just trust the magic. We…

The Two-Pizza Team Myth: The True Cost of Microservices

Two-Pizza Team Myth says small squads unlock endless agility—until the invoice shows up. Principled Microservices Playbook This article is a standalone deep dive on how to properly decompose a monolith and is a chapter in our comprehensive series. You don’t need any prior context to get the full value from this post. To explore all…

Mastering Spring & MSA Transactions – Part 17: Understanding the SAGA Pattern: Theory & Key Concepts

When microservices each own their own database, a single global transaction across multiple services is typically unfeasible. Rather than forcing a “one-shot” commit or rollback (like 2PC), the SAGA pattern coordinates each service’s local transaction in a way that either all services complete successfully or any partial changes are undone by compensating transactions. This part…

Mastering Spring & MSA Transactions – Part 16: Why Transactions Are Different in a Microservices (MSA) World

In a monolithic system—where you likely have a single database—transaction handling can be straightforward: a single @Transactional boundary often suffices to guarantee atomicity (all-or-nothing). However, once you split your application into multiple microservices, each with its own local database or data store, old assumptions break down. Atomic updates across services become much harder, and the…

Mastering Spring & MSA Transactions – Part 15: Real-World Scenarios: Local @Transactional Usage

Even in microservices, where each service has its own database and a SAGA or TCC pattern coordinates commits, every service still relies on local transactions internally. Meanwhile, many applications remain monolithic or partially modular, handling multiple DAOs or repositories within a single DB connection. In both worlds, Spring’s @Transactional is the bedrock for ensuring atomic…

Mastering Spring & MSA Transactions – Part 14: Advanced Transaction Testing: Real DB, Testcontainers, and Mocking External Calls

In-memory database tests with @Transactional are great for quick feedback, but they don’t fully capture real concurrency or vendor-specific behaviors in MySQL, PostgreSQL, or Oracle. Plus, if your app calls external services—like a payment gateway—you can’t rely on local rollback to undo a “live” network call. That’s where Testcontainers and mocks come in. By spinning…

Mastering Spring & MSA Transactions – Part 13: Bringing It All Together in Tests: How @Transactional Simplifies Spring Testing

Have you ever run a test that inserted some data, crashed, and then left your database in a weird state for the next test? Or spent hours resetting your DB every time you ran your suite, just to avoid leftover rows cluttering the tables? These headaches arise when we fail to test our transactional logic…

End of content

End of content