CodeBetter.Com
CodeBetter.Com
RSS 2.0 via Feedburner
           Do you Twitter? Follow us @CodeBetter

Grant Killian's Blog

No, this has nothing to do with beer -- but maybe it should?

Do customers deserve more than they ask for?

Some people in my company spent most of this afternoon feverishly running around because one person on our staff gave a customer more than they asked for; the “extra effort“ ended up causing problems and complications and boiled over into some colorful telephone “conversations“ and has yet to be resolved.  I'm just a casual observer to this meltdown, but it got me thinking . . .

I don't want to go into specific details, so let's take a hypothetical situation where a developer creates an application to track business contacts.  The application runs fine.  The .Net framework makes building in SMTP support easy, so the developer has a little extra time and builds an extra feature for emailing messages and newsletters to the contacts; this feature is developer-defined scope creep and doesn't appear on any list of customer requirements.

The developer thinks they've gone above and beyond to please a customer, and in some respects they have, but when problems start with the SMTP function -- problems that impact the rest of the application (perhaps the program crashes when an SMTP Server is unavailable), how does one handle the support for this?  Does the customer pay to fix a feature they didn't ask for, but now causes problems with their program?  It's a sticky situation.

There are many development methodologies out there, but I'm not aware of any that advocate doing more than you're asked like this.  For one, Agile Methods (Martin Fowler has a good resource on “Agile Methods” here) dictate you do the absolute minimum to satisfy the immediate customer requirement and don't program for future extensibility.  This leaves a bad taste in my mouth, however, because I usually find a certain level of prior planning and foresight is wise. 

For example, after our WeProgram.Net session a few days back, Brian Noyes (from IDesign and SoftInsight) shared his experience with the User Interface Process (UIP) Block and related how he developed a small program for a customer that could have used the UIP, but he chose to save the extra time effort (which means money to the customer).  As often happens, the customer came back wanting to extend the application, and the UIP would've made that extension so much easier (and cheaper for the customer)!

My point is, sometimes customers deserve more than they ask for.  A smart, extensible framework can be very valuable!  Other times, a simple and direct approach to solving a problem might be the way to go. 

How does a developer choose? 

There aren't any easy answers.  It's a combination of experience, communication with the client, and luck.  If I had to assert some rules regarding these situations, I would offer:

  • Always error on the side of simplicity and stick to the specs!  Avoid over engineering -- not everyone is building the next Amazon.com!
  • Check out the Application Blocks (UIP and others from Microsoft) and develop an organizational set of practices to ensure a measure of consistency in your applications.  It really makes enhancements and debugging easier!
  • Don't create functions the client doesn't request, unless it's behind the scenes and related to your intelligent framework.  In my hypothetical example, the programmer shouldn't have added a full set of features never requested.

I wish I had a happy ending to wrap this up with, but I don't.  The two companies are going back and forth over the issue.  If there's anything worth sharing on this issue, I'll be sure to keep you updated!

Happy .Netting!



Comments

Dave said:

IMHO the key item is that by your description the customer-requested features are impacted (the entire app crashes). Therefore, fixing things are the contractual responsibility of the developer. Now, if the quick and painless fix - one that completely and permanently fixes the customer-requested features - is to remove the 'developer creep' entirely... so be it. But no matter what, it's YOUR rep on the line. It's YOUR legal and contractual promise that is not fulfilled.

Hopefully proper OO coding techniques were employed, and removing the bad piece of code is a simple as removing a class that inherited from the SMTP functionality within the framework of the entire app.
# October 9, 2003 10:09 AM

JosephCooney said:

I think this is a hard one, because so often it seems the user expects certain things (usually quite small, sometimes not) that are not stated in the requirements. Clearly this is a problem in the requirements elicitation process, but if (as a developer) you are reasonably sure that the customer expects to be able to do X then it is often tempting to add "X", even though it is not stated as an explicit requirement, rather than release software to the customer, have them test it and realize that it is missing X which they really need. First impressions are hard to shake. If your software is very bare-bones because the customer forgot to ask for a lot of things they needed then it may be hard to shake the perception that it is "no good".
# October 9, 2003 12:05 PM

Scott said:

This is a good argument of including developement/design staff in the contractual discussions and/or the "discovery phase" before the contracts have acutally been signed. Doing this tends to help uncover the nice-to-haves that neither the user community nor the legel beagles are likely to think of (ain't experience a great thing). That being said, (and I have to agree with Grant) keeping things simple and sticking to the specifications are good ideas. This practice tends to minimize the cost to the customer (if the contract is a T&M type) or increases the bottom line (if the deal is a FFP contract).

However, there are times when a little extra effort and time expended is a good thing - like building into the design the hooks necessary to strap on that functionality that WILL be asked for later, whether the customer knows it or not. In this instance, you have cost the customer/bottom line a little bit, but now you are able to deliver next version at a much reduced cost. But, it all comes down to good design and communication with the customer.
# October 15, 2003 11:10 PM

Leave a Comment

(required)  
(optional)
(required)  

Enter the numbers above:
Add
Check out Devlicio.us!