Issue 24

The Joy and Challenges of Writing Quality Software

Cătălin Tudor
Principal Software Engineer


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:

  • Enjoyment and Engagement
  • Software Quality
  • Practical Considerations

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.

Enjoyment and Engagement

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

  • There are clear goals every step of the way,
  • There is immediate feedback to one"s actions,
  • There is a balance between challenges and skills,
  • Action and awareness are merged,
  • Distractions are excluded from consciousness,
  • There is no worry of failure.

When all the above are satisfied people are already enjoying themselves and engagement will follow (the author calls this state flow):

  • Self-consciousness disappears
  • The sense of time becomes distorted
  • The activity becomes autotelic (meaning one enjoys the activity just for the purpose of doing it and not for its final result)

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.

  1. Obviously, there are clear goals at every step of the way because what you have to do is pop one bubble at a time (or two or three, nobody says otherwise) you can only hope the wrapper will never run out of bubbles.
  2. There is immediate feedback to your actions, the fact that a bubble pops means you are on the right track, this simple feedback gives you a feeling of comfort and relaxation (acting as a stress relief)
  3. There is a balance between challenges and skills because the challenges can be solved by using your thumb in order to apply mild pressure.
  4. Action and awareness are merged. You are paying attention to what is happening with the bubble wrapper. If a bubble doesn"t pop you can always try again by applying slightly more pressure.
  5. Distractions are excluded from consciousness. Imagine you are using the wrapper and someone asks you if he/she can borough it (these kinds of things can end friendships!).
  6. There is no worry of failure. Have you ever been worried of failing just a moment before popping a bubble? I bet not. Worrying about failures is one of the best ways to inhibit your full capabilities therefore you should avoid doing it.

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.




  • Accenture
  • BT Code Crafters
  • Accesa
  • Bosch
  • Betfair
  • MHP
  • Connatix
  • BoatyardX
  • AboutYou
  • Telenav
  • .msg systems
  • Grab
  • Colors in projects