This post lists the key insights from this article, from a New York Times senior engineer with 20 years of experience as contributor and manager.
There are many articles that cover the basics of being an effective remote worker. This article furthers the conversation by exploring the ways that more senior engineers can continue to grow professionally.
1) 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.
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.
How exactly do you figure out what the right problems are to solve? Consider your roadmap and your goals, what is keeping you from doing things more efficiently, with more quality, or more reliably?
2) 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
3) Strive for simplicity
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.
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.
4) Work with and transfer to other teams
One of the best ways to learn is to challenge yourself, and one of the best ways to challenge yourself is to switch teams.
Switching teams can lead to learning more about yourself and your organization. You might learn about what you don’t like or what is not a good fit for you, or that maybe it was a good fit and no longer is.
5) 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.
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.
6) 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’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. You’ll learn how changes to other systems and their availability affect the behavior and output of your system. You’ll learn how resilient your architecture is to infrastructure failure and how it scales when encountering unexpected high load. You’ll find out how well your system is documented, how meaningful your alerts are and how useful your monitoring setup is.
7) Organize, lead and participate in different groups
In much of the work you do, you’ll grow faster if you work with others.
For example, as a remote employee, you could help other folks in their own journey toward becoming remote themselves. It can help you think about your own journey toward becoming a better remote employee.
8) 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?
9) Mentor and be mentored
`One of the hallmarks of engineering seniority is the ability to mentor others. As you grow professionally, it’s important to allow yourself to be continually mentored by others and to make yourself vulnerable, open to accept and act on feedback from folks at all levels of experience.
10) Be passionate, in moderation
Most senior engineers are passionate about something related to their work. It’s not a requirement for growing professionally, though.
It’s also possible to be too passionate about something. So passionate that it makes it hard to be humble, to listen and to admit imperfection and pragmatism, all of which will actually prevent your professional growth.
Being passionate, as with being right, is not that useful if it’s done in a vacuum. Having passion productively means sharing, evangelizing and getting others just as excited as you are about a subject.
11) Have empathy
Empathy is the ingredient that will give you the greatest return on investment for your personal and professional growth. You need empathy toward past mistakes and technical debt. You need empathy toward everyone you work with, no matter what role. You also need it toward the people who will have to face the consequences of the decisions you make today. Ultimately you need to remember that software engineering is more about people and their relationships to their work and others than it is about coding.