
Four key components for best practise software maintenance
In this article I will discuss 4 key components for effective software maintenance.
Change is inevitable, it’s happening all around us, all the time. If the world is changing so to is your business, and if your business is changing, don’t your processes and software need to as well? I’m not just referring to profit increasing innovation or upgrades to stay in touch with your competitors. I’m talking about upgrades and fixes to your applications due to organic changes to your business and industry. The need to effectively and sustainably maintain software is obviously paramount then. Let’s discuss some key points that need to be understood in order to grasp the importance of software maintenance.
In this article I won’t be referring to small scale applications, websites or apps. These are often pretty easy to update and change. On the other hand, for complex enterprise systems, you are looking at hundreds of people over months to release one small change effectively so it doesn’t interrupt other services. I will assume you either work in an organisation that has a IT Service Delivery model for software or you feel you need to start considering implementing a model.
Let’s begin
Have you ever asked, how do we effectively maintain our software, while at the same time running and releasing new features, patches, bug fixes, upgrades etc? How does it all fit together in our day to day work and release cycles?
The answer is, that there is no one size fits all. There is of course best practices, ITIL for example. Here I will discuss what I think works well. This will be based on the average of the IT team setups I’ve been apart of. I’m not going to outline my version of a best practice, many smarter people have already spent their lives defining this and teaching it. I intend to outline a framework of thinking you should consider to help setup or improve your application maintenance life-cycle.
I see four key components to consider when assessing your software maintenance practises, these include:
- Identify issues and keeping a backlog
- Reviewing the issues that have been raised
- Having a healthy release cycle
- Testing your releases and seeking feedback
Component 1: Identify issues and keep a backlog
How do we even know there is an issue or a problem that needs fixing?
The source comes in two main ways:
- Known production problems. These could be issues that have been raised in the past or that were released into production, with the intent to fix in a future release.
- Testers, analysts, users or customers notify the product owner of the problem.
Component 2: Review process issues and backlog
How do we know its an issue? Just because someone says something is a problem, doesn’t mean it is. In complex systems, with complex business processes, the line between what should happen and what shouldn’t often comes down to opinion. Through in a lack of training and documentation, and you can have a pretty messy situation.
Best Practise
Ideally we should be able to identify an issue by asking the following question:
- Is the system doing what it was designed to do? This requires documentation of what it was supposed to do and/or expert knowledge from users or business teams. If it is not doing what is it supposed to do then an assessment has to be made. This is generally done by a Business Analyst, in consultation with a subject matter expert (SME). Having designated SME’s in your organisation can prove very useful. You must then ask:
- Is the User using the system incorrectly?
If so, this requires a focus on training or improvement in UX in the system. - If the system is not working as intended then this should be raised as an incident and requires a change to the system.
- Is the User using the system incorrectly?
Having decision makes such as Business or Product owners, SME’s will go along way in making quality change decisions and speeding up the time it takes to make change.
Component 3: Have a release schedule
Now you have a backlog of issues, which issues do you spend your resources on? These are the factors you should be discussing within your team:
- Return on Investment
- Disruption to other teams or services
- Quick wins
- Long term gains
Best practise
The first thing you need to consider is your return on investment. How much will it cost verses what will the gains be. This is a simple concept, but one that is often overlooked, or at least not discussed as the main reason for giving higher ranking to certain software changes. You will also need to consider disruption to other services by performing the change and if any other teams need to be involved. I like the idea of quick wins, because it helps the team feel like they are achieving something, if the majority of tasks take too long or fail. Long term gains are also important, an example of this could be a focusing on root cause, to ensure reoccurring issues do not arise. Especially if all the small issue accumulate to the consumption of a lot of resources (time and/or money).
Component 4: Testing your release and seek feedback
Of course, we know we need to test before and after we release. However, one form of testing that is often overlooked, but should be incorporated is seeking feedback. The normal train of thought, is once the change has been release, if no one complains then it works. A good doctor will call a patient sometime after their treatment. Talk to the end user and the business owner, see what they have to say.
In summary
The central idea when maintaining software, when changes come from users, the business team or customers, is to treat it like a service. As if you are a waiter in a restaurant. Also to have a strong connection to your end users and your most important stakeholders, those who are directly affected by the change. Not just the ones who pay the invoices. Collect their ideas, review them, organise them and then seek feedback.
Great list, Cian. In my opinion, feedback is probably the most important on this list and, at times, the hardest to give. Being open and transparent both with your subordinates and seniors is a must from the very beginning, and ensuring your team fosters a healthy and transparent culture. This is not only the case for Change Management, but many other team environments across the entire organization.
Thanks for the comment Jarrad. Feedback and open communication is something that gets forgotten about in big organisations. Especially if teams are fluid and multi-functional. We in the ‘IT’ world also forget that face-to-face communication is as important as being able to communicate digitally. Virtual teams are a whole other story.