Software maintenance strategies for 2020: how to level up your existing processes
Tags: softwaremaintenance
Published: 2020-08-20 05:28:22

With almost all companies experiencing a slowdown and trying to find ways to keep their teams and operations in place, it’s safe to say that the core activities of many businesses are currently paused. Investments and new ventures may be suspended, but it shouldn’t mean that you should passively wait for what will happen next. 

If there’s one thing that the current situation lends itself to it’s creating a more resilient business. That’s it. Resilience will help you prepare for any difficulties to come and get you ahead of your competitors. You’ll be able to come out of this stronger than ever. 

This also means that there’s never been a better time to focus on software maintenance and leveling up your software maintenance processes. You can finally reflect on what your company has been doing and rethink some aspects. Here’s what you can do whether you’re just starting out or want to level up. 

Crucially, the strategies I’m listing below will help you when you’re bringing new people on to your team or updating your product. They will also help you reduce software maintenance costs. 

So, here are the strategies for getting your businesses ready for any challenges you may face and for reducing your costs. Use these separately or together for an optimised software maintenance process. 

**Review your documentation** 

Many developers do not update their software documentation or understand how important it is to do so. This can cause issues when you want to upgrade your application or hire new people on to your team. Contrary to the common opinion, writing comprehensive software documentation is an important part of the software maintenance process. 

The current slowdown is an ideal opportunity to finally get it right. Start by auditing the state of the developer documentation at your company. Are there any parts that are missing? Are there any elements of the software that are not covered at all? 

Remember that the main purpose of the documentation is to provide details of how code should work, with supporting examples. It should also be as useful, understandable and concise as possible, so make sure it’s free of unnecessary jargon. Use tools such as Tettra, GitHub Pages or MarkdownPad for ready-to-use templates and tips on how documentation should look like. 

You can also introduce solutions such as developer playground or any other type of dynamic documentation that will make the process a bit more enjoyable. These can then be turned into interactive developer tutorials to train your junior developers. 

**Migrate your solutions to cloud**  

This is a no-brainer in 2020: migrating at least some part of your product or processes to cloud is an obvious choice for businesses. I’ve listed the benefits of using cloud solutions in one of the latest case studies, so I won’t go through them again, but in short: these solutions are not only cost-saving but also ideal for keeping your infrastructure light and contactless. They will also help you prepare for the next downturn. 

So, how should you implement cloud solutions at your company?  

Just a disclaimer before we start: although migration to cloud sounds like a huge project to take on, especially during the crisis, it doesn’t have to be this way. You can start slowly - by moving your services one by one – starting with less critical ones - so the process will be gradual and more cost-effective in the long term. 

How to do it in practice? 

Start by analysing which parts can be easily transferred to cloud as these can be the foundation of your hybrid solution. The migration process itself should also be divided into stages with the infrastructure being recreated and set up using AWS or Microsoft Azure. It can be then filled with data as you move closer to the final migration phase. 

Going hybrid before going entirely serverless is also a good way to test and optimise your digital product. 

With a lighter, serverless infrastructure you will also be switch on and off any parts of the applications that are not needed all the time. Once again, it’s a solution that will help you limit your spending. 

With a cloud-based product, it will also be easier for your remote teams to collaborate on any maintenance or DevOps projects. And if you need to outsource some of these tasks, you can share any repositories and databases with a group of outsourced specialists. 

**Invest in Quality Assurance** 

Testing and ensuring the quality of the code is the most crucial part of your software development process. In reality, that’s not always the case. When you reorganise your processes take the time to check quality of your code.  

We often think of QA as a set of tasks for testers that go in at the very last stage of the project to check if it’s working properly. The truth is it should start much earlier than that. Make sure you cover it during each stage of the process: 

**Planning** - here’s where a QA specialist can prepare a requirements analysis that will be crucial for completing the further stages of the development process and for what’s maybe an even more important task, preventing any risks and bugs. 

**Design** - a QA team can also collaborate with your UI/UX experts to create a test plan and review your design from a user’s viewpoint.
 
**Development** - test-driven development is an effective method where you simply write code with unit tests built-in and refactor it continuously. 

**Testing** - last but not least, testing can also be carried out where QA specialists audit the product for any areas that need to be fixed and optimised. 

Quality Assurance is also not ideal for making sure that your development process is (almost) perfect at every stage. It’s allows your team to gain a fresh perspective on what they do, especially if it’s done by the external team.

Where does software maintenance come into the picture? As you can see the above points are about reviewing and optimising your current processes. First and foremost, consider test coverage of your software, think about introducing automatic tests and check if your software has well-prepared regression tests. 

**Automate your software development process** 

Once your team has worked on the quality documentation, it will be easier for them to automate at least some parts of the software development processes. This assumes that you already have a shared repository where all developers are place the code they write. This is also the single source of software for your project. 

The next step will be to set up a standardised process for creating software copies. This so-called ‘build process’ should be followed by every developer and tester on your team, as well as by every script and build-in mechanism. 

Subsequently, you should be able to automate the ‘build process’ i.e. use a script for downloading the latest software version from the repository. This will save time for the developers and allow them to avoid going through multiple steps to do it. 

Similar processes can be set up for pushing any changes to production. Your testing environment should resemble the user-facing one as closely as possible, so deployments can be completed by starting a single script or by clicking a button. 

**Rethink your product infrastructure** 

It may be that your product infrastructure has been growing organically and without a specific roadmap or a plan in mind. This can be fixed by auditing your current structure and applying process optimisations whenever possible. In the longer term, this approach will not only make your product easier to maintain but also save you money. 

Make sure that you remove any parts of the product and tools that your team no longer need. Divide your product into more manageable parts that can updated and developed on their own at any time.  

If you’re using customised applications, one of the ways to further limit your costs is replace some parts of your application with generic SaaS solutions for tasks such as a user messaging or a performance monitoring system.