posted by owen on 2013-Apr-4.
I have used a ton load of software and even written a few in my many years as a Software Architect. From the small to the monstrous on various platforms, languages and shells - no software implementation lasts forever. At some point, somebody-somewhere will decide to pull a plug on something that someone spent thousands of man hours creating. Here is my top 10 reasons, list in no specific order;
1. Something better is developed. Whether the new thing is actually better is debatable but there is a perceived value into switching or migrating to the shiny new piece of software. The old is slowly or quickly phased out of existence.
2. Change of management. For whatever reason management decides that they need to flush out the old and move in with a new fresh piece of software which they can champion and spend money on. There are usually some benefits even if it is not obvious to everyone involved. There will be growing pains.
3. The great big bug. One day someone will come up on a bug in the operating system or a calculation in the software that is so expensive to fix that the only solution is to throw everything out and hope that no one discovers what the bug was.
4. Lack of Support. At some point in time you are going to lose all your support staff. Or your software vendor decides that you need to upgrade to the new "enhanced" version and refuses to renew your support contract or your operating system falls off the map. It is often impossible or tedious to support the software internally and the vendor sends you a big bill for the simple changes you request. You can hold out all you want but you are in a dark corner.
5. The upgrade cycle. The limits of the software creep up on you like a thief in the night or a dependant piece of technology gets an upgrade and you are forced to buy a new patch/update so you can keep working. New innovations emerge, new multi-core processors and hardware. It can even go as far are new legislation.
6. Bad software design. I have touched on this topic many times from the downsides of modularity, throwaway code to hardwiring: the design. There are many ways software can be badly designed, it takes a trained eye to spot a bad design in a marketing presentation. Most will only realise about after a couple years of use.
7. Lack of flexibility/foresite. This could be considered as a bad design choice but often it is a case of betting on the wrong horse. New features become so hard and expensive to add that throwing out the software is the only way to move forward and increase productivity.
8. It gets hacked. Getting hacked generally doesn't mean that there is a "great big bug". Neither does it mean that the software was badly designed. Sometimes the hackers just become smarter than the software and start exploiting features as opposed to bugs.
9. Time for a fork. There may be new solutions that warrant investigation and there are always innovations over the horizon.
10. Boredom/ADD. I knew a guy that redesigned his MVC website every 6 months. Not for any particular reason that I could detect. There is always the hope that constant iteration will result in a better overall product.
It maybe one or multiple reasons but eventually all software will go into retirement unless it operates in a bubble. At the end of the day you have to ensure that the transition is smooth and rash decisions are not made. The simpler your software and the less code involved the easier this transition will be. If you code like the code will last forever then your portfolio will be full of dead links.