It is becoming more frequent to work with remote teams as companies are opening offices in other countries and outsourcing. Also many developers are working remotely so they can live close to their families. I will share what I have learnt working with remote teams.
Use online collaboration tools
One of the drawbacks of being separated is that we can not share physical spaces like a meeting room or a white board. Because of this, we need tools that allow to keep working together. There are tools like Slack to improve the communication, Google Docs to work collaboratively in documents, Webex to have online meeting, Jira to manage the work and have a shared Kanban/Scrum board, …
Multiple communication channels
When the communication happens over the internet, it is important to have separate conversation channels. E.g. one for the team day-to-day activities, one per project, other for specific activities like a big release, to discuss about technologies (e.g. one for security, other for backend or front end development, …).
You can use some online platforms like Confluence to share processes, best practices, technical guides, etc. That is a great complement to training sessions, people can access to it when the rest of the team are offline, and it makes easier for new joiners to learn how the team works.
Multiple reviewers for each piece of code
When developers are at the same office they may talk more about their projects while having lunch or having a coffee. It is good to add some people to the reviews so they know what others are building and can work on their projects while the others are on holidays.
Mostly when the team cover different working times, it is important that everyone knows how to maintain multiple applications even if they haven built them. It may be looked as a bad idea as people perform better when they are focused on only one project, but you will appreciate it when people go on holidays and you know that at least one person on every zone can pick any piece of work.
One of the challenges on working remotely is that we cannot see the others working and we miss the casual chat about how they are progressing or what they are doing (sure, it is covered in the daily stand up, but there is a lot more that what is discussed by a whole team in just a few minutes). Due to this, in case of doubt, it is better to over-communicate, and explain not only what you are doing but also why as many people may wonder why you are working on something that may be key for a project but may not sound very important for them.
Do more team activities than if they were at the office
It is easy to lose track of what others are doing or why they are doing it as we cannot go for lunch together, spend time out of office doing social activities or team lunches, etc. Due to this, it is important to talk more about what is being done and why so others know what is going on, have demos to see what other are building, do knowledge sharing sessions about technologies you are learning, …
Have 1-1s like if they were at the office
Some managers don’t 1-1s with remote developers, mostly if they are contractors or they work for an outsourcing company. However, that way they cannot give frequent feedback about how they are working, what is expected from them, if they should try to improve on certain areas or skills, etc. Also, the developers feel less confident as they don’t know if their managers are actually happy with what they are doing.
Don’t work in more than two separate working zones with the same team
I used to have people in the team working from India and San Francisco. This sounds great as it covers 24h and makes easy to offer support, but makes very difficult to do team activities like design or training sessions as part of team finish working hours before others wake up. Also, if you manage the team, you will find yourself replying emails since you wake up in the morning until you go to bed in the evening, what makes difficult to have a work–life balance.
Call if you want to discuss something
When we are at the same office it is easy to have a chat with a colleague as we can see when they are free or taking a break, and we just have to pop over, but it feels less natural to call by phone as we don’t know if we may be interrupting when they are focused. However, it is good to call when you see that a topic needs to be discussed more broadly than over a chat window, mostly when others are not very talkative and need to be pushed a bit to discuss unclear requirements.
Try to meet the team regularly
It is really important to meet in person the people we work with as we can understand better how they are and it helps strengthening bonds, what is very important when we have to trust them to get the work done. If you don’t live too far from the remote offices (e.g. a few hours train ride), try to go at least a couple once per month. If you live in the other side of the world, try at least once per year so you can meet in person the new members of the team, spend some time going out with them for lunch… so you really know how are the people you work with on a daily basis.