What Makes a Great Software Engineer?

Key Points

  • Microsoft research identified 53 attributes of great software engineers, categorized into Personal Characteristics, Decision Making, Teammates Engagement, and Software Product.
  • The study involved interviewing 59 experienced engineers from various Microsoft divisions.
  • Surprisingly, great software engineers need strong interpersonal skills and decision-making abilities, not just technical expertise.

Research Overview

Microsoft’s research, titled “What Makes a Great Software Engineer?”, aimed to define the qualities that make software engineers exceptional. Conducted through interviews with 59 experienced engineers, it provides a detailed look at the multifaceted nature of software engineering excellence.

Key Findings

The study uncovered 53 attributes, grouped into four categories:

  • Personal Characteristics: Traits like being improving, passionate, and open-minded.
  • Decision Making: Skills such as handling complexity and making informed decisions.
  • Teammates Engagement: Abilities like creating shared context and communicating effectively.
  • Software Product: Qualities such as producing elegant and creative software.

This research highlights that software engineering is a sociotechnical profession, emphasizing the importance of both technical and interpersonal skills.


Detailed Analysis and Methodology

This section provides an in-depth exploration of the research “What Makes a Great Software Engineer?” conducted by Microsoft, offering a comprehensive analysis for those seeking a deeper understanding of the findings and their implications. The study, presented at the 2015 IEEE/ACM 37th IEEE International Conference on Software Engineering in Florence, Italy, is a significant contribution to the field of software engineering, particularly in understanding the attributes that define greatness in this profession.

Research Background and Objectives

The research, authored by Paul Luo Li, Amy J. Ko, and Jiamin Zhu, addresses the lack of specificity in understanding software engineering expertise. Prior knowledge often relied on vague stereotypes, such as “excellent communicators” and “great teammates,” which hindered researchers, employers, and young engineers from effectively reasoning about, identifying, and developing these skills. The study sought to answer three key questions:

  • What do expert software engineers think are attributes of great software engineers?
  • Why are these attributes important for the engineering of software?
  • How do these attributes relate to each other?

The objective was to provide a thorough, specific, and contextual understanding of software engineering expertise as viewed by expert engineers, thereby filling gaps in both specificity and breadth of knowledge.

Methodology

The methodology involved conducting semi-structured interviews with 59 experienced software engineers across 13 divisions at Microsoft. The sample was a stratified random selection, ensuring representation across various product types (e.g., Bing, Dynamics, Office, Phone, Windows, Xbox, and others) and experience levels. The breakdown included:

  • 29 engineers at experienced titles (Software Development Engineer II, Senior SDE, Senior Dev Lead).
  • 30 engineers at very experienced titles (Architect, Technical Fellow, Partner Dev Manager, etc.).

The response rate was 39%, with 59 interviews conducted out of 152 contacted engineers. The sample demographics included 3 women, all based in Seattle, USA, which introduces considerations for generalizability. The interviews aimed to inductively understand what software engineering expertise entailed, focusing on attributes beyond technical skills.

Key Findings: Attributes of Great Software Engineers

The research identified 53 attributes, categorized into four groups, each with specific examples and counts:

CategoryNumber of AttributesExamples
Personal Characteristics18Improving, passionate, open-minded, data-driven, systematic, productive, perseverant, hardworking, curious, risk-taking, adaptable, self-reliant, self-aware, aligned, executing, prideful, creating, focused.
Decision Making9Knowledgeable about people and organization, sees the forest and the trees, updates mental models, handles complexity, knowledgeable about technical domain, customers and business, tools and building materials, engineering processes, models states and outcomes.
Teammates Engagement17Creates shared context, shared success, safe haven, honest, integrates contexts, well-mannered, acquires context, not making it personal, mentoring, raises challenges, walking-the-walk, manages expectations, has a good reputation, stands their ground, trading favors, personable, asks for help.
Software Product9Elegant, creative, anticipates needs, makes tradeoffs, attentive to details, fitted, evolving, long-termed, carefully constructed.

These attributes were derived from the interviews, with each category reflecting different facets of software engineering expertise. The Personal Characteristics category (18 attributes) emphasizes intrinsic traits, while Decision Making (9 attributes) focuses on cognitive and strategic skills. Teammates Engagement (17 attributes) highlights interpersonal interactions, and Software Product (9 attributes) addresses the quality and impact of the engineer’s output.

Discussion and Implications

The discussion section, serving as the concluding remarks, noted that nearly all attributes have been mentioned in prior work (e.g., Begel and Simon, 2008; Hewner and Guzdial, 2010; Lethbridge, 1998; Kelley, 1999), but this study provides the first comprehensive set. It reinforces that software engineering is a sociotechnical profession, where how engineering is conducted—relative to management, subordinates, teammates, partners, and self—is as critical as productivity.

Key implications include:

  • For Researchers: Develop measurements for these attributes and explore tools to support attributes like well-mannered communication. Future work could examine combinations of attributes, deeper studies on individual attributes, and comparisons with other fields, considering contextual factors like gender and background.
  • For Novice Engineers: Aspire to achieve these attributes and assess fit with employers based on these criteria.
  • For Managers: Improve hiring practices and cultivate these attributes within teams, recognizing the importance of decision-making and continuous learning.
  • For Educators: Consider adding decision-making courses and evaluating teaching methods to foster these attributes, moving beyond technical skills to include interpersonal and decision-making skills.

The study also acknowledged threats to validity:

  • Construct Validity: Lack of a clear definition of “software engineer” may affect interpretation.
  • Internal Validity: Limited unprompted attributes and potential different interpretations by informants.
  • External Validity: Small sample size (59 out of tens of thousands at Microsoft), underrepresentation of women (3 out of 59), Seattle-specific context, and potential lack of generalizability to other cultures or non-software-centric industries.

Supporting Evidence and Access

The paper is accessible via the University of Washington faculty page at faculty.washington.edu, providing the full PDF for detailed reading. Additional references to the study can be found on platforms like Semantic Scholar Semantic Scholar and IEEE Xplore IEEE Xplore, though access may require subscriptions.

Conclusion

This research offers a robust framework for understanding software engineering expertise, emphasizing that greatness extends beyond technical skills to include personal traits, decision-making abilities, and effective team interactions. It serves as a valuable resource for stakeholders in the software engineering community, with implications for research, education, and practice.

Key Citations