Unraveling the Secrets of Software Maintenance: A Strategic Guide for Product Managers

Discover the Key Types of Maintenance and How Product Managers Drive Software Success

Henrique Maltez
7 min readJul 26, 2023
Oppenheimer

Every software system requires maintenance and evolution throughout its lifecycle. Just like traditional engineering works, software demands constant care to ensure its proper functioning, bug fixes, and adaptation to changing user needs.

For product managers, it is crucial to know how to handle maintenance phases, as they can bring significant impacts, either positive or negative, to the product. In this article, we will discuss the different types of software maintenance and how they affect system evolution.

We will also present strategies to optimize software performance over time, ensuring its effectiveness and keeping up with technological innovations.

Unlock the Secrets of Technical Product Management for FREE and Boost Your Skills Now!

Don’t miss out on the opportunity to subscribe to The Technical Product Manager, a free newsletter that delivers top-quality content to help you excel in this field.

Covering a wide range of topics, from API product development to tips for technical product development and even non-technical subjects, our updates will keep you well-informed about industry best practices.

CLICK HERE: https://thetechpm.substack.com/subscribe?

Context and Types of Maintenance

Before diving into software maintenance, it’s important to understand that there are different types, each serving a specific purpose. Some are meant to fix errors, while others enable product growth. Each type of maintenance has its own particularities and requires careful analysis before execution, as they can involve a lot of work and dedication from the team.

It’s also important to highlight that, most of the time, the product manager is not responsible for determining the type of maintenance to be performed and how the process will unfold. This decision falls to the technical leader of the team, who possesses more knowledge and context on the subject. After all, maintenance tasks can be complex and impact the entire company’s architecture.

The role of the product manager is to understand the reason for the maintenance, grasp its objective, and assess its impact on the business. Knowing the right moment to include maintenance in the roadmap is essential not to miss opportunities, especially when the scalability of a service depends, for example, on refactoring.

Now, let’s explore the different types of maintenance and some examples of products and situations that may require these approaches.

Resolving Bugs and Failures

Corrective maintenance is the most common type of software maintenance, aimed at resolving bugs and failures in the system, whether they are reported by users or developers. These issues can range from simple programming errors to severe failures that compromise the system’s functioning. This approach is crucial to ensure software quality and provide users with a satisfactory experience.

An example illustrating corrective maintenance is that of a popular e-commerce platform. Imagine that due to a bug in the system, some users are unable to complete their purchases, resulting in sales losses and customer frustration.

Upon receiving error reports, the development team promptly initiates corrective maintenance. They locate and fix the bug that was preventing the completion of purchases, ensuring that the application returns to normal operation. This action restores the expected functionality and maintains the application’s trust, enabling users to make their purchases successfully and have a positive experience.

Corrective maintenance is an essential process to ensure the stability, efficiency, and user satisfaction with the software, addressing problems that arise over time or are reported by users.

Avoiding Future Problems

Preventive maintenance plays an important role in preventing and correcting hidden bugs in the code before they cause issues and failures for users.

This proactive approach aims to detect and resolve potential problems that may occur in the future, thus ensuring the long-term stability and reliability of the software. An example illustrating preventive maintenance is that of a project management application.

The development team notices that the application’s performance may worsen as the amount of data and users grow. Instead of waiting for the issue to occur and negatively impact the user experience, the team acts preventively.

They improve the code, implement effective storage strategies, and adapt the server infrastructure to ensure that the application can handle expected growth without compromising speed and functionality. These preventive actions ensure that the application remains fast and scalable, offering a consistent user experience even in high-demand situations.

Preventive maintenance is an excellent example of how the product team can collaborate with the engineering team. By providing a clear business context to the engineering team regarding our scalability objectives, for example, we can identify areas that may require maintenance to enable this growth.

Adapting to External Changes

Adaptive maintenance plays a role in modifying a system to adjust to changes in its external environment, such as technology updates, legislative changes, integration with other systems, or demands from new clients.

