Filter concepts by levelShowing all levels.

AWS · Senior System Design

AWS Senior-Level System Design

Numbers before boxes, one hard part per system, and the four dimensions everyone leaves out

  • Arithmetic firstfour numbers rule out most options
  • Name the hard partwhat stays hard at ten users?
  • Sixteen dimensionsfour of them are usually silent
  • Ownership is a design choicenot a rota discovered later

1.Designing a System on AWS, Worked Through

A senior design answer is not a diagram produced from memory. It is a short sequence: establish the requirements and the scale, derive the read and write shape from them, choose the data model, and only then pick services. Doing it in that order means every box on the final diagram has a reason, and the reasons are what is actually being assessed.

Key features

  • Start by separating functional requirements from non-functional ones — latency, availability, consistency and durability targets shape more of the design than the feature list does
  • Derive traffic numbers explicitly, including the read-to-write ratio, because a read-heavy system and a write-heavy one diverge at the first decision
  • Choose the data model before the database: the access patterns decide whether a key-value store or a relational one fits
  • Name what may be eventually consistent and what may not, because that single line determines caching, replication and queue placement
  • State the failure behaviour for each dependency — timeout, retry bound, and what a user sees when it is unavailable
  • Finish with the trade-off you made and what would change your mind, which is what distinguishes a design from a preference

The six steps, and the question that unlocks each one

The six steps, and the question that unlocks each one
StepAskWhat the answer decides
RequirementsWhat must be true, and what may be approximate?Which guarantees you are buying, and which you are not
ScaleHow many, how big, how fast growing, read or write heavy?Whether this is one instance or a fleet — and every choice after
APIWhat operations exist, and which block a user?What must be synchronous, and therefore what must be fast
Data modelWhat are the access patterns, in order of frequency?Key-value or relational, and the partition key
ServicesWhich managed service fits the shape already derived?Compute, storage, cache, queue — as consequences, not preferences
Failure and operationsWhat breaks, what does a user see, what does it cost?Whether the design survives contact with production
Six steps, in an order that cannot be rearranged

Each step is answerable only once the one above it has been. Starting at services — the usual instinct — means every later answer is a rationalisation of a choice already made.

  • Six numbered steps arranged as a descending staircase.
  • Step 1: requirements — what must be true, and the latency, availability and consistency targets.
  • Step 2: scale — requests per second, object sizes, growth, and the read-to-write ratio.
  • Step 3: API — the operations, and which of them are on the critical path.
  • Step 4: data model — access patterns first, then the store that serves them.
  • Step 5: services — compute, cache, queue and network, chosen to fit steps 1 to 4.
  • Step 6: failure and operations — what breaks, what the user sees, what is observable, and what it costs.
  • A note reads: the arrow only runs downward, and a change at any step invalidates everything below it.

Signature

requirements → scale → API → data model → services → failure and operations

Requirements, scale, API, data model, services, failure and operations — in that order, downward only. Do the arithmetic before naming a service, separate what blocks a user from what does not, state what may be eventually consistent, and finish with the trade-off you made and what would change it.

2.Nine System Shapes, and What Each One Is Really About

The systems that come up repeatedly are not nine unrelated problems. Each one is a familiar architecture plus one hard part, and naming the hard part is most of the answer. A URL shortener is a caching problem; a payment workflow is an idempotency problem; multi-tenant SaaS is an isolation problem. Recognising which is which is what makes the design fast.

Key features

  • Read-heavy systems with small datasets are caching and latency problems, not storage problems
  • Anything that moves money is an idempotency and auditability problem before it is a throughput problem
  • Fan-out systems are about per-consumer isolation — one queue and one dead-letter queue each
  • Multi-tenant systems are about isolation and per-tenant cost attribution, both of which are hard to retrofit
  • Ingestion systems are about backpressure and reprocessing: land raw, then transform
  • Real-time systems are about connection state and delivery semantics, which is a different problem from request throughput

Nine systems, the hard part, and the shape that answers it

