clement13.net
Original photo: Un petit ordinateur d'échecs électronique en pleine partie, pièces blanches et noires sur l'échiquier.
Description
Un petit ordinateur d'échecs électronique en pleine partie, pièces blanches et noires sur l'échiquier.
Source
Dezidor · original page
Licence
PD Public domain
Original photo, unretouched. The background is a version of it stylised by the site.

Hofstadter’s Law

Even when we know delays are natural and we build in buffer, we still end up late.

Empirical law≈ 10 min readCheckedCheck doneFacts, figures and references were checked against the sources cited in the page.Written with AI assistance; sources are cited at the bottom of the page. An error? Report it via clement13.net.Reading
FrequencyFrequentSeveral times per project.
Where you meet it
  • Costing
  • Release planning
  • Project planning
  • IT
AI helpPartialIt helps, but it falls into the trap too. See how ↓
In brief
  • What : a complex task always takes longer than expected, even if this rule has been taken into account.
  • Why : self-reference: the correction we apply is itself estimated with the same optimism as the original estimate.
  • Detect : “we already added buffer,” and yet the delay still happens.
  • Avoid : adjust using your data, not your impression; break work down, deliver early, and revise estimates along the way.
On this page

Definition#

Avatar of Douglas HofstadterFictitious illustration
Douglas HofstadterAmericanborn February 15, 1945Cognitive scientist, author of Gödel, Escher, Bach

Hofstadter’s law is stated as follows: “It always takes longer than expected, even when taking Hofstadter’s law into account.” It is due to Douglas Hofstadter, who formulated it in Gödel, Escher, Bach: an Eternal Golden Braid (1979), regarding predictions of when a computer would defeat the best human chess players.

It is an empirical, intentionally paradoxical adage, not a cognitive bias in the strict sense nor a proven scientific law. Its strength is its self-reference: it is true because it applies to itself. It reminds us that we cannot solve the problem by adding an “intuitive” buffer, since the intuition setting that buffer is the same one that got it wrong in the first place. It is close to The Planning Fallacy, whose persistent effect it describes, and to Unrealistic optimism, of which it describes one of the drivers.

The mechanism#

No experiment has “proven” the law; however, we can explain why it is often observed:

  • Recursion of optimism : we adjust our estimate (“let’s add 20%”), but the adjustment is itself decided with the same optimism that produced the estimate. The correction remains too small.
  • Unexpected issues cannot be imagined in advance : we add buffer for known risks, not for those we cannot yet see.
  • The distribution tail is heavy : a task’s actual duration is not symmetric around the average; a few very large overruns pull the average upward, and a buffer set for a “reasonable overrun” does not cover them.
  • Effect of the buffer itself : a known buffer may get consumed (Parkinson’s law: work expands to fill the available time), so it is gone by the end.
  • Misleading proportion : we estimate the visible part of a task; the final share of work (integration, testing, finishing) takes far more time than the beginning suggests. This is the “90-90 rule” attributed to Tom Cargill of Bell Labs: the first 90 percent of the code takes 90% of the time, and the last 10 percent takes the remaining 90%.
InitialestimateWe know we aretoo optimistic:we add bufferThe buffer is set“by intuition”therefore with the same optimismNew estimatestill too shortThe delay stillhappensExit: adjust using history(measured actual/estimated ratio)and revise along the waywe adjust again, by gutfeeldata
Each loop adds buffer, but that buffer is itself estimated with the same bias. Only a correction grounded in external data (history, reference class) breaks out of the loop.Hover over or tap an element to read its details.

Where you encounter it#

In project management#

  • Estimating : “I already added buffer”; the buffer itself is underestimated compared with historical data.
  • Release planning : the date is pushed back three times, each time by “two weeks,” never by what observed velocity indicates.
  • The last 10 percent : the project has been “almost done” for weeks; the ending (acceptance testing, fixes, production rollout) is what takes the most time.
  • Story-point estimation : velocity is calibrated on past sprints, but commitments are made using the best observed velocity, not the median.
  • External dependencies : we add buffer for our own work, not for waiting on a client decision or a third-party delivery.

In management#

  • Commitments to leadership : a date is given “with buffer,” it still has to be postponed, and trust erodes.
  • Transformation plans : the adoption time for a tool or method is revised upward at each milestone.
  • Delegation : you ask a team member “how much time they need,” add what you consider reasonable buffer, and are surprised by delay.
  • Hiring : the timeline “to find and onboard someone” gets longer whenever the time to true autonomy is not accounted for.

Famous cases#

Famous case

“In ten years, a computer will be world chess champion” 1957-1997#

Biases at play: Hofstadter’s law, persistent optimism in a technology forecast.

1957prediction by Herbert Simon and Allen Newell, published in 1958
“within ten years”announced timeframe
May 11, 1997Deep Blue defeats Garry Kasparov (3.5 to 2.5)
≈ 40 yearsactual timeframe

What happened. In November 1957, at an operations research conference, economist and computer scientist Herbert Simon, Nobel Prize in Economics winner in 1978, together with Allen Newell, put forward four predictions “to be achieved within ten years,” including this one: a computer will be world chess champion, unless the rules forbid it from competing. The text was published in 1958 in the journal Operations Research. Over the following decades, programs improved, and each time people announced the goal was close. It was not until May 1997 that an IBM computer, Deep Blue, defeated the reigning world champion, Garry Kasparov, 3.5 points to 2.5, after six games. Hofstadter, writing in 1979, specifically had these repeatedly postponed forecasts in mind when stating his law.

Time before a computer defeats the world championannounced: 10 years (1957)actual: about 40 years (1997)
1957 prediction (ten years) versus realization in 1997. The actual timeframe here is calculated from 1957 to 1997 (forty years).

What this illustrates

The authors were eminent, well-informed researchers who understood the difficulties. Even so, they underestimated duration by a factor of four, because of what they did not yet know: the complexity of the finish (playing at champion level) far exceeded that of the beginning (playing correctly). For your projects: the final quality, integration, or performance step is the one whose cost is hardest to predict. Never estimate it as a simple pro-rata of the rest.

Reference point

The 90-90 rule and Brooks’s law 1975-1985#

Biases at play: Hofstadter’s law (similar formulations drawn from software practice).

In The Mythical Man-Month (1975), Frederick Brooks, who led development of the System/360 operating system at IBM, observed that “all programmers are optimistic” and that adding people to a late project makes it later (“Brooks’s law”). Ten years later, Jon Bentley reported in Communications of the ACM (1985) the “90-90 rule,” which he attributed to Tom Cargill of Bell Labs: “The first 90 percent of the code accounts for the first 90 percent of development time; the remaining 10 percent accounts for the other 90 percent.”

What this illustrates

These two adages are practical professional wisdom, not laboratory results. They point in the same direction as Hofstadter’s law: the end of a project takes longer than the beginning, and brute-force correction works poorly. When you are late, adding people or buffer “by feel” does not solve the problem; reducing scope or delivering in stages does.

Detection signals#

  • “We already added buffer.” And we still overrun.
  • The date has been pushed back several times, each time by the same duration (“two more weeks”).
  • Progress has been “90%” for several weeks.
  • The buffer is backed by no data: “let’s take 20%,” “let’s double it.”
  • No one knows what overrun percentage the team had on its last three projects.
  • A task’s buffer is consumed right away (work expands), and delay accumulates at the end.

Avoidance reflexes#

  1. Adjust with data, not a rule of thumb. Calculate the actual/estimated ratio from your latest projects (median and 80th percentile) and apply it, instead of adding “a little buffer.”
  2. Revise estimates as you go. After each milestone, recalculate the finish based on observed velocity, not hoped-for velocity.
  3. Deliver early and in small chunks. A short batch is easier to estimate; delay becomes visible from the first batch rather than at the end.
  4. Estimate the ending separately. Reserve an explicit line item for integration, acceptance testing, bug fixing, and production rollout.
  5. Announce a range and a confidence level. “Between 10 and 16 weeks, 80% confidence” is better than a single date with invisible buffer applied.
  6. Reduce scope rather than quality. When delay appears, cut features, not acceptance testing or tests.
  7. Place buffer at the project level, not the task level. A global reserve managed by the lead is less likely to be consumed than hidden buffer in each task.

