I was marveling at the mysticism of software dev yesterday when I stopped by to talk to our scrum master about some technical debt we've accumulated.

After talking to him, I realized something... Software is a product with a shelf life, but often times we forget to put the expiration date on the product.

In the Agile world, most things are done in the context of an iteration, leaving little time (unless planned) for re-architecture. We approach an ongoing software project as if it were immutable - unchangeable foundations, stale functionality, accumulation of technical debt <- all point to that. This whole web 2.0 thing (whatever that means) has us pumping out software on fragile foundations, proving that "the next big thing" is built on "that old weak thing." see twitter woes

"Twitter is, fundamentally, a messaging system. Twitter was not architected as a messaging system, however."
Why is it when your car warranty runs out it begins to break down, or when the 1 year limited warranty ("limited warranty" - what does that even mean?) on your toaster expires you begin to get burnt toast?

For our users, let us commit to tossing out the expired software (all or parts) and spend some capital on new / fresh development.

Would you go back to a restaurant that served you expired milk?