Josh Crompton

Build-time versus run-time costs

You have two axes to manipulate: build-time costs and run-time costs.

The upper-right quadrant is the worst of all possible worlds. Most enterprise software lives here. The bigger and more dysfunctional the organisation, the more likely that they exist in this quadrant.

In an ideal world, all software companies would operate in the lower-left quadrant. Things get built fast, and they cost next to nothing to run. Developers are happy, and the business is profitable, in theory if not in practice.

But most businesses won't be in that zone. They'll either be optimising for build-time or run-time costs, not both.

If you choose to optimise for build-time costs, you'll build things faster, but your monthly running costs will be higher. If you choose to optimise for run-time costs, the opposite is true.

But engineering costs will almost always dominate running costs. A team of developers is going to be more expensive per-month than the hardware required to run almost anything they could build. So you should almost always aim to reduce build-time costs, even when it increases run-time costs substantially.

If you're a startup, it's tempting to optimise for run-time costs because every dollar you spend shortens your runway. But if you're still finding product-market fit, then you're better off optimising for build-time costs. Until you're profitable, the most important thing is to ship features quickly.

Optimising for build-time costs means choosing a boring technology stack, which is highly productive, but has higher run-time costs. Rails and Django are good examples of this strategy. You're going to pay significantly more for a managed RDBMS and a couple mid-size container runtimes than you might pay for some Lambdas and a DynamoDB table. But designing a good schema for DynamoDB, and migrating a bad or insufficient one, takes much more time than doing the same with a relational database.

When should you choose to optimise for run-time costs?

Only two circumstances come to mind: If you have a feature complete product and a fixed pool of customers and you want to increase profit. Or, if you already committed to the wrong strategy and re-writing the existing product would kill your business.