Hofstadter's law

From Wikipedia, the free encyclopedia

Hofstadter's Law states that:

It always takes longer than you expect, even when you take into account Hofstadter's Law.

This self-referencing adage was coined by Douglas Hofstadter in his 1979 magnum opus Gödel, Escher, Bach: An Eternal Golden Braid [1]. It is often cited among programmers, especially in discussions of techniques to improve productivity, such as The Mythical Man-Month or Extreme Programming. Behind its whimsical façade, Hofstadter's Law is a profound statement of the difficulty of accurately estimating the amount of time it will take to complete tasks of any substantial complexity.

Note that Hofstadter's Law is recursive in nature (i.e., it calls itself by reference) and never bottoms out to a trivial case. That is, even after you have taken Hofstadter's Law into account, by Hofstadter's Law you must still take Hofstadter's Law into account, and this remains true no matter how many times you have already applied Hofstadter's Law. It is therefore impossible to ever fully take Hofstadter's Law into account, at least in finite time, unless one has a rudimentary understanding of calculus. While some recursive functions converge on an approximate solution (e.g., x/2 approaches zero when its output is repeatedly fed back into it), anyone who has attempted to manage a software project can testify that this does not seem to be true of Hofstadter's Law; if anything, estimates that take Hofstadter's Law into account even partially seem to have an infinite, or at least very large, upper bound. Thus, Hofstadter's Law implies that it is not merely difficult to estimate a project—it is potentially infinitely difficult (finite difficulty, as in the solution to Zeno's Paradox, requires that the extra difficulty decrease quickly enough for the recursive series to converge to a finite value in finite time).

To make a long story short, any task which can be completed can be subject to Hofstadter's Law, however the function formed by application of the law must converge.

A (somewhat joking) rule of thumb introduced by Hofstadter for calculating an approximate time is to double the number and step up to the next higher units. For example, a job estimated at 1 hour can be accomplished in 2 days, while a 3-month project will take you 6 years.

[edit] Reference

[edit] See also

In other languages