Boring architecture,chosen on purpose.
I start with where the data lives, who can access it and what happens when a service fails. Those decisions help keep an application understandable as it grows and give the next engineer a clear place to start.
- SCOPE
- Web applications
- APPROACH
- Start simple
- STORE
- Postgres
- RULE
- Add nothing early
A small foundation, extended when needed.
These are responsibilities to consider for a web application, not six services to deploy. The interface, server logic and database form the foundation. Caching, background workers and external integrations are added when the workflow needs them. A landing page may need only a static build and a form connection.
One place, and everything else derives from it.
The first question on any project is which facts are true and where they are written down. Everything after that is derivation. If a number can be computed from the facts, it gets computed, or it gets stored in something explicitly labelled as derived and rebuildable with one command.
Complexity has to be earned by a measurement.
Every extra component is a thing that can fail at 2am, and a thing the next engineer has to understand. So each one needs a trigger, agreed in advance, rather than a hunch.
Decided before launch, not during the incident.
Every third party in the system gets the same three questions written down: what does the user see when it is down, what happens to the work that was in flight, and how do I know it happened without a customer telling me.
These are examples of decisions we agree for applications that depend on these services.
| WHEN THIS IS DOWN | THE USER SEES | THE WORK |
|---|---|---|
| Email provider | Delivery is pending or failed | Record the failure and define retry and alert rules |
| Payment provider | A plain message, not a stack trace | Nothing marked paid without a confirmed webhook |
| File storage | Upload disabled, rest of app works | No half-written records pointing at nothing |
| The database | A clear service-unavailable message | A recovery plan using tested backups |
Shared principles, different applications.
Each application has different workflows and constraints. These examples show how those needs shape the data model and access rules.