The Road to 2.0 - Part 2: Beware the Feature Creeps
April 16th, 2007Introduction 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
When 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
1.2 - Feature Creeps Add Complexity to Your App
The 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.
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
So 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.
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
As 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
Every 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
Ah the ever expanding feature list. Twas ever thus…..
The main question: is your software better for it? If yes, then good going!