Skip to content

Instantly share code, notes, and snippets.

@vagmi
Created March 15, 2013 18:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vagmi/5172074 to your computer and use it in GitHub Desktop.
Save vagmi/5172074 to your computer and use it in GitHub Desktop.

A developer's guide to working remotely

Working from home is hard. It takes some practice to get it right. If somebody said that working from home is all about relaxed schedules, coding in your pajamas and working on your own time, they are not being entirely honest. The pajamas bit is true. The truth is that if you need to work efficiently, you need to have a discipline much like working in an office. But you are making a choice to let the work speak for yourself rather than your physical presence in the office.

Communication

The first thing you need to keep in mind is that it is vitally important to keep the communication channels open. As a team member working from home, the onus is on you to communicate with the team. Also the team should include remote members into meetings and discussions. This means that you would have to keep asynchronous modes of communication like a IRC/Campfire/Hipchat open. Do not be reluctant to get into a call and discuss things when required. If there is a timezone difference, ensure that you at least have 2-3 hour overlap with the team.

Infrastructure

Ensure that you have a separate workplace and have a clear boundary between work and home. You should be able to mentally go home after work and come to work from home. Ensure that your "workplace" is comfortable. I have my own desk and a very comfortable chair and a good pair of headphones and can lock myself into my work room and out of my home. If you are living in a country with fundamental problems like flaky internet connection or bad power situation, ensure that you have backups for both power and internet. Most organizations do and there is no reason why you shouldn't either.

Tools and practices

I love to pair program given the right problem and colleagues with similar skill levels. The most efficient setup I've found so far is to use Skype for audio / video communication and to use tmux on the SSH server. As much as I like tools like ScreenHero and Teamviewer, they are simply not there yet. They sometimes have a lag in terms of seconds and that is completely unacceptable when you are pairing.

I prefer working on the terminal with vim. I would suggest a small VPS that can be spun up or spun down while pairing. That also means that you need to be really comfortable with the command line and terminal. I personally use oh-my-zsh, vim with tpope's awesomeness, git and tmux for remote pairing. You can setup a simple shell/chef script to bootstrap your development environment.

Setup a CI server for continuous integration and monitoring. Travis is nice but even something like jenkins should do. You should anyway setup CI regardless of whether you are working remotely or not. However, when you work remotely, you should ensure that the build statuses are fed into the team channel mentioned earlier.

Having a todo list works. However, as developers we have our plates full and our todo list is fairly defined in terms of story backlog, bug cards and various chores. This is not very different from working in person.

Food, et al.

This might be a bigger deal than you think. Working remotely can be unhealthy if your idea of a healthy food is pizza. Ensure that your kitchen is well stocked and you have arranged a source of meal and the necessary snacks for you through the day. Take timely breaks to unwind yourself. You may want to have enough time left after work hours to ensure that you are not burnt out and working from home is a sustainable and a rewarding endeavour.

Most importantly

Have fun.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment