 Today I want to talk to you guys about what makes a high impact software engineer at Facebook and I want you guys to imagine that you guys are in a forest and there are multiple targets in front of you with different values and you have some raw material to build the equipment to hit those targets but your eyes are closed so I want to ask you guys what do you do anyone okay so that's the first thing you do open your eyes okay what's next okay look for your target okay anything else come on how do you how will you hit your target sorry yes figure out which one should be a target okay what else once you figured out your target how do you actually hit your target you don't have such engine unfortunately again yes exactly so that three things so that three things right so you to open your eyes you need to plan which target you will hit and then actually need to build the machine or the equipment to hit the target so let's let's open our eyes right and this is really about communicating so when you are an engineer you are not you're not you're sitting at your desk and you're not really close to your customers your customers are you out in the wild and you're not you're just sitting at your desk and you're you're so far away from them so you really have to collaborate with your sort of stakeholders or the product managers or whoever is closest who gets you closest to the customers to really understand to really understand and this helps you basically this helps you see and understand so if you're in the forest you really are seeing and understanding the value targets right so you need to you need to have these meetings of course like it should not be a waste but you should it should not be wasting times by having these like unnecessary meetings but you need to optimize your time of course but make sure you're collaborating with the stakeholders the next thing is really about unblocking yourself so when you are communicating with people you need to make sure that like whatever you need is there ready for you so they're like 10th you need to do you need to make sure that like whatever you need to do you're not blocked on somebody else waiting for them to do something right so this is like let's say there's a target but there's a rock in front of you so but that's a very very high value target so need to work towards removing that rock first to make sure you can hit that target of course you're not alone in that forest there are other people and you need to work with those people to make sure that you need to help each other basically get better so you need to also be learning and this is like you learn by communicating so you have to of course learn how to ask for help so at Facebook we have like we use workplace and they're like teams with workplace groups where you can literally like we have to use a lot of different tools from our teams so there's the you frame your question very well in a way that they can understand you provide the context and then you are able to learn on how your tool can best be utilized by by the tool you can how best you can utilize their tool for your product right and learning also means like getting feedback from your colleagues and peers to move and adapt quickly so the next step is really planning which target to hit and this is really really important right like if you're if you're just doing your work and you're not spending time week by week or even long term if you're not thinking like what I am what am I going to work on for the next this week and what I'm going to work on that for the next six months you are missing out you're really missing out on on on your career development right so if you are not thinking like this is what I want to do for the next six months like it's super important to plan like thinking also means like creative ideas like planning this tech talk for example hackathon ideas what do you want to it's a cool feature you want to build that's important like because if you don't think of like cool things to do like how are you gonna like knock it out of the park so it's it's all about like what target do you want to hit then the next thing is also like whiteboarding you want to usually it's not like you are drawing like super sci-fi kind of like complicated diagrams but it's like simple diagrams communicate you might do this with a peer so this is about designing the machine which you sort of want to hit your target with right and you want to think about business needs you want to think about edge cases you want to think about trade-offs of different designs why you want to build a certain machine or an equipment to to hit that certain target and Facebook writes a amazing infrastructure to support whiteboarding like almost every meeting room we have has a whiteboard code reviews again you are not alone so you need to help others be better it's a team effort so like code reviews is not like you just need to sign off on on like this you really need to think through in detail on what people are doing like if you look at a code you can actually like think from a from a different perspective you can look at like what is the design that person is trying to communicate to you and what is the how does that fit into the overall strategy of the team and the product and you can give that feedback to that person so usually you would work on a different part of the code base so like code reviews requires a lot of thinking and effort to give like proper constructive feedback to the author of that of that diff review the last part is actually designing that machine to hit that target and I think like people enjoy this part the most right like people love coding as engineers like we all enjoy this is the most fun part like you want to build you want to write an algorithm to solve the problem you want to you but like you also want to make sure that you are building the right machine so like you want to focus on better engineering you want to you want to write sort of test cases you want to make sure that it's the right design so if you build the wrong tool in the long run like that will not be the right sort of if it's not the right design the machine will probably collapse so it's it's important to design the right machine to hit the target as well this is again like this like people underestimate the time it takes to actually like compile and land the code because like code review process is also part of like actually shipping the code there is like also you want like sometimes I think in other companies it might take actually time to compile at Facebook is pretty fast usually it's instantaneous compilation there's also like you want to run test cases with the code base of any test cases that you have written or existing test cases still time is spent on landing code solving merge conflicts and unbreaking developer environments but usually that's pretty fast so this is really about like hitting those targets and getting those well-deserved points so the last step is like rolling out like once you have deployed your code your role doesn't end like you really need to roll this out to a broader set of audience like you would generally not just deploy your code and be like okay I'm done you need to make sure that like you generally be very careful like okay you start with like 1% rollout and then you would really roll this out to like the 100% of your customers and make sure that like with the rollout you'd also test that okay this is actually working as expected maintenance also comes into the picture so you when you have designed that machine you want to make sure that as you're testing the road like will be surface so you also want to like incorporate those bugs and like fix those bugs so like rolling out also is work right and like like you should not underestimate the work that goes there and reserve some time for that so I think the key thing is like now that you have all these three activities like how do you balance the communication thinking and shipping and how do you maximize so if it was a game and you wanted to maximize the value you get like how do you be the the highest impact engineer and how do you get the maximum points so I have I tried an animation for this so let's imagine these red boxes are un unresolved tasks which which are like you don't know the requirements they are sort of like and there can be many of them so you don't know what are the requirements of these tasks you don't know you just know that you can probably guess the relative importance of some of these tasks but you probably don't know what exactly are they you just know that they are going to be sometime in the future that you know that you have to do this kind of thing the green ones are already in your queue so the green ones are the tasks that are figured out and you know that like you can you can do that given enough time that you can always get them done so the process is generally like so come with communication you're trying to sort of make the red sort of boxes green right so you put the red ones in your queue right and this is like sort of you build your queue and your queue should be big enough that you can plan and always make sure the highest impact tasks are going first so you think okay now I have these many tasks so how can I make sure the highest impact task goes first so you think and you realize okay this probably this task can go first so the so you try to make sure that like higher in higher value tasks are going first and then like as you are doing this simultaneously you're also coding and you're trying to sort of get the highest value tasks out of your way to make sure that like you're always continuously working so you're using communication in the background to keep building your queue so this is super important that you have always have an eye out to make sure that the highest value tasks are like in your eye and like it's it's very easy for us engineers to be just focused on the interesting work like this is interesting this is what I want to do and get distracted by that and just be focused okay I want to work on that and like lose sight of the bigger picture which is why like we can lose sight of the impact that we can have as engineers and the broader picture of why we are actually doing this so with that I think the key thing I think the if there is one thing one message I would want you guys to take away just open your eyes any questions at this point yeah you mentioned you need to plan right agree on you on that because first of all I will deal with the mess so let's say you didn't plan for the app you built and you keep powering up my then in that situation what you do can you repeat so I'm just saying that you the one of the key thing is planning right agree on you on that factor but what if you do not why if someone did not plan and they make a mess out of the machine and it's a concrete or mass then what will you advise us to do that if you are to fix that machine you get it working and make it better so I think like you always can replan based on the current state right so whenever you plan you look at the current state of things so now you have some mess which according to use a mess but it's for me it's like the way I look at it is like some metric is down or some some perhaps the design is that not as appropriate as it should be so maybe it's because of the time constraints that we were forced to possibly like push the wrong design so now the next step is to plan and say okay allocate time to improve the design or perhaps allocate time to push that metric up right so I think like planning is like you would plan to improve that over time I think in terms of prioritization of like individual like as an individual as an engineer it's usually so if if I have like for example 10 different things I want to do I would usually be like okay they would usually be a variety of tasks out of this so couple of them would be like okay I need to improve on the code base quality right couple of them would be like I need to deliver this project feature couple of them and they will have their own sort of delivery date which you would have negotiated with like certain people and then couple of them would be more around like a certain tooling that we have to build certain around our internal support like to help our team move better right so then like we have tasks around this so then we have to prioritize based on when where are we in in the sort of the cycle so if you are very close to the due date of the future we would prioritize a feature work hire but if we are like if the feature is already delivered and we have space and time to work on like for example improving the team's code base then we would prioritize that hire so I think it depends on and also depends on what work I think they're like a lot of different factors like I think I'm trying to give a generic answer but I think it there are like so many subjective questions that you can ask at that point like what is the engineer want to do what is their interest what is the business situation at that point and like what is the code like how much impact can you have from each of those sort of different tasks so if you actually give me like 10 different tasks I can help you sort of like prioritize that better but like I hope I was able to answer from from an abstract point of view yeah thank you