This weekend I watched a thought provoking keynote from Chad Fowler: Legacy. In the talk, Chad compares the legacy of other craftsman professions (architect, painter, engineer) to that of software craftsman.
For each of those craftsman, the result of their work lives on for many years and in some cases surpasses their lifetime. How many software systems do you know of that have lasted that long?
What is "legacy?"
In software, we often look at systems that have been around for a few years as being "legacy," and that usually comes with a sense of distain and a desire to write anew. Is this the perspective we should have towards the software we write?
When a software system survives decades, or even a couple of years, why don't we celebrate it? It would not have survived that long if it didn't serve a purpose.
Software that leaves a legacy
Now, it's true that systems are often euthanized and replaced with new solutions for a good reason. But when that happens we throw away all of the time and energy that went into the original project. How can we avoid the "big rewrite" and leverage the previous work of a project?
As Chad points out, there are lessons to be learned from systems that successfully survive.
In most cases, these systems stick around because of their simple maintenenace and interface. If a something works, why change it? Generally, to keep something simple it needs to be small and contained. I think this is a reason we've seen more talk about Microservices recently.
These sustained systems can also change and adapt over time. Change is inevitable in technology; the change of hardware, for example, is something that we can't always plan for. So the easier a system's pieces are to change the more likely it won't need to be replace completely as part of a rewrite.
As I've been mulling over this topic the last few days it's brought to mind another interesting question. Is the software I write the only legacy of my career?
I sure hope not. While I definitely desire to improve my skills as a craftsman and produce even better work, the people I work with are more important.
So far in my relatively short career I've had the opportunity work with over a dozen apprentices and junior developers. Being able to impact and be impacted by them is much more fulfilling than any system I'll ever build.
In addition, I've had the opportunity to see the opposite side of the equation from my mentors. Each has had a significant influence in my thinking and growth, and not just in writing software but also in business, working with people, and leading by example.
When I look back at the end of my career I hope to see both of these legacies:
- Lasting software systems designed to be simple and adaptable
- People whose careers I've helped elevate
Would love to hear your thoughts on this topic. See my contact info in the footer.