- Software development costs
- User training and development costs
- Input database development costs
- Community adoption and development costs
- Perceived or measured committment to validity of results
Eventually, investments in a computational engineering tool, both tangible and intangible, become so great that wholesale re-write (that is throwing existing code out and re-writing from scratch), is not seen as an acceptable strategy to move the code forward with new generations of computing technology.
The key software engineering challenge of legacy code involves balancing several goals
- Maintaining the original source code largely intact
- Maintaining acceptable performance with newer computing technologies
- Maintaining acceptable consistency in numerical results
- Maintaining external interfaces (both data and user)
To achieve these goals, changes to legacy code are typically evolutionary rather than revolutionary in nature. Eventually, however, even evolutionary code changes can become cost prohibitive. Typically, by the time legacy code faces this demise, which could easily involve more than 30 years of development, the evolutionary approach has provided ample time for suitable alternatives to develop and become adopted.