Architecture
(15 posts)System design and architectural patterns — CQRS, event sourcing, microservice communication. Lessons from building and scaling real backend systems.
All Posts
API Versioning — URL, Header & Content Negotiation Strategies
Compare API versioning strategies — URL path, custom header, and content negotiation. Includes Spring Boot 4 built-in versioning support and decision framework.
Designing for Failure — Retry, Timeout, Bulkhead & Fallback Patterns
Build resilient systems with failure patterns — retries with backoff, timeouts, circuit breakers, bulkheads, and fallbacks. Practical examples with Resilience4j.
Caching Strategies — Redis, In-Memory & HTTP Cache Headers
A practical guide to caching — when to cache, where to cache, cache invalidation strategies, Redis patterns, HTTP cache headers, and avoiding stale data.
Domain-Driven Design (DDD) — Bounded Contexts in Practice
A practical guide to Domain-Driven Design — bounded contexts, aggregates, value objects, and how to apply DDD without drowning in abstraction.
MVVM vs MVI in Android — Which One and When
A practical comparison of MVVM and MVI architecture patterns in Android — how each works, when to use which, and how to avoid common pitfalls in both.
Saga Pattern — Managing Distributed Transactions
How to implement the Saga pattern for distributed transactions in microservices — choreography vs orchestration, compensation, and practical implementation with Kafka.
Database Per Service — Patterns for Data Isolation in Microservices
How to implement database-per-service in microservices — data ownership, cross-service queries, eventual consistency, and practical patterns for data isolation.
Microservices vs Monolith — A Practical Decision Framework
A no-hype comparison of microservices and monoliths — when each architecture makes sense, the real tradeoffs, and how to decide for your project.
CQRS with Spring Boot, Kafka & MongoDB — Part 5: Putting It All Together
Docker Compose setup, end-to-end flow walkthrough, integration tests with Testcontainers, and a production readiness checklist for the complete CQRS system.
CQRS with Spring Boot, Kafka & MongoDB — Part 4: The Hard Parts
Eventual consistency, idempotent consumers, schema evolution, the outbox problem — the real-world challenges that make CQRS hard and how to handle them.
CQRS with Spring Boot, Kafka & MongoDB — Part 3: Query Side — Reads at Scale
Building the query service — consuming Kafka events, building read-optimized projections, and serving fast queries from MongoDB.
Event-Driven Architecture — When and Why (Not Just Kafka)
Understand event-driven architecture beyond the buzzwords — events vs commands, messaging patterns, when to use it, and when synchronous calls are better.
CQRS with Spring Boot, Kafka & MongoDB — Part 2: Command Side — Writes Done Right
Building the command service — accepting orders, validating business rules, persisting to MongoDB, and publishing domain events to Kafka.
CQRS with Spring Boot, Kafka & MongoDB — Part 1: What is CQRS and why you need it
Understanding Command Query Responsibility Segregation, when it makes sense, and how Spring Boot, Kafka, and MongoDB fit together in a CQRS architecture.
Clean Architecture for Android — Without Over-Engineering
A practical guide to Clean Architecture in Android — when to use it, how to structure layers, and how to avoid the over-abstraction trap that kills productivity.