Nine systems, the hard part, and the shape that answers it
SystemThe hard partThe shape
URL shortenerRead latency at volume over a tiny datasetCloudFront → API Gateway/Lambda → DynamoDB, conditional write on code allocation
Notification systemFan-out with per-consumer retry and isolationEventBridge/SNS → one SQS queue per channel → workers, each with a dead-letter queue
File-processing pipelineAt-least-once delivery at every hopPresigned upload → S3 → event → SQS → worker → deterministic output key
E-commerce platformInventory correctness under concurrencyConditional writes for reservation, synchronous checkout, everything else on events
Payment workflowIdempotency, auditability, reconciliationIdempotency keys, atomic record-and-mutate, an append-only ledger, a daily reconcile job
Image processingBounded per-object work and costS3 event → Lambda for small work or ECS for large, output to a derived prefix
Multi-tenant SaaSIsolation, and knowing what a tenant costsTenant in the partition key and in every IAM condition; tenant tag on every resource
Analytics ingestionBackpressure and the ability to reprocessKinesis or S3 → raw zone → transform writing whole partitions → curated zone
Real-time APIConnection state and delivery semanticsAPI Gateway WebSockets or AppSync, connection registry, fan-out through a topic
What each system is really a problem about
URL shortener
Read latency at volume; tiny dataset. A caching problem.
Real-time API
Connection state and delivery semantics, not request throughput.
E-commerce
Inventory correctness under concurrency, plus a long asynchronous tail.
Payment workflow
Idempotency, auditability, and reconciliation. Hard at any volume.
Multi-tenant SaaS
Isolation and per-tenant cost — both painful to retrofit.
Notification system
Fan-out with per-consumer isolation and retry.
Image processing
Bounded work per object; the pipeline shape is the answer.
File-processing pipeline
At-least-once everywhere; deterministic outputs.
Analytics ingestion
Backpressure and reprocessing. Not hard until the volume arrives.
  • URL shortener: Hard because of volume, Mostly synchronous — Read latency at volume; tiny dataset. A caching problem.
  • Real-time API: between Hard because of correctness and Hard because of volume, Mostly synchronous — Connection state and delivery semantics, not request throughput.
  • E-commerce: between Hard because of correctness and Hard because of volume, between Mostly synchronous and Mostly asynchronous — Inventory correctness under concurrency, plus a long asynchronous tail.
  • Payment workflow: Hard because of correctness, between Mostly synchronous and Mostly asynchronous — Idempotency, auditability, and reconciliation. Hard at any volume.
  • Multi-tenant SaaS: Hard because of correctness, between Mostly synchronous and Mostly asynchronous — Isolation and per-tenant cost — both painful to retrofit.
  • Notification system: between Hard because of correctness and Hard because of volume, Mostly asynchronous — Fan-out with per-consumer isolation and retry.
  • Image processing: Hard because of volume, Mostly asynchronous — Bounded work per object; the pipeline shape is the answer.
  • File-processing pipeline: between Hard because of correctness and Hard because of volume, Mostly asynchronous — At-least-once everywhere; deterministic outputs.
  • Analytics ingestion: Hard because of volume, Mostly asynchronous — Backpressure and reprocessing. Not hard until the volume arrives.

Signature

shortener→caching · notifications→fan-out · payments→idempotency · SaaS→isolation · ingestion→backpressure

Ask what would still be hard at ten users. Correctness problems — payments, multi-tenancy, real-time semantics — earn design time immediately. Volume problems — shorteners, analytics, media pipelines — stay simple until the numbers say otherwise. The same box diagram can hide either.

3.The Sixteen Dimensions a Design Has to Cover

A complete design covers sixteen dimensions, and the ones people skip are always the same: failure modes, cost, RPO and RTO, and who operates it. Going through the list explicitly turns "we did not think about that" into "we decided that, and here is the reason" — which is the only difference that matters six months later.

Key features

  • The Well-Architected Framework's six pillars — operational excellence, security, reliability, performance efficiency, cost optimization and sustainability — map onto these dimensions and are the standard AWS review lens
  • Operational ownership is a design decision: a system with no named owner has its reliability decided by whoever is available
  • RPO and RTO are numbers agreed with the business, not properties discovered from the backup configuration
  • Cost belongs in the design because architecture dominates it — NAT, cross-AZ traffic, data transfer and logging volume are design choices
  • Observability is designed alongside the system: a signal nobody emits cannot be added during the incident that needs it
  • Naming the trade-off and what would change it is what makes a design reviewable rather than merely readable

Each dimension, the question, and the answer that is too vague

