When the software artefact is finally delivery and goes live finishes the software development cycle and starts the maintenance. What distinguishes these two phases of a software artefact? Why should maintenance be considered as distinct from development?
Mainly because of the word “finish”. When the product is delivered the development context is dismantled. The development team starts working in another project and, eventually, only a few elements will continue to provide support to the product, which has impact on their motivation. Less skilled developers are usually assigned to maintenance because it is not a critical activity of the business, the revenue of maintenance activities are smaller than the development revenue. Besides, the code base stops being a living code base, which means that it will eventually degraded because of the lack of an immediate knowledge about its structure and functionality. Most changes to the code will be opportunistic and aiming at fixing the emerging problems, which will further result in the code base degradation and lost of knowledge about the code structure.
Maintenance starts when the development plan finishes. For this reason, agile approaches, which are not plan-driven, have an evolution perspective instead of maintenance. Additionally, incremental development, where the software artefact is delivered incrementally, already includes “maintenance” activities during development.