Thursday, 24 May 2012

Code Reviews and Agile Environments – Improvement Practises


It has been a while since my last post.  So I thought of closing off our discussion on code reviews in agile environments, hopefully providing some sense of understanding.  So in this post I will discuss my perceptions around code reviews also known as peer reviews.  When I posted this topic I used the word “agile”, with a very specific reason.  There seems to be a lot of opinion associated with the word agile, especially in the software development industry.  So let’s explore that briefly: 

 Who is Agile, What is Agile when am I agile

Often the word agile has different connotations depending on the context, environment and industry it is used in. In a supply chain environment the word agile has a completely different meaning and this insinuation of the word agile for supply chain environments is referred to as agility.

“Agility is all about customer responsiveness, people and information, cooperation within and between firms and fitting a company for change.”

So looking at the software industry. “Agile software development” was coined by the Agile Manifesto in 2001.  The philosophy around being agile is summarised as follow:

·         Manage change (Being responsive to change )
·         Collaborate and communicate (Keeping the customer informed and happy)
·         Maintain Quality (Ensuring quality is delivered )

The adoption of an Agile methodology has been trigger in reaction to manage the points listed above, and to combat (not eliminate) the constraints that often impede the success of a software deliverable.  So, without trying to sound too much like a project manager.  These constraints often make its presence known through:

·         Some scope of work that needs to managed
·         Controlling the cost around that particular scope of work
·         Managing the resources and time in to ensure that the scope of work gets delivered timeously.

These three constraints manifests itself thorough,
·         Resources (Can  include physical infrastructure)
·         Time Constraints
·         Scope of work
·         Cost

The improper balance and management in any of these areas undoubtedly leads to a compromise in the quality of the software being delivered.  In reaction to this risk, different software development methodologies have been developed, of which agile is one of them. Each one of these methodologies comes with its own benefits and are in no way perfect, but pronouncedly aims to prescribed  approaches to solving the day to day problems, which is somewhat disconnected from reality.  Martin Fowler summaries this concern as follow:

The most frequent criticism of these methodologies is that they are bureaucratic. There's so much stuff to do to follow the methodology that the whole pace of development slows down” – Martin Fowler

There are several articles, journals and blogs that profess on the different software methodologies.  This post is not intended to cover them to the nth degree, but rather to add some informative context to the current perceptions.

 Common sense is maybe not so commonly understood

 My deliberate attempt of using the word “agile” in this post was to gather your responses and hopefully, see how the term “agile” is often misleading.   In all honesty when I initially posted the question Can "agile" software environments, truly accommodate decent code reviews. I had no idea on what responses I would get and the question I posted was both impulsive and unbiased, but this has led me to think about this a bit more carefully.

So to get back to code reviews in the context of agile, the simple answer to my question is yes, agile environments can cater for descent code reviews.   But how much time has actually been spent whilst trying to answer this question.  To me it seems like another common sense answer that is not so commonly understood. 

It should be remembered that code reviews (Note: I am not using the words “best practices” but rather “improvement practices”) is an improvement practise in an agile environment, whether it is conformed too or not, it can be adopted and adapted to suit the needs of the development team.
This means “Agile software environments” as quoted in my questions is intended to be adaptive; this implies that there is some compromise to any changes over and above a set expectation, as long as everyone reaches consensus around the expectation. 

I have been working on a project where we were allowed to move items on and off a product backlog  during a sprint cycle with only one condition from the customer.  The condition was “The delivery date does not move”.  This is yet another example of how an agile software environment needs to be adaptive with some compromise.

Improvement practises such as code reviews are often removed from the methodology itself, and merely serve as a catalyst to the delivery using the specific methodology.
One of the bloggers asked a question “around using” code reviews in a business intelligence development team, to me the concept is the same. 

The inhibiting factors that prevent a development team from adopting improvement practises are often symptomatic of agile barriers.  However  improvement practises should not be treated as the norm as James Barrow (former colleague) mention in reply to this post, but should rather be absorbed in a manner that is conducive to the dynamics of a software development team. 

One major benefit of code reviews is that is has the distinct ability to limit the defect density during the delivery of a software product, this goes without say.   However the profound benefit in following an improvement practise such as code reviews lies in the culture it provokes within a software development team.  This practise provokes what I call self-motivated behavioural change around quality, when encouraged correctly.    

I would highly recommend organisations and development teams to adopt code reviews as an improvement practise.   Please look out for my next post which will be some guidelines around adopting code reviews effectively.