Start a project
AWS

How to build a cost-efficient AWS architecture from day one

The decisions taken in the first fortnight determine most of what you will pay in year two.

Author JANNEX Engineering
Published 16 July 2026
Updated 6 August 2026
Reading time 7 minutes
Key takeaway

Cost is an architectural property. Choose the compute model per workload shape, keep data movement short, tier storage from the beginning, and make spend attributable on the first day — retrofitting attribution is the expensive version.

Match the compute model to the workload shape

There is no generally cheapest option, only a cheapest option per shape.

  • Spiky, event-driven, idle much of the time — serverless functions. Nothing at rest, and no capacity planning.
  • Steady, long-running, predictable — containers on right-sized instances, then a commitment against that baseline.
  • Interruption-tolerant batch — Spot capacity, usually the largest single reduction available.
  • Sustained high throughput — dedicated instances on a current-generation family, where per-request serverless pricing stops making sense.

Mixing these deliberately within one system is normal and correct. Applying one model to everything is how estates become expensive.

Respect data gravity

Compute is elastic; data is not. Moving data costs money and time, so design so that it moves as little as possible.

  • Keep services that talk constantly in the same availability zone unless resilience genuinely requires otherwise
  • Use VPC endpoints rather than routing service traffic through a NAT gateway
  • Put a CDN in front of anything served repeatedly to the public internet
  • Process data where it lives rather than pulling it to a central service to filter

Tier storage before you have any

Lifecycle rules cost nothing to write on day one and are tedious to apply retroactively to millions of objects. Decide at design time how long each class of data stays hot, when it moves to cheaper storage, and when it expires. Set log retention explicitly — the default of indefinite is a decision, and rarely the one intended.

Make spend attributable on day one

A tagging standard applied from the first resource — environment, service, owner, cost centre — is what makes every later conversation possible. Enforce it in infrastructure code and with tag policies, so untagged resources cannot be created rather than being cleaned up quarterly.

Separate accounts per environment reinforce this and make the boundary a hard one for security as well as for cost.

Build the feedback loop with the system

Budgets, anomaly detection and a cost dashboard alongside the operational one, from the start. The point is not the alert; it is that an unexpected number reaches someone in days rather than at the end of the month, while the change that caused it is still fresh.

One useful discipline: include an estimated monthly cost in the design document for any significant new component. It takes ten minutes and it changes designs.

Related capability

Cloud & AWS

Cloud infrastructure should scale with the business — not outrun its budget, and not require the person who built it to be reachable at 2am.

Cloud & AWS
Next

Working on this problem?

The conversation is usually more useful than the article. Tell us the constraint you are working against.

Or write to connect@jannex.in