Skip to content

Architecture

Systems designed for the second year, not the first demo

Architecture is a series of trade-offs made on purpose and written down. Here is how I make them - and the defaults I start from before your context changes them.

Reference architecture

The shape most products should start with

Five layers, clear responsibilities, and nothing distributed until a team boundary forces it.

Edge

Cloudflare · caching, WAF, rate limiting, static delivery

Application

Laravel / Node · modular domains, versioned APIs

Async

Redis queues · idempotent jobs, backoff, dead letters

Data

PostgreSQL / MySQL · partitions, read replicas, rollups

Observability

Structured logs, traces, symptom-based alerting

Principles

The decisions that matter, and my defaults

Monolith or microservices

Almost every startup should start with a modular monolith. Services are an organisational solution to a team-size problem - I split when team boundaries, not diagrams, demand it.

Scaling

Scale the bottleneck you measured, not the one you imagined. Read replicas, partitioning and horizontal workers, applied in that order and only when the data says so.

Caching & Redis

Cache keys, TTLs and invalidation paths are designed with the feature. Redis handles sessions, locks, rate limits, live state and queue backends.

Queues & background work

Anything slow, external or retryable goes to a queue with idempotency, backoff and dead-letter handling defined up front.

Docker & CI/CD

Identical images across environments, migrations gated in the pipeline, and a rollback that a junior engineer can run at 2am.

AWS & Cloudflare

Managed services where they save time, edge where latency and cost matter. Infrastructure defined as code, never clicked into existence.

Security

Least privilege, secrets never in code, authorisation enforced server-side, dependency scanning in CI, and a documented incident path.

High availability

Multi-AZ, graceful degradation and tested restores. A backup you have never restored is not a backup.

Monitoring & logging

Structured logs, traces on every request, alerts tied to user-visible symptoms rather than CPU graphs.

Deliverables

What you receive from an architecture engagement

Documents your team can execute, and reference code that proves the pattern works in your codebase.

Domain map

Boundaries, ownership and the events that cross them.

Data model

Schema, indexes, partitioning and growth projections.

Scaling plan

What to do at 10x, and the metric that triggers it.

ADR set

One page per decision, with the options we rejected.

Taking on 2 new partnerships for Q4

Have an architecture you want a second opinion on?

Two weeks, one written assessment, and a prioritised list of what to fix first.