Software rot or software decay is the slow deterioration of software performance over time leading to software becoming buggy and unusable, eventually.
When a system is created, it is generally designed to solve a known set of problems encountered by an existing set of users. Over time, the tool creators, original users, and the current problem domains change but often the old system is modified to solve these changes. A flexible system may be adaptable to certain amounts of change, but only if the current populace of creators/maintainers as well as users understand the limits. If they do not, the software often ends up less useful than if it had never been touched.
After the first version is delivered, the problem domain which the software is aimed at solving transforms with time, and the software evolves to cater to that. This causes the logic to deviate from the original design. If the changes are not done in a way which preserves the integrity of the software, new bugs crop up in the existing code base. This is termed as active rot.
Parts of software that are not used on a consistent basis eventually tend to become useless as rest of the software transforms according to evolving problem domain. The unused parts become dormant, thereby termed dormant rot.
The common causes of software rot are the following: