“If you seek to plot out all your moves before you make them—if you put your faith in slow, deliberative planning in the hopes it will spare you failure down the line… you’re deluding yourself… it’s easier to plan derivative work… if your primary goal is to have a fully worked out, set-in-stone plan, you are only upping your chances of being unoriginal.” – Ed Catmull, Creativity, Inc.: Overcoming the Unseen Forces That Stand in the Way of True Inspiration
In a nutshell, the aim of Agile project management and software development is to divide your software development project up into small iterations or sections where each iteration is completed before moving onto the next section; thus allowing flexibility and pragmatism during the creative process.
Agile focuses on keeping the programme code simple, testing often, and delivering the functional parts to the client as soon as they are ready. This process allows for customer approval and the reworking of untidy sections along the way instead of delivering one large application that has to be revised because the result is either not successful nor does it match what the client’s original specification was.
Distributed software development
Before we look at several ways that the implementation of Agile as part of the software development process improves the quality of the end product, let’s first understand the concept of distributed software development.
In essence, “distributed [software] development is a software development model in which IT teams spread across geographical lines collaborate on applications or various software. These teams are often separated by mini-projects that are brought together for a final software buildout.“
Once we understand this definition, we can see that the distributed software development model is an ideal model for an offshore software development company. However, one of the biggest challenges of this software development model is that it is difficult to both manage a distributed team as well as keep control of the different versions of the source code.
Consequently, I believe that the question that begs is how to manage a company that utilises the distributed software development model.
Agile and offshore software development
As detailed above, the essence of Agile is to create cross-functional teams which work together on small iterations of the whole software development project. For example, if we are developing a stock control system, we can divide this project up into its logical sections.
One team can spec, develop, and test all of the functionality that allows the user to set up the stock master details, product categories, and bin locations, etc. The next team situated in a different geographical location can follow the same process, however, this time with the Goods Receiving module, and so on.
Once each section is complete, the next step is to demonstrate it to the client who will sign off that section if he is happy with the demonstration, or the development team can go back to the drawing board to rework the parts that the client is not happy with.
From the above discourse, we can see that Agile combined with distributed software development will afford the offshore software development company the opportunity to develop large software applications time and time again successfully.