Last few decades have seen proliferation of software applications, many requiring constant maintenance involving:
correcting faults,
implementing new user requirements,
modifying software to run on new or upgraded platforms.
Effort spent on maintenance began to absorb resources at an alarming rate.