The title and inspiration of this blog comes from Chapter 9 of John Bogle’s book “Enough: True Measures of Money, Business and Life”. In it, Bogle issues a call for a return to old-fashioned values of reason and moral authority.
Bogle’s emphasis on the need for such values as a constant bedrock and moral compass to ensure consistently correct navigation through even the most uncertain waters has specific and interesting parallels in the world of IT and software.
Until relatively recently the emphasis in our industry has always been on specific technologies, tools and techniques or on specific processes and practices.
While Fred Brooks rightly warned in The Mythical Man Month way back in 1975 that there are “No Silver Bullets”, and we in the industry all sagely nodded, the history of our industry ever since has seen the chasing and adoption of an endless series of just such silver bullets – from Formal Methods to 4GLs to CASE tools to Joint Application Development (JAD) to Object-Orientation, Component-Based Development, Iterative, Incremental, Service-Oriented and many others.
While in some quarters something like “agile” might be dismissed as just yet another in this long line of fads and fashions, on closer inspection some genuinely different did happen with the publication of the Agile Manifesto some ten years ago. And that is the fact that the Agile Manifesto takes the form of a set of shared values, not specific practices or techniques – just the kind of approach that Bogle is advocating. Underlying the four very general value statements that form the Agile Manifesto are a slightly larger set of twelve slightly more specific agile principles, but there is still not a specific practice, process or technique in sight.
The movement from processes and practices to values and principles is the movement form the specific to the general, which progressively we might roughly order from most specific to most general / fundamental as follows:
- Processes – tell us exactly how to do everything we might ever need to do
- Practices – provide a tool for doing one thing well, but leave everything else unspecified
- Principles – provide guidance on what kind of behaviour is for the best
- Values – most general and fundamental characterisation of “the right thing”.
Bogle’s emphasis on moral codes is also interesting in this sense. What ethics and moral codes are essentially all about is the search for the most general and fundamental principles that we can always trace back to and use as a constant and unchanging guide in even the most complex, novel and dynamic of situations. (What could be more complex and all encompassing than human social interactions? And yet something like the Ten Commandments represent a set of laws by which we can roughly circumnavigate them all. Of course, it is only rough guidance – it is always possible to imagine an extreme set of circumstances in which breaking one of the commandments might be the right thing to do).
Much more specific guidance is of course useful in our personal affaris too. “Don’t hit your Granny!” in most circumstances is more immediately useful than more general moral rules such as “Act only according to that maxim whereby you can, at the same time, will that it should become a universal law” (Kant’s Categorical Imperative – a formulation of the most generic and irreducible single moral imperative). However, if your Granny is choking on her spinach, suddenly the complete opposite specific imperative will be required. (And recourse to more general principles to explain any apparent discrepancy).
So it is with agile practices. The simple, specific set of rules in Scrum for example are much ore easily assimilated and applied in practice than the more general agile values and principles. But if we rigorously and inflexibly stick exactly to all the rules all the time we will inevitably come unstuck. Under what circumstances could we or should we bend or break a rule of Scrum or even adopt a very different specific approach altogether? Here we need to be guided in doing the right thing by deeper and more generic shared principles and values.
In our everyday “moral” lives we are quite comfortable with the idea of taking full responsibility for all our actions at all times, even though this includes adopting or rejecting specific actions and procedures (like hitting Granny) depending upon the specific circumstance, and tracing back when necessary to more general principles (such as “Do unto others”) when we are unclear what specific course of action is for the best.
(Which is why it is so hilarious when we hear a Samuel Beckett character complain “if I have always behaved like a pig, the fault lies not with me but with my superiors, who corrected me only on points of detail instead of showing me the essence of the system, after the manner of the great English schools, and the guiding principles of good manners, and how to proceed, without going wrong, from the former to the latter”).
What is lacking often in our professional conduct is the same attitude of complete personal empowerment and responsibility that we naturally assume in our personal lives. (“If I delivered working software when I shouldn’t have, the fault is not with me but with my superiors …”).
So in conclusion, Bogle’s call for the veneration of reason and moral codes have some interesting resonations in our own industry, and the need to ensure that we foster shared principles and values likely to serve us well in different and changing circumstances and accept there ultimate supremacy over useful practices and techniques which might serve us well in many circumstances, but which we may need the confidence to bend, break or abandon if circumstances and deeper principles and values demand it.