Agile methodologies are emerging as the key to flexible, responsive software engineering. However, this approach which emphasizes face to-face communication and close interaction between teams is not optimal when engaging an offshore team.
Incremental Builds and Continuous Integration
TThrough a seamless process of release management, build, unit test and promotion, Heights continuously integrates build units for each iteration. This ensures there are no last-minute surprises during integration. It is important to have a single view of the source code, so we use a single source control system preferably a server-based environment. We also recommend setting up a VPN or Frame Relay connection for high-speed access, which facilitates source code management.
An Iterative Development Approach
Traditionally, Heights practice has been to get client sign-off on requirements before beginning product development. On Agile projects, however, we use a more iterative approach. Working collaboratively with the client, we prioritize requirements and scope them for subsequent iterations according to business and technical complexity. Architecturally significant requirements are developed first, then functionally significant ones. Onsite/offshore iterations tend to be lengthier (around two weeks) than typical single-site projects (a few days to one week). Heights maintain tight control over the high-level scope and duration of each project in effect, limiting the iterations to an acceptable number. This achieves a balance between agile methodologies and the projects budget constraints.
A Tool-based Approach
Heights suggest a tool-based approach to the design and implementation processes, which minimizes documentation and helps facilitate changes due to refinements in implementation. Teams should capture requirements in a requirements management tool, test cases in a central test repository and documents in a knowledge repository. Heights use both industry-leading tools and home grown tools. Heights also use wikis and message boards for effective communication during projects. Each thread and message is posted with standard topic headings that can easily be scanned or reviewed for follow-up, so that all team members can keep pace with the level of change and degree of adaptability. In addition, the use of wikis and message boards enhances communication across projects, providing a substitute for the informal exchanges that typically take place during a single-site implementation.
Refactoring 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 ensure that the existing code does not break during the refactoring process. The use of this process with a major online services client allowed us to rapidly design code review and test result validation.
Traditional application maintenance projects don’t require much face-to-face interaction, but agile principles stress personal rapport and a high level of trust among team members. Heights work to foster these relationships in a variety of ways. For example, our client may visit offshore members of the development team, who in turn spend time with the client at crucial points. The cost of this travel typically is offset by higher productivity in the later phase of the project. We also overlap the schedules of the onsite and offshore teams and hold frequent video conferences so that developers can see their fellow team members.
Components and Framework-based Architecture
Pure-play Agile methodologies are only recommended for smaller projects, which can sustain adaptive methods. On larger projects those with more than 20 team members the use of components and technology frameworks is one way to enable multiple teams across the globe to work interactively. For example, Heights .NET group has built a framework atop Microsoft Visual Team Studio that we provide free to clients. This framework allows feature-based development, granular tracking and enforcement of coding guidelines before allowing code check-in. Clients may also be able to leverage existing frameworks that are based on practices, principles and patterns that promote seamless development. Such frameworks must be extensible and built in platforms such as .NET and J2EE, which provide infrastructure services and vertical and/or horizontal architectural and design patterns. New abstractions can then be added or existing abstractions modified, in the context of the project.
Before starting development, Heights formulates a test strategy. Test cases and unit test scripts ensure that unit test suites address testing at the unit level. This helps us build good regression suites for our developers as they continuously integrate their code and progressively develop the product.
Implementing the Move to Agile Development
Heights have created an Agile boot camp so that all team members, including client and Heights teams, fully understand agile concepts. This boot camp covers such topics as iterative development, coding guidelines, test execution strategy, onsite/offshore source code control and release management. By customizing agile methodologies, we have combined pure-play agile development and a global delivery model, which traditionally uses planned approach. Thus we can help clients manage constantly evolving requirement sand meet business objectives such as time to-market for their products, while simultaneously leveraging the value of offshore development. For Heights which has always understood the importance of business-centric and client-centric processes”timely delivery and positive feed back are among the best indicators of a projects successful execution. This is the ultimate goal of using process adaptations with our clients.
Where Agile Practices Don’t Fit
As stated above, pure-play agile development is not compatible with offshore delivery. The physical separation of various team members, or of the client team and the Heights team, in a pure-play Agile process creates large gaps between requirements and implementation and leads to expenses in infrastructure, time and communication that cannot be justified.
There are other examples where agile practices would not be a first choice, projects with a tight budget and schedule. These usually require a strong planned approach to control costs and meet deadlines. They lack scope for iterations or evolving requirements. Products in the maturity phase of their life cycle. Agile practices don’t lend themselves well to mature products that only need maintenance or minor enhancements. Because of market factors and requirements stability, a planned approach for software development is appropriate for these products.
PProjects that demand a high level of process adherence. Some situations for example, when federal regulations must follow require strict adherence to processes of various types, from requirements approval processes to development processes. Such projects must be predictive in nature and don’t allow requirements to evolve.
Heights Technology Solutions is a leader in product engineering capability, and one reason why is our strong integration of processes in our delivery methodologies. We have found that, through process adaptations, agile development can be made compatible with global delivery. In fact, a large percentage of Heights product innovation services use Agile practices in one form or another.
Many Heights clients, facing intense pressure to meet deadlines, budgets and user expectations, want to develop prototypes and start product development before all requirements have been finalized. To help them achieve their goals, we extract relevant agile principles and inject them into our global delivery model. Some clients already have some form of agile processes or an Agile mindset in place when they engage Heights, which facilitates the adoption of customized agile frameworks into their environments. To enable agile development in a global mode.