It’s Not a Bug. It’s a Feature!
Page 1 of 112 Replies - 2013 Views - Last Post: 02 December 2015 - 07:58 AM
#1
It’s Not a Bug. It’s a Feature!
Posted 27 November 2015 - 09:03 AM
I recently got an interesting bug report. The latest version of the software does not work for a particular range of values. This kind of input was never specified in the requirements. It was never tested for and was never talked about, yet it worked several versions back. It turns out that it was just what the code did for that range of input back then. Since then, refactorings and features have changed things (it was a lot of versions back!) and the specific behaviour for this strange range of values has changed.
I know what I’m going to do this time around. I’m going to fix it free of charge but I the general case is interesting. What would you do in my situation if a bug report came in reporting something that had never been discussed but worked “correctly” in an older version of the software?
Replies To: It’s Not a Bug. It’s a Feature!
#2
Re: It’s Not a Bug. It’s a Feature!
Posted 27 November 2015 - 09:47 AM
#3
Re: It’s Not a Bug. It’s a Feature!
Posted 27 November 2015 - 10:13 AM
#4
Re: It’s Not a Bug. It’s a Feature!
Posted 27 November 2015 - 12:24 PM
Quote
Negative values for a physical quantity. In this case the negative makes no sense.
#5
Re: It’s Not a Bug. It’s a Feature!
Posted 27 November 2015 - 12:55 PM
POPULAR
I would think a quantity field would naturally not allow negative integers, though.
#6
Re: It’s Not a Bug. It’s a Feature!
Posted 27 November 2015 - 12:58 PM
In the case where you wrote the original code, it seems clear to me that it's yours to fix. In the case where you came on as a maintainer, if you came across the problem before making changes, then I would think it would be your responsibility to confirm with the client how the behavior should work. (and hopefully to price the work based on this discussion) On the other hand, if you went ahead and changed existing behavior that was not in scope, then the client has a reasonable claim to have you restore the original behavior without charge.
This post has been edited by jon.kiparsky: 27 November 2015 - 01:04 PM
Reason for edit:: reconsidered my position
#7
Re: It’s Not a Bug. It’s a Feature!
Posted 27 November 2015 - 01:47 PM

#8
Re: It’s Not a Bug. It’s a Feature!
Posted 28 November 2015 - 11:40 PM
cfoley, on 27 November 2015 - 04:03 PM, said:
I recently got an interesting bug report. The latest version of the software does not work for a particular range of values. This kind of input was never specified in the requirements. It was never tested for and was never talked about, yet it worked several versions back. It turns out that it was just what the code did for that range of input back then. Since then, refactorings and features have changed things (it was a lot of versions back!) and the specific behaviour for this strange range of values has changed.
I know what I’m going to do this time around. I’m going to fix it free of charge but I the general case is interesting. What would you do in my situation if a bug report came in reporting something that had never been discussed but worked “correctly” in an older version of the software?
You honestly dug your own grave here. Your guarantee may sound great but it's not feasible in the real world. Bugs are not black and white and you're bound to get into disputes (look at your current situation). You are more likely to damage your reputation and clients by getting into disputes (they are going to feel cheated, you will feel cheated or you will both feel cheated). There are better ways to be professional and give clients the same kind of guarantee.
A better freelance approach is simple. Once you finish a contract/project, you should extend an optional retainer fee/option (say one day/month to fix any bugs or add minor features etc). This is one day of paid work per-month you set aside of the client. The client can choose to use the day or skip the day but either way they pay one day a month. This gives you guaranteed money every month per-client on retainer and makes clients more confident in that if something goes wrong they don't have to find a new contractor or debate with an old one etc. Plus, the best kind of money is reoccurring money.

No software is ever 'finished'. There are always bugs, small features, adjustments etc. That's a much better way to handle it than doing work for free.
There's a good talk that touches on this method a bit, along with other advice, it's pretty good. Check it out here.
This post has been edited by cprop: 28 November 2015 - 11:49 PM
#9
Re: It’s Not a Bug. It’s a Feature!
Posted 01 December 2015 - 09:54 AM
Quote
Is this a commonly-held view? The purpose was to force me to code better quality software and so nobody can object to me fixing bugs first, enabling me to work with a codebase that is clean as possible. Maybe bug-fixes is the wrong word. "Mistakes" could be a better description. A while back, I found a better way of practising TDD and since then mistakes in my code have been negligible.
I certainly don't market myself as doing free bug fixes. That wouldn't send the right message!
#10
Re: It’s Not a Bug. It’s a Feature!
Posted 01 December 2015 - 09:16 PM
#11
Re: It’s Not a Bug. It’s a Feature!
Posted 01 December 2015 - 11:03 PM
Quote
There's a big difference, in my mind, between "small features, adjustments, etc" and bugs. A bug is an incorrect behavior in some existing feature, while an additional feature is a correct behavior that hasn't been implemented yet.
#12
Re: It’s Not a Bug. It’s a Feature!
Posted 02 December 2015 - 06:19 AM
#13
Re: It’s Not a Bug. It’s a Feature!
Posted 02 December 2015 - 07:58 AM
cprop, on 29 November 2015 - 06:40 AM, said:
I watched the talk and thought it was excellent.
However, the specific examples he gave for the retainer were changing requirements and "new security holes in Rails" which I'll generalise to external changes that affect the product (or changing requirements). He didn't mention bug fixing as part of the retainer and I think it's a big jump to assume that's what he meant.