Remote teams work best when optimized for the individual
I work at a firm that provides training and consulting services for a variety of "big name" tech companies.
These companies are either starting to adopt the Go programming language and require training to get up to speed, or are looking for experts to augment their current team and help them see a big project to completion.
At the firm, all of the employees work remotely. So we tend to work with teams that take a distributed first mindset. While working with remote first teams over the past couple of years, I've realized that those that optimize for the individual are the most effective by a huge margin.
This post is a list of practices that all remote teams should live by if they want to operate as efficiently as possible.
Teamwork comes second
Notice that by becoming remote first you naturally rank individual contributions higher than teamwork. What can you improve so that it is easier for one person to do the work they need to do alone?
Every member of the team requires a high amount of discipline
Discipline is the most important skill that everyone on the team needs to hone. This is emphasized by most of the items that follow.
Document everything, even that which you think does not need it
All code, processes, and ideas should be documented either before hand or as they are completed. This ensures that there are no gaps in knowledge with team members that work when you don't.
Meetings are mostly a waste of time and money
Meetings run serially so not everyone can be engaged so it becomes easier to zone out.
The most valuable parts of meetings are before and after them. This is the time where you get to know your team mates the most.
If you must have meetings make them shorter than you think they need to be... Now make them shorter.
Everyone must learn how to learn
You cannot defer knowledge to others since you cannot be guranteed that they are available when you need them. If all code and processes are documented, you should be able to learn how to take them over.
You will run into problems that others have not faced, you need to learn how to solve them on your own.
Your culture should support asynchronous communication
If your team is distributed you need to be comfortable with not having immediate communication with others. However, you should still communicate every day. Treating Slack as email and not instant messaging is ideal for this.
Only work with those that are naturally trustworthy towards others
Paranoia is toxic for distributed teams. You must trust that everyone is doing what you expect them to do by default. If you don't, then it won't work out.
Be a self starter
If you think you don't have work to do, or you think you're stuck with work then you need to take step back and reevaluate the situation. There is usually something else that needs to be done. So go do it, and don't ask for permission.
All code should be reviewed by at least two other team members
This ensures that more than one person understands multiple parts of a code base.
You should spend more time writing simple code rather than clever code
Never be clever. Write code that is clear and succinct. If there are multiple ways to write a piece of functionality pick the most direct way. Even if it is more verbose. Go is a great programming language that reinforces this.
Automate anything that can be automated
This forces you to document process with code.
Regularly shoot the shit with your coworkers
You should spend as much time as possible to learn who your team mates are. Ask them personal questions and make an attempt to get to know them. Even at the risk of losing productivity.
Whoever is in charge should constantly articulate the mission clearly
What needs to be done and where the team is going should be clear and reiterated often.
If everyone on the team were to be gone for the next week you should be able to work without obstacles
Do whatever you need to as a team to get here.
Focus on the individual
If you were to work by yourself on every part of the system, what needs to exist for you to accomplish that?