Almost eight years ago, at a conference in San Mateo, I presented a new talk that I thought had some potential: “Real Software Engineering”.
Since then, I’ve given updated versions of the talk 18 times. Each time I give it, I assume it will probably be the last; talks get stale after a while and the world moves on, and it’s best to retire old talks and develop new material.
But people still keep asking me to give this talk, and nearly every time I do, a funny thing happens: someone in the audience finds me and tells me about some book, paper, or bit of engineering history that I didn’t know about — one that sheds new light on the subject of the talk, allowing me to deepen the talk just a little more. For example, the last time I gave “Real Software Engineering” as a keynote address, Michael Keeling (author of the wonderful Design It!) introduced me to the delightful works of Gordon Glegg, which touch on numerous aspects of the talk.
Most recently, I spoke at the Melbourne offices of Zendesk as part of a really good lecture series they host for the Melbourne development community. I’m excited about the result: they have a good audiovisual team and put in some serious post-production effort on the videos, and the result is by far the best video of “Real Software Engineering”. The talk itself is improved in numerous ways, and the video is really well done. (And sure enough, during post-talk discussions I got some valuable new pointers to relevant material.)
If you’ve never seen this talk, or are interested in revisiting it, this is the one you should watch. If you show the talk to classes or meetups, please use this version.
I’m grateful to Zendesk (and especially Jeffrey Theobald) for the opportunity to speak to so many great developers in Melbourne, and for the excellent video!
When are you the happiest and most productive at work? For me it’s when I feel part of something meaningful. That my work actually matters. When I work with people that I respect and value, who show equal commitment to and appreciation for my work. When I actually look forward to going to work because I know that no matter how tough is the problem I have to deal with, I’ll still enjoy working through it with my colleagues. Some of my fondest memories are actually some of the most grueling days of my career. I find that my best work happens when I can be myself and don’t have to second-guess people’s agendas or intentions. When I trust that what I’m doing is what I should be doing and I trust the people I do it with implicitly.
I’m a firm believer that the foundation of any healthy team is trust. So as a manager trying to build a cohesive team, most of your efforts should focus around building trust. And trust is important in several different directions—between:
- you and your team—that is, you as an individual and also as a representative of the company
- you and the company leadership—without trust in the company leadership you will find it impossible to do your job
- team members
- your team and any other teams that interact with or depend on your group (internal or external to the company)
When people ask me about the first thing they should focus on when joining a new team, I tell them, “Focus on building connections and earning their trust.” I clearly remember those colleagues that helped me through my first few months at every single one of my jobs, and what an impact they had helping me get up to speed, building my confidence, supporting and encouraging me.
You build trust by being:
- present or visible
- responsive and accessible
- honest and open (saying what you think—in a constructive way—and raising your hand when you make a mistake)
- reliable (doing what you say you are going to do)
So far, I haven’t said anything that is specific to distributed teams. But clearly a lot of it is related to communication: how you communicate, and how others can communicate with you. So this is all an application of Rule #1. You have to communicate deliberately, clearly and predictably. Out of sight should never be out of mind.
In my experience, there are two key areas to focus on that will produce the best results for a distributed team. First, set very clear expectations with team members from the moment they consider joining the team. If the team is interviewing a candidate or someone who wants to transfer to the team, be very explicit about how the team works and what will be expected. This is important on any team, but especially on a distributed team, because the situation might be quite different from what the candidate has experienced in the past.
Second, commit to improving communication and creating opportunities for employee engagement regardless of where they are located. It’s very important to be mindful of the different personalities, backgrounds and skill levels in the team, because those differences will have a considerable impact on how team members might prefer to engage. If you manage a truly distributed team you will face some other serious challenges: how to communicate across time zones and how to effectively communicate with people from different cultures, or for whom the company language is not their first language.
So with that in mind, how do you go about building a communication plan for you and your team that will help you build that trust and keep everyone engaged? In upcoming posts, I’ll share some of the approaches I’ve found most useful. I’ll group them around three different goals:
- Collaborating on day-to-day work
- Building team identity
- Developing and promoting an engineering- and company-wide culture
Distributed teams and colocated teams are similar in some ways, and different in many others. But there is one underlying difference that is so basic it has an impact on everything else:
Rule #1 of distributed teams: Communication doesn’t just happen.
In a colocated team, there is a lot of communication that happens naturally, without anyone ever thinking about it or planning it. Some of this is really obvious. Team members go to lunch together, or grab coffee, or sometimes share drinks after work, and conversation naturally includes work topics. Employees overhear nearby conversations (and join in if they feel they have something to contribute, or want to learn more).
But there are also things you might never have considered. People notice when people are sitting together or meeting together, and from that collaboration they infer that something is happening. They see interesting information left on whiteboards. They notice reference books left on desks, thereby understanding what tools or technologies are being considered for other parts of the system. They see expressions of stress, excitement, or confidence on the faces of peers and managers. They think out loud, or ask nearby coworkers for help in working through ideas.
All of those things are passive forms of communication. People are quite good at communicating with each other and drawing conclusions from the patterns they see—so good, in fact, that it’s almost as natural to most people as breathing. That means that a lot of valuable communication happens in a colocated team implicitly, without anyone ever planning it or even thinking about it very much.
You can’t depend on that kind of thing happening on a distributed team. I mean, sure … people still communicate, and ask each other for help, and have conversations in chat rooms where people can “overhear”, and so on. But there’s more friction, more overhead, and so unless you’re deliberate and intentional about it, it won’t happen as much.
At this point, you might be thinking, “It sounds like distributed teams are inherently worse for communication.” But colocated teams have their own issues with communication, often directly related to how easy and casual it is. Think about it: you’re relying on a lot of accidental communication. It’s great that it all happens so easily, but it could actually benefit from being planned and considered a little more. People will learn important things the hard way, and then not take the time to communicate that to the rest of the team. Or an impromptu gathering will make an important decision, but forget to validate the decision with important stakeholders (or to communicate it to everyone who must follow through with implementing that decision). And background information, such as the rationale behind a decision, is frequently lost.
Those things happen in distributed teams, too. But a distributed team typically does much more of its communication in writing, and can have more opportunities to review, disseminate, index, and archive team communication. Plus, as with anything else, focusing on something and giving some thought to the best way to do it can pay important dividends: people become more conscious of how they’re communicating, and of whether the medium is the appropriate one for the kind of information involved. They are more deliberate and careful about how they communicate.
Because this is rule number one, several of the posts in this series will be about communication: the different tools, styles, and techniques that are required to make sure that the right communication is happening both within and beyond your distributed engineering team. Start paying attention to all of the kinds of communication that happen in an office, and ask two questions about it:
- How could a distributed team get some of the same benefits?
- How could we make this communication more valuable by taking it a little more seriously?
One of the earliest challenges we faced in building our team at LivingSocial was eliminating “us and them” attitudes between the “locals” and the “remotes”. That sentence should give you a clue about the problem: the words we use are important, and they affect the way we see other people and ourselves. Therefore, one of the ways we solved the problem was to rethink our choice of words.
The opposite of “remote” is “local.” At least in terms of associations and connotations, those words carry value judgments. Used literally, “remote” describes places, and means that the places are challenging and time-consuming to reach. But we also use “remote” in reference to people: those who are withdrawn, cold, or hard to communicate with. Calling the on-site developers “local” and others “remote” helped to reinforce a class distinction, where everyone perceived the remote developers—at least a little bit—as second-class citizens. That affected how the “local” developers worked with the remote folks; perhaps worse, it also affected how remote developers saw themselves, causing low morale and a sense of isolation. The result was reduced productivity and retention.
Additionally, apart from the cultural issues, those terms encouraged two different sets of communication and coordination patterns. Teams comprised mostly of “local,” on-site employees would naturally adopt a culture and communication style appropriate to a colocated team (impromptu conversations, mostly voice communication). Teams of “remote” developers would depend much more on email and chat. This meant that we effectively had two teams: the developers who worked at headquarters, and those who worked remotely. That wasn’t what we were aiming for.
We chose to start emphasizing the term “distributed.” Rather than a team with some local and some remote developers, we were all on a distributed team. The words “remote” and “local” aren’t forbidden, and in some contexts they’re still the right words for a legitimate distinction. But the emphasis—especially when speaking about the whole team or our work style, collaboration techniques, and communication patterns—is on the word “distributed”.
It took a while to change the vocabulary throughout the organization. But after that, it didn’t take too long before we started seeing the positive effects. In this series we will talk about several specific ways that on-site and remote employees can choose to work in the same way, easing communication and collaboration across the organization. For now, it’s sufficient to say that adopting this vocabulary was a big morale boost for the remote employees, and helped to build a more unified team.
There are other terms that some people use, and that we considered. You might call a team that emphasizes satellite offices rather than working from home a “multi-site” team, and many teams that engage in offshoring fit that model. Multi-site teams have some of the same challenges, plus some additional problems; in our opinion, choosing a multi-site strategy sacrifices many of the benefits of a fully distributed team.
Two other terms are found in the titles of the Wikipedia pages that address the issues we’re discussing: Virtual team and Telecommuting. While there’s nothing necessarily bad about those terms, they didn’t resonate as well with us. I doubt that anyone on the team at LivingSocial would say there’s anything “virtual” about it: it’s very real, with a vibrant, dynamic culture. To say that a team like ours is “virtual” implies that the most important thing about “real” teams is that they sit together, and that’s silly. And “telecommuting” seems to describe tools and techniques rather than the team itself; at best, just like “local” and “remote,” it refers to individuals on the team rather than saying anything about the team as a whole.
Words can divide and belittle, or they can build up and unify. And even neutral or positive words, chosen poorly, can distract us from what’s important. The right words can make a huge difference. We saw things start to change for the better at LivingSocial when we focused on the term “distributed” as a word that included all of us. That’s why we’ve titled this series “Managing Distributed Teams”.
Remote software work is increasingly common. At the beginning of my career, it was almost unheard of. But over the years it has grown steadily. I’ve been working from home for 10 years now, and when I gave a talk on the topic two years ago, fully half of the audience were working from home on a daily basis.
But there are still challenges.
For the past five years, I’ve been a part of a large software team that is heavily distributed: more than 60% of the LivingSocial engineering team works from home, spread across several time zones and a few countries. At its peak, the team was about 180 people, with well over 100 developers working from home or in small satellite offices or coworking spaces.
At the start—even after we had a substantial number of remote developers—the team managers worked at the office. That is a very common model. But eventually, as the team changed and grew, we found ourselves with managers working remotely, too. From 2013 through early 2016, my colleague Maria Gutierrez and I worked from our homes (me in Dallas, Maria in Edinburgh) as Engineering Directors, managing distributed teams ranging in size from 30 to 80. We made a lot of mistakes, but we also got a lot of things right, and we learned a lot from successes and failures alike. And at every step, we received valuable feedback from others at every level of our organization.
It seems like a good time to start sharing what we’ve learned. More companies are trying distributed teams. There are many reasons to do so. Here are just a few:
- A company might choose that direction, as LivingSocial did, to make it easier to recruit excellent developers.
- A company might want to provide more flexible working arrangements for its employees.
- One company might acquire or merge with other companies in different cities.
- Talented developers may wish to relocate for personal reasons, and the company might decide to “go distributed” rather than lose the valuable skills of loyal, dedicated employees.
- The company might move its headquarters to a different part of the city, with some team members asking to work from home rather than endure a longer commute.
Maria and I would like to share our experiences with those who might be starting down a similar path. In coming weeks, we’ll be blogging here about how to be effective in managing distributed software teams.