According to Dictionary.com, Legacy, used as an adjective in the term Legacy Software, the definition is:
leg·a·cy | /le-gə-sē/ – of or relating to old or outdated computer hardware, software, or data that, while still functional, does not work well with up-to-date systems.
The key to this definition is the “while” clause. We know that old software doesn’t have to be called out as ‘legacy software. As an example, what about Linux? The Linux kernel is an old piece of software, but no one would classify that code as a piece of legacy software. Why is that? There are some key aspects of the software that have made it continually relevant over the years. There is an argument that it is the most relevant it has ever been.
Linux began in 1991 as a personal project by Finnish student Linus Torvalds: to create a new free operating system kernel. The resulting Linux kernel has been marked by constant growth throughout its history. Since the initial release of its source code in 1991, it has grown from a small number of C files under a license prohibiting commercial distribution to the 4.15 version in 2018 with more than 23.3 million lines of source code. (History of Linux)
Why isn’t Linux an example of Legacy Software? I believe we can identify some key things that lead to non-Legacy Software.
These key attributes of the development history allow for a legacy of relevant software, not legacy software.
According to Re-Engineering Legacy Software by Chris Birchall, the definition of Legacy Software is:
” A software project that is difficult to maintain or extend. “
– Re-Engineering Legacy Software by Chris Birchall
This definition is more straightforward and relevant than the previous one and it helps us understand why it is such an important topic. Software is used by businesses to help them be more successful. Most software helps companies become more efficient or effective, ultimately making them more productive and thus more profitable.
An effectivity gain would allow a company to do more with the same, an efficiency gain would allow a company to do the same with less. In either case, there is no magic, the software is automating what people are or could be doing, but doing it more consistently and/or at a larger scale. Therefore, it is critical to understand that software should first be successful in providing this value to a company but also, and importantly, must be written in such a way that it can be maintained and changed so that this value can continually exist or even improve as the company changes.
This is such an important aspect of understanding why legacy software is an important topic for information technology organizations. With this in mind, there are some key aspects of legacy software that exist and can be identified:
The outcome of these attributes is a software product that becomes very difficult to hire and keep developers to maintain. In tight labor markets, the lack of talent to maintain legacy software is one of the, if not the most important obstacle to maintaining and extending legacy software.
Assuming legacy software exists within your organization, what are your options? On the continuum of options that can be done to address legacy software, the two ends of the spectrum are:
This may seem overly simplistic, but any option is somewhere on the continuum of these two options. Oftentimes, keeping the software is the option only until it can be rewritten, or it may be that you completely rewrite a portion of the software.
How can keeping the software be a solution to Legacy Software? Remembering that old doesn’t necessarily mean legacy, but rather the fact that it was not maintainable or extensible. If we address the reasons software is not maintainable and extensible, then it stops being a legacy software product.
I am going to recommend the books, “Working Effectively with Legacy Code”, by Michael Feathers and “Beyond Legacy Code: Nine Practices to Extend the Life (and Value) of Your Software”, by David Scott Bernstein which both provide key ideas on how to work with and extend legacy software. However, rather than getting too detailed discussion, important straightforward steps must be taken to make these books useful to any of your efforts.
The following is a list of common work that is required for successfully maintaining and extending your legacy software within your company.
A rewrite of working software that provides value to a company is a major decision for any organization to make. This type of decision usually involves company management and would include a budget outside of existing maintenance. For this reason, a complete rewrite is rare.
However, many times a complete rewrite can be a long term objective so that the maintenance and extension of the software is done in such a way that over time the software is rewritten.
A “complete rewrite” decision is most likely made when there are substantial changes that are needed to the existing software because of business requirements or technological realities.
A new business opportunity is a great example of a business reason. Another good example may be business growth or decline. These business drivers many times create a need that just cannot be handled with the legacy software and to change the software would be too heavy of a lift.
The Windows 7 ‘end of life’ is an example of a technological reason. We worked with a company that had a Windows 7 embedded system that had to be rewritten. In addition to this technical driver, there were many features that had to be addressed in order to handle customer needs. The rewrite effort moved the software from Windows 7 to Linux. Although this was a major rewrite, we were able to use core sections of the business logic. This was an important part of the architecture discovery phase. It was still a major undertaking, but we didn’t have to recreate logic that had been around for 30 years.
No matter how you decide to handle your Legacy Software, automating the testing and building of the software is a requirement. Whether keeping legacy software or rewriting legacy software much of the work is the same, however the objectives do change. The work being performed (keep the legacy software or replace the legacy software) is determined by the end goal. If the ultimate objective is to keep the legacy software, decisions made while architecting the solutions will most likely drive to different conclusions than if the objective is a rewrite.
References