Best Practices In Global Agile Development For Product Innovation

[article]
Summary:

Agile over the wire and how to make it work.

In our experience, pure-play Agile development is destined to fail in a global delivery model. The basics of Agile, such as the emphasis on face-to-face communication, close interaction between teams and an adaptive approach to product development, are not possible while engaging an offshore team. However, by injecting process adaptations, Cognizant has successfully enabled some facet of "specially customized" Agile methodologies. In fact, a large percentage of Cognizant's software product innovation services use Agile practices in some form or the other.

Cognizant is a leader in product engineering capability, and one of the reasons for its success is the strong integration of processes in its delivery methodologies. Today, product requirements are evolving and there is huge pressure to meet deadlines, budget and user expectations. Many clients want to develop prototypes for products and start development before requirements are completely finalized. To meet such requirements, we extract the relevant principles of Agile processes and inject them into a global delivery model. Some clients already have some form of Agile process or "mindset" in place when they engage with Cognizant, which facilitates adoption of these customized Agile frameworks into their environment. 

 

To effectively use Agile development in a global model, we recommend focusing on the following key areas:

 

Iterative Development Approach

Traditionally, our development approach has been to get requirements sign-off before we start development. On Agile projects, we do not require client sign-off; {sidebar id=1} rather we use an iterative product development approach. The development of the product is planned over a series of iterations, where scoping of iterations is prioritized based on business and technical complexity. Architecturally significant requirements are developed first, followed by functionally significant ones. Working collaboratively with the client, we prioritize requirements and scope them for subsequent iterations/releases. The onsite-offshore iterations tend to be lengthier (around two weeks) than the typical duration for single-site projects (a few days or a week). Cognizant maintains a close control over the high-level scope and duration of the project, in effect controlling the iterations to an acceptable number. This achieves a balance between Agility and the budget constraints for the project.

 

Incremental Builds And Continuous Integration

For each iteration, build units are continuously integrated. This is achieved by seamless integration of the release management, build, unit test and promotion process and ensures that there are no last minute surprises during integration. We use a single source control system (preferably server-based environments) across the global team as it is important of have a single view of the source code. We have recommended IBM Rational ClearCase MultiSite and Serena Software Inc. PVCS. It is also important to set up a VPN or Frame Relay connection to facilitate high speed access for source code management. 

 

Face-to-face Interaction

Agile principles stress face-to-face human interaction and a high level of trust. Cognizant ensures that such interactions are planned with the client visiting the offshore teams and the offshore team members spending time at the client site at crucial phases of the project. In a classic Cognizant project, only the executive sponsors travel to meet offshore teams and vice versa. For agile projects, the development teams are also required to travel. The cost impact of these visits is normally offset by higher productivity in the later phases of the project. In addition, the teams ensure there is an overlap in daily work hours. Traditional application maintenance projects do not require high face-to-face contact given the nature of project. For agile projects, we mandate frequent video conferences to ensure that teams "see" each other and interact, rather than perceive a team member as just another voice on the phone! This level of interaction is most important to build up rapport and trust.

 

Test First Development

It is important to develop a test strategy and test plan prior to commencement of development. Test cases and unit test scripts ensure that unit test suites address testing at the unit level. This helps in building good regression suites to use as developers continuously integrate their code and as the product is progressively developed.

 

Code Refactoring

Refactoring of the code during iteration cycles helps to ensure that the framework and the necessary components are abstracted and refined periodically. Test first development and nightly builds together ensure that the existing code does not break during the refactoring process. At a major online services client, this allowed for rapid design review of code and test result validation.

 

Tool-based Approach

Cognizant requires a tool-based approach for the design and implementation processes. This ensures that documentation is kept to a minimum and changes to the design due to refinements in implementation can be effected with minimal effort. Cognizant uses industry leading and in-house tools. Teams must capture each requirement should be captured in a requirements management tool, test cases in a central test repository and documents in a knowledge repository. At a hi-tech client, requirements were captured in IBM Rational RequistePro, test plans/cases in Mercury Test Director and Cognizant brought in its internal tools for defect tracking and issue escalation. Cognizant has also used wikis and message boards for effective communication in projects. Each thread and message is posted with standard topic headings that can easily be scanned or reviewed for follow-up. This helps team members to keep pace with the level of change and degree of adaptability. This also helps to enhance the level of communication on projects and provide a substitute for the informal communication that would typically take place in cases where there is a single-site implementation.

 

Components And Framework-based Architecture

Pure-play Agile methodologies are recommended for smaller projects which can sustain "adaptive" methods. One of the ways to accommodate larger projects (more than 20 members) is to use components and technology frameworks, which enable multiple teams on a large project to work iteratively, hence facilitating agility. At Cognizant, the .NET group has built a framework on top of Microsoft Visual Team Studio and provides it at no charge to clients. The Cognizant .NET framework allows for feature-based development, granular tracking and enforcement of coding guidelines before allowing code check-in. Clients may also be able to leverage existing frameworks. Such frameworks are based on practices, principles and patterns that promote seamless co-development. It is essential to have extensible frameworks built in .NET and J2EE platforms providing infrastructure services and vertical and/or horizontal architectural and design patterns. Cognizant then adds new abstractions or modifies existing abstractions in the context of the project.

 

