The below is a slightly edited version of advice I used to give at Facebook to engineers I was mentoring, hopefully it is useful to the wider world as well. My current mentorship model is quite a bit more complex than this, I plan to post about that in the future.

You’re an engineer, you’ve been here a little while. You’ve done a ton of tasks and learned a bunch about engineering and our technology. What’s next? How might you be more effective? How might you learn how to scale yourself to solve the hardest problems you see?

I’ve observed a couple of patterns in the most successful and widely scoped projects that I’d like to share, but I think they are universally applicable to any hard problem. You might have already been practicing these, and I hope you already see their value, or you might want to reach out to your colleagues doing these tactics to learn them yourself. In the end, it makes all of us more effective.

Be Bold

When you have a new impactful idea, one that seems really hard and complicated, it is often easy to fall back into your old technical comfort zone. This is dangerous, you’re sacrificing great potential impact and in periods where I’ve gotten scared or hesitant and questioned my ability I’ve often regretted it. Be bold, make that post, put together a design plan, set up a meeting with others that might be interested. Most often, the hardest and most impactful problems are those which no one person has been bold enough or had the time to point out and spearhead, the way you can become a leader is simply taking ownership, even if you don’t feel like the most qualified person for the job. Make a post, write a diff on code that you don’t own, schedule a 1:1 with an expert to debug an issue. A problem never gets solved if you aren’t aggressively pursuing it.

Be Open

Now you have that new hard project, something that may be completely green field or in a technology stack that you’re not familiar with, how can you execute on it? Engineering is a constant iterative process, we try crazy new ideas, gather feedback (whether through data, asking questions of others) and then tweak our processes with those new learnings. We must not be scared of this feedback because it is actually the thing that lets us solve the hardest problems in the most scalable way. Seek out those that you respect technically, people who have solved a similar problem before, and don’t be afraid of asking stupid questions. The worst thing that you can do is to not ask the questions in the first place and never improve your knowledge. In a good engineering culture, mentorship and spreading engineering skills should be championed. Mentorship is a two way street that results in learnings for the mentee and the mentor, and impact and skills gained for both. Communicate openly about your findings and progress, the harder (and wider scoped) the problem the more public and open one must become. Leverage working groups and investigation groups to scale the success of your information finding, often a lurker is the one to give you that one more hint that solves an issue you’ve been battling with for a week, or a comment on that half finished diff leads you to a better solution. And finally, leverage your manager and senior engineers to unblock you when all else fails and give you strategies to incorporate feedback into your project and scale your impact.

Fail Hard

Lastly, as with any new learning experience, taking on a new skill or new responsibility will come with failure. Fail often, fail fast, and learn fast. The only possible way we can improve our understanding of a topic is to find those areas where our current abstractions don’t match with reality, or discover that neat trick to get past a hard problem or improve your execution. Good engineering organizations are set up to provide you with a support network such that someone will most likely pull you back if you move too aggressively in the wrong direction, the more you communicate the more likely this will happen sooner rather and later, and the more you’re open to feedback the more effective that the integration of this new knowledge will become.

Help Others

Once you’ve become an expert on that particular topic or skill that you’ve learned by being bold, being open, and failing hard, help others by scaling out both the process you used for learning and the particular skills you learned. This can take many forms, and would be a topic for a whole other note, but the more you can scale your previous knowledge the more time you’ll have to take on that next impactful and hard project.

Never Stop Learning How To Learn

You’ll always be confronted with a problem that seems impossible or something you must learn that you have little to no expertise in. In fact, one thing I’ve learned a lot is that success and impact is not just knowing and learning one thing very well and effectively, but learning how to be effective in the act of learning itself. That way, whenever you see a new area of impact or face a hard problem you’ll be more and more successful on learning the ins and outs of that new problem and be able to execute on any problem you encounter.