SaaS & Systems
API Architecture Patterns for Scalable Systems
The API design you start with will either accelerate or constrain every product decision that follows. There's no single right answer — but there are very clear wrong ones for each stage.
REST: The Boring Default That Usually Works
For most products at the 0-to-1 stage, REST is the right call. It's well understood, tooling is mature, and every engineer on the team can reason about it without a learning curve.
When GraphQL Is Worth the Overhead
GraphQL earns its complexity when clients have wildly different data requirements — mobile vs. web vs. third-party integrations. The cost is schema management, resolver complexity, and N+1 risks. Don't pay that cost if your clients are homogeneous.
gRPC for Internal Services
gRPC shines for high-throughput internal service communication where typed contracts and binary serialisation matter. It's not a public API format — it's an infrastructure primitive.
- REST: Default choice, excellent tooling, easy to evolve
- GraphQL: Heterogeneous clients, complex data graphs
- gRPC: High-throughput internal services, strict contracts
- Event-driven: Asynchronous workflows, eventual consistency acceptable
The Hidden Cost of Mixed Patterns
The real danger isn't choosing one pattern over another — it's mixing patterns inconsistently across the same product. Cognitive overhead compounds fast when different teams make different choices without a shared standard.