In some of my recent posts on Agile I voiced my excitement and support for the Agile 2 movement. Indeed, after many years in software a breath of fresh air can still get me motivated. Agile 2 has given a renewed incentive to everyone’s favorite waste of time: quarreling in comment threads about the True interpretation of the Agile Path. “Folks, can we please stop going around in circles. Agile is perfectly straightforward if you do it our way. Just come back from the Dark Side and get certified with us”.
Forgive my tongue in cheek. Disagreement is not a waste of time. It’s the foundation of any democratic process. Software projects are still being scrapped midway or delivered with huge overruns, and Agile has notbrought us the magic bullet. Have you not been involved in those projects, or been partly responsible? We still haven’t found what we’re looking for, as Bono sang. Every proposal to improve out methods, from modest to maverick, deserves to be heard.
Let’s talk about artistry, craftsmanship and software quality. Writing code has been compared to an art as well as a craft. I love discussing the difference between the two and their relationship to quality. Software quality is a multi-faceted beast (functional correctness, usability, maintainability and all the other ilities). It’s impossible to judge the quality of a program by only looking at its source code, but it’s easy to recognise a clear lack of quality from any illegible tangle of spaghetti. Tools for quality metrics can point to such potential trouble but won’t guarantee that you’re building the right thing.
Anyway, if you take pride in your work, you don’t need tools to keep you on the straight and narrow. A true craftswoman always does the best she can. There is no such thing as too much quality, is there? Perhaps talk to the person who’s putting up the money. Quality saves money later, but it will cost you right now. From a business perspective the product needs to make money long enough to justify that expense. From an artistic perspective none of that matters. The true artist pursues quality for its own sake. Allow me a little segue into film and music.
Earlier this year I wrote an outspoken post following the online protests when the young author Marieke Lucas Rijneveld was commissioned to translate Amanda Gorman’s poem The Hill We Climb into Dutch. Rather than pointing out their non-existing experience as a literary translator, the protest centered around their clear lack of epidermal pigmentation. The job should have been given to a person of color. Rijneveld returned the assignment with the usual undignified and probably disingenuous apologies for having wounded certain sensitivities. I side with Ricky Gervais on this one: just because you’re offended doesn’t mean you’re right.
You may think this is the typical stance of a white Gen-X male, university educated and raised in an affluent, traditional rural Dutch milieu. And you would be spot on. My background colors everything I do and opine, including the previous paragraph, the next ones and everything I have written and will write on this blog. I could not be neutral if I wanted to.
All software teams I have worked in over the last ten years practiced some sort of Agile, sometimes effectively, sometimes in-name-only. I discovered a lot about the value of teamwork and leadership and I increasingly side with the Agile2 movement that the original ideas expressed in the Agile manifesto on these topics are routinely misinterpreted and misapplied. Software teams are not like sports teams. Not a bit.
Summary Pushing for test coverage is a bad incentive. It favors quantity over quality. You should prioritize your code with regard to test-worthiness. I discuss three such categories. First there is code that processes unmanaged and possibly malicious (user)input. You should test this for robustness. Secondly there is complex business logic with possible implementation errors. Test this for correctness. Thirdly there are quirks with trusted frameworks running code that doesn’t perform at scale. Run performance tests under realistic production loads to capture these.