Principle #5: Relevancy
Stay Modern, Extensible, and Transferableg
In Part 1 of my blog series on Four Principles of Software Development, I proposed the P.E.E.R. acronym (People, Effectiveness, Efficiency, and Relevancy) to describe four principles that set a senior developer apart and define how software ought to be done. The fourth of these ideas is the idea of relevancy. So far, I’ve written four blog posts consisting of nearly 5,000 words about how to write good software and I haven’t talked about many of the big decisions that come to mind first for many software developers. Decisions such as which frameworks, standards, technologies, dependencies, or even programming languages to use. Don’t get me wrong; these decisions are incredibly important. However, they are not nearly as important as the previous three principles of software development (People, Effectiveness, and Efficiency). Only now, after covering the previous three principles should we focus on the fourth principle of relevancy. In this context, I define the idea of relevant software as software that is modern, follows best practices and techniques set forth by communities, uses modern technologies, frameworks and programming languages. In short, software that is relevant is software that can be easily understood and modified by the programmers of tomorrow.
A software ecosystem consists of the tools, technologies, frameworks, programming languages and standards associated with a particular software technology stack. In any software ecosystem there are best practices (strategies, conventions, and techniques) that are recommended by the communities. It is very important that all developers on the team familiarize themselves with these best practices and follow them unless there is a good reason not to. It is a great feeling to onboard a new developer and they instantly feel at home. They’ve seen this before and they understand it. Conversely, it’s not such a great feeling when you onboard a developer and they give you a blank stare like their reading alien hyroglyphics because you have highly custom and non standard code.
Another important part of a software ecosystem is the developer community around it. I’ve experienced first-hand the benefits of working in a software ecosystem with a large and engaged community. The resources for help, documentation, examples and ideas can help tremendously as you can build off the successes, and learn from the failures, of others.
Which ecosystem and technologies you should use will depend on many factors, and there are not universally right or wrong answers. Each software technology and ecosystem is great for some projects and for some teams. It is almost never the case where one technology, framework, programming languages, etc is strictly better than another. It is not an easy decision and it will take a lot of experience and consideration to determine which is best for your project.
Whichever you choose, staying on a modern software ecosystem with a thriving community is important. If you ever find your project is in an outdated or declining ecosystem without a strong community, it may be time to start thinking about a migration strategy to a more modern ecosystem. Knowing when to jump and when to stay is a very difficult and nuanced decision. In my experience, very junior developers tend to want to switch too soon, and sometimes, very senior developers wait too late to switch. Sometimes it takes experiencing the rise and fall of technologies and software ecosystems first-hand before you start to get a good understanding of the importance and tradeoffs of staying relevant.
There are many reasons to keep your software relevant. Not only will it be easier to extend and likely have better security, but, perhaps most importantly, it will be faster to bring new developers on board. It will be easier to find, recruit, and train those developers. It can take a long time to modernize a legacy software application, so developers should always be on the lookout for small ways to keep nudging the project to stay as relevant as possible for as long as possible.