The goal of software is to provide value to the business. Businesses evolve and their software must evolve with it. If the alignment between software and business is frictionless then it is not merely a passive part of the organisation but an engine for innovation to allow the business to march ahead of the competition.
The trouble is that rarely software is a frictionless part of the business, let alone become an engine for innovation. Often, existing software is barely able to meet the current needs of the business without failing or requiring constant tactical maintenance. When that happens then software becomes an ever-increasing burden for the business—taking it towards a slow decline. Left unchecked, this decline will lead to business failure.
The problem is that this decline is often so slow that we become accustomed and the true cost of difficult to change, and often defective, software is hidden. We only see that change is already costly and adding modernisation to that cost is difficult. The alternative is much worse! We fail to see that the cost of not modernising is much bigger than the direct cost of building the next feature or the loss in revenues due to a defect.
The ultimate cost to your business is the inability to evolve according to the market needs and to innovate to lead the market. It is also related to the cost of attracting and developing the best talent in a very competitive software industry. Businesses must understand this true cost in its entirety and weigh the cost of modernising against the true cost. It is very rare that a truly strategic business plan can forgo investment in the software that enables that business. Ultimately, keeping your software and the ability to change software in the best shape possible must be seen as an investment and not a cost.
“Make the change easy, then make the easy change." - Kent Beck
Kent Beck's advice is as applicable at the highest level as it is at the code level. For software to be a strategic asset for business, it must be ready for the next change, and if it is not ready then we must make it ready for that change before making the change. Not working in this way leads to the slow decline that I mentioned earlier and "making the change easy" becomes more and more difficult.
Software Modernisation is about remediating the bad effects of a legacy of tactical changes. The bad effects are not only inherent in the software itself, but they're also inherent in people and processes. People, processes, and software are inextricably linked in your software development capability. Considering them individually may provide short-term gains but will ultimately fail to make the impact that you need.
A good Software Modernisation effort will involve creating a holistic understanding of your software development capability. This means that you identify the key measures that you will use to evaluate the current state and the mechanisms for continuous feedback using those measures. You also need to create a shared understanding of Product Strategy, People Skills, Organisation, Processes, Software Architecture, Quality Practices, Build Pipelines, Technology, and Infrastructure. Given this shared understanding we can start understanding the root causes of wasteful activities and plans to eliminate this waste.
A holistic view will help you plan and prioritise and manage dependencies. There may be areas that can be addressed in parallel, other areas might be highly dependent on each other. You must also consider the current state and future business direction. For example, an effort to align teams to business initiatives may mean that the teams are restructured but the systems reflect the old organisation requiring a much more frequent cross-team communication that can lead to inefficiencies and frustration. Another example is working to isolate an area of the system that will see little change could prove to be wasted effort. Certain areas will require gradual evolution; other areas can benefit from a much more revolutionary approach.
Some aspects of the strategy will relate to evolving the software architecture so that certain areas need to be isolated because they change often. This will require senior software development skills. You will find that this will involve the evolution of people and processes and may require technology and platform updates. It may even require new relationships with suppliers of commodity software. Other aspects of strategy will concern evolving the organisation so that it is aligned to the business goal while minimising cross-team synchronisation.
In short: you may need to run multiple initiatives to address different aspects of your Software Modernisation strategy. These initiatives must relate to a commonly agreed goal, they will require a certain set of people and skills, and must remain sympathetic to each other.
Software Modernisation is about ensuring that software is a strategic asset to enable your business and gain a competitive advantage. It is usually necessary when a legacy of tactical changes have resulted in software that is holding your business hostage. A successful Software Modernisation effort must remain focused on an agreed goal and continuously seek feedback for progress towards that goal using well thought out measures. It is important to constantly evolve the shared understanding across all aspects of your software capability and review your initiative. Tactical efforts can reap benefits but they should be within the context of an overall Software Modernisation strategy.
A more concentrated Software Modernisation effort is only the start to get your software capability back to what it needs to be, but in order to maintain it, you must not revert back to the original operating model. You will need to constantly keep your system well suited to change. That requires that you sustain and further evolve the culture, skills, practices, and processes that have resulted from your Software Modernisation effort.
Software is our passion.
We are software craftspeople. We build well-crafted software for our clients, we help developers to get better at their craft through training, coaching and mentoring, and we help companies get better at delivering software.