Home Office, My Experience Working from Home

Here I’ll go over a few things from my experience working from home, along with some tips on how I solved the common problems that anyone who wants to work in tech away from the office will run into.

I’m a veteran when it comes to remote work. I started in the late 90s, back when I worked at a company with a bold, modern management style, especially for Brazil at the time. I was a young programmer with a lot still to learn.

One day my direct manager, who was also one of the company’s owners, called me into a meeting, and I walked in wondering what I had done wrong.

Mugs won at events on my window sill

He got straight to the point and asked what I thought about working from home. I thought about it for a moment and said it sounded like a great idea. Then we worked out the details: I would visit the office weekly to deliver the changes to the system, chat with people, and so on. Communication was already over email, so nothing much changed there, except that instead of accessing the company’s internal server, that communication would now go over the internet. By today’s standards this is completely ordinary, but it was remarkably bold back then.

Advantages for the company

A remote work culture lets you hire professionals from anywhere on the planet without having to relocate anyone. You also don’t need to maintain a workstation, which here in São Paulo is expensive. The company benefits from a more diverse culture simply by having people from different regions, plus the ability to hire professionals who are scarce locally.

Advantages for the programmer

The main one is, without a doubt, saving time. If I had to go to the office every day, I’d lose an hour and a half getting there and another hour and a half getting home. Losing three hours every day is a lot for a programmer: that’s fifteen hours a week that could go into studying, working on other projects, spending time with family, and so on. Not having to commute massively improves your quality of life.

A few tips

How to work remotely and be efficient, in one word…

Discipline

Even working from home, I keep a well-defined routine. I start my day at a time I chose, I take my breaks at the right times, and I finish the day on schedule. That helps maintain a working rhythm and a predictable environment.

My family knows that during those hours there’s no point asking me to change a light bulb, look at the washing machine, or handle any other household chore. For all practical purposes, it’s as if I were at the office.

It took a while for everyone at home to understand that, but these days it’s easy. Even my daughter knows that when dad has his headphones on in front of the computer, it’s not a good time to call him.

Remove distractions

Turn off the radio, the TV, and any other source of distraction. A programmer needs to concentrate, so set aside specific times to read email and answer the company chat.

If you want some background white noise, avoid things like YouTube or anything with ads. They’re designed to grab your attention. Instead, put together a selection of your favorite songs and let the same selection play until it disappears, in the sense that you stop paying any attention to the music.

You can also use recordings of all kinds of noise. I find music nicer, but rain, forest, and even office ambience work too. There are plenty of recordings like that on the internet.

Turn off notifications and put your phone on do not disturb. Anyone who knows me knows there’s simply no point in calling me, but that’s another story.

Avoid micromanagement

There’s nothing worse for someone working remotely than a person who wants to know exactly what you’re doing at every moment. Working remotely ideally also means working asynchronously, meaning it doesn’t matter whether you start at 5:00 in the morning or at noon, as long as you deliver on the agreed deadlines.

Speaking of which, if you can’t deliver something on time, you need to flag the problem early enough that something can be done about it. Announcing that you missed a deadline three days after it passed doesn’t help much.

And speaking of delivering on time: it’s important to get involved in the company’s decisions and estimates, because they affect you directly.

It’s a hard job and no programmer enjoys it, I know, but you need to be able to estimate development time for each feature. You don’t have to do it alone, though. You have the team.

And remember you also need time to write tests, debug, and document.

The workspace

Find a good spot in your home and designate it as your work place. If you don’t have room for a home office, try picking a table or desk as your work place. It’s important that the spot you chose isn’t used for other activities like watching movies, gaming, eating, and so on. I know it’s tricky, but if possible, limit that space to being your work place as much as you can.

In my case, I built a very solid standing desk so nothing wobbles while I type furiously, I put everything I use often within reach, and a cork board on the wall gives me a convenient place to pin notices, notes, manuals, and my daughter’s drawings, which make programming work a lot less dry.

Break the task into small pieces

Pomodoro timer to keep track of task time

It’s very important to break a big task into small tasks that can ideally be delivered in a day or two. It’s much harder to blow a deadline when the task is small, and on top of that, management can see your progress and your difficulties and help you more effectively.

