Hello and welcome to our module on cultivating high performance engineers. By the end of this module, you will learn how to recognize a high performing engineer. Three techniques on cultivating high performance, coaching weekly one on ones, and auditing. And also how to cultivate those traits over time. And how to prepare your employees for promotion or career growth. At the start of the specialization, we shared ten common engineering manager interview questions. The following content helps you answer these questions. Who is your best hire and why? And how did you help her perform and grow? When you answer interview questions like those, you should be able to articulate the characteristics of a high performing engineer. What are those characteristics? Paul Woolley and his colleagues at Microsoft Research asked that question across Microsoft and published over 100 pages in a technical report. They identified over 50 traits of great software engineers across four dimensions. One, personality, two, decision making, three, teammate interactions, and four, the engineers code. In this lesson, we review the researcher's findings to answer the following question. What does a great software engineer look like? And we'll discover that the answer is much more than just being able to answer coding interview questions or build a full stack application. The top part of this graphic shows the personality traits Microsoft Research identified in their best software engineers. If you're interested, you can pause the video at any time to read all the personality traits. We'll just cover a few in this lecture. The first trait Microsoft identified is continuously improving. Continuously improving means the engineer is constantly looking to become better, improving themselves, their product or their surroundings, and moving all of those things to a state where they felt things were better. This is the opposite of doing things the same way for the sake of tradition. Microsoft values engineers who are continuously improving because the software field is rapidly evolving. Great software engineers constantly experiment to keep up. Amazon has a similar leadership principle called Invent and Simplify. Another trait Microsoft identified is open-minded. Being open-minded, means being willing to let new information change their thinking even if the engineers are experts in their field. Open-minded engineers have no difficulty changing their thinking based on new information that is presented to them. Not being open minded leads to suboptimal decisions commonly in two ways. First, outcomes and software engineering, such as user reactions and commercial success are difficult to predict. Great software engineers constantly reassess assumptions and pivot based on new information. Second, many software products are large, complex, and constantly changing. Therefore, it is rare for any one engineer to have a complete understanding of the software product and all of the implications of design choices. Great software engineers are constantly open to discovering more about the product, the design, and their implications. Amazon has a similar leadership principle called Learn and Be Curious. A third trait Microsoft identified and the final trait will cover in this lecture, is that they execute without falling into any analysis paralysis. Great software engineers know when to stop thinking and start doing. They know that taking too much time to think about alternatives or over optimizing the solution is not favorable. Many things in software engineering such as the variability of alternative technologies cannot be known ahead of time. Great software engineers can sense the saturation point where additional thinking and debate becomes a waste of their time and guide their teams to make a decision, choose a solution, and implement that solution before they reach that point. The bottom part of this graphic shows decision making traits Microsoft Research identified in their best software engineers. One of these traits is, grows their ability to make good decisions. Great software engineers have the ability to identify when decision making is needed and which decision is likely to result in the best outcome. Great software engineers can also focus what is about to happen in the future, including how many engineer months a future might take, what can go wrong, and which contingency plans to put into place. Another trait is, sees the forest and trees. Great software engineers reason through situations and problems at multiple levels of abstraction. Different levels of abstraction include technical details, industry trends, company vision, and customer or business needs. Great software engineers are able to reason across all of these levels quickly and accurately. In doing so, they can arrive at the globally optimal decision that might not even involve software engineering, while avoiding locally optimal decisions that always involve writing code or applying the same tech stack they always use. In this new graphic, the top part shows the teammate interactions Microsoft research saw in their best software engineers. When it comes to interacting with teammates, a great software engineer is honest, they are truthful, they don't sugarcoat or spin the situation to their own benefit. They provide credible information that others can rely on without having to constantly validate. They set responsibility for mistakes and focus their attention and efforts on addressing the problem rather than trying to blame others. Great software engineers feel obligated to point out problems and potential solutions even if those problems and solutions are unpopular. Great software engineers also do due diligence. They search for and examine available information by themselves before engaging others. They have done sufficient preparation before they discuss the situations or ask for help so as to not waste other people's time. Preparation work involves identifying the right people to engage and formulating thoughtful questions along with the justification for seeking help and evidence of preliminary investigations. Great engineers feel that doing their homework is a common courtesy when asking others for their time, asks for help. Great software engineers are willing to ask for help, find and engage others with information. And they know the limits of their knowledge and actively seek to supplement their own knowledge with the knowledge of others. Great software engineers recognize that willingness to ask for help, leads to greater productivity and faster learning. Also asking for help is often necessary for software engineers to correctly leverage components produced by other teams. This is especially important within Microsoft because many teams use internal APIs or internal tools produced by internal partner teams that are not well documented or need to be used in specific ways. Great software engineers commonly consult their colleagues before deciding to change the code. Great software engineers ask other experienced engineers to provide guidance, ensuring the success of the project. Similar to that, reading the engineers code, a great software engineer demonstrated several characteristics. Will cover two traits about how they write their code. The first characteristic is that great software engineers make informed trade-offs. They aren't stuck trying to write code in a particular manner. Instead they're willing to trade almost anything to accomplish an objective, such as launching by a particular deadline. One tech leader at Microsoft described this characteristic as being able to list three different solutions along with their corresponding pros and cons quickly so that a team or a manager can make the best decision. Another characteristic of great software engineers is that they anticipate needs. Great software engineers accommodate possible future requirements that were unknown when the product manager initially documented the product requirements. These include scale, feasibility and integration. Scale means engineering a product with the potential capability to serve billions of users across the world at the same time, even if the product is brand new and has yet to achieve that level of popularity. Feasibility means understanding how advances in technology, which occur at a rapid pace, make previously impossible capabilities possible and being able to recognize and apply those technological advancements to the product. Integration is how well designed the product is to fit on a wide variety of different settings that might not be envisioned at the time of the product's release, such as smartphones and smartwatches. Great engineers anticipate the most likely needs and build that into the product without wasting time and effort building for an unlikely future. As the engineering manager, you should frequently think about whether the engineers on your team are great engineers. And if they aren't yet, how you can help them to become great engineers.