You have to accept the inevitability of software aging and not promise anyone product immortality. You have to start by looking far beyond the first release to the time when the system has aged. You must take careful action to ensure we minimize aging and give your company the longest useful life possible. Fundamentally, however, you can only slow down aging. Your product will eventually be retired, and you need to plan for that day.
You can slow down this aging effect with the following actions:
- Design for change
- Regular refactoring of the software
- Amputate overly complex software. Of course, it would be better to prune along the way
- Restructure product lines to reduce the support burden
- Ideally you want to ship the same code to everyone (reduces the variants that need to be managed to just one)
- Retroactive modularization, updating software so that changes which were not previously hidden are now placed within a module.
- This enables you to rewrite or swap implementations of specific modules or subsystems when the need arises
- Seek second opinions (use reviews)
- Avoid shortcuts
- Keep records (documentation)
Designing Embedded Software for Change
Are you tired of every hardware or requirements change turning into a large rewrite? Our course teaches you how to design your software to support change. This course explores design principles, strategies, design patterns, and real-world software projects that use the techniques.
References
-
Software Aging Slides by David Parnas
Preventive measures are worthwhile but anyone who thinks that this will eliminate aging is living in a dream world.
-
Software Aging – Why it happens and how to reduce it by David Parnas
More good news: “genes” (documented design decisions) may survive and be used by new products
Software geriatrics begins with neonatal care!
