Nowadays, distributed teams are a common thing. Remote work becomes more and more popular across software developers and software houses. Even within big companies you may meet distributed teams, because people in a project team are distributed through different locations. I have a personal record of working around 9 years in distributed teams and want to share some best practices that help me boosting collaboration. This post is dedicated for software development teams but many practices could be used by other types of teams as well. I haven’t invented those practices, actually in many cases I read about them or learned on conferences from others.

But first, let’s define a distributed team. For me, a distributed team is a team of software developers and other software roles such as QA, UX Designer, Graphical Designer, Analyst, PM and people who are representing the business in that context e.g. Product Owner, an actual customer, an employee of the customer. These people are spread within different locations (but some of them may work in the same office).

Use your real photos as avatars across all tools you are using

It might sound like a trivial detail but using actual photos makes a significant difference. Discussing application architecture with the cartoon character or a “default” avatar could be really annoying (especially if you don’t like a cartoon). At some point, you are starting to think about the other person like a computer bot. Using real photos as avatars helps to see a real person on the other side (no, I don’t have data for that, it’s just an opinion). Moreover, some avatars may be offensive or awkward to the others. Use voice and video for meetings and discussions.

An image is worth a thousand words and a video is made of thousands of them, so it’s worth even more. Text communication, such as emails or slack is missing the body language and other non verbal signals, while voice communication is much better and video communication is superior to the audio only. It’s also easier to do small talk when you see the person that you are talking to — there are much more conversation starters. Don’t forget, that on the other end of the line is a real person made of flash and blood with their daily problems. In the distributed team, the efficient communication is crucial and it has a strong impact on the team’s performance. Meet at least once a year and hang out together

This is very underestimated, especially by experienced remote workers. If you work a couple of years remotely you may forget how hanging out together may boost quality of the cooperation within your team. An important factor is you should invite only team members, not the whole a company or friends/spouses. You don’t have the budget for that? In my opinion if company doesn’t spend money and time on that it will cost way more to have a less effective team. So meet, have a party or just do something together e.g. go hiking, build a bird feeder or go to an escape room. During those informal meetings many discussions will take place and some may end up with good ideas (sometimes the best ideas starts in the swimming pool). Daily statuses

I know that we are all adults and we don’t need a supervisor to keep us away from slacking, but it’s very convenient for ourselves to say what I did and what I would be doing today. It’s also easier to track what your teammates are working on and help them if they have any issues. Being blocked on a task and not asking for help is one of the most common mistakes made by the team members. Asking somebody for help will not ruin their productivity but may kill teams productivity if this task blocks progress of the whole project. Retrospection

After retrospective, every team that I was a part of said that, they regret that they are doing it so late. There are multiple patterns and tools for doing a retrospective. I’m sure that you will find your way of doing it easily. The only remark I want to make is: focus on tasks and processes not on a personal feedback. Keep your work/issue tracker updated

I have a problem with that point quite often, because I always forget to update JIRA (or kanban/scrum board). It’s not just bureaucracy, it’s your work log and for your Product Owner it might be the big picture of the project. It also enforces some discipline on me. So don’t get #YOLO too much on not tracking your work. Do code reviews

Code review is a very popular and good practice to improve code quality or hunt bugs, but actually it also spreads knowledge about business logic, application architecture or even infrastructure across the team. Code review is a great opportunity to learn from others and to give a positive feedback (if something is done really well), so don’t hesitate to write kudos or emoji like 💪 or 👍. Make pair programming sessions

Whenever I pair with somebody I learn something new regardless of their experience. There are tons of tools, shortcuts in the IDE or simply ways “to do things” that could be observed and learned during pair programming. Humans are creatures that create habits and repeat them over and over again. Sometimes when you pair with the other developer you realize that there are simpler ways to do things and my way was optimal 2 years ago 😃. Sometimes small things such as a useful browser extension may boost your team’s productivity to the roof. It’s not true that pair programming is difficult in a distributed team, simple screen sharing tool and modern internet connection are everything you need to make it work.

If those practices are new to you, I encourage you to give them a try. If they are pretty obvious remember that they work when they are frequently used. I know that it can be difficult to remember all of them and apply them by the busy team but it’s really worth it. If you have a good practice not mentioned in this post, please write a comment.