Tuesday, September 18, 2007

Organic Software Growth: Watch Out For Cancers

One of the concepts that the company I currently work for touts from time to time is that their code grew organically. I'm not exactly sure what the president of the company understands the meaning of the word "organic" to be when used in this context. There are times I think that the word is simply thrown around as a buzzword because a bunch of really smart developers see the potential in it to help solve some of the large design and architectural problems that developers face on a daily basis.

And it does seem that organic software growth can be a great thing. If by organic growth you mean that when you respond to the demands of your customers you are able to increase the functionality of your software by growing new features into the the existing structure of the application in a way that is consistent and usable. I imagine this like those pesky spider plants all over the office. When they grow, you know what to expect. You get more fresh air and they are more pleasing to the eye simply because they got a little bigger and another leaf sprouted or whatever it is that individual leaves do. And with a little bit of daily tending, they really aren't all that pesky.

What you don't get is an ear of corn on your spider plant all of a sudden. This might not be a bad thing at first. You will certainly get your five minutes of fame for discovering or creating this new organism. People will be able to have a couple pieces of fresh corn at the office every once in a while. However, people will eventually realize that the two or three ears of corn they get from your new spider-corn plant really isn't worth all the trouble of having to re-balance the hanging pot every week so the water doesn't run out. Oh, they also have to make sure the pot is in a place where the corn ears get a lot of light but the spider part doesn't get so much light that it shrivels up. After the week or so it takes to find these problems, your customers will go get their spider plants from WalMart and buy however much corn they want from la fruiteria down the street whenever they want.

If you don't think about the features you add to your applications they won't fit in. If there's some off shoot piece of functionality that doesn't make sense with the rest of the application, not only will no one use it, but it gets in the way of the features they do like. At the very least, that new menu item for the new feature is going to mess up the muscle memory the users have built up to pick the good feature out of the menu. Maybe you introduced some new bugs in the good features while implementing the bad ones. Maybe the usage of the popular feature completely changed because of extra steps needed to distinguish it or its process from the useless feature. I'd be willing to bet that your application is also a lot more difficult to maintain than if the new feature just used all of the conventions and frameworks you already had in place.

And that's what I see happening around here as deadlines draw near. We are not taking the time to design usable, powerful and simple features that give customers real solutions to their problems and integrate wonderfully with the rest of the application. We seem to be taking their ideas and implementing them exactly as the are asked for instead of maintaining the consistency and integrity of the application. Hell, how many times does a customer ask for a change that really solves their problem anyway? This is not organic growth; this is Franken-cancer. It is not going to take long before one customer's request or sales-person's demand interferes directly with another. This causes the application to have many more preferences and settings that need to be set just to use the darned thing. We're going to spend more and more time cleaning the cruft and bugs out. And, no one will use any of those half designed features anyway because even though they asked to be able to pick corn off their spider plants, what they really needed were catered lunches.

No comments:

Post a Comment