While many people are quick to point fingers about who is responsible for this bug, it is a combination of inadequate specifications, short-sighted programmers, and large businesses intent on cutting corners in order to save money.
The Y2K bug is first a planning problem, as many designers in the past thought that the problem was far enough away that it didn't have to be dealt with. In the past, when computers were composed of vacuum tubes that filled entire rooms, rather than silicon chips that could fit in someone's hand, memory was at a premium. Many computers had very limited memory at the time, and many programmers only represented the year with two digits in order to conserve memory. The Gartner Group, a consultancy in Connecticut, estimates that the cost of one megabyte of magnetic disk storage (enough for a solid novel) in 1965 was $761, compared with 75 cents today and perhaps 34 cents in 2000. The two-digit date thus bought productivity gains for which the bill is now arriving.
Any two digit dates in here?
Unfortunately, large corporations will often use any means to save money, and this includes reusing old code to avoid writing new code. Even though memory has since become cheap and plentiful, many companies use old code and programming languages that have long since been declared dead and abandoned by their distributors so that they can avoid having to expend the resources to rewrite any section of code in a different language. This has the effect of carrying bugs, including the Y2K problem, over from the old code into newly written code. "In the late 1970s, when I programmed for a living," recalls Tim Bresnahan, an economics professor at Stanford University, "no one realized that systems would be upgraded and enhanced, not replaced. It has been a big surprise to discover how long software lives."
The problem is compounded by the fact that much of the code in production today was written with a slew of now-archaic lines of code, which are poorly documented and incomprehensible to all but the most talented programmers. Also, for many programs running today, the source code was lost long ago. Many companies run only compiled executables, and have no real incentive to maintain their source code. As a result, in order to make a program Y2K compliant, it is first necessary to perform the arduous task of decompiling the given programs, so that they can then be examined and adjusted in source form.
Finally, improperly named variables can also play a part in the problem. Variables are computer programming constructs that represent areas of storage within a computer's memory. Every variable has a value, and it also has a name so that the programmer can access that value. A variable designed to hold the date as a value can be named "date," or it could be named "baseball." Programming languages allow for an arbitrary naming of variables, and many programmers choose variable names which are not descriptive enough to give any indication of what they might hold. As a result, it is necessary that a programmer wishing to make a program Y2K compliant must painstakingly examine each line of code, and determine where, if anywhere, an errant date could disrupt the program.