To answer the question, it is necessary to understand what the software development process entails from beginning to end.
In general, software development involves agreeing with the client on the scope of work, which includes gathering requirements, developing interfaces, designing, coding, testing, and deployment.
All of this applies to the initial set of functions clearly described in the document outlining the functional decomposition of the software, where each function has a rough estimate (minimum – average – maximum) established based on the requirements for its implementation. This estimate covers a range of technical difficulties that may arise during development. It also covers a stream of changes during the early delivery stage caused by the client interacting actively with the product and introducing numerous changes to the previously designed implementation, which is a common occurrence.
Once the agreed-upon software functions are fully developed following the established requirements and the software has been tested, all pre-release preparations are carried out, and the launch takes place, after which the product enters the maintenance stage.
However, everything is much more complicated in practice than the process envisages.
Often, the software still needs continuous maintenance after launch because it assumes that a dedicated team is assigned to the project on an ongoing basis, which usually consists of the best players from the development team. The main goal of this team is to provide constant corrections, adaptations, perfective and preventive maintenance. Where improving, changing, and refining existing functions and developing new ones belong to the category of perfective maintenance tasks.
Therefore, the difference between software maintenance and additional work is the following:
- During what stage is additional work performed: before or after the software launch?
- Is there dedicated team support for the software after its launch?
Therefore, additional work means performing extra tasks during or immediately after the implementation of the main scope and before the software launch.
However, such tasks can still be classified as additional work even after the software launch if continuous maintenance by a dedicated team is not ensured. Another important aspect is that if there is a gap between the completion of the main scope of work and the emergence of other tasks during which the project team is disbanded, ensuring the completion of extra tasks requires additional organization and may result in increased costs due to the need to transfer knowledge to new specialists who were not initially involved in the development process or were only involved in specific modules.
However, if the product is promptly released into the stage of continuous maintenance, then all improvements, modifications, or development of new features are carried out in maintenance mode (perfective maintenance).
It is also necessary to explain why even a minimal amount of continuous maintenance is essential.
Many of our clients give little importance to continuous software maintenance, forgetting that even with thorough testing and quality control, it is impossible to detect all defects before releasing the software. This is known as the “Heisenbug” phenomenon, where errors appear only under certain conditions during software usage. This includes the fact that it is impossible to stop the process of updating operating systems, browsers, and third-party services that affect the developed product, as well as numerous revisions and improvements made by users during operation.
Thus, the strategy for the post-release period determines the point from which additional work is performed in a continuous maintenance mode.