Part of a series on |
Software development |
---|
Distributed agile software development is a research area that considers the effects of applying the principles of agile software development to a globally distributed development setting, with the goal of overcoming challenges in projects which are geographically distributed.
The principles of agile software development provide structures to promote better communication, which is an important factor in successfully working in a distributed setting. However, not having face-to-face interaction takes away one of the core agile principles. This makes distributed agile software development more challenging than agile software development in general.
The increasing globalization with the aid of novel capabilities provided by the technological efficacy of the Internet has led software development companies to offshore their development efforts to more economically attractive areas. This phenomenon began in the 90s, while its strategic importance was realized in the 2000s. [1] Most initial related studies also date from around this time. [2]
During this time, the Agile Manifesto was released, [3] which represents an evolution from the prevailing heavyweight approaches to software development. This naturally led to the question, "can distributed software development be agile?". One of the first comprehensive reviews trying to answer this question was done in 2006. [4] By studying three organizations, they found that “careful incorporation of agility in distributed software development environments is essential in addressing several challenges to communication, control, and trust across distributed teams.” Later, in 2014, a systematic literature review (SLR) was done to identify the main problems in getting agile to work in a distributed fashion. [5] In 2019, a similar SLR was done. [6] Moreover, a general review on the subject was done in. [7] However, a 2023 systematic review found "that Distributed Scrum has no impact, positive or negative on overall project success" in distributed software development. [8]
The results of some of this research will be discussed in the section Challenges & Risks.
In all, distributed agile software development remains a highly dynamic field. Research continues to be done on all of its facets, indicating that it offers unique opportunities and advantages over more traditional methods, but not without imposing its own challenges and risks.
In the distributed environment, one might have difficulties in keeping track of everyone's workload and contribution towards the deliverable. Through adoption of agile principles and practices, the visibility is made clearer as there are multiple iterations where one can visualize the issues or criticalities on the initial stages of the project. Continuous integration of programming code, which is one of the focal pieces of agile software development, additionally serves to reduce setup of the executive issues. Adopting of agile principles appears to positively affect correspondence between groups as advancement in cycles makes it simpler for members to see the short-term objectives. Sprint reviews can be seen as a powerful method to improve external correspondence whilst they help to share data about the features and prerequisite conditions between partners or stakeholders. Agile practices also assist in building trust between various teams associated with the process by stimulating consistent communication and conveyance of programming deliverables. As indicated by an investigation made by Passivara, Durasiewicz and, Lassenius, the software quality and correspondence are improved and communication and coordinated effort are more regular comparatively as a result of the Scrum approach utilized in the undertaking. Additionally, the inspiration of colleagues was accounted for to have expanded. [9] Along these lines, adopting agile practices in a distributed environment has demonstrated to be valuable for the quality of the project and its execution. Thus, these can be seen as some of the advantages achieved by combining agile in distributed development, [10] however, the list is exhaustive. The main benefits can be listed as follows:
The distributed environment brings about a sense of global mindset over the local mindset, where the team can exchange and accept the other's ideas, perceptions, culture, aesthetics etc. Members from a wide range of cultures get the opportunity to gain and share knowledge from their associates, from an alternate point of view. In this manner, they can carry new plans to the task by considering out of the box.
The team members can be benefited with abundant freedom and opportunities on the way of working, with the sole aim being completing the tasks and handing in the deliverables on time. This also makes way for an expanded duty to the organization. In that way, the employees can balance both their professional and personal lives, and hence, the work-life balance can also be achieved that way.
The teams can span multiple time-zones, in this manner access as long as the 24-hour limit can be achieved. This increases productivity as people are hired all around the globe. The job to be done is never put to a halt as someone is always around to handle the issue. This also ensures the work is carried out 24/7 around the Sun and there is almost no down-time. As a distributed environment focuses more on productivity and performance, the handing-off of the work helps in accomplishing the task.
As mentioned, the distributed agile environment establishes more importance on productivity and performance, rather than presence. This benefits people with disabilities as they have the freedom to work from an environment that is comfortable for them and contribute to the deliverable. This scenario is also applicable when the employee cannot be present in office and clock-in the hours, he can work from home to complete the tasks, thus, not affecting the deliverable.
Working in a distributed agile environment ensures an enhanced level of prosperity and well-being, both of the individuals and of the company. This is because there is not much stress on only one individual to complete the work as the work is distributed to multiple people across the globe. Thus, this ensures physical and mental well-being. Also, as multiple people contribute their part and it goes through a number of iterations, the end quality of the work is enhanced, which is beneficial for the company. Hence, it is a win-win situation for both the company and its employees.
Working in a distributed environment often brings up the need for discussions and meetings on the targets, deadlines, work, etc. However, this adoption of agile principles and practices in a distributed environment helps in reducing the travel costs as it opens up the platform to communicate via video conferencing and other feasible options. This breaks down the need for physical presence, and enhances the idea of face-to-face interaction, so the meetings can be conducted from any part of the world and be made accessible to the others in the team.
As the progress of the work is in an iterative fashion, a regular check can be done to track the status of the deliverable and if all the members are on the same page in the level of understanding. Also, this way makes it easier in identifying errors and bugs and can be corrected in the earlier stages as the process goes through multiple iterations. The increased input in each stage of the work results in improved quality of deliverable.
As the same work is being carried out in different parts of the world, it increases the range of abilities of the group by getting to a more extensive pool of Human Resources worldwide. This introduces the need for all the HRs acting as one mind to enforce collaborations and decision-making in different verticals and horizontals within an organization, as well as to communicating with stakeholders and prioritizing the deliverable.
The distributed agile environment enhances the idea of remote working, hence the need for expanding office spaces to accommodate more employees is not required anymore. Also, the different work-related things like electricity, computers, car-parking lots, etc. are not of major concern as the employees have the liberty to work from their desired environment. This, in a way, is beneficial as it helps in saving a huge amount of money that would be spent on these overhead expenses otherwise. Iterative improvement with continuous delivery to the client is a central practice in agile software improvement, and one that legitimately identifies one of the significant difficulties of an offshore turn of events: diminished perceivability into project status. Regular physical meetings allow team leaders, project managers, clients, and customers to keep track of the progress of the project by the measure of working programming they have obtained.
Distributed software development has its own inherent challenges due to spatial, temporal, and socio-cultural differences between distributed teams. Combining it with agile principles and practices, in turn, increases the severity of the risks involved, as both methods are in direct contrast with each other. Agile software development was originally designed to be used by co-located teams, as it is based on informal communication and close collaboration. Distributed development, however, requires formal communication, clear standards, set guidelines and rigid structure. [11] This section describes the risks and challenges involved in distributed agile software development as a result of the aforementioned compatibility issues.
As a result of the incompatibility with which one is faced in combining agile principles and practices in a distributed setting, some of the challenges which can arise are as follows: [12]
Offshore organizations favor plan-driven design where detailed requirements are sent offshore to be constructed. [13] This conflicts with the common practice of agile teams who give documentation a lower priority. The result of this situation is that misunderstandings are a lot more likely to arise.
Pair programming, where two programmers work side by side to work on a particular problem is a common agile practice. It has been shown to yield better products in less time while keeping the programmers content in the process. [14] Because of the distance between teams this is a lot harder to achieve.
Depending on the time zone of each distributed team it makes it more challenging to arrange meetings at times when both teams are available. The situation can easily arise in which one team member is available and the other is not for meetings. This especially is a problem if an immediate task has components of the program which are tightly coupled, in such a case one team would not be able to proceed without the feedback of the other.
In a distributed setting the downside of not being able to practice close communication is most felt with inexperienced developers who need to go through a training phase. Training employees who are not co-located is challenging, think of the differences in background and cultural differences which make it difficult to bring these inexperienced team members up to speed. Because of this, alternative ways of teaching need to be considered.
With regards to distribution of work we want to avoid the architecture to reflect the team's geographical distribution by distributing the work based on the location. It is better to distribute tasks relating to a single user story across the whole team, thinking in terms of the stories, not the components. Over specialization by geographical location and/or component is a sign that your team is dealing badly with the communication challenges posed to the distributed teams. This over specialization has the unintended consequence of changing the product to suit the development, not the customer's requirements. [15]
A study done in 2013 has tried to consolidate the literature on risk management in distributed Agile development. [11] A more comprehensive study has tried to categorize the risk factors for distributed Agile projects in, [16] this was done utilizing both research literature and real-world experience from thirteen IT organizations. For the sake of brevity, the full list of 45 risk factors, with corresponding management techniques is omitted. Instead, a brief summary of the main categories and overall management techniques is given.
This category comprises the risk factors related to various activities of software development like customer specification of requirements and planning, modeling, construction and deployment of software application. [17] Many of the risk factors in this category stem from ineffective knowledge sharing. Unclear objectives, requirements, differences in practices of standard processes or inconsistencies across designs to name a few. Many of these risks can be managed by making sure that knowledge is shared effectively. More specifically, make sure that the objective of the project is crystal clear across teams, as well as the requirements. Automate and standardize as much of the development cycle as possible, so that each team is working with the same technology stack and infrastructure. In short, ensure that everyone is on the same page.
Project management relates to tasks such as project planning, project organizing, project staffing, project directing and control. This category involves risks due to interactions between development activities, and managerial activities. The adoption of distributed Agile development will transform the way in which the project needs to be managed. If this is not done carefully, risks might include a lower initial velocity, teams reorganizing every sprint or, a lack of uniformity in multisite team's capabilities.
Risk factors related to a lack of group awareness are grouped in this category. Group awareness requires intensive communication, coordination, collaboration, and trust among the group members. Co-located teams achieve this awareness more easily, as it flows more naturally from being in the same physical location. To manage the risks involved with a lack of group awareness, spatially dispersed teams will have to use a more disciplined approach in communication using the latest technological tools. Practices such as co-locating initially, to set the track for the project, have proved to be effective in managing risk.
These factors relate to the collaboration with customers, vendors, and third-party developers. Managing its risks boils down to making sure that the coordination and communication with these external actors are done efficiently and clearly.
Risk factors that arise due to inappropriate tool usage are grouped in this category. For example, a lack of communication structure can be solved by providing the teams with the means to do video conference calls. Besides that, choosing the right tools to use during a project is important. This can vary across projects, teams and use cases, so an analysis beforehand on the tools to use is recommended.
One of the most important factors in overcoming the challenges faced with distributed agile software development is to improve communication. [12] This means minimizing the time it takes to set up and tear down a communication session and favor video conferencing over voice conferencing if it is available.
Face-to-face contact opportunities with the whole team should be encouraged in order to help build rapport. It is beneficial to do this at the start to set out a plan to which the team can adhere throughout the project. In addition, it is also beneficial in the last few iterations before the release of the final deliverable. [15]
One option with regards to dealing with the problem of availability for meetings due to time zones is to appoint a representative for the team which serves as an intermediary for the two teams having formed good rapport with both. Another option is to use nested Scrum with multilevel reporting and multiple daily Scrum meetings. [18]
A solution for having Scrum meetings in teams which cope with time-zone differences is making a distinction between local team meetings and global Scrum meetings. [19] Each team has a local meeting at the start of their day and a global meeting at another time of the day. This is only possible if their working days have overlapping time.
Due to the distributed nature, a team might veer off of solid established agile practices. Therefore, there should be someone with the role of the coach that keeps the team on track. They should also take it upon themselves to think of alternatives for the distributed work environment using agile practices.
To keep every team member informed about the adopted agile approach, it is important to maintain documentation for the project. This improves the group collaboration in using agile principles and practices in a distributed software development setting [18] [20] [21] . [22] For this, various tools can be used which support the team in maintaining the documentation. [20]
Various tools and platforms can be used to improve communication in a distributed setting. These are even more essential than in a non-distributed setting in order to minimize the virtual distance between the distributed teams.
There are various tools available to support communication in distributed software development. Asynchronous tools like e-mail, synchronous tools like audio and video conferencing software and hybrid tools like instant messaging provide team members with the means to have the necessary meetings and communications. Another example is tools that support social networking to create a shared experience between team members across locations.
To guide the project and make sure that all teams and team members have a clear vision of what work has to be done, project management platforms like issue management tools should be used.
To provide a shared experience for every team member, every team member should have access to the same tools for their development. [23] Having the same software configuration management tools linked to project management tools enables developers to work at the same pace and communicate about the development in a similar way.
To give every team member access to the same knowledge about the product and the development, tools like Wiki software or knowledge bases can be used.
The values and principles of the Agile Manifesto have been explored in their applicability in a distributed work environment in 12 case studies. [24] The studies have followed software companies that applied distributed agile software development in their projects. Among the 12 cases, 10 onshore companies were located in the U.S. and seven offshore companies were located in India. The findings are summarized in the following table:
Characteristics promoted by the Agile Manifesto | Case 1 | Case 2 | Case 3 | Case 4 | Case 5 | Case 6 | Case 7 | Case 8 | Case 9 | Case 10 | Case 11 | Case 12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Values | ||||||||||||
Individuals and interactions over processes and tools | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Working software over comprehensive documentation | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||
Customer collaboration over contract negotiation | ✓ | ✓ | ✓ | ✓ | ||||||||
Responding to change over following a plan | x | x | x | ✓ | ||||||||
Principles | ||||||||||||
Early and continuous delivery of valuable software | ✓ | ✓ | ✓ | x | x | x | ✓ | ✓ | ||||
Welcome changing requirements even late in development | ||||||||||||
Deliver working software frequently | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||
Business people and developers work together throughout project | ✓ | ✓ | ✓ | ✓ | ✓ | |||||||
Build projects around motivated individuals and support and trust them | ✓ | ✓ | ✓ | ✓ | ||||||||
Face-to-face conversation within the development team | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Working software is the primary measure of progress | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||
Promote sustainable development to maintain constant pace indefinitely | ✓ | ✓ | ✓ | ✓ | ✓ | |||||||
Continuous attention to technical excellence and good design | ✓ | ✓ | ✓ | ✓ | ✓ | |||||||
Simplicity is essential | ✓ | |||||||||||
Self-organizing teams | ✓ | ✓ | ✓ | ✓ | ||||||||
Team regularly adjusts behavior to enhance effectiveness | ✓ | ✓ |
From this we learn that all case studies emphasized the first value of the Agile Manifesto which states that individuals and interactions should be valued over processes and tools. The Agile Manifesto prefers working software over comprehensive documentation without necessarily negating documentation completely. This value is also reflected in the majority of the cases. Only four cases have been identified which emphasize the importance of customer collaboration over contract negotiation. As can clearly be seen from the table the fourth value has been adopted the least out of all the values by the software companies: “instead of strictly following the agile development practices as commonly defined, the companies continuously tweak them to fit the evolving needs of their projects”. [25] With regards to agile principles it isn't a surprise that face-to-face conversation with the development team has been valued by all the studies. This was simulated electronically between the onshore and offshore teams. On whether to be open to change requirements even late in development none of the software companies in the study provided details. By this we can assume that it wasn't considered as important as some of the other principles.
Agile software development is the mindset for developing software that derives from values agreed upon by The Agile Alliance, a group of 17 software practitioners in 2001. As documented in their Manifesto for Agile Software Development the practitioners value:
Dynamic systems development method (DSDM) is an agile project delivery framework, initially used as a software development method. First released in 1994, DSDM originally sought to provide some discipline to the rapid application development (RAD) method. In later versions the DSDM Agile Project Framework was revised and became a generic approach to project management and solution delivery rather than being focused specifically on software development and code creation and could be used for non-IT projects. The DSDM Agile Project Framework covers a wide range of activities across the whole project lifecycle and includes strong foundations and governance, which set it apart from some other Agile methods. The DSDM Agile Project Framework is an iterative and incremental approach that embraces principles of Agile development, including continuous user/customer involvement.
In agile principles, timeboxing allocates a maximum unit of time to an activity, called a timebox, within which a planned activity takes place. It is used by agile principles-based project management approaches and for personal time management.
Lean software development is a translation of lean manufacturing principles and practices to the software development domain. Adapted from the Toyota Production System, it is emerging with the support of a pro-lean subculture within the agile community. Lean offers a solid conceptual framework, values and principles, as well as good practices, derived from experience, that support agile organizations.
Microsoft Solutions Framework (MSF) is a set of principles, models, disciplines, concepts, and guidelines for delivering information technology services from Microsoft. MSF is not limited to developing applications only; it is also applicable to other IT projects like deployment, networking or infrastructure projects. MSF does not force the developer to use a specific methodology.
Agile modeling (AM) is a methodology for modeling and documenting software systems based on best practices. It is a collection of values and principles that can be applied on an (agile) software development project. This methodology is more flexible than traditional modeling methods, making it a better fit in a fast-changing environment. It is part of the agile software development tool kit.
Scrum is an agile team collaboration framework commonly used in software development and other industries.
The unified software development process or unified process is an iterative and incremental software development process framework. The best-known and extensively documented refinement of the unified process is the rational unified process (RUP). Other examples are OpenUP and agile unified process.
Agile testing is a software testing practice that follows the principles of agile software development. Agile testing involves all members of a cross-functional agile team, with special expertise contributed by testers, to ensure delivering the business value desired by the customer at frequent intervals, working at a sustainable pace. Specification by example is used to capture examples of desired and undesired behavior and guide coding.
Follow-the-sun (FTS), a sub-field of globally distributed software engineering (GDSE), is a type of global knowledge workflow designed in order to reduce the time to market, in which the knowledge product is owned and advanced by a production site in one time zone and handed off at the end of their work day to the next production site that is several time zones west to continue that work. Ideally, the work days in these time zones overlap such that when one site ends their day, the next one starts.
A glossary of terms relating to project management and consulting.
In software engineering, a software development process or software development life cycle is a process of planning and managing software development. It typically involves dividing software development work into smaller, parallel, or sequential steps or sub-processes to improve design and/or product management. The methodology may include the pre-definition of specific deliverables and artifacts that are created and completed by a project team to develop or maintain an application.
A programming team is a team of people who develop or maintain computer software. They may be organised in numerous ways, but the egoless programming team and chief programmer team have been common structures.
Continuous testing is the process of executing automated tests as part of the software delivery pipeline to obtain immediate feedback on the business risks associated with a software release candidate. Continuous testing was originally proposed as a way of reducing waiting time for feedback to developers by introducing development environment-triggered tests as well as more traditional developer/tester-triggered tests.
Specification by example (SBE) is a collaborative approach to defining requirements and business-oriented functional tests for software products based on capturing and illustrating requirements using realistic examples instead of abstract statements. It is applied in the context of agile software development methods, in particular behavior-driven development. This approach is particularly successful for managing requirements and functional tests on large-scale projects of significant domain and organisational complexity.
Extreme programming (XP) is a software development methodology intended to improve software quality and responsiveness to changing customer requirements. As a type of agile software development, it advocates frequent releases in short development cycles, intended to improve productivity and introduce checkpoints at which new customer requirements can be adopted.
Disciplined agile delivery (DAD) is the software development portion of the Disciplined Agile Toolkit. DAD enables teams to make simplified process decisions around incremental and iterative solution delivery. DAD builds on the many practices espoused by advocates of agile software development, including scrum, agile modeling, lean software development, and others.
Agile usability engineering is a method created from a combination of agile software development and usability engineering practices. Agile usability engineering attempts to apply the principles of rapid and iterative development to the field of user interface design.
A distributed development project is a research and development (R&D) project that is done across multiple business worksites or locations. It is a form of R&D where the project members may not see each other face to face, but they are all working collaboratively toward the outcome of the project. Often this is done through email, the Internet and other forms of quick long-distance communication. Distributed development was largely pioneered by the open-source software community.
Communication in Distributed Software Development is an area of study that considers communication processes and their effects when applied to software development in a globally distributed development process. The importance of communication and coordination in software development is widely studied and organizational communication studies these implications at an organizational level. This also applies to a setting where teams and team members work in separate physical locations. The imposed distance introduces new challenges in communication, which is no longer a face to face process, and may also be subjected to other constraints such as teams in opposing time zones with a small overlap in working hours.