I’ve been working remotely at Mozilla as a full time staff member for nearly 4 years now. People often ask me if remote working is boring. The typical question is usually along the lines of “How do you ever get work done with all the distractions at home?”. Well, I love what I do, so my usual response is “Getting work done isn’t usually the problem, it’s knowing when to stop working that’s the hard part”. The next question is often “Don’t you feel lonely not speaking to anyone all day?”. Then I explain about this thing called Vidyo, and while I’m not in an office every day we do actually talk face-to-face, even though we’re not in the same room, or even in the same country a lot of the time. Remote working is just different to what a lot of people tend to expect. There are definite downsides, but there are some wonderful upsides too. Here are some lessons I’ve learned over the last 4 years that might be helpful to others.
Make a daily schedule and stick to it
While I work in a globally distributed team, the majority of my daily meetings are done via video to either the San Francisco or Mountain View Mozilla offices. This means the last two hours of my working day are usually back-to-back meetings. Between 4.30pm and 6.30pm is a bit like an extended rush hour, so I try not to plan on getting any actual coding done in that time. Everything is about updating team members on progress, planning for tomorrow, and a bit of daily chatter on IRC before the next meeting starts.
By the time I finish, my brain is usually pretty tired and I’m ready to unplug for the evening. Thankfully, my mornings are nearly always blissfully quiet being an employee in the UK. Most people are asleep and IRC is pretty dead at that time, so I have very little in terms of distractions to break my concentration. I find 9am to 12pm is usually my most productive time of the day for coding. This is when I get shit done. My afternoons are taken up by things like reviewing other people’s code, answering emails/bugmail, and finishing up any left over tasks I had from earlier in the morning.
Of course, the idea of working until 6.30pm most days is probably not appealing a lot of people, particularly to those who are used to regular office based jobs. Having meetings at the time I do is pretty unavoidable, so I have to learn to be my own boss when it comes to time management. I usually force myself to take a decent break in the middle of my working day to go out and get some exercise, or spend some time with my family. Before starting each day I also make a routine to walk my son to school, which is something I never used to get to do when I had a daily commute. I’m also there to welcome him when he comes home again, which he really likes. This kind of freedom is one of the biggest blessings when working remotely, so make the most of it.
When it comes to late meeting invites, I try and be pretty strict. If something pops up in my calendar that is later than 6pm I generally just decline it straight away. In my first few months at the company I accepted a few late meetings (being a newbie) and generally found that I could have skipped most of them. It just wasn’t essential to be there a lot of the time, and usually there is someone who takes notes, updates bugs and can easily fill in the details for you. If something is really critical to attend, then all parties can find a reasonable time that suits each timezone. Don’t be afraid to say no to things.
Take a break and exercise
This is something I failed at for my first two years working remotely and somewhat paid the price. No longer having a daily commute meant I just wasn’t getting enough basic exercise. I started to put on some weight, and just generally felt less energetic and more bleurrgh. Being a programmer I also spent a lot of time sitting at a desk for long hours. Over the years I have suffered from some pretty severe back pain, to the extent that I regularly paid to go to a chiropractor in order just to function properly.
In my third year working remote I made a change for the better, and decided to take up cycling as a hobby. Mozilla even allowed me to expense the cost of a bike as part of their Health and Wellness Scheme (did I mention working for Mozilla was awesome?). I also switched to using a standing desk at home, which together with cycling has helped with my back issues immensely. I haven’t been back to the chiropractor in nearly 12 months and have never felt better.
Cycling has helped me in other ways too. Aside from losing over a stone in weight, it’s also been a great way of forcing my brain to do other things. Instead of spending my lunch break absently drifting back to thinking about whatever bug I’ve been fixing, instead I’m forced to concentrate on the path in front of me - “Shit, look out for that pot-hole!”. It’s also nice to have a hobby that is outdoors, and does not involve looking at a screen.
Work in different surroundings
For my first few years working remote I used the spare bedroom in my house as a home office. While this was great in terms of having a dedicated space that I could use to create a boundary between home and work, it actually felt pretty isolating at times. Since the arrival of my daughter (our second child!), I have since given up that room started working out of our kitchen a lot more. I find this a much more pleasant space to work in most of the time as it’s more of a social room in the household (and has a good coffee machine). For times when I need concentration, I invested in a quality pair of noise cancelling headphones for listening to music. I also go to a co-working space in the city some days (usually dictated by when it’s raining and I don’t want to cycle), where I can be around other remote workers and freelancers.
Pick a source for all truth
With people in different locations all working on the same team, asynchronous communication is vital. Someone is always writing code, filing bugs, sending emails, creating documents, or posting things in IRC (or Slack, if that’s your thing). When working in a different timezone to the majority of other team members, it becomes especially helpful to start my day and not have to hunt around in multiple different places to try and piece together what needs to be done. For this reason I’m always a bit of a stickler about trying to keep all our information together in one place. This place is usually Bugzilla, since that’s ultimately the tool we use as a paper trail in our commit history. This is at times an uphill struggle, and something I’m still trying to improve upon. At times I end up trying to chase people toward the end of my day in order to find the pieces of information I need to unblock my work for the next day. This isn’t really fun for either party, as when I’m tired and finishing my day other people are often just getting started with theirs. I’ve found that setting recurring reminders for people in bugs and making clear deadlines upfront is the easiest way to alleviate this rush for answers, but it’s not always easy to predict what you’ll need and when. Trying to keep things async like this also gives people more time to think when responding to requests.
Make the most of time together
Being a globally distributed company, Mozilla hosts All Hands weeks twice a year where the whole company can get together and plan for the future. These weeks are generally exhausting but also pretty amazing, with so many people being together in one place. We also get to do the odd work week with our functional or durable teams to work on different projects. This usually involves traveling to one of the many Mozilla spaces to work closely together for a week. Making the most of this in-person time is great for things like planning and sprint work, but the main thing I think everyone gets out of it is just spending time together. Talking every day on video is one thing, but also getting to do stuff together in the same location is really important. Not just for the work itself, but also for team building. I try and take as many of these opportunities as I can.