Where Agile Practices Don't Fit

Using a pure-play Agile approach in offshore projects leads to large gaps between requirements and implementation. The lack of proximity between different team members or the client team and Cognizant team leads to overhead (e.g., infrastructure, time, communication) in sustaining a pure-play Agile process, which cannot be justified.

Here are additional examples of where Agile practices would not be a first choice:

  • Projects with a very tight budget and schedule. Typically these projects need to have a very strong planned approach to meet deadlines and stay within budget. There is no scope for requirements to evolve or foriterations.
  • Projects demanding a high level of process adherence. There are situations (for example, as demanded by federal regulations) which require very strict process adherence. This can be of various types, from requirements approval processes to development processes. Such projects do not allow requirements to evolve and have to be predictive in nature.
  • Products in the maturity phase of their lifecycle. Mature products which require maintenance or few enhancements do not require an Agile approach. Again, the requirements stability and market factors can ensure a planned approach for any software development work for these products.

 

Client Example: World's Largest Online Marketplace

This Cognizant client provides a global trading/auction platform for online users, covering millions of items and thousands of categories. The project involved developing key new features and putting them into production immediately. In 16 months the teams delivered 24 individual projects, fed into 15-day delivery cycles. On average, the combined team changed 50,000 to 60,000 lines of code every two- to-three weeks. Cognizant used some best practices from Agile methodologies to work in this assignment. These included:

  • Working in small iterative cycles. All new feature development was handled as different short iteration projects. As a result, Cognizant was able to get new features to market in a very short duration. This involved close interaction with the end users (which was facilitated by the client's IT staff) and filtering out bugs that arose in the main code as side effects, because of the addition of new features. This helped the client to go back to its users with more and more new features in short spans.
  • Constant end-user interaction. The requests involved high interaction with the business owners as well as the end-users of the portal. Cognizant ensured that there were daily interaction sessions between the business owners and the Cognizant developers, so that the changing requirements that arose out of newer Web features, as well as any new business needs, were captured. This helped Cognizant add direct value to the client in its business by accelerating the release of new product features.
  • Framework-based development and continuous code refactoring. The client had defined an architecture framework that was followed by every team working on iterations, hence facilitating the synchronization of work cycles. In addition frameworks for onsite/offshore source control management were also defined.
  • Continuous integration and test first development.

For this project, 80% of development was done by the offshore team and the success metrics for the project were defined by the onsite Cognizant team in collaboration with client. The onsite team defined metrics such as number of production defects by priority and number of projects delivered on schedule, and tracked these across the whole program. Project success was evaluated by a weighted system of defined metrics.

 

Cognizant's involvement has benefited the client through the deployment of a scalable, internationalized architecture that supports business growth and a rapidly multiplying, global user base. With the use of Agile principles, Cognizant achieved a faster time-to-market for new features, at the same time enhancing the technical ability to incorporate new Web features.

 

Implementing The Move To Agile Development

To ensure successful implementation of Agile processes, Cognizant has created a boot camp for projects to ensure that the project team (including the Cognizant staff and client team members) fully understands the concepts. The boot camp covers aspects such as iterative development, coding guidelines, test execution strategy, onsite/offshore source code control and release management.

 

The true test for the successful execution of a process is successful delivery and positive client feedback. Cognizant has always realized the importance of this and lays emphasis on its process being business- and client-centric. We have seen that customized Agile methodologies have helped us achieve a trade-off between a pure-play Agile model and the offshore model which traditionally leverages a planned approach to development. These customized processes have helped our clients to meet business objectives like time-to-market for their products and to manage constantly evolving requirements and design, and simultaneously leverage the value of offshore development. For us, this is the ultimate goal of using process adaptations with our customers.


About the Authors

Dharmesh Mistry is responsible for driving revenue and delivery excellence across Cognizant's ISV segment.  He has over 16 years of experience working in the software development industry. Having a diverse career beginning with Accenture, Oracle and Netscape and more recently as Director of Professional services at VeriSign, he brings a set of experience that encompasses delivery, business development, and organizational development. Dharmesh has strong product development experience having worked on the first release of Oracle 8i at Oracle, followed up with critical new internet technologies at Netscape in eCommerce, LDAP and payment systems. At VeriSign, he introduced new security solutions in international markets in Europe and Asia, by providing unique software solutions to comply with needs of the European Union and Asia Digital security laws.

 

Siddhesh Navelkar is a member of the ISV segment of Cognizant's Technology Industry Practice. He has over six years of experience working with technology companies, in the areas of project delivery, business development and product management. He has worked closely with both onsite and offshore teams for multiple product engineering engagements.


 

About the author

CMCrossroads is a TechWell community.

Through conferences, training, consulting, and online resources, TechWell helps you develop and deliver great software every day.