Pandemic survival guide for a new grad remote software engineer.

Hello office… in 2021?

Fabian Terh
7 min readAug 8, 2020

In May 2020, I started my first job out of university as a software engineer at Facebook. I was (supposed to be) based at its Menlo Park office. My initial excitement to work from the beautiful campus, enjoy the free (and delicious) food, and explore the many other perks has been thoroughly crushed by the Covid-19 pandemic. Like many other companies in the Bay Area and globally, Facebook’s offices have temporarily closed, with mandatory work-from-home guidance.

At first, I was very apprehensive at the prospect of onboarding and working remotely. I havehad plenty of opportunities to work-from-home in the past during my various internships, but I’ve never done so, for 2 main reasons:

  1. Communication: As an intern, I don’t know a lot of stuff, and asking for help is part of the learning process. Communication is a lot easier in real life, when you can point to your screen or sketch out ideas on the whiteboard, instead of battling latency on video calls with “Hey, can you hear me now?” and “Sorry, you go ahead!”.
  2. Social interaction: Humans are naturally social creatures, and I enjoy being able to interact with my teammates and co-workers!

Therefore, I wasn’t too excited about starting my job — no, career — remotely. I was worried I wouldn’t be able to pick up the ropes effectively — not because of bad mentorship, but because of the challenges of remote instruction. This is especially pertinent for a new grad new hire without industry experience or contextual knowledge of the particular project. Going through the onboarding process remotely meant I needed to pick up best practices, familiarize myself with internal tools, understand the architecture and frameworks, etc. without having easy access to answers if I’m ever confused.

And I’m not gonna lie, I was totally bummed out that I’d be missing out on Facebook’s “Bootcamp” experience for new engineers, which is supposed to be really fun and social (from what I hear anyway!)

A quick aside — virtual Bootcamp

Props to the Bootcamp team though— in a matter of weeks, they completely virtualized the Bootcamp curriculum and rolled out an online Bootcamp experience.

In terms of learning outcomes, I can’t complain — the videos are pretty effective, and definitely prepared me for real work in a real team. In terms of the fun factor and social aspect, however, watching training videos from my apartment every day would definitely not rank up high in my list of fun experiences. (This is not the Bootcamp team’s fault in any way though!)

And as if starting in a new team remotely as a new grad wasn’t challenging enough, I had to contend with a 15-hour time zone difference. Due to the pandemic, I was working remotely from Singapore, while the majority of my team was based in the US West Coast.

Survival tips

Over the past few months, I’ve learned a lot about working remotely effectively. I want to take this opportunity to reflect on my experiences and share them.

Communication

Communicate, communicate, communicate! I can’t stress this enough. Communication is less effective online, so it is essential that you recognize this and make an active effort to compensate! There are two points to be made about communication.

Firstly, make sure that what you’re saying is what’s they’re hearing. Be extra-clear in your communications (especially written), and re-read everything. Text conveys a lot less information than speaking in person; it’s estimated that 93% of communication is nonverbal.

Don’t assume that the other party is reading what you wrote with the same context that you had when you wrote it. This is especially true for asynchronous communications like emails or posts (or basically any other non-instant medium) where the reader could be reading your message hours after you sent it, while working on and thinking about something completely different.

If you’re asking a question, set out the context to bring the reader up to speed: the task you’re working on, what you’re trying to do, how you are stuck, what you did to try to resolve it, etc.

Secondly, keep everyone on the same page! It’s harder to be in sync with your teammates when they are halfway across the world instead of sitting beside you. Be proactive in sharing information such as progress updates.

Task scheduling

Because of the time zone difference between most of my team and myself, I try to optimize the way I schedule my tasks. For context, I work from 5am (2pm PST) to 1pm (10pm PST), so there is a decent window of overlap between our work schedules. That also means that my sleep window overlaps with the first half of standard business hours in the US West Coast.

Therefore, I have optimized how I schedule my tasks:

  1. If a task has a dependency (e.g. code needs to be reviewed and approved, a question requires clarification), I would try to reach the point where I am blocked before I sleep. This way, I can parallelize the unblocking with my sleep (e.g. request for code review, ask for clarification), and hopefully wake up with the dependency having been unblocked and being able to continue.
  2. If I know that a task is relatively straightforward such that I can complete it on my own, I save it for the later part of my workday when my teammates have ended their work. Conversely, I start on the difficult tasks first, so I have access to support if I need help.
  3. Save the (non-urgent) deploys for when everyone is online! Don’t ship stuff when you’re the only one online and risk breaking production on a Friday night in your oncall’s timezone.

Learn to learn independently

Documentation is usually great in some places, spotty in others, and non-existent everywhere else. It’s not realistic to expect every part of the codebase to be comprehensively documented. While that might be frustrating, it makes it all the more important to learn how to learn independently.

The best (and sometimes painful) way of to do that is reading code. Not sure how a framework/library should be used — search the codebase for usages, and read them. Not sure how something works — read its source code and to understand its implementation. In any case, the code is the source of truth, and documentation is always secondary and risk being outdated.

Unblocking yourself vs work efficiency

That said, there’s also a trade-off between unblocking yourself through independent learning and working efficiently. In one of my 1:1 meetings with my mentor, he offered a guideline: try to figure a problem out for 30 minutes, and ask for help after that.

I think this is really important as a noob software engineer. While it’s valuable to be able to unblock yourself, it’s also important to recognize that some questions require contextual knowledge that will take a disproportionate amount of time to figure it out alone. In these situations, it’s appropriate to ask for help rather than waste hours working it out independently.

I feel that this is especially relevant while working remotely. When working from home, it’s easy to feel alone and overwhelmed when you’re stuck on a problem. In the office, it feels easier to ask for help when your co-workers are right beside you — there’s less inertia. But pinging a co-worker to ask for help feels different somehow — it feels disruptive to whatever they were doing, especially if you think that the problem is trivial. But I think it’s important to recognize that this is a mental barrier!

Work-life balance

Finally, I’ve read accounts from people who think that working from home destroys any semblance of a work-life balance, because the traditional office-home boundary has been blurred. (Working from home is equivalent to living in office, right?)

I haven’t experienced this personally (thankfully!) but from what I read, it’s important to set boundaries on work. For instance, that could mean delimiting work hours, or setting up a workstation to encapsulate the “office” part of home.

What I love about working from home in my particular situation (i.e. a 15-hour time zone difference), is the ability to take breaks when I need to and the extreme flexibility I have in scheduling my work. Working from home lets me catch a power nap whenever I want. The 15-hour time zone difference means that apart from meetings during common hours, I can schedule my work at my convenience (since I’m working alone anyway), as long as I complete it. This affords me a lot of freedom in structuring my work and life, which I really appreciate (and is one of the upsides of this entire situation).

Honestly, I don’t know when I’ll return to the office, or meet my teammates in real life. As of August 8, Facebook has extended voluntary WFH until July 2021, and the Covid-19 situation in the US does not seem to have an end in sight. For the foreseeable future, I’ll be continuing to work remotely from Singapore.

The learnings and takeaways above are glimpsed from my 2 months of experience working in my current team. I have no doubt that I’ll learn more life hacks and productivity tips about remote working in the second half of 2020. As that happens, I’ll probably update this article. In the meantime, I hope this article is helpful to you! And if you’re like me — new grad software engineer starting your career remotely — good luck!

--

--