Enabling Engineers to Work Remotely During the Pandemic
I have over 20 years of experience as an engineer or engineering manager. I’ve spent the last seven years working for The New York Times, and have been remote for the past three years. How do I keep myself constantly learning and growing, both personally and professionally, while at the same employer, especially now that I’m a remote worker?
Solve the right problems
As an engineer, you’re not paid to write code; you’re paid to solve problems. It’s also not enough to just solve any problems. You need to be solving the right ones. You should constantly make sure there’s alignment between what you want and what the business needs, as organizational context and business priorities are constantly changing. It’s the path with the greatest rewards:
- You’ll mature professionally. Solving the right problems means working on tasks that bring the most positive impact to your team. This can be at odds with what you might be most interested to learn at the time or what you personally think is the most important problem. Being right is usually not worth much if others don’t agree. It’s important to have personal interests and preferences, but at work, you have to learn how to live at the intersection of what your preferences are and what the business needs.
- You’ll find out if you’re working with the right manager and team. Working with them to discover the right problems to solve will give you the experience to decide if you are working with people you can trust and who can support you.
- You’ll learn how to bring others along for the journey. In almost every context, you should not jump in and try to solve problems on your own. That’s a lonely and ultimately unscalable path. You’ll need to convince others to join you by figuring out how they can grow alongside you. Learn to communicate that constantly and effectively.
- But how exactly do you figure out what the right problems are to solve? It depends on the situation, but you can look for patterns: Considering your roadmap and your goals, what is keeping you from doing things more efficiently, with more quality, or more reliably? A low-hanging fruit in the form of a simple or small task that can be easily added to your current workload can be best at testing if a type of problem is the right problem to solve.
Find a theme and define a vision
Consistency is one of the main traits of a senior engineer. Even if you are solving the right problems, there are different classes of right problems to solve: standardization, performance, resiliency, quality, innovation, developer productivity and so on. Explicitly choosing a class of problems you want to tackle and defining what your world will look like when you have some solutions in place bodes well for your career:
- You’ll be increasingly recognized for it. You might not want to call it your specialty, so that you’re not pigeonholed, but solving problems that are related to each other will help you to successfully solve similar problems in the future. People will seek your expertise and will look for your leadership.
- You’ll be able to work at different levels of abstraction. By creating a recognizable theme around the work you do, you’ll be able to go deep but also lead a broader related effort when the need arises.
Automate yourself out of your job
This is sometimes counterintuitive: grow professionally by making yourself dispensable. By making yourself dispensable, you show that you can take on larger or more complex challenges:
- Instead of hoarding knowledge, processes and insight, write them down. Instead of doing the same task over and over again, teach others how to perform it or write a script to do it. Don’t do it all yourself. Break it apart and share in the ownership and implementation with others. You’ll most likely not be able to do this with everything, but with the time that you gain, think about the next best thing you could be doing.
- You’ll improve your strategic thinking in addition to improving the tactics you use to perform your job. In order to choose what you could automate about the work you do today, you have to think about priorities, your roadmap, your team, your goals and your future.
- Ultimately, by automating away the work you perform, you gain mastery over it and you show to your team, your manager and your organization that you’re ready to tackle the next challenge. You show that what you do is reproducible, can be done more efficiently, and can scale beyond what you can do by yourself.
Strive for simplicity
As you progress in your career, you will learn that you have to prioritize both pragmatism in how you work and maintainability for the code you write. One of the most direct paths to achieve those objectives is by focusing on simple solutions:
- Spend some time planning what you need to do. Focus on the value that your solution is bringing to your organization and your users. Any architecture, technique, strategy, algorithm or component that increases complexity but makes no difference in the final result is superfluous and detrimental to the longevity of your solution.
- It’s easier to get something more focused when you do it a second time. So, when faced with an unfamiliar challenge, do a proof of concept. Use that proof of concept to measure the value of your solution. Use those metrics to make decisions on how to simplify what you actually end up building.
- Write a document that describes how you plan to solve your particular problem. Show it to others. Gather feedback early and often. Find out if you can make it even simpler.
- All that being said, sometimes the best way to implement a simple solution is to not write any code at all. Find out if a different team or group has already solved a similar problem and reuse or retrofit their solution for your needs. Leverage open-source components if you can. Or outsource it all to a vendor or service provider.
Embrace being on call when it’s your turn
Being on call is one of the most powerful ways to learn more about the system you are responsible for. You don’t have to take just my word for it. Most importantly, when things break, figuring out what broke helps you to decide where improvements are most needed:
- You’ll find out how effective your testing strategy is based on how often you have obvious defects or regressions after you deploy a new release. After you find and fix a bug in production, write a test that reproduces the problem and make that test pass.
- You’ll learn how changes to other systems and their availability affect the behavior and output of your system, especially when you rely on external data sources. Make sure your system can degrade gracefully, including defaults for missing data, useful error messages and flexible business logic that can return meaningful results even when you get unexpected, badly formatted data or no data at all. Improve your integration tests and practice fuzzing.
When I get paged during off-hours, I’m usually able to react to the incident just as quickly as I react to problems during regular work hours, because I’m used to working from home. My co-located peers in the same off-hours situation sometimes have more trouble with that in terms of setting up their workstation at home and accessing various services outside of the office. To minimize that, I have written documentation about how others can set up their workstations at home to triage and diagnose problems more effectively, like running a script to open up all the different monitoring dashboards all at once.
Organize, lead and participate in different groups
In much of the work you do, you’ll grow faster if you work with others. What better way to do this than to create groups of people who have a common goal or interest? Show to your manager that you can lead others in becoming better professionals and better people outside as much as you do inside your own team:
- You’ll become a better practitioner of your craft by participating or leading a group focused on a specific technical aspect of your job. It can be a group focused on a programming language or tool that you use or a specific cross-cutting functional area like performance, security or architecture.
- You’ll become a better corporate citizen by participating or leading a group focused on non-technical aspects of your job, such as public speaking or improving diversity efforts.
- You’ll engage in more personal relationships with others who might share non-work related interests, such as different sports, physical activities or hobbies.
As a remote employee, you could help other folks in their own journey toward becoming remote themselves. I have done this, and it’s helped me to think about my own journey toward becoming a better remote employee. It has also given me the motivation to help craft a remote work policy for the engineering department, which eventually was adapted into overall corporate policy. Nowadays I’m known as someone who can help others learn how to work more efficiently from home or even make the decision and the transition to becoming remote employees themselves. I’m proud to say that I’ve helped retain some folks who otherwise would have left the company if they hadn’t been able to work remotely.
Diversify your 1:1 portfolio
If you’re an engineer in a fairly well-run team, you most likely have 1:1 meetings with your manager regularly. Why not have 1:1s with a couple of your peers as well? Or meet regularly with managers and engineers outside your team, folks from different backgrounds or who have mastered different skills, like designers or product managers?
- You’ll learn a more diverse set of points of view about your company and the world around you. Can you learn from them? Can you help them?
- You’ll find out more about how other engineers in your team approach their work and manage their careers so that you can learn from one another.
- You’ll increase your reach and influence by meeting engineers outside your team and finding out what else is going on that you could potentially help with, like increasing adoption of a standard or helping to solve a technical issue you have solved before.
- You’ll learn to have a more holistic perspective of the products and services your company creates.
- You’ll make long-term working relationships healthier and easier to come by if you seek to meet one-on-one with folks from different backgrounds than yours. By connecting at a more personal level, you’ll better understand their challenges, both at work and in life, and how they differ from your own.
Being remote makes it easy for me to reach across physical space over the entire organization and just talk to anyone, as they are just as close to my chat sessions and video conferencing as anyone else. I have 1:1s with my manager, my manager’s manager, a couple of my peers in my team, in my department and in other departments. As master of my own calendar, I then put those 1:1s as close together as possible to minimize context-switching with my other work.
Be passionate, in moderation
Most senior engineers are passionate about something related to their work. You can almost see a twinkle in their eyes when the subject comes up. It’s not a requirement for growing professionally, though, as there are great engineers who are just happy to do the best job they can, efficiently and reliably, while their true passion lies elsewhere. Also, there’s some confusion about what being passionate about your work really means:
- Being passionate does not necessarily mean working more hours than required. That is just not sustainable and often leads to hopelessness, bitterness, burnout and regret.
- Being passionate does not necessarily mean coding on personal side projects. Lots of tasks at work and in life have the tendency of becoming not so fun when you do them too often or push too hard.
- Being passionate does not necessarily mean working on open-source projects. While open-source leadership can demonstrate entrepreneurship and creativity, one can demonstrate similar qualities by leading internal groups and discussions during regular work hours.
It takes quite a bit of conscious effort to work toward your own professional growth, whether you work remotely or not. Being a remote worker might even give you some extra superpowers if you work thoughtfully enough to achieve them.