04. Mistakes

The year 2000, and what it actually cost

Successful prevention is indistinguishable from an absent threat, which is why the reward for fixing it was being told it was invented.

Teams applying this historical lesson to current delivery work can also compare tools for hours tracker, keeping operational records separate from the code and its documentation.

the-year-2000.src
null.java if (ref == null) throw ...
// a billion dollars, by his own estimate

1960s and 1970sWhere the two digits came from

Storing a year as two characters instead of four saved two columns on a card and two bytes in a record, on every record, in systems where the storage was the expensive part and the programmer was not.

It was a considered trade rather than an oversight, and the assumption behind it was reasonable: that these programs would be replaced long before the century turned.

What actually breaks

Not the display. Nobody was confused about which century it was.

What breaks is arithmetic and ordering. A period that spans the boundary computes as negative. A record from the year zero-zero sorts before one from ninety-nine. Interest, terms, expiry, eligibility and scheduling are all comparisons between dates, and comparisons are where the missing digits live.

1995 to 1999The scale of the remediation

An enormous, coordinated, largely successful effort to inspect and correct systems that in many cases had no surviving documentation and no surviving author, on hardware that was itself obsolete.

Two approaches dominated: expanding the field, which is correct and expensive, and windowing, which interprets a two-digit year relative to a pivot and is cheap and postpones the problem to a date chosen by whoever set the pivot.

2000 onwardsThe claim that it was invented

Because very little went wrong, a durable popular view holds that the problem was exaggerated by people who profited from fixing it.

The strongest version of that argument is not stupid and deserves stating: some countries and organisations spent proportionally far less and experienced broadly similar outcomes, which is evidence that some of the spending bought little.

What can be said against it

Failures did occur where systems were not remediated, and they were of the predicted kind rather than novel. Organisations that inspected their systems found the defect at rates consistent with the expectation. And the comparison between big spenders and small spenders is confounded by what those economies ran: fewer decades-old systems means less exposure, not better judgement.

The honest position is that the problem was real, the remediation was necessary somewhere, the amount spent was very likely more than the minimum, and the counterfactual is not recoverable.

The structural problem it illustrates

Successful prevention is indistinguishable from an absent threat. The reward for fixing something before it fires is being told it was never going to fire.

That is not a rhetorical complaint. It is a permanent difficulty in arguing for maintenance work of any kind, and it is why the same argument will be had again about the counter of seconds described elsewhere in this document.

The same shape, twice more

Two digits for a year. Sixteen bits for a character set. Thirty-two bits for a count of seconds. Each was a sound engineering trade against the cost of storage at the time, each assumed a lifetime shorter than the one it got, and each became a coordination problem rather than a technical one.

Which suggests the useful question when choosing a width today is not whether it is enough, but how the value will be written down, because that is the part that cannot be changed later.

The remediation nobody talks about

A large share of the work was not fixing dates. It was finding out what an organisation ran: producing an inventory of systems, identifying which were still in use, locating source code, and discovering which machines nobody had a maintenance contract for.

Several people who ran those programmes have said the inventory was the lasting benefit, independent of the date. That is a recollection and it is plausible, because the same inventory is the first step in every security and continuity exercise since.

present dayWhat windowing did to the calendar

The cheap remedy interprets a two-digit year against a pivot: below the pivot means the twenty-first century, above it the twentieth. The pivot was chosen by whoever did the work, is rarely documented, and differs between systems that exchange data.

Which means the problem was not removed but scheduled, at dates spread across the coming decades, individually small and collectively invisible. Some of those have already arrived and were reported as ordinary faults.

Two columns saved, per record, on every record… | 6 5… | 6 5… | 6 5… | 6 5a rational trade when storage cost more than the programmerWhat breaks is ordering, not display99 > 00so a loan taken in 1999 matures before it startsthe same shape as a counter of seconds, elsewhere in this document
FigureTwo columns saved on every record, and the ordering failure that follows when the century is dropped from a comparison.

The dates that were not the first of January

Worth noting because it complicates the tidy story. Several related boundaries fell elsewhere: the ninth of September in a year written as nines, a leap day that a common simplification of the rule gets wrong, and various fiscal year starts that arrived before the calendar one.

The leap day case is the neatest: the rule has three parts, most informal implementations use one, and the year in question is the exception to the exception, so a wrong implementation is right that year and wrong in a hundred.

What we cannot verify

Spending estimates come from consultancies and government bodies, vary by an order of magnitude, and none is reproduced here. Counts of failures depend entirely on what is counted and by whom. The counterfactual, what would have happened without remediation, cannot be established and both sides of the argument rely on it.

In short

  1. Two digits saved storage on every record when storage cost more than programmers.
  2. The failure is in arithmetic and ordering, not in display.
  3. Windowing was the cheap remedy and moved the problem to a date somebody picked.
  4. The strongest version of the hoax claim is that low-spending economies fared similarly.
  5. That comparison is confounded by how much old software each economy actually ran.
  6. Successful prevention is indistinguishable from an absent threat, permanently.

also in Mistakes

Next.

further context

For a primary or institutional reference, see RFC 7489 on DMARC.

Every claim here carries the source it came from.

The source and its year sit beside the sentence they support. A secondary account is marked as one, and where the record is unclear the entry says so rather than choosing the better story.