These days, most of us have collaborated with a remote worker at some point. Gallup reported that 43% of Americans spent time working outside of the main office in 2016. As someone who made the leap to working remotely last year, I get a lot of questions about what I do:
- Are you “really” productive with all the distractions at home?
- How do you work with people if you’re just at your computer?
- Don’t you get lonely?
I’m lucky that Portland Webworks, the parent brand of GovWebworks, is willing to keep me on as a contractor while I support my partner’s job-related move. Through this experience I’ve found some techniques that allow me to be very productive, connected, and fend off the feelings of isolation. I’ve come to believe that the ability to effectively work remotely is a skill that can be both learned and practiced. To answer all the questions from those working in the office, here’s an idea of what my day is like.
And to clarify up front: despite popular belief, I do wear pants!
7:00 AM – Start with a solid routine
My alarm vibrates on my bedside table, but I’m usually already awake. One of the benefits of having control of my time is I can prioritize my sleep schedule and actually get the sleep I need. I count a good night’s sleep as one of the most important ways to prepare for my day.
Once I’m awake, I start with the following routine:
- A full glass of water first thing
- A short yoga routine
- Shower and dress
- Grab some breakfast I can nibble on throughout the morning
This routine is important to me. It’s a physical and mental trigger telling my body and my mind it’s time for business. While I’d love to roll out of bed and check email and Facebook in my jammies, this routine sets the tone of my day. This is my business and I’m here to work. On the surface, I’m washing my face and putting on a button shirt, but underneath I’m putting myself into work mode.
Now it’s time to go to the office. The commute is only a few seconds. My home office takes up about a third of the unused second bedroom in my apartment. My office chair glides over the hardwood floor as I sidle up to the glass-topped desk where my large screen monitor is sited. Sticky notes overflow onto the wall behind the monitor from the whiteboard hung beside the desk. Aside from these notes, the space is clean and spare to avoid distractions.
7:30 AM – Prioritize the day before jumping in
As I sit down to my computer, I resist getting drawn into the details of the day. Instead, I like to start with a plan.
Of course I feel a draw to check email or Slack and make sure I didn’t miss anything from last night but… it’s a trap. Email and chat are usually distractions and distractions are what I’m hoping to avoid as I’m just getting started. Possibly I’ve had some good ideas about a problem from yesterday overnight, or maybe I’m about to, but if I get sucked into reacting to email or chat first I’m bound to get off-track.
First thing I do instead is jot down a few notes about what I intend to accomplish for the day. If it’s a Monday morning I’ll follow that up with a couple notes about what I think I’d like to accomplish for the week. My notes are not detailed, I know the plan is going to change so I don’t invest too much time in it. I might have a particular feature I’d like to complete today, or maybe a number of bugs that I think I can complete. Having a plan gives me a baseline, a roadmap that will probably change over the course of the day but at least it gives me a starting point.
Then, I check my calendar so I’m aware of any scheduled meetings I need to prepare for. I also log into the tools I use to keep track of time and progress:
I use Harvest time trackers to seamlessly monitor my time on multiple tasks and even across multiple projects.
My entire team uses Atlassian’s Jira software for agile to keep track of backlog stories, subtasks, and statuses. Having a common tool that we update regularly makes coordination easy and avoids miscommunication about progress even when we’re working in areas overlap.
7:40 AM – Check communication channels
Now I can check my communication channels! I want to see if there is anything new being reported on backlog stories I’ve been working on. Is there anything urgent to address first thing to keep the team moving forward today?
Even more than email, I’ve found the following tools invaluable for these daily communications:
GoToMeeting is great for scheduled meetings when we’re looking to get a few team members or clients involved. The tools for screen sharing work well and having a dial-in phone number makes it really flexible for working with clients.
Slack is wonderful for text communication and we use the channels and threading features continuously on all our projects. A lesser known feature in Slack is the ability to start impromptu web conferences between individuals or for an entire channel, great for quick, friction-free collaboration.
8:00 AM – Agile tactics
Thanks to iterative development, I can maximize my flexibility around changes in priority and direction on my projects. I’m a big fan of iterative development as one of the core components of an agile development process and I try to apply that to my daily tasks. I’ll be in one of two modes early in the day:
- Iterating on a feature that was in progress but not fully complete yesterday
- Starting on something new
The most important thing to prioritize is to always have a working version of each task. Some tactics I use to approach this:
- Outside In
Start at the front-end and use mock data so that I have something visual for feedback and then work my way into the back-end.
- Inside Out
Start on the back-end and not worry about tying in a UI until I’ve proven I can get at the data needed.
Either way I’m trying to avoid a state where if I’d check in what I have, there’ll be a fear of breaking things. So I try to start with a simple straightforward approach and enhance it with best-practices as I progress. If my feature in progress becomes urgently needed, or if another priority pops up, usually I can deliver what I have, at least as an interim approach.
If I’m starting a new feature, I’ll generally try to pick something more complex early in the day. This gives me the most amount of time to get into it, and least chance it’ll be something to carry over to the next day.
9:55 AM – Daily Standup
Coordinating early in the day with my team is key to keeping everyone on track.
My current team has a Standup meeting each day at 10 AM. I log into GoToMeeting from my computer a few minutes before the start of the meeting so I can verify my connection and make sure that my audio and video equipment is ready.
I place a high priority on the quality of my telepresence. An integrated laptop webcam and mic will do in a pinch but considering how important it is to clearly communicate with clients and my team, the quality is extremely beneficial. Having the right tools won’t guarantee success (as I’ve proven many times on the golf course), not having the right tools will make success impossible.
I use a dedicated USB webcam and microphone for better image and picture quality:
Generally the Standup doesn’t exceed 15 minutes. This is just enough time to coordinate what everyone expects to be on for the day. The notes I took on my plan for the day come in handy here.
One reason we’re able to keep our daily Standup meeting so brief is that we have continuous ongoing discussions throughout the day via various Slack channels. Being in constant communication means that issues within the team are addressed almost instantly, rather than waiting for the next day. We are also fortunate to have some of our client contacts available in Slack for integration questions and accessing stakeholder feedback.
After the morning push to get ready for the team meeting and be “on” for the meeting, I’m ready for a snack. I usually grab a granola bar and refill my water bottle. With a better idea of what the team’s day looks like, this is a good time for me to adjust my priorities.
10:15 AM – Core work hours
Between 10 AM and 3 PM are what I consider the team’s “core hours.”These are the hours that we can generally assume all team members will be available. It’s my big block of time for getting things done, particularly things that I anticipate will need coordination from team members or clients.
It’s important to have an established time such as this when I can reliably communicate with my team, and when my team knows they can communicate with me. This keeps the project moving forward even when we’re not all working at the same time, or in the same place.
Having these core hours is important because it gives everyone on the team the flexibility to make their own schedules to fit how they work, but balancing the need to communicate and coordinate.
These are good hours for team-related meetings and other interactions because in most cases everyone will be available. At some point I grab lunch from the kitchen, but I keep Slack open so I can quickly answer any questions.
3:00 PM – Wrap up
By 3 PM, I like to start thinking about how to wind down the day from a technical perspective. This consists of determining the following:
- If I have something big in progress I’ll try to figure out what I need to complete to get to a good stopping point for the day
- If I’ve wrapped up what I started in the morning I might be starting to tackle some smaller features that I could reasonably complete before the end of the day
This is why it’s a good idea to have a variety of features in the backlog in terms of size. Sometimes you just need a small story to fit in at the end of the day. It’s why I prefer that team members self-select the features they work on. There’s nothing like finding just the right feature to fit the time you have available!
5:00 PM – Finish strong
Much as I had to refrain from jumping into work too quickly in the morning, I need to reverse the process for wrapping up. I don’t want to dump my latest change into source control and run, that’s a recipe for broken builds and angry team members in the morning. Again I use routine to trigger myself to wrap things up efficiently.
First, I check in my code and make sure the build completes. Except in extreme circumstances, I like to check in my code at least once a day. This best practice has many benefits:
- Reduce code conflicts between team members
- Make sure there is a backup in case my laptop were to crash
- Help me break problems down and think about my work as part of a set of evolving features – there’s no single right solution, there are just increasingly better implementations
Finally, I document anything I’ll need to remember in the morning so I can let it go until tomorrow and finally move the billable hours logs I’ve collected in Harvest over to JIRA.
5:30 PM – End-of-day exercise
Now it’s time for a run. With no commute to worry about, it can be easy to let the day continue far into the evening. This can result in less productive hours. To break this habit, my recipe is to commit to running at the end of the day. I find it to be a great buffer between work and the rest of the evening. It gives my brain enough breathing room to really put the work down until tomorrow.
For me, my routine for remote work doesn’t diverge too greatly from a normal day at the office. I find that with a few tweaks, the techniques that work well in the office, work just as well at home. These following habits are critical when remote:
- Proper preparation and planning
- Maintain good communication
- Make time for exercise and meals
The biggest difference is that I skip my commute and say hi to my colleagues on Slack rather than as I pass their desks. And I find that I’m more productive due to the factors discussed:
- No commute
- Daily exercise
- Better sleep
However, as happy as I am with my remote routine, I do miss the camaraderie of sharing a drink with coworkers at our weekly company happy hour. It’s always valuable to talk offline about parts of our lives beyond work. There’s no app for real face time, yet…but I’d rather make the trip to see everyone in person anyways.
- Remote Work: The 10 Biggest Misconceptions
- How remote work changed my life
- Contact us with any questions
Kevin Ferguson is a veteran software engineer and web developer with GovWebworks. When he isn’t thinking about ways to make his teams more productive, he’s outside hiking with his girlfriend and dog.