The Road to 2.0 - Part 2: Beware the Feature Creeps

April 16th, 2007

Introduction and Disclaimer

The second in a three part series of taking a 1.0 application to 2.0. This segment of the Road to 2.0 series discusses a seemingly harmless yet often troublesome creature. They are parasitic in nature, though often perform some symbiotic function that benefit the host. Once attached they can never be removed, and will require constant attention. These strange beasts are called feature creeps.

Please note that this post should not be considered to be a rant against those helpful people that provide good feedback and feature requests. It is instead a discussion concerning the dangers that app developers face when allowing feature creeps into their applications. Beware the Feature Creeps.

1.0 - Your Vision Realized

bug1.gifWhen you first start writing your application, you most likely have a good idea of what the final product will be like. This is your vision.

When I started writing Screen Mimic, I knew exactly what I wanted. I wanted software that would allow me to make a recording of what was happening on my desktop, and I wanted that recording saved in Flash format. So that’s exactly what Screen Mimic 1.0 did. In December of 2005 my vision was fulfilled. 1.0 was complete. All was quiet. For about a day.

1.2 - Feature Creeps Add Complexity to Your App

bug2.gifThe following week I began receiving emails from people asking why there was no QuickTime export. I admit that this oversight was the result of a recently converted Window’s developer being ignorant of the world of Mac. So I was happy to comply. So I began working on the QuickTime export.

However there is a fundamental equation of software development that should be noted here:

Application Complexity = 1.0 Complexity + Complexity of New Features

That is the best case scenario. Others would argue that the real value is closer to:

Application Complexity = 1.0 Complexity * Complexity of New Features

Whichever equation you believe applies to you, every feature comes with an inherit cost. Not just the implementation cost, but a future support cost as well. Weighing all of these factors, I decided that QuickTime support was something that I needed to include.

1.X - Feature Creeps Never Die

bug3.gifSo you’ve let a couple of feature creeps into your app. One of them starts to cause you trouble. It keeps oozing creep goo into your code and you’re tired of cleaning it up. “No problem,”, you think, “I’ll just get rid of it.”. You stomp with your full weight on the creep, but when you lift your foot, you see the creep is unaffected. It is still exactly where it was, oozing goo into your app. Laughing at you.

This is the most profound rule you have to remember before letting a feature creep into your app.

Feature creeps never die.

Once you’ve released a feature in your app, any attempt to remove it is going to be met with an uproar by your customers. Why would you want to remove a feature from your app? After all, you worked so hard to put it in there. The answer my friend, is because feature creeps attract bugs.

1.X.y - Feature Creeps Attract Bugs

bug4.gifAs I mentioned above, Screen Mimic 1.2 introduced QuickTime support. Adding QuickTime support was great, but from then on, almost every incremental release of Screen Mimic included at least one QuickTime related bug fix:

  • Screen Mimic 1.2.1 - Fix for threading issues caused by QuickTime 7.0.4
  • Screen Mimic 1.5.2 - Fix for a problem caused by creating QTTime structures that caused slow playback in some cases.
  • Screen Mimic 1.5.3 - Another fix for slow playback in QuickTime movies in some other cases.

2.0 - Feature Creeps Breed

bug5.gifEvery feature creep that you add to your app will beget more feature creeps. Once I added QuickTime support, we then started receiving requests for enhancements to QuickTime support. This was natural since I wasn’t as familiar with QuickTime as the rest of the Mac community was.

The point of this however is that once you add a feature creep to your app, you are expected to treat it as if it were part of your app, not only in terms of support, but in expectations of future enhancement.

Conclusion

I want to again point out that this post should in no way be considered a rant against those people that suggest good features, or features in general. QuickTime support for example is a necessary feature in almost any Mac application and I am happy that someone pointed this out to me early on.

The point of this post is to keep app developers aware of the dangers that they face when letting feature creeps into their apps:

  • Feature Creeps Add Complexity to Your App
  • Feature Creeps Never Die
  • Feature Creeps Attract Bugs
  • Feature Creeps Breed

Beware the Feature Creeps

One Response to “The Road to 2.0 - Part 2: Beware the Feature Creeps”

  1. At

    Ah the ever expanding feature list. Twas ever thus…..

    The main question: is your software better for it? If yes, then good going!

Leave a Reply