Architecture work, written up the way I actually did it.
Most of what I build has no screen to screenshot. These notes focus on the business context, the constraints that mattered, the decisions and what they cost, and how the systems behaved once real traffic arrived.
- Years
- Backend engineering & technical architecture
- Focus
- Event-driven backends, service boundaries, data ownership, platform operations
- Typical stack
- .NET, Kafka, PostgreSQL, Kubernetes, Redis
How I draw a system
Four layers, two kinds of lines, and a legend that fits on one line. Solid lines are requests, dashed lines are events. If I cannot say which one a line is, the diagram is not finished.
See it applied in the case studiesWhat a case study here covers
Business context. Who needed what, and why now.
The architectural problem. The thing the current system could not do.
Constraints. Teams, budget, legacy, regulation, release cadence.
Decisions and trade-offs. What was chosen, what was rejected, and what it cost.
System boundaries. Who owns which data and which events.
Operations and outcomes. How it ran, what broke, what I would change.
Case studies
Names and figures are anonymised. mock content
Retail and e-commerce, 2024 to 2025
Rebuilding order orchestration for a multi-brand retailer
Four storefront brands shared one order service that had grown for nine years.
Decision
An event log as the only integration contract
Trade-off
Stock is eventually consistent.
Outcome
4 → 1 deploy approvals needed for a brand-level change
Fintech, 2023
A ledger service that regulators could audit without asking us
Append-only postings, deterministic replay, and a reporting read model rebuilt nightly. The hard part was convincing teams to stop updating balances in place.
Logistics, 2022
Moving a courier platform off nightly batch into near real time
Change data capture from the legacy database, a thin streaming layer, and a strict rule: nobody writes to the old schema from the new side.
Platform, 2021
An internal platform so teams could stop writing their own deployment scripts
Golden paths on Kubernetes, paved roads for observability, and a deliberate choice to make the easy path the compliant one.
Media, 2020
Personalisation at the edge without a data lake rewrite
A small feature store, cache-first delivery, and a boundary that kept the recommendation team from blocking the content team.
Architecture notes
Shorter pieces on decisions that recur across projects. Each is a position I hold now, with the reasoning, so future me can argue with it.
More in the blog, under Software architecture- ADROutbox before you need itWhy I add the outbox table on day one of any service that publishes events.Decision record
- ADROne database per service, enforced by credentialsBoundaries that live in a diagram erode; boundaries that live in IAM do not.Decision record
- MapA system map template I keep reusingFour layers, two kinds of arrows, and a legend that fits on one line.Template
- NoteWhat “operational concerns” actually means in a design reviewA checklist of the questions that only get asked after the first incident.Checklist