Styles

Wednesday, November 9, 2011

The dangers of gold plating

The term “Gold Plating” (when not actually referring to covering something with a thin layer of gold) comes from Lean manufacturing, essentially referring to the process of creating a part better than what its specifications require.  Applied to software development, it means putting more effort into a particular component of the software that is not needed, such as an added feature, making a needed feature unnecessarily complex, or unnecessarily fixing performance issues.  There are numerous reasons why a particular developer might choose to gold plate a certain feature, but some of the more common are:
  • Desire to meet a self-directed (and situation-agnostic) sense of quality
  • Desire to avoid getting angry phone calls due to an application crash caused by rare circumstances
  • Lack of understanding of what the end user actually needs
I’ve written about what happens when a developer has a misaligned sense of quality in software in a previous post.  It should be enough to say, though, that those involved in creating software need to start defining quality as lowering the cost per needed feature, not creating the best code base and/or user experience possible.  If a particular feature is needed, then great, by all means do it.  Nobody likes making or using mediocre software.  There are certainly cases when that extra effort pays off in the long run.  Just be sure that you are putting this extra effort in because the user needs it, not because the software team wants it.

I certainly can sympathize with the desire to avoid an angry phone call with a user due to something the application is or is not doing.  Bubble-wrapping the application is not the answer, though, for a variety of reasons.  In this case, the software architects and the business stakeholders need to have a frank conversation about what risks are acceptable and which ones are not.  The risk tolerance should change based on the type of application involved.  For example, a software team should be much more careful about making sure that every possibility is covered in creating an emergency responder system for a building vs. creating a social site for a non-critical internal app.

Finally, a lot of gold plating occurs because the software team genuinely thinks that a user would want that particular feature.  However, most people I know (including me) do a very poor job of understanding what it is a user wants without asking.  To do a good job of understanding the end-users needs, the development team must go to the end user and understand what it is they are trying to accomplish.  Once you understand their goals, then and only then can you start making educated guesses as to which features are needed and which ones are gold plating.

If none of that convinces you, remember that 40% of software features go unused according to a not-so-recent Gartner study.  Not only does adding these features add to the application the first time add to the costs of developing the product, but the presence of these features adds to the cost of extending and maintaining the product.  If you are able to stick only to the features that are needed, you will be able to reduce costs, increase ROI, and lower your headaches in product maintenance.

No comments:

Post a Comment