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.
Architecture
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
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
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.
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.
Cache keys, TTLs and invalidation paths are designed with the feature. Redis handles sessions, locks, rate limits, live state and queue backends.
Anything slow, external or retryable goes to a queue with idempotency, backoff and dead-letter handling defined up front.
Identical images across environments, migrations gated in the pipeline, and a rollback that a junior engineer can run at 2am.
Managed services where they save time, edge where latency and cost matter. Infrastructure defined as code, never clicked into existence.
Least privilege, secrets never in code, authorisation enforced server-side, dependency scanning in CI, and a documented incident path.
Multi-AZ, graceful degradation and tested restores. A backup you have never restored is not a backup.
Structured logs, traces on every request, alerts tied to user-visible symptoms rather than CPU graphs.
Deliverables
Documents your team can execute, and reference code that proves the pattern works in your codebase.
Boundaries, ownership and the events that cross them.
Schema, indexes, partitioning and growth projections.
What to do at 10x, and the metric that triggers it.
One page per decision, with the options we rejected.
Taking on 2 new partnerships for Q4
Two weeks, one written assessment, and a prioritised list of what to fix first.