Cost before code
Why we build the cost model before we write the stack — and how pricing as a design input quietly changes the architecture you end up with.
Cost before code
There's a predictable arc to cloud spend on a project that didn't model it up front. The first month's bill is small and nobody looks. The architecture grows. Six months in, someone in finance circles a number and asks what it is, and the engineering team discovers that a design decision made casually at the start — a chatty service, a managed feature switched on without thinking, a data-transfer pattern nobody priced — is now responsible for most of the bill and is welded into the architecture. The optimization project that follows recovers some of it, expensively, and learns the lesson that should have been learned at design time.
We build the cost model before the code. Not as a finance exercise after the fact — as a design input, on the same footing as latency, security, and reliability. It's one of the least glamorous things we do and one of the highest-leverage.
Pricing changes the design, not just the budget
The reason to model cost early isn't to produce a more accurate forecast, though it does that. It's that knowing the cost changes what you build.
When you price the architecture while it's still a set of decisions, the expensive patterns reveal themselves before they're load-bearing. The managed service that costs ten times the self-managed one for your access pattern. The design that fans out a request into a hundred downstream calls. The cross-region data transfer that's invisible in a diagram and enormous on an invoice. Each of these is cheap to avoid at the whiteboard and painful to remove from production. Cost modeling is how you see them while they're still cheap to avoid.
This is why "cost optimization" as a separate, later phase is usually a sign that the cost work happened too late. By the time you're optimizing, the structural decisions are made, and you're left tuning around the edges of an architecture that committed to its expensive shape months ago. The big savings live in decisions, and decisions happen early.
What the model actually is
A cost model doesn't need to be elaborate to be useful. It needs to be honest about the workload. What's the request volume, realistically, at launch and at the scale you're building for? Where does the data live, how much of it moves, and across which boundaries? Which components are always-on and which can scale to zero? What's the dominant cost driver — and is it compute, storage, transfer, or a managed service's per-unit pricing?
Answer those while the architecture is still a draft and you'll find the model talks back. It tells you that the elegant design is a yacht and the boring one is a rowboat that does the same job. It tells you which managed service genuinely pays its way and which is a convenience you're renting at a premium. It turns "what will this cost" from a question you dread into a number you designed toward.
Managed services where they pay their way
We use managed services heavily — but the operative phrase is "where they pay their way." A managed service trades money for operational burden, and that's frequently the right trade: not running your own database is worth a lot. But it's a trade, and the only way to know if it's a good one for your workload is to have priced it. Without a cost model, "use managed services" is a slogan. With one, it's a decision you can defend, service by service.
The honest version of the bill
Modeling cost before code also means we can tell you something most firms won't: roughly what this will cost to run, before you've committed to building it. Not a precise number — anyone who gives you a precise number for a system that doesn't exist is guessing with confidence. But a defensible range, with the dominant drivers named, while you can still change the answer. That's the version of the conversation that respects your budget, because it happens when the budget can still shape the architecture rather than just absorb it.
Build the model first. The code that follows will be cheaper to run, and you'll have chosen that on purpose.
Want to know what it'll cost before you build it? Start a conversation.