Rock Engineering, Gold Plating, and Features

I used to have this post somewhere else, but it was inside a “previous life”. It got impressively long (see gold-plating below), and even talked about Beethoven. I’ll start this out small. Maybe I’ll enhance it with  some of those additional stories at some point.

The intent is simply to identify and describe anti-patterns associated with Requirements. Mostly this is for fun, because we don’t do Requirements anymore in Agile (although the lessons within these anti-patterns do have applicability in the Lean/Agile world for sure). Instead, in Agile, we often use the XP constructs user stories and epics, or sometimes just a simple and regular flow of enhancements and other issues. In OO we do use cases and scenarios. In any case we’ve recognized that they’re not really requirements; they are – to quote one of my mentors Walker Royce – desirements. That is, they’re negotiable.

Contents

  • Rock Engineering anti-pattern
  • Gold-Plating anti-pattern
  • Features

Our first anti-pattern is Rock Engineering. It is a form of crafting a solution to a problem that doesn’t exist, or a problem that is poorly understood. It goes like this …

King: “I need a rock. You there, go bring me a rock.”

You: “Yes, Sire, I shall bring you the finest rock in the land.” (and so you go find a rock.)

You: “Sire, I have brought you a rock, here it is, it is the finest rock in the land.” (Present with flourish)

King: “This is not the rock I need. It is too small.”

You: “Yes, Sire, I shall go find you the rock you need, the finest rock in the land.” (and so you go find another rock)

You: “Sire, I have brought you another rock, here it is, it is the finest rock in the land.”

King: “This is not the rock I need. It needs to be brown, and this rock is gray.”

You: “Yes, Sire, I shall …”

Of course, we can go on like this for hours until we accidentally bring the King a rock that he finds suitable, and even then it might not be exactly what he was looking for. What we need to do is elicit some requirements, shorten the time by focusing in on a solution that meets the actual expressed need. In order to do this, one is going to have to ask questions! Of course, if any time one asks the King a question one’s head is removed, that might be a cause of this wasteful behavior we obviously refer to as Rock Engineering.

Gold-Plating

A poor practice accentuated by Waterfall is called gold-plating. It occurs in conjunction with developing some capability that we perceive is needed or has been asked for. We have plenty of time to develop it, because it’s Waterfall and there’s never any urgency early in Waterfall. Let’s be sure we get this right and Wow our customer. So in addition to the bare minimum need we go over the top and really add some bells and whistles.

Yup, this is called gold-plating. Several results can accrue, and only a few are good. Among the not-so-good:

  1. Customer says, wow, that’s really cool, but I don’t need that and I’m not going to pay for that. All I needed was the functionality I asked you for.
  2. In your zeal to build this cool stuff, you injected Mr. Debt. Mr. Technical Debt. It’s buggy. It doesn’t run, or it runs slowly or otherwise unreliably.
  3. You overrun the time budget and/or the dollars budget.
  4. Your supervisor discovers that you’re overrunning the time/dollars budgets.
  5. Customer says, ugh, that’s really awful, that sucks, and I really I don’t need it so I’m not going to pay for that. All I needed was the functionality I asked you for.

One reason for Agile’s focus on values like sustainability, the customer, customer collaboration, short feedback loops and minimum viable product (MVP) is to avoid this anti-pattern.

Features

This one is short but I found it amusing once upon a time.

Definitions:

  • Bug: informal name for a software defect. The name arose because Adm. Hopper was tracking down a defect during some of her early work and found a physical bug in the hardware that was shorting it out and yielding erroneous results. Often depicted graphically as the image of an insect.
  • Feature: a bug that has been lovingly documented and memorialized in the software and its documentation artifacts. Depicted as an insect wearing a tuxedo.

Leave a Reply