There was an interesting post to a thread over at Joel on Software today.

Software must be one of the few endeavors where the art of creative destruction is neglected.

Landscapers uproot dead trees; architects remove walls; civil engineers tear down old bridges.  Even acorns have to rot before they can germinate and grow into a trees.  But programmers are loathe to clean up after themselves.  They’ll rarely remove an old, obsolete, or wrong feature because, Lord forbid, a customer may complain.  After all, it doesn’t hurt to leave it in, does it?

Well, no, it wreaks havoc on your UI.  New users will reject your clunky old app. “What’s with all this cruft?  This app makes no sense!”

Alyosha`
Friday, January 09, 2004

I think Alyosha is quite right. Too often we find features lingering in software (specifically commercial software and even more so in vertical software) that should be either rolled into other functions (i.e. feature consolidation) or removed entirely.   

This is something we have struggled with ourselves for the last few years. And while I’m proud to say we have uprooted our share of trees, not all of them were good decisions. Determining how much use any one feature gets from end-users is very difficult and near impossible with widely distributed commercial applications. And lets just say I’ve had my fair share of rude awakenings when a version goes into beta.