22 May 2009

Simple Design or Swiss-Army Knifing?

Naresh Jain's Managed Chaos has a short post reminding us to Embrace Simple Design.

Naresh uses the phrase:
“Smartest Possible Thing That Could Possibly Work”.
Stick that bromide in your quiver. I like that sentence.

Version One's
marketing material refers to simple design, quoting poet Wallace Stevens
"the art of what suffices."
- Wallace Stevens
in reference to growing application functionality that is
for today's story, and today’s story only
Sadly that advice is counter to our natural inclinations. We love to flex our muscles to unwittingly complicate things.

I sometimes feel victimized by Swiss-Army Knifing on the development team. Forget about gold plating being bereft of value to our product owners, I am referring to so-called re-usable components that well-meaning developers build. It's an affliction that inexplicably infects the C# practitioners more so than purveyors of Java.

Many times re-usable components are a detriment to the development team who feel obliged to use them. These re-usable Rube Goldberg contraptions present technical debt we must shoehorn into our code because...well ...because, um, they took so long to build?

Many of us have the unfortunate proclivity to grow do-all components; ostensibly for others to re-use. Unfortunately these knives do more than cut. Much more. So much more, they don't even cut very well. Our Swiss Army knives end up being clunky and difficult for others to understand. Plus, they sag our pants. Turn Jam into Jelly.

Is the Swiss Army knife approach little more than the flexing of coding muscles?

In XP, the acronym is YAGNI, for

"You Aren't Gonna Need It"

Let's resolve to keep it simple.

I plan to heed Naresh's advice to focus on, the “Smartest Possible Thing That Could Possibly Work”.

Thanks for the reminder.