These aren't recommendations. They're the books I've lived with long enough that their ideas became instincts. Every one of them describes a problem that's showing up again in agentic systems — agent boundaries are bounded contexts, tool routing is chain of responsibility, memory management is session state. The patterns didn't change. The substrate did.
Architecture & Design
Patterns of Enterprise Application Architecture
The catalog that named the patterns most developers use without knowing it. Gateway, Repository, Unit of Work, Data Mapper — these aren't enterprise-only concepts.
In agentic systems, the session-state patterns reappear as agent memory strategies. The Gateway pattern is exactly what a tool adapter is.
Design Patterns: Elements of Reusable Object-Oriented Software
The Gang of Four book. Still the most precise vocabulary for structural decisions in software.
Tool routing is Chain of Responsibility. Model selection is Strategy. Event-driven agent communication is Observer. The book is 30 years old and describes your architecture better than your architecture docs do.
Domain-Driven Design: Tackling Complexity in the Heart of Software
Bounded contexts, ubiquitous language, aggregates, domain events. Evans gave us the language for decomposing complex domains into manageable, autonomous pieces.
In multi-agent systems, bounded contexts are the natural unit of agent specialization. The ubiquitous language problem is just harder when one of the speakers hallucinates.
Clean Architecture
The dependency rule: source code dependencies must point inward, toward higher-level policies, never toward lower-level mechanisms.
Swapping Claude for GPT should touch exactly one adapter at the outer ring.
Integration & Delivery
Enterprise Integration Patterns
Message channels, routers, transformers, dead-letter queues, saga patterns.
Multi-agent orchestration is messaging. Every "agent framework" released since 2023 is a partial reimplementation of this book.
Continuous Delivery
Feedback latency determines quality. The faster you learn whether a change works, the better your software gets.
Eval suites are your test stage. Canary deployments are your production gate.
Legacy & Evolution
Working Effectively with Legacy Code
Legacy code is code without tests. Feathers' contribution is the concept of seams — points where you can alter behavior without editing the code.
LLM calls are the ultimate legacy code: opaque, non-deterministic, untestable without seams. If you're writing AI code without reading Feathers, your test suite is a lie.
Agentic Era Series
These readings inform an ongoing essay series at thoughtworks.elizaga.dev.