During 1999, the year when Agile Manifesto was announced to the industry, an interesting article entitled “Critical Success Factors in Software Projects” by John S. Reel, then Chief Technology Officer of Trident Data Systems, got published in IEEE Software. This article presents five critical success factors – Start on the right foot, Maintain momentum, Track progress, Make smart decisions, and Institutionalize post-mortem analysis.
In this article John claims several interesting facts and observations out of which the following four are worth sharing.
1). “At least seven of 10 signs of IS project failures are determined before a design is developed or a line of code is written.”
2). “By the time you figure out you have a quality problem it is probably too late to fix it.”
3). “Project leaders often avoid confronting individuals and merely “fix” a problem by setting arbitrary team rules.”
4). “If you don’t take time to figure out what happened during a project, both the good and the bad, you’re doomed to repeat it.”
We are now stepping into 2011. We have seen a decade after the announcement of Agile manifesto and adoption of evolutionary methodologies such as Agile Software Development.
Agile Software Development emphasizes on regular and frequent delivery of working software at sustainable pace and considers working code as the true measure of project progress. Agile is people centric and values collaboration and coordination among team members. With the success of agile and distributed agile, one can weigh the veracity of these four observations to software projects of the recent times in terms of probability of occurrence. While these observations are irrefutable, in agile software development there are proven principles and best practices that help practitioners ensure success in projects by means of applying proactive course corrections.
While agile methodology and distributed agile software development have gained popularity with several success stories, they do pose challenges. Global Software Development in agile environments or distributed agile pose several challenges due to distance, differences in time zones, cultures, differences in leadership styles, variations in organizational policies, different types of stakeholders etc., When it comes to executing multi-site projects, agile practitioners do face several challenges due to factors such as distribution of teams that result in limitations in face-to-face communication, and cultural mix of teams that impede team bonding.
During the Y2K era, methodologies such as Xtreme Programming (XP) were being practiced by limited set of projects across the globe. During 1999 and 2000 when Agile Manifesto and Agile Principles were new to the world of Software Engineering, methodologists and practitioners constrained agile to collocated teams with onsite customer. Gradually over the years, agile adoption increased. By 2005 agile methodology was adopted by distributed teams and the industry started calling these distributed agile.
We have executed several projects using distributed agile methodology with teams spread across continents and time zones. Consequently we have identified the following ten critical success factors that are of immense value in ensuring success in distributed agile projects.
1). Setup the Base Camp
2). Ensure Explicit Delegation and Validate Assumptions
3). Cut Communication Loops
4). Facilitate Tool Driven Query Resolution
5). Initiate Test Drives
6). Assess Internal Quality
7). Manage Effort Variance Constructively
8). Take Stock of User Stories for Status Checks
9). Invest in Root Cause Analysis
10). Complement People to Improve Process
Details on these are available in the white paper ‘Critical Success Factors in Distributed Agile for Outsourced Product Development‘.
In my opinion there are two ways to derive critical success factors – a) analytical and b) experiential. The first approach is very time consuming. One needs to collect data from hundreds of projects and analyze the data in order to derive critical success factors. Obviously, the results will be dependent on the accuracy of data. The second approach is experiential and it can combine organizational best practices, lessons learned as well as our thought leadership. We took the second approach in identifying these success factors. We have found it applicable and practical across several new projects.
During a speaking session at Agile Tour 2010 on this subject I could see several interesting questions from participants. Many participants shared their experiences and agreed with all these factors. That is what motivated me to write this blog in order to share it with all readers. Do you practice distributed agile? What do you consider as critical success factors?