The parent note leans on a little expected-value formula and a handful of words — probability, cost, carry, abstraction, speculation. This page builds every one of those from nothing, so line one requires no prior software or maths knowledge. If you can read a shopping receipt, you can read this.
Before any maths, we need the object the whole topic argues about.
Picture a program as a box. Each feature is a small extra gadget bolted onto the box. Some gadgets are used every day; some are bolted on "for later" and gather dust.
Now our first mathematical symbol. We use it because "the future is uncertain" is vague — we want a dial for how uncertain.
Why a number and not just words? Because we are about to compare the value of building-now against waiting, and you cannot compare "probably" against "expensive" — you can compare 0.1 against a cost. The number lets us do arithmetic.
The picture: a slider from a definitely-not (left) to a definitely-yes (right). Speculative software features sit far to the left — requirements drift, so most guesses are wrong.
"Cost" here is not just money — it is total effort/time/risk, measured in the same units so we can add and compare them. Think of every cost as a pile of coins.
The picture: Cbuild is a one-time payment; the carry is a stack of small daily bars, and its total areacday⋅H grows the longer the horizon.
We now have a chance (p), costs, and a horizon. But a decision is a comparison of two options, so we must write down both — not just building.
Why multiply? Imagine flipping a coin for $10. Half the time you win $10, half the time $0. Over many flips your average win is 0.5 \times \10 = $5$. Multiplying probability by reward is exactly "average over all the times you play". That is the only tool that lets an uncertain future reward be weighed against a certain present cost.
Recall Are you ready for the parent topic? (cover the answers)
What is a "feature" in one line? ::: A buildable/skippable chunk of program behaviour.
Difference between speculative and present requirement? ::: Present = a real current demand asks for it; speculative = only a guess about the future asks for it.
What does p measure and what range does it live in? ::: The probability the guessed future actually arrives, a number from 0 to 1.
What is Ccarry and which two numbers make it? ::: The total cost of keeping code alive, equal to the per-day cost times the horizon: cday⋅H.
Why does the horizon H matter? ::: A daily cost is meaningless until you say how many days you carry the code; a long horizon makes carry ruinous.
Why can Clater be smaller than Cbuild? ::: Later you know the real requirement, so you build the right shape with no wrong-guess rework.
What exactly is S, and why is S≤Clater? ::: The future spending you avoid by pre-building (later build plus dodged rework); it never exceeds Clater because part of a guessed design is usually the wrong shape.
What is the waiting baseline (why isn't it zero)? ::: If you wait, with chance p you still build later, so E[wait]=pClater, not 0.
State the honest two-option build-now condition. ::: p(S+Clater)>Cbuild+Ccarry.
How does discounting (time value of money) tilt the decision? ::: Future benefits S and Clater are worth less in today's terms, pushing the choice further toward "wait".
When does the Rule of Three say to add an abstraction? ::: On the third real occurrence, not the first or second.
Does YAGNI tell you to skip input validation on today's endpoint? ::: No — that's a present requirement, not speculation.