A box labelled “PostgreSQL” is not a budget. It says almost nothing about the instance, storage, redundancy or traffic you are going to pay for. Yet architecture conversations often end before anyone fills in those blanks.
is the practice of making a design's resource assumptions and likely costs visible while the architecture is still easy to change.
That is why I put a cost view in Codelit. The useful part is not a precise-looking total. It is making someone ask, “What did we assume to get that number?”
What does Codelit's estimator actually do?
Codelit's architecture estimator matches a node's label and type against a cost table, returns an indicative service and monthly amount, then totals the architecture. The implementation is intentionally small. It gives a design conversation a starting point without pretending the diagram specifies a deployment.
The current code follows this shape:
There are mappings for databases, caches, queues, compute, storage and other common node types. An unmatched label falls back to its node type. The cost view then shows the total and a breakdown.
That description matters because the previous version of this article went further than the implementation: it described a weekly AWS pricing feed, traffic tiers, reserved-pricing controls and topology-aware transfer calculations. Those are not supported by the current estimator code. They should not have been presented as shipped behavior.
The same boundary applies to infrastructure export. Turning a diagram into a useful starting point is not the same as producing a deployment that needs no engineering review.
Which assumptions does a diagram leave out?
A diagram leaves out most of the inputs that determine an actual cloud bill. Labels describe responsibilities, not resource consumption. Before using an estimate for a budget, name the configuration and workload assumptions that could change its largest line items.
| Diagram label | What it tells you | What it does not tell you |
|---|---|---|
| PostgreSQL | Relational storage is needed | Engine version, region, instance, storage, IOPS, backups, availability |
| API service | A compute boundary exists | CPU time, memory, concurrency, minimum replicas |
| Redis | A cache or data structure service is intended | Working set, eviction policy, persistence, replica count |
| Queue | Work is asynchronous | Message size, throughput, retention, consumer capacity |
| Edge between regions | Data crosses a boundary | Monthly bytes, transfer direction and service-specific exemptions |
| Payment provider | A third party is involved | Transaction volume, fee agreement, refunds and disputes |
A highly connected database is not automatically a heavily loaded database. Ten low-volume services can generate less traffic than one busy worker. Connection count can prompt a question; it should not masquerade as a sizing measurement.
This is the judgement gap behind learning system design: knowing the component name is easier than knowing what requirement justifies its configuration.
How do you turn one rough number into a useful range?
Build a range by varying explicit workload assumptions while keeping the service configuration visible. Separate the capacity you keep running from the usage you expect to consume. Low, expected and high scenarios are useful only if someone can explain what changes between them.
I would write the worksheet like this:
| Cost group | Low scenario | Expected scenario | High scenario |
|---|---|---|---|
| Compute | Minimum replicas and measured request work | Expected concurrency | Peak concurrency plus headroom |
| Database | Current data and query volume | Growth and recovery requirements | Peak queries and retained data |
| Storage | Current bytes and retention | Forecast bytes | Longer retention or faster growth |
| Networking | Measured bytes per operation | Expected operations | Peak traffic and replication |
| Third parties | Minimum useful workload | Expected completed transactions | Heavy use, retries and failures |
Daily active users are not a substitute for these inputs. Two applications with the same user count can have very different storage and compute requirements.
For a simple illustrative calculation, a resource assumed to cost $0.20 per hour contributes $146 in a 730-hour planning month. Two continuously running copies contribute $292 before storage, networking or tax. The rate is invented; the point is to make the multiplier visible.
Which cloud charges deserve a separate review?
Networking, storage performance, retention and managed-service add-ons deserve a separate pass because a high-level diagram rarely makes them explicit. Review the path and configuration before assigning a rate. Otherwise an estimator can invent charges as easily as it can omit them.
Cross-AZ traffic is a good example. Charging depends on the services and endpoints involved; replication and load-balancer paths can follow different rules. Do not multiply every arrow by one generic “cross-AZ” price. Use the relevant EC2 transfer pricing and RDS pricing documentation for the actual path.
The cost table also assigns zero to some external or payment nodes because their usage is unknown. Zero in that calculation does not mean free. It means the architecture total is incomplete until you add those charges.
Chaos exercises on a diagram are useful here: they make the consequence of removing a replica visible. They do not replace a recovery test against the deployed system.
Does a small application need Kubernetes?
A small application does not need Kubernetes merely because it uses containers. The choice should follow operational requirements, team experience and portability needs. Compare the complete deployment and the work to maintain it, rather than treating the control-plane fee as the whole decision.
On September 7, 2026, AWS lists EKS standard Kubernetes support at $0.10 per cluster-hour, or $73 using 730 hours. Extended support is $0.60 per cluster-hour. Worker resources and optional features are additional charges.
AWS's ECS pricing page distinguishes the EC2 launch type, which has no additional ECS charge, from other capabilities that can have their own fees. “ECS is free” is too broad to be useful.
The question I would ask is: what Kubernetes capability does this application need, and who will own it? If there is a clear answer, price it. If there is not, compare a simpler container deployment before adding the cluster.
When do commitments and discounts belong in the budget?
Commitment discounts belong in the budget after you understand the baseline capacity you expect to keep. Price the on-demand design first, then evaluate the term, coverage and flexibility of a commitment. A discount on capacity you stop needing is not automatically a saving.
I would keep the following decisions separate:
- Right-sizing: how much capacity does the workload need?
- Availability: how much must remain when something fails?
- Purchasing: which usage can the business confidently commit to?
Combining all three into a single “optimised” total hides the trade-offs. The patterns behind reference architectures help with the first two. Purchasing terms require their own review.
What should leave the design review?
The design review should end with a cost range, a short assumptions list and an owner for the largest unknown. That is a stronger result than an exact-looking total with no region, workload or recovery requirement attached.
Use Codelit's estimate to ask the first questions. Use the AWS Pricing Calculator when the configuration is concrete. After launch, compare the actual bill and workload with the assumptions that produced the estimate.
The outcome I want is straightforward: see the expensive decision while changing it is still a discussion, not a migration.
Questions people actually ask
- How does Codelit estimate an architecture's cost?
- The architecture estimator matches each node's label and type to a maintained table of indicative monthly costs. It sums those values and groups them into a breakdown. This is a design-time heuristic, not a live AWS quote or a forecast of an account's bill.
- Does a diagram contain enough information for an accurate AWS quote?
- Usually not. A database label does not specify its region, instance size, storage, availability setup or traffic. A useful first estimate exposes those missing assumptions. A deployment budget needs concrete configurations and current vendor prices, followed by measurements after launch.
- Is ECS always cheaper than EKS?
- No. Compare the full configuration, including compute, networking, support tier and operating effort. EKS has a cluster fee in addition to worker resources. ECS has no additional charge for its EC2 launch type, but other ECS features and the underlying resources can carry charges.
- How should I budget for cross-AZ data transfer?
- Identify the services at both ends, the direction of traffic, placement and monthly bytes, then check the relevant pricing rules. Some paths are charged and others are exempt. A line between two availability zones is not enough information to assign a universal rate.
- When should I use the AWS Pricing Calculator?
- Use it when a design is concrete enough to name services, regions, capacity and traffic. A diagram estimate helps compare options earlier. The vendor calculator helps price the selected configuration, but its accuracy still depends on the workload assumptions you enter.