A clear example of adaptive maintenance is updating the version of external services. When our product relies on integrations with third-party services, any changes to APIs or the services themselves may require updates to ensure the continuity of functionality.

In some situations, the version of the service we are using may be discontinued, leading us to migrate to a more current version to continue using the service properly.

In this context, adaptive maintenance allows us to preserve the compatibility and efficiency of integrations, ensuring that our product continues to deliver the expected experience.

Refactoring

Refactoring refers to maintenance tasks used to improve the internal structure of the code without altering its external behavior. The main goal of refactoring is to enhance software quality, making it more readable, understandable, maintainable, and efficient (making it better to work with and more optimized).

When we develop software, it’s common for new ideas, requirements, or discoveries to emerge during the process that may lead to changes in the code. However, making these modifications directly can result in the introduction of errors (bugs) or complex and hard-to-understand code, known as “technical debt.”

By performing refactoring, we reorganize the code safely, without altering its functionality. This means that after refactoring, the software should continue to behave exactly the same way, but its internal code will be cleaner and more structured.

Some common refactoring techniques include:

  1. Renaming variables, methods, or classes to make the code clearer.
  2. Extracting duplicated code snippets into reusable functions or methods.
  3. Breaking down long functions or methods into smaller and more specific parts.
  4. Combining similar functions or methods to reduce duplication.
  5. Separating large classes into smaller and cohesive classes.
  6. Improving code readability by reorganizing statements.
  7. Replacing complex structures with simpler and more understandable abstractions.

Refactorings are essential for agile software development, as they allow developers to evolve the code incrementally, keeping it in a healthy state. Additionally, well-applied refactorings facilitate teamwork since cleaner and more understandable code is easier to maintain and collaborate on by different team members.

The Strategic Role of Product Managers in Software Maintenance

Software maintenance goes beyond the responsibility of developers, as product managers play a crucial role in this process. They have the responsibility to identify and prioritize maintenance actions, directing resources and efforts to the most critical and impactful areas.

Product managers also ensure that maintenance activities are aligned with user needs and the strategic objectives of the company. In this way, product managers take on a strategic role in software maintenance, ensuring the efficiency and ongoing relevance of the product, as well as providing a consistent and satisfying user experience that aligns with the business objectives of the company.

Collaboration between product managers and the technical team is essential to achieve a healthy software, keeping it always up-to-date and prepared to face future challenges.

Key Points (by ChatGPT)

  • Software maintenance and evolution are essential elements in the lifecycle of any system.
  • Product managers play a strategic role in identifying and prioritizing maintenance actions, directing resources to the most critical and impactful areas.
  • There are different types of software maintenance, such as corrective, preventive, and adaptive, each with distinct objectives.
  • Collaboration between product managers and the technical team is crucial to ensure a healthy and resilient software.
  • Refactorings are essential practices to improve code quality, making it more readable, understandable, and efficient.

Conclusion

Understanding the different types of maintenance, from corrective to resolve bugs, through preventive to avoid future issues, and adaptive to adjust to external changes, product managers can make more informed decisions about maintenance priorities and inclusion in the product roadmap.

It is important to emphasize that cooperation between product managers and the technical team is crucial to achieve a healthy and resilient software. Product managers provide the business context and user needs, while the technical team is responsible for executing maintenance actions.

Moreover, refactorings, as one of the ways to improve code quality, also play an important role in software maintenance. These practices allow developers to enhance the internal structure of the code without changing its external behavior, making it more readable and keeping it in a healthy state over time.

Therefore, by understanding the importance of software maintenance and the strategic role of product managers, companies can ensure efficiency, reliability, and continuous adaptation of the product to ever-changing needs and challenges. This way, the product can meet user expectations and remain competitive in the market, providing an exceptional and satisfying experience to all its users.

I hope I have helped in some way.

See you in the next post.

--

--

Henrique Maltez

Hi, I’m Henrique Maltez, writer of The Technical Product Manager