Lately I have been working on a tool we use on the IJF World Tour to present real-time graphics on the live stream fo events; and it made me want to write something about how important “legacy” software is and how in fact we can argue that “legacy” software is the only software that matters.
Specifically, I have been updating an Electron app that listened for UDP packets and displays them on the screen using HTML and CSS. We then chromakey that onto the camera feed of a Judo contest.
This software is used at every large IJF and EJU event and seen by people all over the world. So it is really “valuable”, it also “legacy”. In many sense of the term.
It is legacy in that it does not have tests, it is legacy in that it’s old and not well maintained. It is legacy in that it provides value. It is legacy in that it is relied upon.
I have been updating the software to match the latest style of graphics. But I have also been trimming away dead code, un-used features and general “cruft”.
Having done that, I am not embarking on the classic “re-write”, changing it to use Elm and elm-ui on the front-end rather than JQuery/HTML/CSS(Bootstrap).
The re-write builds on the foundations of the original. The Node code that listens to the UDP packets is not going away. It’s a slightly revised (smaller) version with less features, but fundamentally building on the legacy.
The front-end although entirely new and written in a new language, is still building on the legacy of the original code. Again some features are gone and it’s simpler.
And that is the point, legacy software informs new software. All new software builds on it’s legacy. And… within minutes of being written/released becomes legacy software itself. Which in turn becomes the legacy upon which the next thing is built.
So although I sometimes describe myself as more of a “maintainer” than a “creator” I see the two intertwined. Both greenfield and legacy software are one in the same, yin/yang, two sides of the same coin.
Creating software is an act of building on legacy software and creating legacy software. So only legacy software really matters… right?
In creating this “new” version of the software, I am extending the life of the legacy software at it’s core. The UDP listener I recall is actually built on top of an even older piece of software I wrote tweeted contest results (which never gained traction) which was built on an even older piece of software that wrote all the packets to a database for analysis later… which was used twice I think before it became apparent it was not a good idea.
So this shiny new version, written in a shiny new language is in fact just a new layer upon many layers of legacy code.
It too will soon be legacy code.