This is not the freshest of the posts lately. Working remotely has been a known activity for years. I remember (circa 2006) my colleagues at IBM working from home. At the time, one of the main reasons was, that by staying at home with your ThinkPad had a huge potential for reducing costs given the high hiring growth they were passing through and consequently for the lack of physical spaces.
All the companies I’d worked until 2018, remote was kind of uncommon. Communication worked like “Tomorrow I’ll work from home, ok?”. It was a matter of reporting statuses, killing tasks and moving forward. But… not today. Things have changed in 2019 and I have almost entirely working from home. In this post I talk a bit about being constructive and contributing effectively with your company and teammates.
How things appear to be evolved
You’ll probably see through different lens, but let’s try to list a few reasons things have changed. Remote work became feasible these days, if not the norm, for multiple reasons:
- Better Internet connections
- Better computers
- Better tools (wikis, chat, project management and video conference)
- Talented people around the world
- Work/life balance
- A boom in renting prices
- Crowded regions (more traffic, higher prices, etc)
Today I live in the countryside of Brazil, having a 100 Mb/s fiber optical connection for R$89,00/month (~ US$18.00). It’s fast, very fast and it rarely annoys me.
I work on a 13” MacBook Pro 2017, 8GB RAM and 128GB of disk. It’s not the high-end dream machine but works fine with Ruby most of the time. Almost nothing to complain, except Docker, that is a memory hog!
For the communication part, we keep things on Slack and the meetings occur on Hangouts Meet. These are good tools (not for privacy I suppose), but allows me to effectively communicate. I will talk more about the tools below, stay with me.
Among the reasons I decided to work remotely is the better balance between work and life. This might be a controversial point since a few people don’t see this separation. Well, for me it’s been good. I don’t need an alarm or someone calling me “It’s time to leave!”. My biological clock seems to be perfectly adjusted considering bed and wake time. No more commuting!
By working remotely I can have amazing teammates working with me no matter the location. They can simply do their best job. To be precise, code is something virtual, so the Internet is the main platform :P
The last point I suppose impacts me and people around the world is the cost of living. How many posts have you read about San Francisco, CA or New York, NY? Even here in Brazil, Sao Paulo has very expensive regions. It’s curious how things got disturbed by the industry — the economics of the whole thing.
If you have higher salaries, the prices raise. Groceries, renting, healthcare, everything adjust accordingly. Believe it or not, it’s very hard, maybe impossible, to change this dynamics.
It’s very easy to engage in a conversation when you have a friend next to you. It happens synchronously and anyone can start it. In some rare occasions someone tells “Could you please reach out in 2h?”. When you’re at the comfort of your home or wherever you choose to work, things work differently.
Before working remotely I had an urge to immediately help, removing blocks and moving forward. I have to say it’s different when you’re at a distance. As most of the remote communications happen this way, you’ll probably have a feeling of multitasking. You’ll be effectively changing context the same way a single core processor does. Maybe using a time slice mode. Do something while others await.
While my code keeps waiting to be reviewed, I try to write down a better README or document situations my team might find.
In the beginning I had a sense of emergency to jot down something on Slack and keep an eye on it. Will the reactions come? Will people start a thread? This seemed so similar to a social network (is it?). After a few months I calmed down and forgot this feeling. I put things down and interested people would take turns interacting.
Particularly, everybody in my team is on the same timezone (UTC-03:00). If we had people working around the world, this would add a bigger weight on async communication. I have an idea of how this could work but I have no experience to write yet.
After a few months I noticed ideas vanishing. A lot things happened but it didn’t stick. It was when I decided to read more about the topic. That was when I realized that, if you’re working alone, you have to think collectively. If I write down my ideas, documentation or whatever, I’m not only helping myself but the company as whole.
We’ve been using Confluence for this even though I don’t like it much. It feels slow. The features I like in Confluence is a change history, notifications and a comments section. It’s not my dream tool but it’s the default tool for documentation, so I embraced it. :P
We’ve been using an effective approach for good communication. After the meetings we write down the date and what happened. This is a good way to address things and name people to address the issues/ideas. It works like a diary.
Before we advance to the next topics, I’d like to explain how writing have helped me to express better the ideas.
I write anything, without revision. A crude text, bad punctuation and a lot of ideas. I invoke my writer soul, let things flow on my keyboard, then the async comes into play. I leave the text alone, maturing and when I my gut screams, I come back and invoke my editor soul.
You won’t be perfect initially, but it’s important to release the writer’s hand, wander and come back later. Depending on the topic it’s possible it will generate warm discussions. I believe it’s where emojis work nice. The decrease the pressure, giving a ton of friendship and camaraderie.
I’m a developer. What better way to communicate than using code reviews? We’ve been using GitHub for this, so let’s call it the right way — Pull Requests. You probably know, but GitHub is a service hosted on the web. It’s like a bridge, it doesn’t matter if you and your teammates are at the same space. You’ll be using it or a similar tool.
Code reviews reaffirm the importance of written communication. Not in general terms, but in terms of code. By working remotely the first thing I considered was a PR template with the following:
- Describe the main idea behind it
- You can create check lists
- Describe the changes you’re doing
- If it’s a breaking change, describe it
- Describe steps to deploy, if needed
GitHub have recently added very interesting features. You can mark as reviewed, select multiple lines for comment, change the code directly to the web interface and more. You can even open a draft PR for appreciation.
The tone you define during the review is what makes it good or not. Don’t forget to have empathy and always be constructive. It’s a great way to learn and help people learn new techniques. If you want more details and best practices on code reviews, go check a post I wrote a few months ago.
Nowadays, my team is responsible for 7 services. Ruby/Rails, Python and a Vue.js frontend. Can you image how many commits my teammates are pushing daily? I can’t handle this through e-mail, so I try to keep sane by using GitHub notifications. It’s still in beta but it already helped me by showing assigned issues, mentions, reviews requested and more.
Connections (people and Internet)
In the beginning, we tried to talk only during the meetings. It worked, but it lacked quality. As more people joined the team, it became crucial to see each other in video. Besides showing expression, it help us to establish a conversation tone. It’s made the difference by bringing each other closer, to a more personal communication.
Not everything works smoothly as expected. The quality of connections varies for different reasons: a specific problem in the region or an overload in atypical days. When that happens, as a last resort we turn the video off. Not ideal, but it helps.
A downside I can feel sometimes is the human interaction. Being with your friends at work, having a lunch together, but is something I can overcome by traveling once in a while. If you really works in a distributed team, with different timezones, things may be worse.
It’s been a great experience working full time remote. I can focus a bit better without losing interactions. I still have the added benefit of not living far from the office. When things are more urgent or I need a personal approach, I can travel to meet people.
If you can learn two things from this post is:
- Take it easy (async is the way)
- Write more
I’d like to thank my company CargoX for trusting me as one of the first 100% remote workers they hired. It’s been amazing, effective and less stressful than I ever thought.
I hope you enjoyed reading this post as much as I did writing it! Enjoy :)