Agile Practices for Global Software Development - Roman Pichler
Agile Practices for Global Software Development - Roman Pichler
Agile Practices for Global Software Development - Roman Pichler
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Agile</strong> Project Management<br />
Advisory Service<br />
Executive Update<br />
Vol. 5, No. 4<br />
<strong>Agile</strong><br />
<strong>Practices</strong><br />
<strong>for</strong> <strong>Global</strong><br />
<strong>Software</strong><br />
<strong>Development</strong><br />
by Daniel J. Paulish<br />
and <strong>Roman</strong> <strong>Pichler</strong><br />
In the current economic climate,<br />
in which cycle times are decreasing<br />
and costs are continuously<br />
reduced, companies are seeking<br />
new approaches to get softwareintensive<br />
products to market more<br />
quickly while also reducing their<br />
overall development investment.<br />
To meet this challenge, there is an<br />
increasing trend toward global<br />
software development, which takes<br />
advantage of low-wage work<strong>for</strong>ces<br />
in Eastern Europe, Asia, and South<br />
America. This Executive Update<br />
describes how agile methods help<br />
create globally developed software.<br />
BENEFITS OF GLOBAL<br />
DEVELOPMENT<br />
There are three primary reasons <strong>for</strong><br />
developing software systems simultaneously<br />
and at multiple sites that<br />
are distributed globally:<br />
1. Reduction of development<br />
expenses. <strong>Global</strong> software<br />
development takes advantage<br />
of lower wages by shifting development<br />
to low-cost countries,<br />
where wages are often less than<br />
half their US equivalent.<br />
2. Speed development. <strong>Software</strong><br />
development uses multiple<br />
teams in parallel, potentially<br />
around the clock through<br />
24/7 implementation.<br />
3. Skills and staff shortages.<br />
<strong>Global</strong> development assembles<br />
expertise from around the world<br />
to develop products <strong>for</strong> sale in<br />
the global market. This allows<br />
<strong>for</strong> use of local resources rather<br />
than requiring relocation of staff<br />
or hiring new staff.<br />
Even though these are compelling<br />
reasons <strong>for</strong> considering a global<br />
development strategy, we strongly<br />
encourage ensuring that global<br />
development does indeed provide<br />
your organization with competitive<br />
advantage be<strong>for</strong>e you begin distributing<br />
work around the globe.<br />
Per<strong>for</strong>m a sound business analysis<br />
and create a business case that<br />
accounts <strong>for</strong> risks and additional<br />
expenses. The technique of<br />
global analysis [5, 7, 12] helps<br />
accomplish this.<br />
GLOBAL DEVELOPMENT<br />
TRAPS<br />
As you consider distributing<br />
software development around<br />
the globe, beware of the following<br />
pitfalls that have ensnared others.<br />
Hidden Costs<br />
A significant up-front investment<br />
is often required to enable successful<br />
global software development.<br />
This includes investments in development<br />
process improvement,
2<br />
AGILE PROJECT MANAGEMENT ADVISORY SERVICE<br />
requirements engineering, software<br />
architecture design/refactoring,<br />
and development tools, such as <strong>for</strong><br />
requirements engineering, configuration<br />
management, and test tools<br />
that support global development<br />
work. <strong>Development</strong> expenses are<br />
often increased due to additional<br />
project management ef<strong>for</strong>ts, particularly<br />
in the areas of communications<br />
and procurement management.<br />
Beware of potential quality<br />
issues with supplied components<br />
and additional expenses caused<br />
by potential rework. As GE Real<br />
Estate CIO Hank Zupnick warns,<br />
“Someone working <strong>for</strong> $10,000 a<br />
year in Hyderabad can end up costing<br />
an American company four to<br />
eight times that amount” [11].<br />
Hidden Delays<br />
Distributed teams tend to be slower<br />
than colocated ones, particularly<br />
when the overall project team is<br />
not optimally organized. This is due<br />
to communications overhead, the<br />
limited communication window<br />
when work is carried out in different<br />
time zones, and potential language<br />
and cultural barriers. In fact,<br />
colocating development work is a<br />
powerful technique to speed up<br />
development [15]. Toyota, <strong>for</strong><br />
example, has successfully used<br />
colocation to slash its time to market<br />
to 19 months (compared with an<br />
industry average of three years) [4].<br />
You must balance the risks of<br />
global software development<br />
ef<strong>for</strong>ts with the benefits gained<br />
by developing software globally<br />
to ensure that global software<br />
development does indeed help<br />
your organization increase its<br />
profitability.<br />
AGILE METHODS AND<br />
GLOBAL DEVELOPMENT<br />
Once you are convinced that global<br />
software development is beneficial<br />
<strong>for</strong> your organization, you must<br />
choose a development approach.<br />
The following highlights areas<br />
crucial to the success of global<br />
software development. In particular,<br />
we discuss how agile methods<br />
can help you succeed. For the sake<br />
of simplicity, we limit our discussion<br />
to those new software development<br />
ef<strong>for</strong>ts in which your organization<br />
still owns the software<br />
requirements and architecture<br />
and significantly contributes to<br />
the code base.<br />
<strong>Development</strong> Process<br />
Shifting from a local to a globally<br />
distributed software development<br />
approach has a severe impact on<br />
your development process. Your<br />
global software development<br />
process should exhibit the following<br />
crucial characteristics:<br />
Divide your development<br />
ef<strong>for</strong>ts into two major parts<br />
[2, 9]. In the first stage, a small,<br />
colocated team develops a<br />
common understanding of customer<br />
needs and the key product<br />
features, and it develops an<br />
executable software baseline<br />
that enables an effective and<br />
efficient development of the<br />
entire software system. At this<br />
point, you may also want to<br />
employ on-site customers [2]. In<br />
the second stage, development<br />
work is distributed to the various<br />
sites that develop the fully featured<br />
software system. We recommend<br />
that key staff from the<br />
supplier development sites participate<br />
in the first stage so that<br />
they can function as liaisons to<br />
those working in home locations<br />
during the later stage of distributed<br />
development. Toyota, <strong>for</strong><br />
instance, successfully involves<br />
suppliers early in the development<br />
of new cars [4].<br />
Employ iterations and<br />
increments (small releases)<br />
[2, 6, 9, 12]. Carry out development<br />
work in the <strong>for</strong>m of timeboxed<br />
mini-projects that deliver<br />
an executable, stable, and<br />
testable software version. This<br />
helps you to grow the software<br />
system systematically and<br />
incrementally. It also provides<br />
a powerful tool to integrate<br />
components delivered by external<br />
suppliers on an ongoing<br />
basis, thereby improving supplier<br />
management and control.<br />
Ensure that iterations are<br />
planned across all development<br />
subteams. Full participation provides<br />
a powerful mechanism,<br />
so synchronize the development<br />
ef<strong>for</strong>ts on a regular basis.<br />
Adopt a proactive risk management<br />
approach [9]. First<br />
develop those aspects of the<br />
software system that expose<br />
high risks from a business and<br />
engineering perspective.<br />
Continuously integrate<br />
software [2]. Ensure that the<br />
software delivered by the various<br />
distributed subteams is<br />
frequently integrated and that a<br />
stable system build is created.<br />
Write tests first and employ<br />
regression testing extensively<br />
[2]. Ensure that you have an<br />
adequate test harness available<br />
by developing your unit tests<br />
be<strong>for</strong>e implementing functionality.<br />
Automate all tests to allow<br />
effective regression testing.<br />
Hold brief daily meetings [3].<br />
This allows you to synchronize<br />
the various teams using telephone<br />
or videoconferences.<br />
Keep meetings short and<br />
focused.<br />
Beware that a software development<br />
process that can be<br />
applied uni<strong>for</strong>mly by multiple<br />
development teams around the<br />
globe is more <strong>for</strong>mal and rigid<br />
than a process employed by a<br />
small colocated team in order to<br />
facilitate a common understanding<br />
and a uni<strong>for</strong>m approach.<br />
Requirements Engineering<br />
Use a small, central team responsible<br />
<strong>for</strong> developing and controlling<br />
the requirements model described<br />
in UML [14]. This requirements<br />
engineering team comprises subject<br />
matter experts who know the<br />
Vol. 5, No. 4<br />
©2004 Cutter Consortium
EXECUTIVE UPDATE 3<br />
existing products. The model<br />
is defined broadly in the beginning,<br />
with lower levels of detail as<br />
the functionality is incrementally<br />
added. Since the model is<br />
machine-readable, software tools<br />
are used to support the analysis<br />
of the model to identify errors and<br />
inconsistencies, provide requirements<br />
extraction <strong>for</strong> process<br />
artifacts, deliver constraints on<br />
maximum component size, and<br />
generate the automated test cases<br />
that will be used to validate the<br />
implemented products. Other recommended<br />
agile practices <strong>for</strong><br />
requirements engineering include<br />
use-case generation, user stories,<br />
and a high degree of customer<br />
involvement in defining the requirements<br />
model.<br />
<strong>Software</strong> Architecture<br />
The business decision to embark<br />
on global development must be<br />
made early in the design of software<br />
architecture. An approach to<br />
such a business decision is to apply<br />
a software architecture design<br />
analysis technique called global<br />
analysis [5, 7, 12], which looks systematically<br />
at influencing factors<br />
and the resulting design strategies.<br />
Un<strong>for</strong>tunately, global analysis and<br />
global development use the word<br />
“global” in different ways. <strong>Global</strong><br />
analysis is a high-level design technique<br />
employed during the early<br />
stages of software architecture<br />
design to establish design and project<br />
strategies. In contrast, global<br />
development refers to multisite<br />
development projects in which the<br />
product development sites are distributed<br />
around the world.<br />
<strong>Global</strong> analysis considers organizational,<br />
technological, and product<br />
factors that influence the design of<br />
the product line. Analysis of these<br />
factors results in a set of design<br />
strategies that are used to guide the<br />
product line architecture design.<br />
Figure 1 illustrates an example of<br />
how global analysis fits within<br />
the early phases of product-line<br />
development [12].<br />
A small, central architecture design<br />
team defines the architecture<br />
framework that includes all the<br />
components to meet the product<br />
line’s functionality [1]. An architecture<br />
framework is a standard way<br />
of integrating a collection of loosely<br />
coupled components, including<br />
both the standards <strong>for</strong> building the<br />
components and the runtime facilities<br />
<strong>for</strong> loading and running a configuration<br />
of such components [10].<br />
A component can be “compiled<br />
and linked” separately from others<br />
and developed independently. The<br />
architecture is organized so that<br />
independently developed subsystems<br />
are built as separate collections<br />
of components, interacting<br />
with other subsystems only through<br />
specified connections. The requirements<br />
model is decomposed to<br />
allocate features to the designed<br />
application components. The architecture<br />
team applies guidelines to<br />
limit the number of components in<br />
the design to somewhere between<br />
85 and 150 [12]. Furthermore, the<br />
architecture is designed such that<br />
no individual component will be<br />
larger than about 100,000 lines<br />
of code (LOC) of functionality<br />
and can be developed within 12<br />
months by a 10-person component<br />
Market<br />
Requirements<br />
Requirements<br />
Analysis<br />
Product<br />
Factors<br />
Organizational<br />
Factors<br />
<strong>Software</strong> Architecture Design<br />
<strong>Global</strong><br />
Analysis<br />
Issues and &<br />
Strategies<br />
Design<br />
Evaluation<br />
Architecture<br />
Description<br />
Technological<br />
Factors<br />
Project Strategy<br />
Conclusions<br />
Risk<br />
Analysis<br />
Risks and<br />
Mitigations<br />
Project<br />
Planning<br />
How, Who,<br />
When<br />
<strong>Software</strong> SW Dev. Dev.<br />
Plan Plan<br />
Schedule<br />
Sequence<br />
Release<br />
Planning<br />
Project<br />
Goals<br />
Project<br />
Strategies<br />
Risks and<br />
Mitigations<br />
Figure 1 — <strong>Global</strong> analysis.<br />
www.cutter.com Vol. 5, No. 4
4<br />
AGILE PROJECT MANAGEMENT ADVISORY SERVICE<br />
development team. Using these<br />
guidelines, we believe that we<br />
can successfully develop software<br />
product lines with a maximum<br />
size of about 15 million LOCs. In<br />
addition to global analysis and<br />
the architecture framework design,<br />
other recommended agile best<br />
practices include simple design,<br />
clear modular structure, use<br />
of design and coding standards,<br />
system metaphor, and pair<br />
programming.<br />
Organization<br />
While global software development<br />
may involve hundreds of developers,<br />
we recommend dividing the<br />
development project into small,<br />
dedicated subteams with wellqualified,<br />
full-time team members.<br />
Resist the temptation to overstaff<br />
your subteams if you’re motivated<br />
to keep labor costs low. Small,<br />
talented teams tend to achieve<br />
higher productivity than do larger<br />
ones [8, 13]. In addition, all<br />
members of each development<br />
subteam should be colocated.<br />
A subteam should always be<br />
responsible <strong>for</strong> a distinct part of the<br />
software system, avoiding overlapping<br />
responsibilities, redundant<br />
work, and integration problems.<br />
We thus recommend that the<br />
development project organization<br />
tracks the software architecture<br />
structure (Conway’s Law). This<br />
approach is neither new nor unique<br />
to software development. Boeing<br />
successfully developed its 777<br />
airplane by aligning several thousand<br />
developers with the product<br />
architecture [15]. In addition,<br />
ensure that centralized common<br />
functions such as project management,<br />
configuration management,<br />
system test, product management,<br />
requirements engineering, and an<br />
overall architecture team exist.<br />
Environment<br />
Adequate tool support is required<br />
to enable global software development<br />
(i.e., developing software at<br />
various global sites in parallel). This<br />
may imply upgrading your software<br />
development environment, particularly<br />
in these areas:<br />
A requirements engineering tool<br />
to allow parallel access from<br />
various sites and facilitate the<br />
traceability of requirements<br />
Test tools to enable test automation<br />
<strong>for</strong> regression tests<br />
Configuration management to<br />
support frequent integration,<br />
versioning, and branching<br />
Ensure uni<strong>for</strong>m use of tools; <strong>for</strong><br />
instance, use one unit test tool<br />
at all sites to avoid integration and<br />
compatibility issues and enable<br />
maintainability of the software system.<br />
If you already employ adequate<br />
tools, beware of potential<br />
issues when, <strong>for</strong> example, multiple<br />
sites now use the configuration<br />
management tool.<br />
CONCLUSION<br />
Although global software development<br />
is inherently difficult given the<br />
complications introduced by time<br />
and distance, we believe that projects<br />
that are planned and designed<br />
<strong>for</strong> distribution can be successful.<br />
<strong>Agile</strong> best practices can be best<br />
applied to global projects by centrally<br />
controlling the requirements<br />
and architecture design, then<br />
organizing the distributed development<br />
as component developments,<br />
using small subteams.<br />
REFERENCES<br />
1. Bady, J. “Take a 3-D Approach to<br />
Architecture Design.” Sun Journal,<br />
Vol. 5, No. 1, 2003 (www.sun.com/<br />
executives/sunjournal/v5n1/<br />
feature2.html).<br />
2. Beck, K. Extreme Programming<br />
Explained: Embrace Change.<br />
Addison-Wesley, 2000.<br />
3. Beedle, M., M. Devos, Y. Sharon,<br />
K. Schwaber, and J. Sutherland.<br />
“SCRUM: An Extension Pattern<br />
Language <strong>for</strong> Hyperproductive<br />
<strong>Software</strong> <strong>Development</strong>.” In<br />
N. Harrison, B. Foote, and<br />
H. Rohnert (eds.). Pattern<br />
Languages of Program Design 4.<br />
Addison-Wesley, 1999.<br />
4. Bremner, B., and C. Dawson.<br />
“Can Anything Stop Toyota?”<br />
BusinessWeek, 17 November 2003.<br />
5. Clements P. et al. Documenting<br />
<strong>Software</strong> Architectures: Views and<br />
Beyond Addison-Wesley, 2003.<br />
6. Cockburn, A. <strong>Agile</strong> <strong>Software</strong><br />
<strong>Development</strong>. Addison-Wesley<br />
2002.<br />
7. Hofmeister, C., R. Nord,<br />
and D. Soni. Applied <strong>Software</strong><br />
Architecture. Addison-Wesley, 1999.<br />
8. Jones, C. Applied<br />
<strong>Software</strong> Measurement:<br />
Assuring Productivity and Quality.<br />
2nd ed. McGraw-Hill, 1996.<br />
9. Kruchten, P. The Rational<br />
Unified Process: An Introduction.<br />
2nd ed. Addison-Wesley, 2000.<br />
10. Lenz, G., and T. Moeller.<br />
.NET — A Complete <strong>Development</strong><br />
Cycle. Addison-Wesley, 2003.<br />
Vol. 5, No. 4<br />
©2004 Cutter Consortium
EXECUTIVE UPDATE 5<br />
11. Overby, S. “The Hidden Costs<br />
of Offshore Outsourcing.” CIO,<br />
1 September 2003 (www.cio.com/<br />
archive/090103/money.html).<br />
12. Paulish, D.J. Architecture-Centric<br />
<strong>Software</strong> Project Management: A<br />
Practical Guide. Addison-Wesley,<br />
2001.<br />
13. <strong>Pichler</strong>, R., and P. Smith.<br />
“Developing Your Products in<br />
Half the Time.” Critical Eye,<br />
December 2003–February 2004.<br />
14. Robertson S., and J. Robertson.<br />
Mastering the Requirements<br />
Process. Addison-Wesley, 1999.<br />
15. Smith, P., and D. Reinertsen.<br />
Developing Products in Half the<br />
Time. John Wiley & Sons, 1997.<br />
ABOUT THE AUTHORS<br />
Daniel J. Paulish is a software<br />
project manager at Siemens<br />
Corporate Research in Princeton,<br />
New Jersey, USA, where he is<br />
responsible <strong>for</strong> Siemens’ software<br />
architecture R&D program. He has<br />
more than 20 years’ experience in<br />
software engineering management,<br />
and has been an international<br />
lecturer on software process<br />
improvement methods, project<br />
management, and measurement.<br />
He is the author of <strong>Software</strong><br />
Metrics: A Practitioner’s Guide to<br />
Improved Product <strong>Development</strong><br />
and Architecture-Centric <strong>Software</strong><br />
Project Management: A Practical<br />
Guide. Mr. Paulish can be reached<br />
at daniel.paulish@siemens.com.<br />
<strong>Roman</strong> <strong>Pichler</strong> works as a development<br />
process consultant at<br />
Siemens Corporate Technology<br />
in Munich, Germany. He supports<br />
various Siemens business groups<br />
in optimizing their development<br />
processes and specializes in<br />
agile/iterative development<br />
processes. He has published several<br />
articles on product development<br />
issues, most recently on accelerating<br />
product development and<br />
lean software development.<br />
Mr. <strong>Pichler</strong> can be reached at<br />
roman.pichler@siemens.com.<br />
The Executive Update is a publication of the <strong>Agile</strong> Project Management Advisory Service. ©2004 by Cutter Consortium. All rights reserved.<br />
Unauthorized reproduction in any <strong>for</strong>m, including photocopying, faxing, and image scanning, is against the law. Reprints make an excellent<br />
training tool. For in<strong>for</strong>mation about reprints and/or back issues of Cutter Consortium publications, call +1 781 648 8700 or e-mail service@<br />
cutter.com<br />
www.cutter.com Vol. 5, No. 4
Workshop Developers/<br />
Presenters<br />
Every workshop is led by one of<br />
Cutter Consortium s expert Senior<br />
Consultants — experienced IT<br />
professionals who have honed<br />
their skills and developed their<br />
methodologies over years in the<br />
field at companies like yours.<br />
Verna Allee<br />
Scott Ambler<br />
Robert Austin<br />
James Bach<br />
Kent Beck<br />
E.M. Bennatan<br />
Doug DeCarlo<br />
Tom DeMarco<br />
Jonathan G. Geiger<br />
Michael Guttman<br />
Tushar Hazra<br />
Peter Herzum<br />
Jim Highsmith<br />
Claudia Imhoff<br />
Wendell Jones<br />
Joshua Kerievsky<br />
Tim Lister<br />
Lisa Loftis<br />
David Loshin<br />
Michael Mah<br />
Larissa Moss<br />
Joyce Norris-Montanari<br />
Ken Orr<br />
Ray Pettit<br />
Carl Pritchard<br />
Helen Pukszta<br />
Thomas Redman<br />
Suzanne Robertson<br />
Johanna Rothman<br />
Lou Russell<br />
Michael Schmitz<br />
Ken Schwaber<br />
Rob Thomsett<br />
William Ulrich<br />
Karl Wiig<br />
Ed Yourdon<br />
Workshops<br />
In these times of intense pressure to make every<br />
development dollar and every development minute<br />
count, the maxim you are only as strong as your<br />
weakest link has never rung truer.<br />
Moving your development organization<br />
up the productivity curve will improve<br />
the ROI of every one of your projects.<br />
Just trace this back and you’ll discover<br />
the ROI in training is immense. And<br />
with training and workshops designed<br />
and delivered by Cutter Consortium’s<br />
Senior Consultants, you can add to<br />
that equation the peace of mind you<br />
get from being trained by the best<br />
of the best.<br />
Cutter Consortium offers inhouse<br />
training solutions from IT project<br />
management techniques to software<br />
development methodologies, improving<br />
data quality, architecting Web services<br />
applications, aligning business and IT<br />
objectives and more.<br />
CUTTER<br />
CONSORTIUM<br />
Workshop Topics<br />
<strong>Agile</strong> <strong>Development</strong> Methodologies<br />
Business-IT Alignment<br />
Data Quality<br />
Data Warehousing<br />
Enterprise Architecture<br />
Estimation Techniques<br />
Extreme Programming<br />
IT Strategic Planning<br />
Knowledge Management<br />
Metrics/Benchmarking<br />
Outsourcing<br />
Project Management<br />
Requirements Management<br />
Risk Management<br />
<strong>Software</strong> <strong>Development</strong> <strong>Practices</strong><br />
Testing<br />
Web Services<br />
Cutter Consortium<br />
37 Broadway, Suite 1<br />
Arlington, MA 02474-5552, USA<br />
Tel: +1 781 648 8700<br />
Fax: +1 781 648 1950<br />
Web: www.cutter.com<br />
E-mail: sales@cutter.com<br />
For details about the courses offered in each<br />
of these areas, contact Dennis Crowley at<br />
+1 781 641 5125 or dcrowley@cutter.com,<br />
or visit www.cutter.com/workshops.