Comments:"Ryan Patterson - This week marks the beginning of my 4th... | Facebook"
URL:https://www.facebook.com/ry/posts/10151494199879822
As an engineer, your job is to build things that solve problems. When you first join the company, you're assigned small tasks and you solve them. As you grow professionally, the domain of these tasks becomes larger. It is a mistake to constrain the increase in domain to larger or more frequent diffs. Code is a tool you have for solving problems. If you were gardening, you might plant flowers or pull weeds. Increasing your scope does not mean planting more flowers or pulling more weeds (though you should expect to be faster and more proficient at that as you become more experienced). What it really means is looking up from the ground at the garden in its entirety, considering how your section fits in, and eventually helping to decide the whole garden's plan.
In order to do this effectively you need to have agency. Agency is the capacity for a person to act in the world. As a hacker, having agency over your world is critical to fully explore the boundaries of problems and find how to best leverage your solutions. I'm referring both to the code that you write and to the interactions you have within the company. In the code base that you live in, you quickly develop an understanding of how the components fit together. Use this knowledge: instead of only fixing a bug you're assigned, consider how you can prevent that class of bug from ever happening again. Instead of implementing a new feature, consider how you can create a common abstraction between the new and old ones and share 80% of the code. This might take more effort now but gives vastly greater results in the long run.
At a higher level, take ownership over the entire company. Don't let your coworkers be less than the best that they can be. Understand the trade-offs being made and the factors that led to them; understand temporary solutions and the priorities that necessitate them, but don't accept a decision that you feel is wrong without raising the issue and getting a better understanding. This is your company (your garden) and if you let people pull in the wrong direction the entire plan will fall into disarray. Make sure that you encourage changes and that you're confident that the changes happening are the right ones.
It's easy to fall into the mindset that you don't know everything, everyone around you is smarter and more experienced, and that if you say something incorrect you'll be judged by your peers. This isn't the case. When you have an idea, share it with your team, even if you aren't confident it's the right idea. Wrong ideas are often stepping stones to right ideas, both because they help define the real boundaries of the problem that you're facing and because you can iterate on a wrong idea to reach a right one.
It isn't immediately obvious how important it is to meet and maintain relationships with people at the company who are outside of your team. Find a random person with whom you haven't worked in months and have a quick chat with them. It can provide a fresh insight into problems you're facing and may even give a solution that another team already has that you can use. FYI groups do a good job of giving you a broad overview of the company, but talking to a ground-level engineer from a different part of the code can yield new ideas, new solutions, and new opportunities to combine forces.
I'm only just starting to learn some of these lessons. I hope this note helps to inspire you to step up, take ownership, and lead your team in the right direction. Enjoy your years at Facebook; I know I have.