Each dimension, the question, and the answer that is too vague
DimensionThe questionNot an answer
RequirementsWhat must be true, and what may be approximate?"It should be fast and reliable"
ScaleHow many, how big, growing how fast?"It needs to scale"
APIWhich operations block a user?A list of endpoints with no criticality
Data modelWhat are the access patterns, most frequent first?"We will use Postgres"
Network topologyWhich subnets, which egress path, which endpoints?"It runs in a VPC"
IAMWhich roles, with which permissions, and where are the boundaries?"Least privilege"
ComputeWhy this, and why not the two alternatives?"Containers"
DatabaseWhy this engine and this instance class?"It is what we know"
CacheWhat is cached, for how long, and what a miss costs"We will add Redis"
QueueWhat is it absorbing, and what does a backlog mean?"It is asynchronous"
Failure modesFor each dependency: timeout, retries, user impact"It retries"
ObservabilityWhich signals, and which alarm?"CloudWatch"
CostWhat are the top three drivers?A monthly total with no breakdown
SecurityClassification, encryption, access, audit"Everything is encrypted"
RPO / RTOAgreed numbers, and when they were last tested"We take backups"
Operational ownershipWhich team, on call, with which runbook?"The platform team"
Sixteen dimensions, in four groups

What it must do

Requirements

functional and non-functional, separated

Scale

rates, sizes, growth, read:write

API

operations, and which block a user

Data model

access patterns before storage

What it is built from

Network topology

VPC, subnets, egress, endpoints

IAM

roles, boundaries, least privilege

Compute

and why not the alternatives

Cache and queue

what each absorbs, and what it must not own

What happens when it breaks

Failure modes

per dependency: timeout, retry bound, user impact

Observability

metrics, logs, traces, correlation ids

RPO and RTO

agreed numbers, then tested

Security

data classification, encryption, audit

What it costs to keep

Cost

the drivers, not the total

Operational ownership

a named team, on call

Deployment and rollback

including migrations

The trade-off

and what would change it

  • What it must do
    • Requirements — functional and non-functional, separated
    • Scale — rates, sizes, growth, read:write
    • API — operations, and which block a user
    • Data model — access patterns before storage
  • What it is built from
    • Network topology — VPC, subnets, egress, endpoints
    • IAM — roles, boundaries, least privilege
    • Compute — and why not the alternatives
    • Cache and queue — what each absorbs, and what it must not own
  • What happens when it breaks
    • Failure modes — per dependency: timeout, retry bound, user impact
    • Observability — metrics, logs, traces, correlation ids
    • RPO and RTO — agreed numbers, then tested
    • Security — data classification, encryption, audit
  • What it costs to keep
    • Cost — the drivers, not the total
    • Operational ownership — a named team, on call
    • Deployment and rollback — including migrations
    • The trade-off — and what would change it

Signature

requirements · scale · API · data model · network · IAM · compute · database · cache · queue · failure · observability · cost · security · RPO/RTO · ownership

Sixteen dimensions, and the four most often silent are failure modes, cost drivers, RPO and RTO, and operational ownership. Answer each with something that could be wrong — a number, a named driver, an agreed target, a named team — and finish by stating the trade-off you made and what would change it.

Remember

  • State the consistency allowance in the requirements: it is what authorises every cache in the design and bounds how stale each one may be.
  • A design you cannot perturb — change one requirement and watch the services change — was recalled rather than derived.
  • Payments, multi-tenancy and real-time semantics are hard at ten users; shorteners, analytics and media pipelines are not hard until the volume arrives.
  • Answer each dimension with something that could be false. "Cost-optimised" cannot be wrong, so it cannot be reviewed.

Pro tip

  • Four questions find most gaps in a thorough design: what happens when this dependency takes nine seconds, what are the top three cost drivers, what is the RPO and who agreed it, and who is on call on a Sunday.
  • Put tenant identity in the partition key, every query, every IAM condition and every resource tag from the first table. Retrofitting multi-tenancy is a migration plus an audit of every access path.

Next up

  • AWS Well-Architected Framework
  • Cloud Architecture Patterns
  • API Reliability and Idempotency on AWS

Sources

  • AWS Well-Architected Framework — Definitions — docs.aws.amazon.com/wellarchitected/latest/framework/definitions.html
  • Making retries safe with idempotent APIs — aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/
  • Checked against official AWS documentation 2026-09-04

Spotted a mistake on this page? Tell us.