Coding Horror

programming and human factors

Customization: The Software Tar-Baby

Vendors often pitch customization as a feature of their software:

In the end, customizations and enhancements to a software solution are nearly always needed. This allows the software to be tailored to your needs, allowing for greater success, either with users or in business processes. They shouldn't be considered "necessary evils," but rather a "project variable." As long as they are justified, understood, and developed by the right resources, a product's modification can close the gap between a good product, and one that fits your organization perfectly.

In my experience, software customization is as much a danger as a benefit. I am reminded of the Tar-Baby parable:

"How are you feeling this morning?" says Brer Rabbit, says he.

The Tar-Baby didn't say a thing.

The Tar-Baby Parable

"What is the matter with you then? Are you deaf?" says Brer Rabbit, says he. "Cause if you are, I can holler louder," says he.

The Tar-Baby stayed still.

"You're stuck-up, that's what's wrong with you. You think you're too good to talk to me," says Brer Rabbit, says he. "And I'm going to cure you, that's what I'm going to do," says he.

Tar-Baby didn't say a word.

"I'm going to teach you how to talk to respectable folks if it's my last act," says Brer Rabbit, says he. "If you don't take off that hat and say howdy, I'm going to bust you wide open," says he.

Tar-Baby stayed still.

Brer Rabbit kept on asking her why she wouldn't talk and the Tar-Baby kept on saying nothing until Brer Rabbit finally drew back his fist, he did, and blip--he hit the Tar-Baby on the jaw. But his fist stuck and he couldn't pull it loose. The tar held him. But Tar-Baby, she stayed still.

"If you don't let me loose, I'm going to hit you again," says Brer Rabbit, says he, and with that he drew back his other fist and blap--he hit the Tar-Baby with the other hand and that one stuck fast too.

Tar-Baby she stayed still.

"Turn me loose, before I kick the natural stuffing out of you," says Brer Rabbit, says he, but the Tar-Baby just sat there.

She just held on and then Brer Rabbit jumped her with both his feet. Then Brer Rabbit yelled out that if that Tar-Baby didn't turn him loose, he was going to butt her crank-sided. Then he butted her and his head got stuck.

Brer Fox walked out from behind the bushes and strolled over to Brer Rabbit, looking as innocent as a mockingbird. "Well, I expect I got you this time, Brer Rabbit," says he. "Maybe I don't, but I expect I do. You've been around here sassing after me a mighty long time, but now it's the end. And then you're always getting into something that's none of your business," says Brer Fox, says he. "Who asked you to come and strike up a conversation with this Tar-Baby? And who stuck you up the way you are? Nobody in the round world. You just jammed yourself into that Tar-Baby without waiting for an invitation," says Brer Fox, says he.

It's tempting to view customization as the solution to any software limitations you encounter. If the software isn't doing exactly what you want, roll up your sleeves and mold the software into a better solution. This is usually done with the vendor's blessing; it's designed to be "extensible", after all. But like the tar-baby, extensive software customizations can trap you.

Where do you draw the line between customization, extensibility, and full-bore programming environment? I've participated in several projects where extensive customization of a third-party software package precluded us from upgrading to newer versions, or even switching to a competitor. Extracting yourself from a particular software choice is difficult even in the best of circumstances. But once you've performed extensive software customizations, extracting yourself from that software becomes nearly impossible.

And that's why, the next time a vendor sells you on customizations, you should consider the parable of the Tar-Baby before you're stuck in it.

Written by Jeff Atwood

Indoor enthusiast. Co-founder of Stack Exchange and Discourse. Disclaimer: I have no idea what I'm talking about. Find me here: http://twitter.com/codinghorror