Build a relationship of trust

It’s important that management knows your capabilities, knows what they can ask of you, and knows that you don’t delay deliveries without reason. That relationship is built over time, so always be honest, clear up every doubt and every potential problem or difficulty you find in a task before starting development, and if you run into something you can’t handle along the way, bring in the team as soon as possible.

Beyond that, working remotely and with autonomy means you’ll have remote access to a number of company resources, often with administrator permissions. That’s a privilege that makes your job easier, but it’s also a responsibility. Take care of the company’s data with the utmost diligence.

Communicating with the team

These days we have a fantastic range of tools available for keeping in touch with the team, many of them free or close to it.

  • email
  • WhatsApp
  • Slack
  • Rocket Chat
  • Telegram
  • Skype
  • Meet

I use Slack a lot. Besides being what many companies use, the Go crowd is there too. And you can set it up to notify you only when your name is mentioned. That way I’m not reading the chat all the time; I only take a look when someone mentions me or messages me directly.

But anything will work… anything except the phone. Seriously, prefer asynchronous forms of communication, meaning ones where the other person doesn’t have to stop what they’re doing to attend to you.

Work environment

It’s important to have a pleasant, organized, and comfortable work environment. I have two benches I use as standing desks. I designed them at exactly the right height for me, so I always work with good posture, as if standing and looking at the horizon. I also have a small stool to rest a foot on now and then, and a nice couch I use for breaks and for reading and unwinding.

Breaks are another important thing. Plan your day so you get a few short breaks and can pull your head out of the code for a few minutes.

Sometimes, when I have to think through a more complex algorithm, I walk around the house. Changing the setting and moving a bit helps the ideas flow. One thing I like to do is use the swing I built for my daughter in the backyard. Many hard bugs were solved there.

Keeping the code organized

It’s important to keep things centralized and keep a small stack of tools. Too many different tools are a source of distraction.

I like using GitHub. There are plenty of tools inside GitHub itself covering the basics, including a Wiki, which is very useful for internal documentation, a simple project tracking system, and you can even play around with kanban.

It also integrates well with tools like IFTTT or Zapier, making it possible to automate a lot of things.

You need to move

One of the big dangers of working from home is that the fridge is too close. Watch what you eat, eat at the right times, and avoid opening the fridge while you’re thinking about your code.

Exercise

Leaving the house to go to work burns energy. If you’re like me and don’t much like leaving the house, you need an exercise routine. What I do these days is run and ride a bike. A few kilometers a day works wonders: you’ll breathe better, sleep better, and consequently program better too.

In fact, a bit of exercise when you’re stuck in the middle of some algorithm really helps clear your head, especially if you can get your mind off the problem for a while.

Home office isn’t for everyone

Despite all the benefits, some people simply don’t adapt to working remotely, and that can happen for many reasons. Some don’t have a good environment to work in at home and prefer the office, others just want the change of scenery, and others want to be able to see other people. Those things are perfectly normal. You shouldn’t feel bad if working from home isn’t for you.

Remote work in the 90s

How I worked remotely in the last century.

Zip drive

Mugs won at events on my window sill

Broadband was on the horizon, but to get on the internet and check email I still had to connect through a BBS, and there simply wasn’t enough bandwidth to move my work around. So the simplest, most practical approach we found was to use an IOMega Zip Drive with 100MB of capacity, more than enough space for the company’s entire system at the time.

Automation

Since I was away from the office, some tasks had to be automated, one of them being backups. The setup went like this: every hour a script ran an incremental backup, and every week it ran a full backup to a hot-swap HD. Once a week one of the company’s owners would swap that HD for another and take it home. That way we had a copy of the company’s entire life in a safe place away from the office, at most a week out of date.

Okay, I know that backup scheme sounds ridiculous by today’s standards, but it was solid for the time and for the size of the company.

That’s when I started to enjoy automating things. It’s a very healthy habit for anyone working in tech, even if it isn’t remote work.

Then came broadband, still a shaky connection but undoubtedly much better than dial-up. At first I used ADSL with a static IP, and the main change was being online 24/7. It’s very different when you simply have an internet connection all the time. Kids today have no idea what it’s like to program offline.

Cesar Gimenes

Last modified
Tags: