Programming is often thought of purely as a problem-solving activity. This may be true for the lone coder in their garage, but in the multi-person environment of an Agile team, such problem solving must be collaborative. In this article, we’ll look at the role of communication in software development, particularly in an Agile framework.
Covid-19 has forced an unprecedented shift to remote working so we’ll finish up with a discussion of how Agile can be implemented in a remote setting.
Agile is increasingly becoming the gold standard for software development teams. With its emphasis on close-knit, self-organizing teams that work informally and respond quickly to change, Agile reserves a critical role for communication in software development.
This is because, as stated in the Agile Manifesto, people and their interactions are the driving force behind successful software development. Teams are self-organizing and need to quickly respond to change. This means that good communication is a cornerstone of successful software development.
According to Principles Behind the Agile Manifesto, face-to-face interaction is the most effective form of communication in software development. The main way of facilitating this is via daily standups or Scrum meetings. These involve the entire team meeting at the beginning of each day in a sprint.
Engineers take turns to explain what they have been doing and any problems they have encountered.
Whiteboards play a critical role in facilitating collaborative communication in software development. That’s because whiteboards are a low-tech, flexible, and intuitive way to facilitate communication in software development teams.
They allow developers to write down ideas and sketch diagrams as soon as inspiration strikes. The whiteboard’s physical prominence makes it a public platform for team communication; anything written on there can be seen by every team member and inspected at leisure.
Since Covid-19, many teams have switched to remote working. Software such as AWW board and Stormboard provide virtual whiteboarding solutions that allow the benefits of whiteboarding to be used anywhere in the world.
Pair programming is the ultimate form of teamwork and communication in software development. It typically involves two programmers sitting side by side at one computer. One programmer, called the driver, writes the code. The other programmer, the navigator, watches what the driver is doing, spotting errors and suggesting improvements.
At first blush, pair programming seems uneconomical. Why would you get two (expensive) programmers to do the work of one? While this is the knee-jerk reaction of many managers, Alistair Cockburn and Laurie Williams tell a different story in their research, “The Costs and Benefits of Pair Programming”. They cite several examples, including a study on a class of software engineering students to show that pair programming is economical, results in fewer coding errors, and higher team satisfaction.
Surprisingly, pair programming can be done remotely. XPairtise is an Eclipse plugin created by two computer scientists specifically for implementing pair programming remotely. This tool allows distributed programmers to initiate pair programming sessions.
Its shared editor allows the navigator to see what the driver is typing. The navigator can’t edit the code, but they can assist the driver by highlighting fragments with the remote cursor and making suggestions using the embedded chat feature.
XPairtise is also integrated with Skype, enabling “over the shoulder” interaction by voice. Moreover, even when a programmer uses XPairtise in single-user mode, their session is available for their team to comment on, meaning the experience of each engineer always benefits the group.
Communication in software development isn’t just between human beings. It’s vitally important for engineers to know what’s going on inside the systems and platforms they use. Observability is what turns a system from a black box into a problem-solving tool.
The three pillars of observability are logging, tracing, and metrics. If you want to learn more about the role tracing plays, we’ve covered it in a previous post. We’ve also written about converting metrics into insights. Coralogix enhances traditional log and metric management with the power of machine learning.
One of the principles of the Agile manifesto is “business people and developers must work together daily throughout the project.”
The importance of team communication in software development goes beyond the team itself. It extends to external teams and clients as well. For this to work, the development team needs to make sure their goals are aligned with the end-user by being in constant contact with interested stakeholders.
Consider Oath, a global software company with teams in many different countries, including the US. Their software projects must have good communication baked in from the start. As software project manager Cristina Otero comments, “it’s really important to communicate goals and expectations to everyone to make sure every piece of the machine is in sync.”
Google is another company that has tackled the problem of inter-stakeholder communication in software development head-on. They were faced with the problem of making sure their site reliability engineering teams collaborated successfully with product development and service and infrastructure teams.
In their essay on the topic, Google compares their SRE team to a human API. Just as an API mediates between different components of an application, the SRE team needs mediation to facilitate information transfer between different project teams.
Google’s main method of doing this is via production meetings. These are weekly meetings where the SRE team “articulates to itself—and to its invitees—the state of the service(s) in their charge, so as to increase general awareness among everyone who cares, and to improve the operation of the service(s).”
Google’s production meetings are never longer than an hour, enough time to get ideas across without impairing engineer productivity with pointless meetings. While normally face-to-face, two SRE teams can meet by video, something particularly relevant during the Covid crisis.
When Covid-19 arrived on the scene last year, companies were forced to shift to remote working almost overnight. Agile software teams were no exception. They’ve been faced with the challenge of taking the organic framework of Agile with its emphasis on problem solving through close-knit interpersonal interaction and making it work in a remote setting.
In this section, we’ll look at remote communication strategies that facilitate the frictionless communication that software development teams rely on.
Agile software development depends on public communication channels to facilitate the diffusion of ideas throughout the entire team.
In the office, everyone is aware of spoken conversations, as well as being free to examine the whiteboard. At home, everyone is at their own computers in their own rooms. Outside of using a tool such as Slack or Zoom, developers are not automatically aware of what the rest of their team is doing.
In this situation, Agile’s classic emphasis on face-to-face communication has to be revised. Kamil Lenonek argues against using video calling in favor of publicly accessible chat forums like Slack.
While video calling may seem a natural substitute for face-to-face interaction, it suffers from being private. Because everyone’s in their own house, there is no chance for the team to overhear conversations and any insights generated can’t diffuse to the rest of the team.
Instead, team members should use communication spaces where the whole team is present, such as Slack channels, even for things that they might normally do on a one-to-one basis.
Even things that seem routine, such as setting up a piece of software, can be helpful to the entire team. Leonik gives an example of a Facebook message where somebody asked for help setting up Ghost. Leonink himself was looking for a ghost tutorial and this message seemed the perfect cue for one. But the messenger asked for help in private.
The downside of private communication is that any knowledge uncovered can’t be shared. While many developers are scared to make all their communications public, perhaps because they don’t want to look stupid in front of their colleagues, Leonik urges them to do so.
By making insights publicly accessible, the entire team can benefit. Agile’s frictionless communication, which came perilously close to being snuffed out, can once again resume.
The keystone of Agile is the ability for groups to solve problems that no one could tackle on their own. Any remote implementation of Agile must recognize that empathy and group morale are just as important as computer skills and Wi-Fi connections.
It’s no easy task. According to a McKinsey report, remote work results in reduced team cohesion. Their survey found that 80% had impaired work relationships due to reduced communication and 84% reported workplace challenges dragging on for days or more.
There are lots of ways these issues can be addressed. For example, a US bank implemented virtual happy hours where team members can have a drink over Zoom and talk about whatever’s on their minds.
With hard work and dedication, a fully remote software team can communicate effectively. After all, just because a team is distributed, doesn’t mean it’s not close-knit.
With its emphasis on face-to-face interaction and collaborative problem solving, communication is fundamental to Agile software development. We’ve seen how communication is facilitated through Scrum meetings, pair programming, and whiteboarding.
Covid-19 has put remote working in the spotlight. We’ve seen how important public communication is in this context. We’ve also seen the critical need for empathy which remote working has made more important than ever. By embracing the communication principles suggested by Agile, you and your team will continue to excel.