Remote work is when the client and the team are in different locations,
either the team is in another thoughtbot office from the client
or team members work from a different location for the duration of the project.
Meet in person
At the beginning of a remote engagement,
when possible, everyone should meet in person
for at least one work week.
This is useful in order to get to know the team members better
and to develop relationships, which
will make it easier to communicate
through asynchronous channels in the future.
If possible, it is beneficial to meet in person again throughout the project.
Well-defined roles and workflows
At the beginning of the project
define who handles which role,
and how to communicate amongst the team.
For example, decide whether standups
will be done via group chat messages
or via voice or video call.
If part of the team is remote,
the whole team should work as if it were remote.
We should over-communicate.
Major decisions regarding the project
must be documented online in a medium
everyone is aware of and able to contribute to.
This means that all project-related communication
should be done in asynchronous channels
that we already use,
such as GitHub, Trello, Basecamp, and Slack.
The only workflow difference using these tools
when doing remote work is
that we communicate all important information asynchronously,
so that everyone stays informed.
In person communication during a project
usually includes frequent updates on current work
and various social interactions.
The chat room should be the space where we communicate,
so that no one feels left out,
especially team members who work remotely.
Team members should also
be conscious that asynchronous communication
means that sometimes the other person
is not immediately available to respond,
and not expect them to.
Furthermore, online communication
lacks the non-verbal visual cues
such as voice tone and inflection,
facial expressions, and body language.
We should be more careful
in the language that we choose to use.
A good reference is our existing code review guide.
When working remotely,
especially when alone,
it is easy to forget
how it feels to be immersed in team camaraderie.
Video conferencing helps alleviate this feeling
as well as occasional visits to the office,
or working from a co-working space.
We should try to have 4-6 hours
(with consideration of time differences)
in the work day that overlap between locations
to allow for synchronous communication.
For some people,
it is sometimes difficult
to disengage from work when working at home.
Also, flexible hours means
that sometime one may work
non-traditional hours in the day.
We should be conscious to
keep to a sustainable pace
and take a break away from work.
Good tools for remote pair programming are:
- tmate and Vim or Emacs,
since they require very little bandwidth
and do not lag.
Another channel will be needed
for voice/video communication,
such as a Hangout or Skype.
- Screen sharing in Slack when you
need access to other software like
the web browser.