Software Maintenance

Software development is more similar to growing a flower garden, than it is to building an electronic circuit. This is mostly due to the time frame for maintenance. For a garden, like in software, maintenance must be done often, on a daily basis. For an electronic circuit, maintenance is almost zero, once the circuit is built. Building hardware is not as dynamic and flexible as building software or as maintaining a garden. Let me be clear by what I mean when I say software maintenance:

Software Maintenance: is the process by which software code is maintained in order to be compiled, installed, executed and tested, at any time, by any member of the software development team.

In a flower garden, the plants are continuously attacked by bugs. From the first day the seeds are put in the ground and the plants start to grow, bugs and weeds start attacking. In order to maintain the garden, the gardener must continuously check the health of the plants, water the plants, pull out the weeds and remove dead plants. If new plants need to be added to the garden, the gardener must make sure the new plants work well and look good with the old plants. As the garden expands, the gardener finds it more and more difficult to check the status of all plants, to water each plant individually and to feed each plant. Thus, the gardener installs an automatic watering system. If the garden is really fancy, the gardener adds sensors to the soil, which tell his automatic irrigation system when to add water and food. As the garden grows, the gardener must come up with innovative and automated solutions such that for each plant the gardener spends less and less time on the plant’s maintenance. This leaves the gardener more time to focus on adding new plants to the garden and maintaining the automated system. (Ideally, the maintenance of the automated system will take less time than maintaining the flowers directly. Installing the proper automated system is critical.)

As in a garden, software is never built and then forgotten. Even if the development team does not add new features to the code, the software still needs to be maintained and adapted for new operating systems and new hardware. Developing good software maintenance habits is a good idea that helps any and all software teams, no matter of size.

When translated to the software world, the irrigation system, from the garden analogy, consists of two principal components.

First, is the source control. The source control is at the heart of any size software system and it allows the development team to go back and fourth in time, keep track of changes, branches, and share code with each of its members and any auto-build processes. One important feature of the source control is the ability to go back in time.

Second, is the auto-build process. This process runs automatically or when started manually. The process automatically deletes all the local and pre-compiled code, it retrieves the new source code from the depot, it extracts the latest changelist number (a changelist number is a unique identifier that uniquely stamps the source depot every time new code is submitted), it compiles all the code and libraries, it builds install packages, it runs automatic tests, it generates automatic documentation and it finally archives the install packages. The archive step marks the install package with a unique identifier that corresponds to the version and changelist number of the build.

In conclusion, software maintenance is more analogous to maintaining a garden, than to building a bridge or an electronic circuit. Software development is more “alive” and dynamic than other engineering projects. This has implication on the cost and schedule of software development projects. I will describe these implications in later posts.

– Darian Muresan

no comments

Your email is never published or shared. Required fields are marked *



There was an error submitting your comment. Please try again.