With AI: detect, fix, mitigate#

Estimated AI help: partial

AI can calculate real/estimated ratios from historical data without fatigue and recalculate an end date based on observed velocity. It cannot guess the unexpected events of a specific project, and its own duration estimates suffer from the same biases as its training data. Its main value is to instrument a correction method, not to replace judgment.

Detect#

  • Measure the past gap between estimate and actual based on an export of tickets or milestones.
  • Spot repeated postponements of the same date in a scheduling history.
  • Identify implicit margins in an estimate (applied overrun rate, hidden buffers).

Fix#

  • Recalculate a probabilistic end date based on actual velocity from recent sprints.
  • Suggest a range based on your history, with the associated confidence level.
  • List end-of-project tasks that are often forgotten for a given deliverable type.

Mitigate#

  • Produce automatic tracking of drift, reviewed at each milestone.
  • Alert when the date has been pushed back twice without a method change.
  • Compare multi-person estimates, using their spread rather than their average.

Prompts to integrate into your workflow#

1. Correct the estimate with historical data. Use with an export of your estimates and actual durations.

Here is the history of our past work packages (initial estimate, actual duration, package type): [table].
1. Calculate, for each package type, the actual duration / estimated duration ratio: minimum, median, 80<sup>th</sup> percentile, maximum.
2. Say which conclusions are reliable and which are based on too few packages.
3. For a new package estimated at [value], give the duration to announce for “a one-in-two chance” and for “four chances out of five.”
Do not invent any data: if the history is insufficient, say so.

2. Revise the date during the project. At each milestone, with the actually observed figures.

Situation: [remaining work in units], observed velocity over the last [N] sprints: [values], current delivery date: [date].
Calculate a likely end date with a range (optimistic, likely, pessimistic) based on <em>observed velocity</em>, not expected velocity.
Specify what would make this projection too optimistic (project closeout, external dependencies, fixes) and suggest three scope-reduction decisions to meet the date if it is mandatory.

How to integrate them#

  • During estimation: prompt 1 is used to correct an estimate with historical data before announcing it.
  • At each milestone: prompt 2 replaces “we'll catch up” with a quantified projection.
  • In retrospectives: keep the results to enrich the history: it's that history, not AI, that corrects the bias.

Precautions#

  • A history that is too short or biased (only completed projects) gives misleading corrections: include abandoned projects.
  • AI can produce incorrect calculations confidently: verify ratios on a sample.
  • Do not present an AI calculation to a client as a commitment: it's a decision aid.
  • Do not send histories containing confidential data to an unauthorized tool.

Limitations#

  • Hofstadter's law is not a cognitive bias in the strict sense: it's an empirical law, formulated with humor, that summarizes a common experience. It was not established through controlled experiments and has no quantified formulation.
  • It is unfalsifiable by design: for any estimate, whatever it is, one can say the law was already included. It is useful as a warning, not as a testable prediction.
  • It does not apply to every task: for repetitive, well-measured, low-uncertainty activity, estimates are often accurate. It targets complex and new tasks.
  • Not all projects run over: some finish early or on time; overruns, being more pronounced, are what pull the average.
  • The “90-90 rule” and “Brooks's law” are professional wisdom, useful but not proven in a lab.

Sources and verification#

See also#

Combines with, or reinforces#

These biases feed each other.

Variants or cousins: not to be confused.

  • Loi de Parkinson (concept or method, no page)
  • La règle des 90-90 (concept or method, no page)
  • Loi de Brooks (concept or method, no page)

What neutralises it.