Writing quality software is not an easy task. There are many unexpected situations for which you need to keep an eye out. The range of possible difficulties is really infinite and can vary from misunderstanding real project requirements and wasting good design opportunities to not having a fair and productive interaction with the rest of the team members.
Things become even worse for complex projects and the simple fact that you don"t like the programming language chosen for development can be the proverbial drop that fills the cup.
The purpose of the present article is to identify the characteristics of software development disciplines that make it easier for development teams to enjoy themselves and to feel engaged in the task of writing quality software. We are beginning our search by looking at:
Let"s start with enjoyment and engagement (in that order) and discuss both software quality and practical considerations later as they will fit well into the context.
Have you noticed how everybody (well maybe almost everybody) feels so engaged and enjoys popping bubble wrappers with every occasion? Why is that? What makes the bubble wrapper so attractive that often people say it helps them relax and reduces stress? Is it the smooth shape with lots of bubbles that makes it interesting, or is there something else?
The answer is quite surprising because actually it has nothing to do with the bubble wrapper itself but with the actual discipline required to pop the bubbles! But how can it be a discipline, when as we know a discipline means there must be some rules and restrictions and one is not allowed to do what he/she feels at any time? If you think like that you have just described a discipline that is not for humans. A discipline for humans must instill order and harmony between the product being created and the one who creates it.
In his fascinating book Creativity: Flow and the Psychology of Discovery and Invention, Mihaly Csikszentmihalyi describes the characteristics of such experiences
When all the above are satisfied people are already enjoying themselves and engagement will follow (the author calls this state flow):
As always the right pointers and suggestions make us see the facts in a totally different light and we can further analyze the effects of popping the bubble wrapper as the effects of a discipline with the above characteristics.
Each of the six characteristics (building blocks) is necessary for enjoyment to take place. It suffices to ignore just one of them and things may change dramatically. For example there are some bubble wrappers with communicating bubbles (the bubbles are not isolated from each other) such that applying pressure on one bubble will transfer the air to the next one making it impossible to be popped by hand. This causes a slightly unbalance between challenges and skills, transforming the task into a really frustrating one because bubbles will no longer pop without the help of a proper tool. I believe this simple observation strengthens the idea that enjoyment and engagement are not due to the wrapper, but to the discipline behind it.
You might ask yourself what does this have to do with the software development discipline. The answer is straight forward. Wouldn"t it be nice for your daily job related activities to act as a stress relief? This is not something reserved for the lucky ones. In order to enjoy and become fully engaged into your project, first of all, the six building blocks have to be targeted by your discipline. Once the building blocks are there, as it often happens in the real world, you need to pay attention and make adjustments as you go so you don"t lose any of them as the project goes on. This requires practice and it is not only a task for managers but for all team members, as we are all responsible for making the time spent on the project worth it.
[A short side note on Agile: One of the reasons Agile development looks so attractive is because its manifesto allows us to value human interaction and working software and human interaction again while making it clear that changes should be expected (so you should have no worry of failure). Agile promises us a software development discipline for humans to enjoy and be engaged in.]
To wrap up things, enjoyment and engagement bring huge benefits for projects and to the people working to make them a reality (think of increased creativity and innovation, just to name a few). Each of us should strive to make them happen by paying attention to the way we plan and execute our everyday tasks. Remember the six characteristics.
In part two of this article we"ll discuss about software quality and how the six principles can be made part of the software development discipline.