Welcome to Manicprogrammer Sign in | Join | Help

Reflection In Software Development: The meditative type not the metadata type

In this post I propose we should do more meditative development and officially begin The Meditative Developer.

I was just sitting and reflecting on some programming I had recently done. Specifically I was reflecting on some unit tests I had created as models for others against WCF services. Suddenly it hit me, I don't use reflection enough. I am intentionally overloading that term. I don't mean the programmatic metadata reflection such as System.Reflection in C#. I mean meditative reflection. I mean simply sitting and thinking. In our modern world of software development with abbreviated sprints, lean practices and mantras that can often center around YAGNI I think we often lose site of more holistic actions such as simply reflecting. Formalized sprint retrospectives are not enough. They are just that, formalized. Software development professionals need to feed the soul that lead them into software development to begin with and that means sometimes sitting and thinking.

Our (software development folks) output has become a commodity and as such we have shifted too often into pure manufacturing mode. This shift is very visible in realizing that at least one of our industries most successful development processes, Scrum, takes its foundation from physical lean manufacturing theories. The recognition that much of what we do has been commoditized does not get much stronger than by adopting supply chain practices common to other commodities. What often gets lost in translation is that unlike our physical manufacturing counterparts we have a very low efficiency.  We cannot optimize the movements of the machinery with precision. This is not an issue with the process definition, such as Scrum; they are agnostic to this fact and care largely to bring to light the actuality of our inefficiency and plan it into our efforts. The problem is how we adopt these processes. Because we lack this efficiency we must make up for it thinking, reflecting and being more meditative. I don't see this happening.

We too often adopt out the meditative. I see a pattern in which we rely almost exclusively on others to provide a synthesis that will replace our own meditative action. These come in the form of code reviews, shared best practices, proliferation of publishing (present company obviously included) and countless other forms that I should likely think about. Shared experiences and practices are extremely important but cannot replace our own reflective analysis. I squirm a little at even using the phrase reflective analysis because meditative development has to be more free flowing than the connotation of  the word analysis provides. We need to sit and simply meditate on a single aspect of what we are working on or ruminate on all those things related to the domain that come into our mind.

I don't see this happening as a whole in our current industry. We produce. We produce quickly and with more efficiency than ever before but on the whole we are leaving the meditative development to others and abdicating our responsibility to provide the proper level of reflection to the problems we face. The problems we encounter and solve on a daily basis deserve more thoughtfulness than we provide them. Its not only a matter of quality for the software but a matter of quality of life. The URL under which I publish my blog is indicative of my observation and personal feelings. I too often feel I am the manic-programmer. The manic-developer has its place. The manic-developer is often a part of the soul of a developer. Who hasn't stayed up through a night to pound out something of interest.  It's important to me to have these aspects but I am not taking the time to be the meditative developer that is a big part of my inner programmer. Based on what I have seen as a whole I don't think others are either. This isn't meant to be an abstraction.

When I talk about meditative development I am not speaking in metaphysical terms or squishy abstractions. I have concrete ideas about what it means to be a meditative developer. Perhaps that seems an oxymoron (is oxymoronic a word?), but again I can't deny my nature that helped being me into the world of software development - I'm declarative - and thus define for myself, if not others,  meditative development.  Thus starts a new series from me and for me entitled The Meditative Developer.

Think about it, then check back.

Published Sunday, July 27, 2008 10:33 AM by michaelruminer
Filed under , ,

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Comments

# Reflection In Software Development: The meditative type not the metadata type | Available Domains - Industry leading domain name news


Enter the text you see in the image:

Leave a Comment

(required) 
required 
(required)