The Iron Triangle is a classic model of constraints. According to the model, there are Quality, Time, and Cost. Pick one, at most two. But what if this model is inherently misleading?
Round 1 Link to heading
Choose Cost Link to heading
When selecting for cost, we sacrifice quality and time. Release is delayed in terms of absolute time, and is further delayed by bugs. In terms of ROI, loss occurs due to missed contracts and churn.
Choose Time Link to heading
When selecting for time, we sacrifice quality and cost. Bugs occur, but release happens quicker, allowing for time to fix them. In terms of ROI, loss occurs due to churn before bugs are fixed, and development is more expensive.
Choose Quality. Link to heading
When selecting for quality, time and cost are sacrificed. Release is delayed. ROI is lost to missed contracts and more expensive development.
OK, so? Link to heading
So up until this point, there is nothing groundbreaking. Selecting for time may be a dominant strategy, since early feedback can result in fewer bugs, quicker revenue, and funding.
Round 1, but choose two Link to heading
Sacrifice Cost Link to heading
Sacrificing cost, we have rapid development at high quality. Development is significantly more expensive, but customer feedback begins early, and customers are not deterred by bugs.
Sacrifice Time Link to heading
Sacrificing time, we have extremely slow development, but cheaply and without bugs. Development cost is minimal, but contracts are lost due to speed, and customer feedback is delayed significantly, which adds existential risk.
Sacrifice Quality Link to heading
Sacrificing quality, we have rapid development on the cheap (this is a dominant strategy using AI). Development cost is low, and feedback is reached early.
OK, so? You haven’t made a point yet. Link to heading
I’m getting to it. As you can see, sacrificing quality looks optimal - you reach more revenue substantially faster.
Round Two+ - Lying in the bed you made Link to heading
Development is an ongoing process though. Once built, it must be maintained.
If you sacrificed Cost Link to heading
Now, you have a high quality codebase put together quickly. Your situation is quite good - you’ve pushed to revenue early, and have breathing room to continue iterating quickly.
If you sacrificed Time Link to heading
In this situation, you’re about baseline. Revenue is delayed, so you’re constrained in choosing Time again, as further delays may cost you the company.
If you sacrificed Quality Link to heading
You are in a bad situation. Quality compromises will prevent you from moving quickly. They will also prevent you from developing cheaply. You’re forced into a situation where you must pivot towards writing better code more expensively, for no marginal benefit. This is in essence what tech debt is - an inevitable repayment of previous compromises, until you can move swiftly and cheaply again.
The Point Link to heading
The iron triangle is a false dilemma. In essence, there is only one choice - quality, unless the code is thrown away. Early investments in quality pay off in preventing cost and speed degradation. Time compromises are neutral benefit - you have advantages and disadvantages. Selecting for low cost is systemically risky on multiple fronts.
Therefore, as much as possible, prioritize quality as quickly as possible, and avoid overly selecting for cost. Systemic over-focus on cost adds risk over time.