02.12.2014 Views

Agile Practices for Global Software Development - Roman Pichler

Agile Practices for Global Software Development - Roman Pichler

Agile Practices for Global Software Development - Roman Pichler

SHOW MORE
SHOW LESS

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.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!