Fault/Blame/Responsibility does not neatly add up to 100%.
Therefore, even if we can find ways the Agnostic could have documented this requirement in the code, or if we installed a build server that would have rejected the rewrites for breaking unit tests, this does not absolve the others of responsibility for:
1. Making changes without understanding the requirements. They weren't documented as comments, fair enough. But did those fictional characters examine the entire system? Did they review which code produced this function's input and which consumed its output? Did they ask the Agnostic why his code didn't handle strings of fewer than three characters?
One day the Agnostic will be gone, and one day soem hapless programmer will have to do the detective work to figure these things out. And that's a great reason to document things... to save someone the detective work. But a lack of documentation is not an excuse to skip the detective work.
2. Nowhere in the story was there a bug report filed, nor an individual "tasked" (I hate verbifying) with a rewrite. Nor did the story describe someone updating the unit tests to include the "missing cases."
3. Many folks have identified the need for these fictional characters to communicate. Note that in the story, even after the problem is identified, all four characters carry on behaving exactly the same way. The Agnostic at least tries to talk to the others, then gives up and just codes. None of them step back and ask the kind of questions you are asking here. None of them step back and figure out that there is more at stake than what to do with two-character zip codes.
So... what I am saying is that I agree with you, and on top of my agreement I am suggesting that even if we are finding ways the fictional Agnostic could have been a better developer, we shouldn't stop right there. We shouldn't let the others off the hook.
I think either I missed the point of this post or pretty much everyone else did. A post titled "The Narcissism of Small Code Differences" can't possibly be about what the proper way to write something is, about comments, or testing and build servers.
If I read it correctly the story is supposed to illustrate the problems that can arise when developers are tempted to rewrite something just for the sake of writing it differently. This should normally get people to think about what causes said urge, but I'm guessing nobody followed that train of thought. Then in your update you brilliantly stated
"it’s about the dynamic of programmers eager to rewrite code in their own image, and the hypothesis that our [...] motivation for doing so is to emphasize the small differences between ourselves and others."
Since this is something I'm guilty of myself I would have liked to see more comments on your hypothesis and other possible reasons for this interesting phenomenon. I still don't know if I have anything intelligent to say on the topic, I'll have to give this some thought and if I get any insights I'll probably reply on my blog.
I agree completely, and I guess I should have pointed out that your main point (that programmers take it on themselves to narcissistically fiddle with functioning code) is an excellent one. My comment wasn't meant as a criticism, but as pointing to an unstated assumption-- that the folks fiddling with the code assumed they knew what it was supposed to do-- and that documentation of the actual business requirement ought to be a) present somewhere, and b) consulted before anyone takes it on themselves to mickey with the code.
Therefore, even if we can find ways the Agnostic could have documented this requirement in the code, or if we installed a build server that would have rejected the rewrites for breaking unit tests, this does not absolve the others of responsibility for:
1. Making changes without understanding the requirements. They weren't documented as comments, fair enough. But did those fictional characters examine the entire system? Did they review which code produced this function's input and which consumed its output? Did they ask the Agnostic why his code didn't handle strings of fewer than three characters?
One day the Agnostic will be gone, and one day soem hapless programmer will have to do the detective work to figure these things out. And that's a great reason to document things... to save someone the detective work. But a lack of documentation is not an excuse to skip the detective work.
2. Nowhere in the story was there a bug report filed, nor an individual "tasked" (I hate verbifying) with a rewrite. Nor did the story describe someone updating the unit tests to include the "missing cases."
3. Many folks have identified the need for these fictional characters to communicate. Note that in the story, even after the problem is identified, all four characters carry on behaving exactly the same way. The Agnostic at least tries to talk to the others, then gives up and just codes. None of them step back and ask the kind of questions you are asking here. None of them step back and figure out that there is more at stake than what to do with two-character zip codes.
So... what I am saying is that I agree with you, and on top of my agreement I am suggesting that even if we are finding ways the fictional Agnostic could have been a better developer, we shouldn't stop right there. We shouldn't let the others off the hook.