better over time while generations of computer hardware decay into obsolescence.
This fundamental difference in the two media has led to different customer
expectations, business models, and engineering development processes. Since a
hardware product is not going to get any better over time, customers expect it to
be basically bug-free when it arrives. If it’s not working properly, the assumption is
there had to have been a ﬂaw in manufacturing of this particular item, and so it
should be returned and replaced. If too many customers return products, the
company loses money.
Customers are considerably more forgiving for software, assuming if there are
problems when software is installed, they just need to get the latest version of it,
presumably with their bugs fixed. Moreover, they expect to get notices about and
install improved versions of the software over the lifetime that they use it, perhaps
even submitting bug reports to help developers fix their code. They may even have
to pay an annual maintenance fee for this privilege!
Just as novelists fondly hope that their brainchild will be read long enough to be
labeled a classic—which for books is 100 years!—software engineers should hope
their creations would also be long-lasting. Of course, software has the advantage
over books of being able to be improved over time. In fact, a long software life
often means that others maintain and enhance it, letting the creators of original
code off the hook.