What Makes A Great Software Engineer?

Author(s): Paul Luo Li, Andrew J. Ko, Jiamin Zhu
Venue: International Conference on Software Engineering
Date: 2015

Type of Experiement: Survey/Multi-Case Study
Sample Size: 59
Class/Experience Level: Professional
Participant Selection: A stratified random sample of Microsoft engineers across two dimensions: product type and experience level
Data Collection Method: Survey


This study conducted interviews with 59 engineers across 13 divisions at Microsoft to gather, assess, and apply attributes of great software engineers. The authors’ analysis identified a diverse set of 53 attributes of quality software engineers. These attributes were broken down into four categories: personal characteristics, decision making, teammates, and software product. Some of the most prominent qualities identified for personal characteristics were improving, passionate, open-minded, and data-driven. For decision making, a good software engineer is knowledgeable about people and the organization, updates their mental models, sees the forest and the trees, and handles complexity. As a teammate, they create shared context, create shared success, create a safe haven, and are honest. Their software product is elegant, creative, and anticipates needs.

After gathering this data, the authors discuss a few key observations, and the implications of these findings for researchers, novice engineers, managers, and educators. For researchers, these findings reflect higher-level concerns in industry, such as individuality, organizations, and productization, that have not been focused on in past research. Researchers could develop tools to facilitate and train engineers, especially novices, in attributes like being more well-mannered in emails, evaluating tradeoffs, and seeing the forest and the trees when making decisions. Novice engineers can aspire to achieve the characteristics identified in this research, assess their fit with prospective employers, and better present themselves in interviews. Managers can gain a better understanding of how to manage engineers, make more effective hiring decisions, and cultivate the attributes within their teams. Educators may consider changing their curriculum and examine their teaching methods to foster students that have these qualities. Overall, the authors’ findings aim to provoke the research community to begin to understand software engineering as a sociotechnical discipline with individual human contributors and their collaborations fueling software progress.