User:BlackBelly/sandbox

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.

There are several reasons that force elements from the same project to work in geographically separated areas, ranging from different teams in the same company to outsourcing and offshoring, to which different constraints and necessities in communication apply. The added communication challenges result in the adoption of a wide range of different communication methods usually used in combination. They can either be in real time as in the case of a video conference, or in an asynchronous way such as email. While a video conference might allow the developers to be more efficient with regards to their time spent communicating, it is more difficult to accomplish when teams work in different time zones, in which case using an email or a messaging service might be more useful.

History
The history of communication in distributed software development is tied to the historical setting of distributed development itself. Communication tools helped in advancing the distributed development process, since communication was the principal missing component in early attempts for distributed software development. One of the main factors in the creation of new tools and making distributed development a viable methodology is the introduction of the Internet as an accessible platform for developers and researchers, facilitating the exchange of both code and information in a team.

One of the first manifestations of distributed development is the open-source community, where developers are joined together not by an enterprise and its resources but by voluntarily participating in the same project, resulting in diverse teams from different geographical locations. In these projects there is a surging need for communication and collaboration tools. The history of free and open-source software shows that as time progressed, the complexity of the projects and the number of involved people increased. Better communication and collaboration tools had an important role on this increase. Initially the available methods were mostly asynchronous forms of communication such as the email and mailing lists or even relying on periodical written publications to spread information. Synchronous and efficient communication would be mostly limited to telephone calls.

In this early stage there aren't many accounts of this kind of distributed development on an enterprise setting. However, the developments and tools of previous years pioneered the necessary means for companies to start investigating and adopting these practices when advantages could be obtained. More tools such as Audio conferencing and Instant messaging appeared mostly for other purposes but were quickly adopted, and continued to push forward the idea of distributed development. This new movement created an interest in the area of study that is Communication in Distributed Software Development to further improve the effectiveness and quality of the development process.

Importance
Software development, in general, requires a great deal of information exchange and studies show that a great percentage of a developer's time is spent on collaborative/communication activities. While formal communication is used for essential tasks such as updating a project status or determining who has responsibility for any particular work, informal communication is also crucial for the development process. Informal communication, or "corridor talk”, helps developers stay aware of what is going on around them, what other employees are working on, who has expertise in what area, and many other essential pieces of background information that enables them to work together efficiently and create the "spirit of a team" . Studies also show that the more uncertain a project is, the more important is this kind of communication.

In a Global Software engineering (GSE) environment, informal communication is hard to recreate. The lack of this type of communication can lead to surprises, resulting in misalignment and rework. For this reason, Communication in Distributed Software Development is important for any company that is applying GSE. This area of study, among other things, tries to recreate informal communication in a GSE environment, in order to develop software without the loss of development speed that is characteristic to this environment.

Challenges
Communication can be hindered by several barriers, such as socio-cultural, linguistic, knowledge, geographical and temporal barriers.

Socio-cultural barriers can manifest themselves as the means of communication. In fact, a study shows that U.S. and Japanese clients have distinct preferences with regards to them. U.S. clients prefer to communicate frequently via informal telephone and email contacts, while Japanese clients prefer verbal communication and less frequent but formal use of electronic media.

Linguistic barriers typically manifest themselves when at least one of the actors in a conversation is not speaking its native language. Aside from the fact that one should be able to express himself better in his native language, there are other obstacles. Idiomatic expressions and slang are an examples of such obstacles that difficult informal communication.

According to Allen's Curve, the frequency of communication between engineers drops at an exponential rate as the distance between them increases. In case of coworkers in a company, communication is often triggered by random encounters between coworkers. When there is a significant distance between the latter, their communication decreases. In fact, an empirical study was conducted that compared the frequency of communication between coworkers from local and remote sites. Most of the inquired answered that they speak to the majority of their local colleagues at least once a day, while speaking less than once a week with their remote ones.

Temporal barriers are closely related to geographical barriers. Temporal barriers are typically present on a scenario where two or more coworkers are in different time zones and often times in different geographic locations. Developers mostly communicate during work hours, and while they can use asynchronous communication which doesn't require overlapping work hours, it inherently delays the communication process. As an alternative they can use synchronous communication if they need to communicate in real time, however it introduces the complication of finding overlapping work hours. Follow-the-sun is a common approach taken by software companies to mitigate the latter issue.

Research
Research on Communication in Distributed Software Development is conducted in order to improve the understanding of the implications of different communication methods on the success of the development process and the final product.

Communication is an essential process in coordinating a software development project and sharing knowledge between the team members. Previous studies claim that sharing knowledge is important to building trust and even improving the performance of the whole team, which also applies in a distributed software development process.

It can also bring challenges, as referred in the section above, that when improperly dealt with can delay a team project or even cost money to the company. A great deal of studies tries to find ways to mitigate these problems and avoid miscommunication.

The tools used for communication are within the scope of some studies. They show the advantages and disadvantages of some different types of tools, and also which kind of tools the developers like to use for certain situations.

The interest of researchers in how a globally distributed development influences the success of the project is noted in publications such as where the author mentions the need for more empirical studies on the subject. Another study tried to find more direct relations between time zones and language barriers without significant results, which as suggested by the author, might be due to low sample size. However it was shown that there is indeed a relationship between distributed development and longer response times between collaborators. There are also studies that correlate the frequency of communication and the geographical distance, such as Allen curve.

The research done so far points to the need of improving the methodologies and tools used by companies and that communication is a big factor in the success of a company.

