In pursuit of progress: The more we develop, the more flawed our code becomes

What do struggles over Marriage Equality and the Confederate Flag have to do with Software?

horses pulling plow
Credit: Wikipedia

There is a Zen parable about a farmer whose horse runs away and whose neighbors all gather to say, “Such bad luck!”  “Perhaps,” he says.  The next day the horse returns, bringing 3 wild horses with him, causing the neighbors to say, “Such good luck!”  “Perhaps,” says the farmer.  The next day, the farmer’s son tries to ride one of the wild horses and is thrown, breaking his leg.  “Such bad luck!” say the neighbors.  “Perhaps,” says he.  The next day, military officials come to the town to conscript young able-bodied men into a war, but they pass by the injured farmer’s son.

The story is only a few repetitive lines, but I would be hard-pressed to name one in all literature that competes with it for combined applicability and profundity.  Its impact correlates to its challenge to the assumption that guides most of us in our professional, personal and civic lives – that we can predict and influence what will maximize good outcomes and minimize mad ones.

I have been thinking a lot about that farmer and his neighbours this week.  My own neighbors have been gathering online nearly constantly to say, “Such good luck!” and (some of them) “Such bad luck!” at the judicial victories of marriage equality and national health insurance and at the mass-repudiation of the Confederate flag.

Two of these especially touch me deeply: For my entire childhood in Columbia, South Carolina, the Stars and Bars rebel flag flew atop the State House there, waving a shadow over all of us who felt threatened or even just unrepresented by it.  And 15 years ago I webmastered the No on CA Proposition 22 campaign, fighting to prevent the law from singling out LGBT people as unworthy of marriage – we failed at that time, 60% to 40%.  Such bad luck.

As a programmer, I usually act as if progress is real and its direction is clear.  The codebase on which I work is vastly improved in terms of functionality and scope compared to a year ago.  If we all do our jobs, it seems reasonable to think, the same will be true next year.  And yet, as all experienced software workers know, “technical debt” and defects accumulate along with new functionality.

What may not be as easily seen is that they do so naturally – even under hypothetically perfect programming conditions – because of the same principle at work in the parable of the farmer, the Pali term for which is paṭiccasamuppāda (“mutual arising”).  Every action contains the seeds of unknown others, including ones that work toward its own destruction.

The Christian formulation of this principle, “The Lord works in mysterious ways,” acknowledges the ineffable contingency of events but asserts a specific intelligence at their helm, preserving the notion of progress (even inevitable progress) toward good.  It was cited by President Obama in his eulogy of Clementa Pinckney, the state senator assassinated in the massacre that drove the country to reexamine the symbolism of the Confederacy.

And indeed, collective progress spurred on by the death of individuals must surely be one of the most mysterious ways of all.  For better and for worse, we have seen it happen throughout our history – as one example, recall the passage of the Civil Rights Act in the wake of President Kennedy’s assassination.

In the software profession, as in the civic sphere since the days of Divine Right, we must generally get by without claiming access to omniscience or its understandable ineffability.  I would not get very far by averring to my colleagues in QA that Javascript, or I in my creation of it, work in mysterious ways!

Still, we do not and cannot exempt ourselves from mutual arising – the more we develop, the more flawed our code will become; the greater our union, the harder that union will be to perfect.  Sooner or later, in either case, the system will face a choice between evolution and revolution.

As profound as paṭiccasamuppāda can be, when we encounter it as citizens or even as developers it can also be pretty terrifying.  After all, is there any point in making progress that simply entails its own undoing?  

I believe the answer is yes, but also that final victory is rarely if ever seen at the level at which we expect to make progress.  The point, I would say, lies in creating conditions for programming (or citizenship) that make it easier for new events to be channeled into progress than into conflict.  This involves stepping outside the struggle between good and bad code (or policy), and managing how things come to need coding or legislating in the first place.  In the software realm, this is accomplished by development methodology, such as Scrum; in democracy, it may analogize to constitutional process.

With a solid enough methodology in place and regularly maintained, it is actually easier to contribute good code than bad – actually possible for the system to progress by default.  And with enough care paid to the system of our nation and world, one day it may be that when any of us first conceives the type of fear or sadness that drove a young South Carolina man – who apparently walked as a boy through all the same halls at all the same schools I did – to a progressively destructive chain of interpretations and actions ending in terrorism, it will be easier to channel that fear or sadness instead into community.


This article is published as part of the IDG Contributor Network. Want to Join?

ITWorld DealPost: The best in tech deals and discounts.