Unograph / Learn
Learn software architecture,
one idea at a time.
Practical guides to architecture, system design, design patterns, and AI-assisted development. Explore a topic, work through an example, and put what you learn into practice.
Explore learning topics
Choose what you want to understand next.
Architecture through real-world projects
Learn how software fits together by following practical projects from an initial idea to a working system.
6 articles available
System Design
Reason about requirements, boundaries, data, and failure. Understand the trade-offs behind a system design.
5 articles available
Design Patterns
Understand the problem a pattern solves, see how its parts collaborate, and decide when the added structure is useful.
5 articles available
AI-assisted Development
Make generated code easier to understand. Give an agent a system map, a clear change, and a way to check its work.
6 articles available
Architecture through real-world projects
Learn how software fits together by following practical projects from an initial idea to a working system.
5 min read
Define System Boundaries with an Online Store
Use Fieldnote, a fictional stationery shop, to turn an unclear system boundary into explicit ownership, participants, and an order-acceptance promise.
5 min read
Design Services and Contracts Without Splitting the Monolith
Assign stock, order, payment, and checkout responsibilities inside one modular backend, then specify meaningful success, pending, and failure results.
5 min read
Trace a Synchronous Checkout with a Sequence Diagram
Trace one purchase through two local commits and a remote payment call, with explicit decline and unknown-outcome branches.
5 min read
Process Orders Asynchronously Without Losing Work
Turn one accepted order into durable packing and receipt jobs, then distinguish local task uniqueness from an external email effect.
6 min read
Handle Checkout Failures with Idempotency and Explicit Trade-offs
Recover a lost payment response without inventing a decline or creating a second payment attempt, and record the costs that safe recovery still carries.
4 min read
Trace a request before choosing a service boundary
A small report service makes responsibilities, waiting, and failure visible before you split the code.
System Design
Reason about requirements, boundaries, data, and failure. Understand the trade-offs behind a system design.
9 min read
Requirements and constraints: define an honest reservation
Write a design brief for NightLens, including one-owner slot allocation, explicit SLO denominators, maintenance closures, and an offline-booking trade-off.
8 min read
Latency, throughput, and capacity: size the Monday release
Convert an assumed telescope-session release into read and booking workloads, a latency budget, Little’s law estimates, and a bounded capacity experiment.
9 min read
Storage and consistency: make one reservation authoritative
Design NightLens slot locking, database constraints, scoped idempotency, read-after-write behavior, and a transactional outbox with explicit limits.
8 min read
Cache invalidation without selling a stale promise
Walk through an old-reader refill race and a source-anchored expiry policy for public telescope availability, with coalescing and bounded database fallback.
9 min read
Backpressure, timeouts, and retries during a reservation surge
Finish the NightLens design with booking admission limits, honest unknown outcomes, isolated delivery, retry ownership, and recovery tests.
Design Patterns
Understand the problem a pattern solves, see how its parts collaborate, and decide when the added structure is useful.
9 min read
Strategy: separate pickup ordering from session rules
Compare oldest-first and deadline-first preparation in KitDesk, then trace the context-policy contract and its fairness trade-offs.
9 min read
Adapter: translate a cabinet SDK without leaking its contract
Connect KitDesk's reservation source to an incompatible cabinet SDK with explicit phase, timestamp, identity and error rules.
9 min read
Factory Method: let export workflows create their encoders
Export KitDesk's selected pickups as text or CSV through concrete creator subclasses, with explicit snapshot, artifact and product-lifetime contracts.
9 min read
Observer: update a pickup board with explicit notification rules
Let KitDesk's ready panel and badge react independently, then examine listener failures, snapshot delivery and cleanup.
9 min read
Decorator: compose manifest options without a subclass explosion
Wrap KitDesk exports with independent annotation decorators, inspect return order, and compare the object graph with a simple options function.
AI-assisted Development
Make generated code easier to understand. Give an agent a system map, a clear change, and a way to check its work.
5 min read
Understand an AI Agent's Code with Architecture and Sequence Diagrams
Investigate a fictional release-note agent by connecting its model loop, read tools, and draft storage to code evidence and one concrete scenario.
5 min read
Write a Diagram-Driven Brief for an AI Coding Agent
Specify revision-bound publication for a release-note agent, including immutable approval snapshots, scope, recovery assumptions, and checks.
5 min read
Model Failure Paths Before an AI Agent Implements Them
Work through lost responses and competing draft revisions to decide which recovery actions are allowed and which evidence is still missing.
5 min read
Implement and Verify an AI-Assisted Change Against a Model
Review a publication change from authorization to durable state and remote delivery, choosing checks that can expose each important failure.
5 min read
Keep Architecture Models and Code Aligned with an Explicit Task
Update a release-note agent's model after a background reconciliation worker is added, while preserving the policy and recording what was verified.
4 min read
Review an AI-generated change with a system map
Turn a generated patch into a change you can explain: one promise, one boundary, and a few observable checks.