Skip to content
Richard Cooper

Archives

All the articles I've archived.

2026 20
August 5
  • Non-functional requirements are the architecture

    Two teams build the same feature list and ship completely different systems — because the non-functional requirements, not the features, decide the shape.

  • I was an enterprise architecture sceptic

    I wrote off enterprise architecture as big-company ceremony — until a greenfield rewrite with no governance changed my mind, and not the way vendors would like.

  • Contract testing

    Contract testing lets you decouple deploys by sharing a spec, not a code package — each side proves it honours the contract on its own, without the other running.

  • Deployment coupling

    You split into services so each could ship alone. Then a shared contracts package quietly stitched the deployments back together — that's deployment coupling.

  • The last responsible moment

    Deferring a decision isn't dodging it. The last responsible moment is the point past which waiting costs you an option — so decide then, not before, not after.

July 13
  • The cost of premature abstraction

    Taught that duplication is the enemy, we abstract too early. But the wrong abstraction costs more than the duplication it replaced — and is far harder to undo.

  • Architecture fitness functions

    An architecture fitness function turns a design rule from a wish into a test that fails the build when it's broken — and the best ones steer, not just forbid.

  • The myth of the 'right' architecture

    There's no 'right' architecture to find and lock in — only one that fits the forces on you now. The real job is keeping it able to change when they shift.

  • Architecture decision records

    The decision is the cheap part; the reasoning behind it is what evaporates. Architecture decision records are a small, deliberate defence against that loss.

  • Anti-corruption layers work both ways

    An anti-corruption layer is sold as a wall against a vendor's mess. It's really a double-sided socket — the same seam lets you swap either side independently.

  • You can't draw a boundary the business hasn't decided

    Drawing module boundaries where the business already cut them assumes the business decided where. Often it hasn't — and that unmade decision is the architect's job.

  • Modular microliths

    The microservices-versus-monolith war is tired. The systems I've actually shipped are usually a bit of both — and on purpose.

  • The distributed systems tax

    Every time you turn a function call into a network call, you start paying a tax. Worth it sometimes — but know the bill before you sign up.

  • Bounded contexts and aggregates

    The two ideas from Domain-Driven Design you can actually use on Monday — where to draw your boundaries, and what you can change in one go.

  • Anti-corruption layers

    The cheapest insurance against someone else's mess leaking into your codebase — and why changing payment vendors three times didn't hurt.

  • One-way and two-way doors

    Not every decision deserves the same agonising. The trick is telling two-way doors — the ones you can walk back through — from one-way doors you can't.

  • Conway's Law in practice

    Conway's Law in practice: your system will look like your org chart whether you like it or not — the only question is whether you planned for it.

  • Optimising for deletion

    We obsess over making things easy to add. The systems that age well are the ones where things are easy to remove.

June 2
  • It depends

    The most honest two words in architecture — why every decision is a trade-off, and the real skill is finishing the sentence.

  • Hello, and welcome

    Why I've finally got round to starting a blog, and what I plan to write about here.