Forms of communication
Communication in a collaboration setting can be achieved either synchronously or asynchronously, differing in how agents interact with each other. The different communication forms create analogous communication systems and tools depending on the type of communication supported, which serve different purposes in a distributed development setting. Even inside a company, the tasks and responsibilities of different members reflect in their usage in the tools used in the work environment.

Synchronous systems
In synchronous systems, the participants simultaneously receive and send information in "real time", and a message is usually followed by a response in a short time span. This type of communication is used for communication that requires an immediate response when the other participant is promptly available or for more informal communication in a direct setting. It can be used in an enterprise to answer questions quickly, discuss ideas, convey important developments that need attention or any other important message.

Asynchronous systems
Asynchronous systems provide a mechanism for submission and retrieval of messages, where the sender can send information whenever he likes and the recipient will only retrieve it and reply when he is available. This form of communication can be used to have a discussion or convey information about less urgent matters, since no answer is guaranteed promptly. It is useful in a distributed development process specially because most of the times the different teams working on a project don't do so simultaneously, and matters that are not urgent can be discussed asynchronously.

Hybrid systems
There is also another possible approach in which a system provides both forms of communication in the same environment to allow more flexibility in communication. These systems can be referred to as Hybrid systems where messages exchanged usually have the characteristics of asynchronous messages, but the systems are also conceived in order to use these messages as a form of synchronous communication. They present a middle ground between asynchronous and synchronous communication.

Tools
Communication tools for Globally Distributed Software Engineering can be of various types that vary with the communication form used, the interface provided to the user, among others. Also, different categories can use different sensory information to improve the communication. The tools available include instant messaging, email, audio and video conference, virtual office and virtual reality. This section provides an overview of different types of tools and some popular examples that are in use currently, however it is not a thorough collection and listing of available tools. More complete listings can be found in other resources.

Email
Email is a method of exchanging digital messages between people using digital devices such as computers, mobile phones and other electronics. Unlike the most instant messaging tools, on email neither the users nor their computers are required to be online simultaneously. The cost of using email in company varies, since, for example, the company might have its own email server.

Empirical studies demonstrated that all team members on a software development team used this tool effectively. Unlike instant messaging, email messages are intended to be more stand-alone and less sensitive to the context of communication, and thus producing email messages requires more time than traditional IM messages.

Some email providers are Gmail, Outlook.com and ProtonMail.

Audio and video conference
Audio and video conference are the technologies for the reception and transmission of audio-video signals by users at different locations, for communication between people in real-time. These type of tools attempts to replicate the rich interaction present in face-to-face meetings. Rich synchronous communication technology such as video-conferencing is appropriate for highly interactive discussions where body language and intonation can convey the degree of understanding or agreement among participants.

Video conference is also a good way to develop trust among global software developers, since it allows team members to form personal relationships.

Investigators found out that team members who are not confident with their English language skills prefer to use email or instant messaging over audio and video conferencing, as text-based media provide more time to comprehend and compose a response. This becomes a problem, since text-based media doesn't use neither auditory nor visual features, which can hinder the process of understanding important information and lead to misunderstandings.

Zoom, GoToMeeting and Highfive are examples of these type of tools.

Virtual Offices
Virtual Offices recreate the personal proximity and functionality of a physical office needed by teams in a global distributed software engineering environment. Instead of having "channels" or "messages threads", virtual offices have rooms on a virtual office space.

Professor Thomas J. Allen in the late 1970's discovered that the increase of distance between engineers reduces exponentially the frequency of communication between them. Virtual offices are a way to virtually reduce that distance, in order to increase the communication among them.

Furthermore, other studies show that virtual offices make work coordination easier and improve the performance in a team.

Some tools that belong to this subset are Sococo, 8x8 and Skype for Business.

Virtual Reality
Virtual Reality has gained increased interest over the years. It has grew from an industry of 129 million USD in 2015 to over 1 billion USD by the end of 2016. It is estimated that the industry will reach 4.6 billion USD by the end of 2018.

The content exchanged during the act of communication is merely the interpretations of the situations in which the actors are involved. The latter, in turn, depend on the context. The motivation for using virtual reality as a communication tool is based on the premise that one's perception of context is proportional to the sensorial information available.

In a virtual reality communication setup, each of its participants is under sensorial immersion. This improves the perception of the context in which the actor is in, which in turn improves the communication experience itself.

Even though the concept is not recent, the technology only started to be significantly developed as of 2010.

AltspaceVR is an example of a virtual reality platform which was recently used as a communication tool. 

Instant Messaging
Instant messaging (IM) allows the transmission of messages between two parties or more in case of a "chat room". It can be synchronous or asynchronous and it's considered to be the less intrusive communication type. Researches show that developers like to use this type of tools to ask quick questions to their peers or superiors.

WhatsApp, Facebook Messenger and HipChat are examples for this type of tool.

Agile
Mixing Agile software development and Distributed Software Development brings a lot of challenges to the team communication. On one hand, Agile software development demands an increase for informal communication and lacks formal communication, like documentation. On the other hand, Distributed Software Development makes it difficult to initiate communication, can lead to misunderstandings and increases the communication cost (time, money, etc) as explained previously, which can lead to a decrease on the frequency of communication. This makes the area of study presented of utter importance in Agile Distributed Software Development. One of its core principles emphasizes the relationships between individuals and their interactions, entailing constant communication.

Extreme Programming
Extreme programming (XP) was designed for a environment where all developers were co-located, which is not the case for Distributed Software Development. Furthermore, XP is heavily reliant on continuous communication between stakeholders and developers, which makes communication one of the five core values of XP. Consequently, communication on distributed environment is of utter importance for a XP development environment and should be taken into account when applying this methodology on a distributed environment.