I’m a software engineer with around 2-3 years of actual work experience, which I consider to be fairly inexperienced. I am tasked with building some software for a physical machine which, due to the kind of work my company does, needs to be stable to use for a long time ahead (think like 10 years at least – more likely to become 30-40 years). The system also need to be very low-maintenance as there is currently only one person available for doing maintenance work (me), and I will not have much time to spare for this.
So, my question is basically this: how should one think when designing software that needs to be stable and low-maintenance over a long time? Some practical aspects:
- What do I need to focus on when coding? What should I value in “good” long-term code?
- What programming languages are likely to be commonly used many years from now?
- How do I deal with using libraries or packages?
- What software development tools are safe to use in these cases (IDE/integration tools for instance)? Can old tools cause problems later on?
- What precautions can I take to maximize the chance that my code will run even if I change hardware?
- Is it reasonable to only make this code to run on a specific set of operating systems (to lower maintenance work)?
I have found very little on this subject by researching on my own. I have come across some blogs that have helped a little. However, they most often speak philosophically about the need for stable software development, and offers little guidance on the practical choices that one needs to make when designing long-lasting software:
My own reflections so far:
- Try to write code “sustainably” (easy to read, easy to change, small functions, single responsibility principle, yada yada…).
- Rely a lot on automatic testing in order to reduce the amount of maintenance work.
- Try to follow the most widely used domain-specific tools/standards, for instance language standards or standards for communication protocols etc.
- Try to prefer newer technology over old technology, even if the old technology may be de facto standard today.
- Use “reliable” hardware manufacturers for physical parts. That is, companies which are stable and are likely to still be in the game in 10 years time.
I am very thankful for any advice from more experienced developers, especially if you have experience working on a similar project!
Side note: If this is the wrong forum to ask such a broad question, please redirect me to a more proper site!