software architectures and organizations in distributed development environments

Upload: amy-min-chen

Post on 08-Apr-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/7/2019 Software Architectures and Organizations in Distributed Development Environments

    1/8

    1

    Software Architectures and Organizations in

    Distributed Development Environments

    Min Chen

    Master of Software Engineering

    Carnegie Mellon UniversityPittsburgh, PA

    [email protected]

    2005

    Introduction

    Software architecture, as defined by Clements et al, is the

    structure or structures of the system, which consist of

    elements, their externally visible properties, and the

    relationships among them. It allows groups of people

    often separated by organizational, geographical, and eventemporal boundaries to work cooperatively and

    productively together to solve a much larger problem than

    any of them would be capable of individually. [Clements

    2003]

    Communication patterns are embedded in architectures.

    Hence, architectures can be used to study distribution, in

    the sense of suggesting which components will be given to

    which organization units. The architecture can drive thestructure of the organization units that will implement the

    system in the same way that the structure of an existing

    organization unit influences in the architecture.

    Software architectures, plans, and formal processes areimportant artifacts to achieve coordination with formal

    communication. These are particularly useful in

    organizations in distributed development environments

    because the lack of communication across sites makes

    coordination of the distributed teams difficult. A plan withwell-defined boundaries is critical in dividing work so that

    it can be assigned to different teams. Also, an architecture

    based on components with independent functionalities

    helps divide the work across sites and reduces the

    necessity of interaction among the teams [Herbsleb1999a].

    There is an extensive literature about designing software

    architecture to fulfill technical requirements. However,

    literature about architectures suitable for organizations is

    scarce. Furthermore, there are many methodologies to

    reason about quality attributes such as performance and

    modifiability, but little is said about the suitability of an

    architecture to be assigned to organization units, namely

    distributability.

    This paper is the result of an independent study a

    Carnegie Mellon University (CMU). The research topic is

    about designing software architecture for distributed

    development teams. The purpose of this independent studywas to incorporate useful ideas about architectures and

    organizations from organizational behavior, socialpsychology, sociology, and engineering fields.

    This independent study was done in parallel with a Studio

    project. The goal of this project was to design an

    architecture suitable for six distributed development teams

    Some of the results of this independent study were applied

    to the Studio project.

    The ideas from the cited papers are categorized under one

    of the following sections according to the contributions ofeach paper.

    1.Architecture, Organization, and Coordination2.Distributability as a Quality Attribute3.Characteristics of a Distributable Architecture4.Designing and Reasoning about Distributability5.Documenting Distributable Architecture

    The referenced papers are cited in the Annotated

    Bibliographies section where the most relevant ideas abou

    the topic of interest are presented. Interesting ideas that are

    not relevant to the topic of this paper were not cited.

    Annotated Bibliographies

    1.Architecture, Organization andCoordination

  • 8/7/2019 Software Architectures and Organizations in Distributed Development Environments

    2/8

    2

    a) Coordination in Task-Performing Groups

    [Wittenbaum 1998]

    The authors of this paper explain why teams need to

    coordinate when performing together to achieve a common

    goal. They also explain the coordination mechanisms and

    when these mechanisms are more efficiently applied.

    Coordination is an essential component of successful

    group performance. Group coordination can vary on at

    least two dimensions: time and explicitness. Coordination

    may occur before group work begins or during the process

    of working together. Coordination can also be tacit, basedon unspoken expectations and intentions, or it may be

    explicit.

    Collective tasks require varying degrees of dependence

    among members in order to complete the task. Some tasksdemand that members work together to integrate their

    efforts, whereas others allow members to perform wellwhile working independently. Tasks that create high

    dependency among members add to the complexity of

    synchronization and may render tacit coordination

    strategies ineffective. Therefore, the more coordination

    required of members, the more they should use explicit

    strategies. When uncertainty is low, preplans made

    significant contribution to organizational effectiveness,

    whereas when uncertainty was high, coordination during

    interaction contributed significantly to organizational

    effectiveness.

    A conclusion from the statements of the authors is that themore complex a system is, the more explicit the

    coordination has to be. When a software architecture has

    interdependent components that require teams to perform

    together, it has to be well documented as a form of explicit

    coordination.

    Also, knowing in advance each teams profile skills,

    size, and cultural background helps team to coordinate

    by creating expectations about the performance of each

    other. Teams profiles can also be used as an input when

    designing an architecture of a system that will be

    developed by these teams. In the same way, thearchitecture of the system can dictate the set of skills

    required by each team in order to develop a certain

    component. Cultural stereotypes are helpful to predict

    how well a team will communicate.

    b)How do Committees Invent? [Conway 1968]

    The author states that there is a very close relationship

    between the structure of a system and the structure of the

    organization which designed it. This kind of a structure-

    preserving relationship between two sets of things is called

    a homomorphism. Organizations will stamp out an imageof themselves in every design they produce. The author

    also used the Federal Government as an example of an

    entity that is both a design organization designing laws

    treaties, and policies and a designed system the

    Constitution being the principal preliminary designdocument .

    At the times when this cited paper was written, software

    development was mainly done in-house. Architectures

    reflected the structure of the design teams because theseteams were part of the end-users group. However, this

    may not be true in the modern society where most of the

    developments are done by independent software houses

    and the design teams are not part of the end-user

    organization. Custom-made software will more likereflect the structure of the organization for which it was

    created. For example, ERP or other software fororganizational use will be structured to fit the end-users

    group instead of the design team. The affirmation of the

    author might still be true for general purposes software

    such as office applications.

    c) Architectural Innovation: the Reconfiguration o

    Existing Product Technologies and The Failure o

    Established Firms [Henderson 1990]

    The authors of this cited paper state that architectural

    innovations destroy the usefulness of the architectura

    knowledge of established firms, and that sincearchitectural knowledge tends to become embedded in the

    structure and information-processing procedures of

    established organizations, this destruction is difficult for

    firms to recognize and hard to correct. Architectura

    innovation therefore presents established organizations

    with subtle challenges that may have significant

    competitive implications.

    Architectural innovation has a more significant impact on

    the relationships between components than on the

    technologies of the components themselves.

    The architectural knowledge is embedded in channels

    filters, and strategies of an organization. Hence, the

    discovery process and the process of creating new

    information and rooting out the old usually takes time

    The organization may be tempted to modify the channelsfilters, and strategies that already exist rather than to incur

    the significant fixed costs and considerable organizational

    friction required to build new sets from scratch.

  • 8/7/2019 Software Architectures and Organizations in Distributed Development Environments

    3/8

    3

    The statements of the authors show why legacy

    organizations are constraint by legacy the products they

    designed. In the software industry, the legacy code hasshaped organizations in very significant ways.

    Designing an innovative and successful architecture

    requires having a new vision and be willing to throw away

    the mindset with which an organization had designedarchitectures. Maybe creating distributable architectures

    requires architects to use a complete new mindset and

    design from a new perspective.

    d) The Misalignment of Product Architecture and

    Organizational Structure in Complex Product

    Development [Sosa 2004]These authors also state that product architecture

    knowledge is typically embedded in the communicationpatterns of established development organizations. Their

    research integrates the product architecture andorganizational structure to study how design interfaces in

    the product architecture map onto communication patterns

    within the development organization.

    There are known design interfaces not addressed by team

    interactions, and observed team interactions not predicted

    by design interfaces. Identifying when these two scenarios

    can potentially happen helps managers to allocate

    resources better. Managers must identify and manage

    critical cross-boundary interfaces without relying on their

    level of importance as a mechanism to improve their

    alignment with interactions.

    This paper points out the cases when these misalignments

    can potentially happen. It is important to take these

    scenarios in consideration when designing a system that

    will be developed by distributed teams because they can

    predict when unplanned coordination will be necessary for

    the success of the project.

    e) An Interdisciplinary Perspective on

    Interdependencies [Cleidson 2005]

    The authors present their survey about approaches forsupporting interdependencies from different disciplines,

    including software engineering, organizational science

    management, computer-supported cooperative work, and

    human-computer interaction. They created a theoretical

    framework that supports the comparison of approachesacross disciplines. This framework summarizes the

    knowledge in the study of dependencies. It also provides a

    common vocabulary for discussing interdependencies.

    Among the most relevant ideas of this paper, there are

    modularity, task model, product model, organizational

    model, and Design Structure Matrices (DSM).

    Modularity is one way to manage system complexityIt is achieved by decomposing the system. The

    recomposition of the system suggests that produc

    dependencies create task dependencies.

    The product model describes dependencies betweenproduces or artifacts being developed by an

    organization.

    The task model describes how tasks or activitiesinteract to determine and outcome jointly. The focus is

    not only on the study the tasks performed by particularorganizations, but also how the degree of

    interdependencies between tasks influences the choice

    of the associated coordination mechanisms to manage

    these independences.

    The organizational model focuses on how entireorganizations interacted in order to property

    accomplish their goals. The product model and task model influence each

    other. Different studies have shown that dependencies

    in the product model create dependencies among

    actors who, therefore, need to communicate and

    coordinate to perform their task. Similarly

    interdependencies in the task model influence how

    organizations structure themselves. The interaction of

    these two models show how software developmen

    dependencies influence or are influenced by the

    tasks that need to be performed in an organization.

    Design Structure Matrix (DSM) is a tool that displays

    the relationships between elements of a system in acompact, visual, and analytically advantageous format

    Although most of the ideas represented in this cited paper

    are taken from other sources, having this collection of

    ideas in one place helped to find literature about

    interdependencies of different domains and how to reason

    about them.

    Many of these ideas were used in the Studio project such

    as the use of a DSM as an architecture dependency view

    and the optimization of the DSM to obtain the ideal

    sequence of development based on componentsinterdependency. Later on, this dependency view was used

    to predict the interaction and interdependency of the

    teams. It also helped in the grouping of components as

    work units to be assigned to teams.

    2.Distributability as a Quality Attributea) Achieving Qualities [Clements 2003]

  • 8/7/2019 Software Architectures and Organizations in Distributed Development Environments

    4/8

    4

    The authors talk about tactics for achieving availability,

    modifiability, performance, security, testability, andusability.

    Although there is no mention about distributability, we

    pay special attention to modifiability because it has similar

    concerns.

    There are three ways to achieve modifiability: localize

    modifications, prevent ripple effects, and defer biding time.

    Localize modifications includes maintaining semanticcoherence. Cohesion and coupling are two metrics for

    module/component dependencies. Coupling and cohesion

    metrics are an attempt to measure semantic coherence, but

    they are missing the context of a change. Instead, semantic

    coherence should be measured against a set of anticipatedchanges.

    Modifiability is achieved by designing modules with high

    cohesion and low coupling.

    The challenge is to maintain the systems developed by

    distributed teams. How to maintain and give support to a

    system whose experts are scattered in different places?

    Both maintainability and distributability are similar to

    modifiability. There is no clear definition of when a

    system is maintainable and distributable.

    3.Characteristics of a DistributableArchitecture

    a) Architecture for Software Construction by

    Unrelated Developers [Gentleman]

    The author explains the importance of a software

    architecture at different phases: planning, operation,

    maintenance, and evolution. An example of planning,

    architectures can be used to study communication

    requirements between components and, hence, to assess

    the suitability for distribution in the sense of what should

    run on which node or a network. If the software systemwas to be operated jointly by a collection of organizations,

    the software architecture might be used to study

    distribution, in the sense of suggesting which componentsand which responsibilities to be given to which

    organization units.

    Large and long-lived software systems can result from the

    combined efforts of various unrelated developmentorganizations, organizations not even known to one

    another. No single design authority, to which the others

    report, has overall system responsibility. Such examples

    also illustrate the importance of including in softwarearchitecture the relationship between entities that exist and

    are used during the construction process, instead of

    focusing only on relationships between entities that exist a

    run time.

    The author gives examples of complex projects that used

    several COTS products to create one system. Wrappers

    were used to integrate the COTS products because COTS

    components produce their output in representation that are

    not understandable to others.

    The use of wrappers might not applicable when designing

    architecture for distributed teams because the effort of

    creating the wrappers might inhibit the reason for

    distributing the development of the system.

    4.Designing and Reasoning aboutDistributability

    a) Applying Social Network Analysis to the

    Information in CVS Repositories [Lopez 2004]

    The authors used social networks to analyze the structure

    evolution and internal processes of open source software

    Social Network Analysis allows capturing importan

    characteristics and relationships within a system. Theauthors also used a weighted graph to capture relationship

    of developers and modules in which characteristics as

    information flow or communities can be studied.

    Knowing the structure and interaction among teams in

    advance can help designing an architecture for distributed

    teams. An architecture should not inhibit paths of

    communication when they naturally exist, instead they

    should allow for them in the design of the product.

    The communication patterns revealed in the social network

    analysis are particularly useful when designing a newsystem that is more suitable for the same organization

    Social network analysis helps to understand legacy code

    and the limitations imposed in legacy organization.

    b) Using Dependence Analysis to Support Software

    Architecture Understanding [Zhao 1997]

    The author proposes the Architectural DependenceAnalysis technique to reason about the dependencies

  • 8/7/2019 Software Architectures and Organizations in Distributed Development Environments

    5/8

    5

    among elements of the architecture of a software system.

    The paper shows an example written in ACME and uses a

    Software Architectural Dependence Graph (SADG) torepresent dependencies at the architecture level.

    Although the SADG seems to be a useful representation, it

    doesnt differ much from the graphical representation of a

    design written in ACME.

    The concept of architectural slicing is introduced in this

    paper as a decomposition technique.

    On of the benefits of this technique is that reusablearchitectural descriptions can be extracted by slicing the

    architecture of a software system. Another possible benefit

    of this approach is to find out how many elements are

    affected with an architectural change.

    There is no notion of architecture styles. Some of the

    concepts are not be applicable to all architecture styles. Forexample, a meaningful slicing of a system that uses the

    publish-subscribe style [Clements 2003] is not possible

    because the results will show that all the components

    connected to the event bus will be affected when one of

    them is changed. This is not true because the publish-

    subscribe mechanism is designed to loosen the

    interdependencies among components, yet it keeps them

    connected through the event bus.

    c) Structural Analysis of the Software Architecture AMaintenance Assessment Case Study [Jaktman]

    Architectural erosion is a sign of reduced architectural

    quality. Quality characteristics of an architecture, such as

    its ability to accommodate change, are critical for an

    evolving product. The structure of an architecture is said to

    be eroded when the software within the architecture

    becomes resistant to change or changes become risky and

    time consuming. The purpose of this paper was to

    understand the signs of architectural erosion that

    contribute to decreased maintainability.

    The paper describes a maintenance assessment case study

    in which the authors apply structural measurements to aproduct to determine signs of architectural erosion. It

    provides an understanding of a products quality by

    examining the structure of its architecture. The ability to

    assess architectural erosion in an evolving software

    produce allows the quality of the architecture to bemonitored to ensure its business and maintenance goals are

    achieved.

    It is not clear how this can be applied at design time when

    there is no implementation of the software architecture. In

    other words, it is not clear how to predict the quality of anarchitecture before actual development has started.

    The authors also use the notion of call graphs a

    architectural level, but it is not clear how this concept was

    applied.

    d) An Introduction to Modeling and Analyzing

    Complex Product Development Processes Using the

    Design Structure Matrix (DSM) Method [Yassine]This paper gives an introduction to the Design Structure

    Matrix (DSM) and to the partition algorithm in order to

    optimize the interaction among elements of the matrix

    Parallel, sequential, and coupled tasks can be identified in

    the partitioned matrix, as well as clusters of elementswhich means those elements are meant to be together.

    The author presents different applications of DSM and

    different analysis methods depending on the type of

    application.

    This paper was particularly useful for the Studio projec

    because it not only explained how to create and interpret

    the matrix but it also provided algorithms to optimize the

    dependencies of the elements. The studio team created

    module-based DSM and used the manual partition

    algorithm to identify potential work units to be assigned to

    distributed teams.

    e) Developing Modular Product Architectures Using

    Genetic Algorithms[Yu]

    The authors point out the disadvantages of MDL and

    Manual algorithms for partitioning DSM. They explain the

    genetic algorithms and give examples of how they can be

    applied.

    Complex software systems can use this algorithm to

    analyze the component interdependencies, but tool suppor

    is required.

    f) Exploring the Structure of Complex Software

    Designs: An Empirical Study of Open Source and

    Proprietary Code [MacCormack 2005]

    The authors compared the structure of two complexsoftware applications using the DSM. The algorithms used

    in the exercise were not explained in the paper. The

    authors subtracted the dependencies of the systems from

    the code instead of the architecture.

  • 8/7/2019 Software Architectures and Organizations in Distributed Development Environments

    6/8

    6

    It is not clear how this can be applied at the architecture

    level, or if it is even possible.

    g) Architectural Optmimization Using Real Options

    Theory and Dependency Structure Matrices [Sharman

    2002]

    This paper outlines a methodology for optimizing the

    multi-domain architecture of a relatively integrated system

    through an appropriate level of modularization. This

    method is developed through the application of real

    options theory and the dependency structure matrix.

    The cost of a system is composed by the front-end costs of

    adjusting the design rules and the back-end costs of testing

    and integration. The costs of testing and integration of a

    system are proportional to the numbers of modules andexperiments. Hence, a good architecture will have the

    optimal mix of modularization and experimentation.

    The authors mention three different domains that are

    related and interact among each other: product,

    organization and process domain. The elements might not

    have a one-to-one mapping from one domain to another.

    This trade-space is important because it creates tension

    between domains and it can be the source of dynamism in

    architectures, and an indication of the potential for

    disconnects between domains.

    Maybe this approach explained by the authors can help

    predict the quality of the product architecture and howlikely it will erode.

    5.Documenting Distributable Architecture

    a) A Template for Documenting software and

    Firmware Architectures [Ogush 2000]

    The authors created a template for documenting

    architectures. The most important section of this template

    is the interface table that offers a clear description of what

    it is and is suppose to provide. This allows distributed

    teams to understand the expectations of their componentsfrom others.

    A modified version of this template was used to documentthe architecture of the Studio project.

    b) Organizational Information Requirements, Media

    Richness and Structural Design [Daft 1986]

    The authors state that companies process information to

    prevent two problems: equivocality and uncertainty.

    Uncertainty is absence of information. As information

    increase, uncertainty decreases. When the uncertainty is

    gone, additional data will not provide more information

    Uncertainty is a measure of the organizations ignorance o

    a value for a variable in the space. Usually, asking the yes-no questions help to reduce uncertainty.

    Equivocality is ambiguity. It is the existence of multiple

    and conflicting interpretations about a situation.

    Rich media, such as face-to face meetings, are important to

    avoid equivocality. Media with low richness is enough to

    avoid uncertainty.

    Uncertainty and equivocality affect the way thearchitecture design is document. To reduce uncertainty, the

    right amount of information is needed. To reduceequivocality, meaningful and non-conflicting information

    is necessary.

    Uncertainty will help the Studio team to define the level of

    details that has to be provided in the architecture design

    document. Interdependence increases uncertainty because

    action by one team can unexpectedly force adaptation by

    other teams.

    Equivocality will help identifying conflicting areas

    Documenting the interfaces helps reducing both

    uncertainty and equivocality.

    Conclusion

    Software architecture allows groups of people to work

    cooperatively.

    Although the issues of distributability as a quality attribute

    are not addressed in the software engineering, there are

    many techniques and methodologies used to address

    similar issues in other disciplines. The Design Structure

    Matrix (DSM), for example, has only been used in the

    software field to represent dependencies at the code level

    It is possible to use the DSM to represent the dependencies

    of the elements of a system at the architectural level and

    obtain the ideal system development sequence and module

    grouping.

    The DSM contributes as a dependency view that is

    necessary when creating work units for distributed teams

    Other information is also important when creating these

  • 8/7/2019 Software Architectures and Organizations in Distributed Development Environments

    7/8

    7

    work units, such as decomposition of the system in

    modules, technology required for each module, size and

    complexity, and development teams profile and schedule.

    All this information helped the Studio team to create a

    work units assignment that is suitable for distributed

    teams. Some trade-offs were necessary, specially between

    reusability and distributability.

    Acknowledgements

    This independent study was possible thanks to Prof. James

    Herbsleb who was my advisor for this research exercise.

    Some of the ideas derived from the cited papers were inpractice thanks to the Sapphire studio team.

    References

    [Conway 1968] Conway, M., "How do Committees Invent?"Datamation, 1968

    [Daft 1986] Daft, R. and Lengel, R., "OrganizationalInformation Requirements, Media Richness andStructural Design." Management Science,1986.

    [Gentleman] Gentleman, W., "Architecture for SoftwareConstruction by Unrelated Developers."Institute for Information Technology, Ottawa,Ontario, Canada.

    [Henderson 1990] Henderson, R., and Clark, K.,"ArchitecturalInnovation: the Reconfiguration of Existing

    Product Technologies and The Failure ofEstablished Firms."Cornell University, 1990.

    [Jaktman] Jaktman, C., Leaney, J., and Liu, M.,"Structural Analysis of the SoftwareArchitecture - A Maintenance AssessmentCase Study." University of Technology,Sydney, Australia.

    [Lopez 2004] Lopez-Fernandez, L. et al, "Applying SocialNetwork Analysis to the Information in CVSRepositories."Univesidad Rey Juan Carlos,2004.

    [MacCormack2005]

    MacCormack, A., Rusnak, J., and Baldwin, C.,"Exploring the Structure of Complex SoftwareDesigns: An Empirical Study of Open Source

    and Proprietary Code."Harvard BusinessSchool, 2005.

    [Ogush 2000] Ogush, M., Coleman, D., and Beringer, D., "ATemplate for Documenting software andFirmware Architectures."Hewlett Packard,2000.

    [Sharman 2002] Sharman, D.,Yassine, A., and Carlile, P.,"Architectural Optimization Using Real OptionsTheory and Dependency Structure Matrices."Massachusetts Institute of Technology, 2002.

    [Sosa 2004] Sosa, M., Eppinger, D., and Rowles, C., "TheMisalignment of Product Architecture andOrganizational Structure in Complex ProductDevelopment."Management Science, 2004.

    [Souza 2005] Souza, C., and Redmiles, D., "AnInterdisciplinary Perspective onInterdependencies." Institute for SoftwareResearch, University of California, 2005.

    [Wittenbaum 1998] Wittenbaum, G., Vaughan, S., and Stasser, G.,"Coordination in Task-Performing Groups."Plenum Press, 1998.

    [Yassine] Yassine, A., "An Introduction to Modeling andAnalyzing Complex Product DevelopmentProcesses Using the Design Structure Matrix(DSM) Method."University of Illinois at Urbana-Champaign.

    [Yu] Yu, T., Yassine, A., and Goldberg, D.,"Developing Modular Product ArchitecturesUsing Genetic Algorithms."University of Illinoisat Urbana-Champaign.

    [Zhao 1997] Zhao, J., "Using Dependence Analysis to

    Support Software Architecture Understanding."Fukuoka Institute of Technology, 1997.

    Other References

    [Bass 2003] Bass, L., Clemens, P., and Kazman, R.,"Software Architecture in Practice", SEI Seriesin Software Engineering, 2003.

    [Brook 003] Brook, G., "Working in a DistributedDevelopment Team.", SYS-CON Media, 2003.

    [Cannon-Bowers1993]

    Cannon-Bowers, J., Salas, E., and Converse,S., "Shared Mental Models in Expert TeamDecision Making." Lawrence Earlbaum andAssociates, Inc., 1993.

    [Carmel 1999] Carmel, E., Global Software Teams. Prentice-Hall, 1999.

    [Clements 2003] Clemens, P., Bachmann, F., Bass, L., GarlanD., Ivers, J., Little, R., Nord, R., and Stafford,J., "Documenting Software Architecture", SEISeries in Software Engineering, 2003.

    [Cubranic] Cubranic, D., and Booth, K., "CoordinatingOpen-Source Software Development." Canada.

    [Donohoe 1999] Donoheo, P., "Software Architecture."KluwerAcademic Publishers, 1999.

    [Espinosa 2001] Espinosa, J., Kraut, R., Lerch, J., Slaughter, S.,Herbsleb, J., and Mockus, A., "Shared MentalModels and Coordination in Large-Scale,Distributed Software Development." Twenty-Second International Conference onInformation Systems, 2002

  • 8/7/2019 Software Architectures and Organizations in Distributed Development Environments

    8/8

    8

    [Espinosa 2002] Espinosa, J., Kraut, R., Lerch, J., Slaughter, S.,Herbsleb, J., and Mockus, A., "Shared MentalModels, Familiarity, and Coordination: A Multi-method Study of Distributed Software Teams."Twenty-Third International Conference onInformation Systems

    [FutureSoft] "Call Graphs - A move Towards BetterProductivity."FutureSoft.

    [Herbsleb 1999a] Herbsleb, J. and Grinter R., "Splitting TheOrganization and Integrating the Code:Conway's Law Revisited." InternationalConference on Software Engineering, 1999

    [Herbsleb 1999b] Herbsleb, J., and Grinter, R., "Architectures,Coordination, and Distance: Conway's Law andBeyond." IEEE, 1999

    [Herbsleb 2001b] Herbsleb, J., and Moitra, D., "Global SoftwareDevelopment." IEEE Software, 2001

    [Herbsleb 2003] Herbsleb, J., and Mockus, A., "An EmpiricalStudy of Speed and Communication inGlobally-Distributed Software Development."IEEE, 2003

    [Kraut 1995] Kraut, R., and Streeter, L., "Coordination inSoftware Development."ACM, 1995.

    [Mockus 2001] Mockus, A. and Herbsleb J., "Challenges ofGlobal Software Development." IEEE, 2001

    [Paulk 2004] Paulk, M., Hyder, E., and Heston, K., "TheeSourcing Capability Model For ServiceProviders.", Carnegie Mellon University, 2004.

    [Paulish 2001] Paulish, D., "Architecture-Centric SoftwareProject Management: A Practical Guide."SEISeries in Software Engineering, 2001.