(Note: this is the translation of a post I've written in French for Octo Talks! earlier this summer.)
Developers get perplexed over
Amr's article: do
agile practices such as TDD or incremental design make them program "good" software? Do such practices help them to get to elegant solutions that will force the respect of their peers?
If you get around musicians, you'll end up meeting the archetypal Dilettante Beginner. D-Beginners aspire
to play like God, but they can't because they don't have the right Wah-Wah pedal, because their reed is too thin, because their keyboard doesn't have a good sound... They just can't -- yet. Here is the pattern:
"I'll stay a beginner for now, but just wait for my being rich enough to buy a Fender Stratocaster (and then you'll see)." Twenty years later the chap has got his Fender, he's still a beginner and he can only play the two first bars of a Jimi Hendrix's solo in synch with his stereo -- the volume cranked up to Full Blast.
The instrument doesn't "make" the musicien. What does is their motivation, their relentless desire to improve in spite of regular failures and frustrations. Their continuous effort to train again and again, even when not understanding why they're doing so.
Let's not downlook dilettantes, though :^) One has a lot to discover being around them. Dilettantes have a touching, idealist, optimistic side. And they usually know by heart the complete discography of amazing artists. Dilettantes are encyclopedists, they're erudite and passionate -- in place of being practitioners. Nothing wrong here, as long as we don't confuse one for the other.
-- Which brings us back to the initial question. As much as the instrument doesn't "make" the musician, agile practices don't "make" the developer. What does make is their motivation to improve, to try again in spite of past mistakes.
Or as Samuel Beckett puts it:
"Ever Tried. Ever Failed. No Matter. Try Again. Fail Again. Fail Better."
Are agile practices of any value, then? Let's get back to the musician and their instrument. When the instrument presses the musician to produce mediocre music (because the instrument has a poor quality, it's inconsistent, it's difficult to handle, etc.) two risks arise.
- The musician's motivation may fade before they've reached a gratifying level -- before they've mastered enough musical language and techniques to be able to express their emotions through performance.
- The goal of the musician may switch from "produce great music" to "manage to play a poor instrument (regardless of the outcome)."
Agile practices won't produce the "good" design (whatever "good" may mean). On the other hand, agile practices will help the coder to focus their energy where it's needed: on experimentation, learning, reading books and code... instead of evaporating this energy in patching every new problem, in staying at work late, in lying (to themselves) about the quality of their work.
To paraphrase the Irish writer: agile practices won't help you to succeed, they'll help you to fail better.