When working on the next version of a piece of software, just getting version 2 to do half the things version 1 did is a major milestone, because programs have so much “foundation” code that has to be working in order for the useful code to actual perform. Foundation code works much like the concrete foundation of a house, you need to have the foundation in order to build the house, but no one says, “I have a house with a foundation,” because the foundation is taken for granted.
Most foundation code consists of mundane activities such as reading and writing files from the hard drive. Foundation code tends to be a little messy because it has to check for all kind of possible errors like if the hard drive is full or if a file doesn’t exist. Foundation code writing isn’t much fun, because it doesn’t directly impact the user. Features of a program that make it attractive to users, like spell check, use a lot of foundation code even though the user is never aware of it.