4

I'm a hobbyist programmer, so no professional experience.

People here often talk about doing maintenance of software at work. The author of this question talks about doing 90% maintenance and 10% development at his job.

My question is: what is 'software maintenance' anyway?

Is it mainly about fixing bugs? If so, does that mean that people spend most of their time at work fixing bugs?

Or does 'maintenance' include other things, other than bug fixing?

Aviv Cohn
  • 21,538

2 Answers2

9
  • Fixing bugs is definitely a big part
  • Small modifications to existing features: add a field here, change the dialog layout there, remove some outdated functionality there... The difference between maintenance and development is fluid here.
  • changes can even be required by new laws!
  • Improve performance
  • Make the system work in a new environment (because the old one is not available anymore or has had its own bugfixes or new features):
    • new hardware
    • new version of the operating system
    • new version of the programming language / runtime
    • new version of libraries you're using
    • changes in other systems that your system communicates with

Some concrete examples that I have personally worked on:

  • When Facebook switched to local currency payments in mid 2013, all Facebook apps that took user payments had to completely rework their payment logic (the new system works fundamentally different on many levels) within 90 days.
  • If you take direct debit payments in a SEPA country, then in early 2014 you had to switch account numbers to the IBAN scheme (from the form where users enter their data through to where your backend communicates with the payment provider), and if you take recurring payments you had to implement email notifications.
2

Idea of "software maintenance" comes from thinking that software can be managed in same ways as any engineering project. Each such project has a lifecycle:

  • Requirements analysis
  • Design / Planning
  • Construction / Implementation
  • Usage / Maintenance

This means, after the project is finished, some effort and resources are necessary to keep it in fully working conditions. But in all cases, the amount of resources needed for maintenance is small compared to actual implementation. Imagine a big building or complex machine. Yeah, you might want to repaint it or replace some parts, but generally speaking it will remain same for all of its operational lifetime.

So if you assume that software too is an engineering product, then it also has a maintenance phase. The problem is, the assumption that software is same as any engineering project has been confronted many times already. One of the issues related to "maintenance" is that software is so "soft" that it can change drastically even after it's implementation phase officially ends. That is the reason why some people consider "maintenance" to be majority of the effort. Because even though on paper the software is "finished" it is so easy to change it that it will be changed.

This is why most modern software development methodologies don't really have such engineering structure and assume that software will never be "finished" and that it can change drastically at any point in it's lifetime. Even after many years in production.

Euphoric
  • 38,149