I currently work in an agile environment that works primarily in web development for a university. My boss always talks about the differences between maintenance and development while also considering the possibility of enhancements.

My question is... Is there a specific definition that can define the differences between maintenance/development/enhancement? And, does that definition also depend on the type of process your team is using (i.e. we are currently using SVN and making a transition to git)?

  • 1
    If anyone could edit my question and place the correct tags with this that would be great, I am very new to this sub-stack. Sep 22, 2016 at 22:03
  • 1
    Maintenance = fixing bugs; development = creating/modifying functionality. There's overlap, of course.
    – Todd A. Jacobs
    Sep 22, 2016 at 22:33
  • There is federal budget guidance that draws a distinction between these two concepts - google "DME"
    – MCW
    Oct 27, 2016 at 18:27
  • Work is work. But some organizations make a distinction between work on major new features, break/fix & patching, and incremental improvements. Those often map to the terms you’re using, but it’s largely an arbitrary distinction for political or budgetary reasons. The only real distinction from an engineering perspective is greenfield vs. brownfield work; but it’s all still work!
    – Todd A. Jacobs
    Oct 8, 2018 at 10:57

6 Answers 6


This is based on personal experience, so if it differs from your own, feel free to jump in.

  • Development - refers to the primary implementation of new projects. Once an initial development project is complete, and the clients/stakeholders have accepted it, then you will typically move into a new phase--either maintenance or enhancement.

  • Maintenance - refers to ongoing administration of accepted and "completed" functionalities/features. For instance, you may have a maintenance contract to: provide ongoing support to end-users, to fix previously unknown bugs in the accepted functionality, to ensure that the server doesn't go down, and so on.

  • Enhancement - refers to adding new features to an already completed project. For example, if you make me a social media application, and 2 years later, I ask your team to add e-commerce functionality that wasn't previously expected or scoped, that's an enhancement.

So, short version:

Development = Completely New Projects

Maintenance = Ongoing Technical Support

Enhancement = Adding New Features to a project, as a new phase, after completion

  • Agreed on maintenance, but my experience on development vs. enhancement differs. It's far more frequent to add large features to existing products, than build new ones. Adding Siri to iOS is hardly an enhancement, for example. People mostly distinguish development and enhancement by the size of the project or value provided rather than new feature vs. new product.
    – RomanK
    Oct 28, 2016 at 1:54

Is there a specific definition that can define the differences between maintenance/development/enhancement?

Development is, hypothetically, simply work done by developers. However, more likely it is being used as shorthand for 'new development', which is the creation of new features/functionality in the product. An example of new development is allowing orders customer to be copied in an order-tracking system.

An enhancement is a new feature request, especially an 'unnecessary' one. Something that improves (enhances) the product, but is not actually required in order for the product to work/be accepted. In most cases, an enhancement or 'future enhancement' is an improvement on existing (or soon-to-be) functionality. An example of an enhancement would be including hotkeys for certain functionalities in a product (such as allowing ctrl-c and ctrl-v to copy-paste an order).

Maintenance is the process of providing upkeep on an existing product. The most common case of this is fixing bugs, though things such as software refactoring, changing to use a new framework, or even updating documentation could be considered maintenance. An example of maintenance would be fixing copy/paste functionality after you realize you broke it a week ago when you added those hotkeys.

And, does that definition also depend on the type of process your team is using (i.e. we are currently using SVN and making a transition to git)?



You are asking the wrong question.

Understand this - the difference between maintenance job and development job is that after every development job - there is a maintenance job to support whatever developers did.

For example, you studied a new methodology for interaction between managers of the company and its customers. You come to your boss and propose that you create a CRM system in which you will store all information about your customers and etc. You get an okay and start the job, you develop CRM system and hand it in - it is installed and used in operations. You get a hefty bonus for doing the great job and leave to another company to work on greater goals.

When you leave - requests start to come in. People are wondering why things are done in certain way. Could they be changed a little bit and made easier to use? And in this and that situations that CRM system is completely wrong. And here starts the maintenance work - there should be someone who will teach the end users to use your CRM, someone to change the forms a bit - so they are easier to use, someone to make little upgrades, supporting the infrastructure - ensuring everything runs smoothly.

Let's say that you developed your CRM in a way that requires daily operations by an admin. That means that there should be always a person on staff - who will be capable of doing that operation. If they don't - the system no longer works. If they are on vacation - there should be another person available. A great example is the usage of paid SMS services to send important notifications to the users of the system - since the service is paid and external to your company - someone should always ensure that the bills are paid and that SMS service provider will not stop sending your SMS.

So, whenever you develop something - you should always make sure that you are developing in such way that support and maintenance of your system is not a hard thing, or at least that it is a manageable thing.


Let's take a BigShop using SalePlatform as an example.

  • When BigShop marketing department wants new discount campaign they raise a ticket to BigShop maintenance department to create new discount and assign products to it.
  • When BigShop maintenance department realizes that discount feature does not work they raise a ticket to SalePlatform support department.
  • When BigShop marketing department receives a reply that discounts feature actually does not exist they raise a ticket to SalePlatform development team to implement it.

I see maintenance and development as fluid phases that occur in an iteration. I don't think it makes sense to define an unknown bug as maintenance six months after a project has been delivered. I see it as

Deploy new version of software --> X weeks afterwards we have a maintenance window.

Bugs after that should be considered as new development unless they are related to production incidents that can be fixed through log checking, restart of servers and the like.


Maintaining a app and developing management of a new app require totally different skillsets.

Maintaining only requires some development skills and some understanding of requirements. Depending on the company you work at you find yourself focusing on a sales-like skillset or being a direct customer-programmer or a requirements-manager or even a tester.

In contrast, development management of a new project requires a variety of skills. You need a coverage of business, legal, development, UML, design, PMBOK, some marketing skill and customer-side project structure knowledge.

The level of skills to manage such a project is totally relative to what company you work at. A new development project is a totally different animal depending on the company you work at. Thus, the type of people you assign would be totally different.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.