Architecture
110 articles
8 Books for Learning System Design and the Architect Role
A reading list of 8 books on system design and the work of an architect: design patterns through interview problems, the architecture design process, the architect's role, and trade-offs and non-functional requirements. Each entry links to its full review.
12 Books for Learning Software Architecture, from Fundamentals to Practice
A staged reading list of 12 books for learning software architecture, from fundamentals to practice: design basics, trade-offs, domain-driven design, microservices, and API design. Each entry links to its full review.
Microservices Patterns
A review of Microservices Patterns. Chris Richardson's systematic organization of microservice design patterns. From decomposition strategies to Saga-based distributed transactions, API Composition, CQRS, and event sourcing, it lays out the challenges and standard solutions in distributed systems, complete with their trade-offs.
Why the Domain Fades From View in Web Development, and Why It Eventually Comes Back
Understand what a domain really means, why it works as an architectural boundary, and the structural reasons the domain fades from view in web development.
Hands-On API Learning
A review of Hands-On API Learning. A practical book you learn by building, spanning API design, implementation, testing, and operations. It covers essentials for long-term operation such as design principles, documentation, versioning, and security, and works as a checklist for revisiting your own API design.
Where Should You Store SPA Tokens? A BFF + Session Authentication Design
Explains where to store access tokens in an SPA (the danger of localStorage), a BFF + session design that keeps tokens out of the browser, and why starting token-less is often enough.
What is the Big Picture of Service-to-Service Authentication? mTLS, Token Exchange, SPIFFE, and Zero Trust
Organizes service-to-service authentication in microservices across three layers: network, token, and identity foundation. Covers mTLS, Token Exchange (RFC 8693), SPIFFE, Zero Trust (NIST SP 800-207), and BeyondProd.
Comparing API Styles: REST, GraphQL, gRPC, Webhooks, WebSocket, and Messaging
Six common API styles, REST, GraphQL, gRPC, Webhooks, WebSocket, and Messaging, compared side by side. This article organizes them by communication model, lays out each style's overview, design considerations, and pros and cons, and gives guidance for choosing. A map for picking a style in API design.
When to Use GraphQL: Adoption Criteria and Trade-offs
When should you adopt GraphQL? This guide covers its core ideas (a typed schema, a single endpoint, fetching exactly what you need), where it fits and where it does not, the trade-offs, operational concerns such as N+1, and how it compares with REST and gRPC.
When to Use gRPC: Adoption Criteria and Trade-offs
When should you adopt gRPC? This guide covers its core ideas (RPC, HTTP/2, Protocol Buffers), where it fits and where it does not, the trade-offs, operational concerns, and how it compares with REST and GraphQL.
Comparing API Versioning Strategies: Path, Query, Header, and Payload
A concise comparison of four API versioning strategies — path, query parameter, header, and message payload — covering their pros, cons, and best fit.
What Is EventStorming
Learn EventStorming, a workshop technique born from domain-driven design that uses sticky notes to rapidly map a business domain and build shared understanding between developers and domain experts.
Production-Ready Microservices: Building Standardized Systems Across an Engineering Organization
A review of Production-Ready Microservices. A book that organizes the requirements microservices must meet to run in production: stability, reliability, scalability, fault tolerance, monitoring, and documentation, presenting them as a standardization checklist. It is grounded in the author's experience at Uber.
Accidental Complexity and the Absence of Decision Records
How accidental complexity emerges, and why the absence of ADRs and Design Docs makes it hard to tell what is essential from what is accidental.
Three Common Patterns for Distributed Transactions — 2PC, Saga, and Outbox
A concise comparison of the three canonical distributed transaction patterns in microservices — 2PC, Saga, and Outbox — covering their mechanics, trade-offs, and when to use each.
Architecture Modernization: Socio-technical alignment of software, strategy, and structure
A review of Architecture Modernization. A translation of the original by Nick Tune et al., it frames modernization as a sociotechnical effort that treats technology, organization, and strategy as one, introducing methods driven by business goals such as BVSSH value assessment and Wardley mapping.
Fundamentals of Software Architecture, 2nd Edition: An Engineering Approach
A review of Fundamentals of Software Architecture, 2nd Edition. A textbook-like book by Mark Richards and Neal Ford. It treats architecture not as experience and intuition but as a measurable, governable engineering discipline, systematically explaining the definition, identification, measurement, and governance of architectural characteristics (non-functional requirements).
The Abstraction Trap in Architecture Design
Why sharing domain logic can quietly turn into architectural debt, while technical concerns can safely be shared — with nuance around authorization and PII-sensitive logging.
Viability Conditions for Building a Platform
How do you decide whether to build an internal platform? This article organizes the viability conditions from the perspectives of core/supporting/generic subdomains, comparison with external services, leverage, and organizational capacity, and examines how far domain analysis alone can take you.
What's the Difference Between Product Development and Platform Development?
Exploring how product development and platform development differ across three dimensions — decision criteria, design philosophy, and investment perspective.