views:

215

answers:

6

Where should the line be drawn between maintenance and new features?

The Oxford English Dictionary defines maintenance as:

(7.a) The action of keeping something in working order, in repair, etc.; the keeping up of a building, institution, body of troops, etc., by providing means for equipment, etc.; the state or fact of being so kept up; means or provision for upkeep.

I'm working with a client-server application and maintaining the client. In line with the definition, I would expect to perform:

  • Bug fixing
  • API Adaptations (minor changes necessary for the client to continue to work with the server)
  • Optimization for identified performance problems

I would not expect to perform:

  • New development (adding new functionality)

The Wikipedia Software Maintenance page references corrective, adaptive, perfective, and preventative maintenance, which seem to fall in line with what I'd expect, but the client-server nature complicates matters.

EDIT: With standalone applications that have no dependencies, if the software works it should continue to work. With client-server applications, the client may break when the server changes. Although this does not change the definition of maintenance it implies that there are more opportunities and occasions when changes to the client application will be necessary.

If two parties are to agree on a maintenance contract, a mutual understanding of what qualifies and maintenance and what qualifies as new features must be met, hence the question.

+5  A: 

The line between bug fix and feature can get blurry. I would consider usability enhancements and minor features as maintenance. My rule of thumb: if it's not worth bragging about to your customers (or charging for), then it's maintenance.

As an example, adding a feature allowing the user to print would be new development. Modifying the feature to allow the user to print a certain range of pages would be maintenance (it's minor, and probably should have worked that way from the start).

Jon B
Although a bit loose for a legal or binding agreement, I really like that definition.
Kaleb Pederson
+1  A: 

For bug fixes, it's easy to classify them as maintenance for the most part.

However, depending on your software product you may encounter "new features" that need to slip in with ongoing application maintenance.

For us, this commonly happens because of business requests from our customers or from third party regulations. The customers might want a few bugs fixed but at the same time now we need to support handling a new government regulation which legally requires us to "get it out now!".

That specific change is a "new feature" but would be installed as part of regular application maintenance release.

I'd say it really depends on the model your shop wishes to adopt and even still, you'll always run into situations where they overlap.

Mat Nadrofsky
+3  A: 

I would say maintenance is anything that you do to ensure that the product works as originally designed.

The sticking point there is usually "designed". If you didn't start off with some form of detailed design document specifying what the software would and wouldn't do, things are up for interpretation. And when things are left up to interpretation, generally the customers interpretation will be that the software is supposed to do everything they want it to do rather than everything they paid for it to do.

Eric Petroelje
+1  A: 

Bug fixes are definitely maintenance.

Increasing performance (speed) is maintenance.

Adding a feature that was suppose to be included in the last release and was not or which did not work, is maintenance (in my opinion).

Adding a total new feature, I do NOT consider to be maintenance.

Jim C
A: 

For me a bug is maintenance and an an enhancement is not.

But in my experience, non-coders often have a hard time distinguishing bug from enhancement. For them, a bug is anything that doesn't work the way they want it to. For me, a bug is something that doesn't work like it was specified or designed to.

If the functionality should have been in the original specification but wasn't, and the client signed off on the spec, it looks to me like enhancement (and thereby additional paid work).

Of course, there are the "soft" considerations as well - to maintain a good relationship it's often prudent to throw a couple requested enhancements in to the maintenance at no charge, especially if they are relatively small and you are able to manage this expectation fairly well.

JeffH
+1  A: 

I worked at one place (a vendor) that would fight the customer on every modification, that they were all new features! They would tell the customer that they purchased the bugs. That was a fun place to work! They would give in, but every month when they would send a bill they would "negotiate" with the customers. Keep in mind, we sold large custom systems, and it was very hard for customers to jump ship, and management knew it. it was a hassle as a developer.

I think maint is keeping the system running, fixing bugs, keeping it compatiable with the OS and other required software that may change. New features are capabilities that they didn't have before.

KM
+1 out of pity for having to work in such a shitty software shop
dss539