Skip to main content
Log in

What distinguishes great software engineers?

  • Published:
Empirical Software Engineering Aims and scope Submit manuscript

Abstract

Great software engineers are essential to the creation of great software. However, today, we lack an understanding of what distinguishes great engineers from ordinary ones. We address this knowledge gap by conducting one of the largest mixed-method studies of experienced engineers to date. We surveyed 1,926 expert engineers, including senior engineers, architects, and technical fellows, asking them to judge the importance of a comprehensive set of 54 attributes of great engineers. We then conducted 77 email interviews to interpret our findings and to understand the influence of contextual factors on the ratings. After synthesizing the findings, we believe that the top five distinguishing characteristics of great engineers are writing good code, adjusting behaviors to account for future value and costs, practicing informed decision-making, avoiding making others’ jobs harder, and learning continuously. We relate the findings to prior work, and discuss implications for researchers, practitioners, and educators.

This is a preview of subscription content, log in via an institution to check access.

Access this article

Price excludes VAT (USA)
Tax calculation will be finalised during checkout.

Instant access to the full article PDF.

Fig. 1
Fig. 2
Fig. 3

Similar content being viewed by others

References

  • Ahmed F, Capretz LF, Campbell P (2012) Evaluating the demand for soft skills in software development. IT Prof 14(1):44–49

    Article  Google Scholar 

  • AMA (2001) American Medial Association Principles of Medical Ethics. http://www.ama-assn.org/ama/pub/physician-resources/medical-ethics/code-medical-ethics/principles-medical-ethics.page?

  • Anvik J, Murphy GC (2007) Determining Implementation Expertise from Bug Reports. In: Proceedings of the Fourth International Workshop on Mining Software Repositories, Minneapolis, pp 298–308, https://doi.org/10.1109/MSR.2007.7. http://ieeexplore.ieee.org/lpdocs/epic03/wrapper.htm?arnumber=4228639

  • Anvik J, Hiew L, Murphy GC (2006) Who Should Fix This Bug? In: Proceedings of the 28th International Conference on Software Engineering, pp 361–370

  • Aranda J, Venolia G (2009) The secret life of bugs: going past the errors and omissions in software repositories. In: Proceedings of the IEEE 31st International Conference on Software Engineering, pp 298–308

  • Baltes S, Diehl S (2018) Towards a theory of software development expertise. In: Proceedings of the 2018 26th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering, ESEC/FSE 2018. ACM, New York, pp 187–200. https://doi.org/10.1145/3236024.3236061

  • Beck K, Beedle M, van Bennekum A, Cockburn A, Cunningham W, Fowler M, Grenning J, Highsmith J, Hunt A, Jeffries R, Kern J, Marick B, Martin RC, Mellor S, Schwaber K, Sutherland J, Thomas D (2001) Manifesto for Agile Software Development. http://www.agilemanifesto.org/

  • Begel A (2008) Pair Programming: What’s in it for me? In: Proceedings of the Second ACM-IEEE International Symposium on Empirical Software Engineering and Measurement, pp 120–128

  • Bertram D, Voida A, Greenberg S, Walker R (2010) Communication, collaboration, and bugs: the social nature of issue tracking in small, collocated teams. In: Proceedings of the 2010 ACM Conference on Computer Supported Cooperative Work, pp 291–300

  • Boehm BW (1988) A spiral model of software development and enhancement. IEEE Comput 21(5):61–72

    Article  Google Scholar 

  • Bourque P, Fairley RE et al (2014) Guide to the software engineering body of knowledge: Version 3.0. IEEE Computer Society Press

  • Brechner E (2003) Things they would not teach me of in college: what Microsoft developers learn later. In: Proceedings of the 18th annual ACM SIGPLAN Conference on Object-oriented Programing, Systems, Languages, and Applications, pp 134–136

  • Brooks FP (1995) The Mythical Man-Month: Essays on Software Engineering, 2nd edn. Addison-Wesley Professional, Reading

    Google Scholar 

  • Carver JC, Nagappan N, Page A (2008) The impact of educational background on the effectiveness of requirements inspections: an empirical study. IEEE Trans Softw Eng 34(6):800–812

    Article  Google Scholar 

  • Cruz S, da Silva FQ, Capretz LF (2015) Forty years of research on personality in software engineering: a mapping study. Comput Hum Behav 46:94–113

    Article  Google Scholar 

  • Ericsson KA, Krampe RT, Tesch-romer C (1993) The role of deliberate practice in the acquisition of expert performance. Psychol Rev 100(3):363–406

    Article  Google Scholar 

  • Fisher A, Margolis J (2002) Unlocking the clubhouse: the carnegie mellon experience. ACM SIGCSE Bullet 34(2):79–83

    Article  Google Scholar 

  • Fitzpatrick B, Collins-Sussman B (2009) The Myth of the Genius Programmer

  • Gobeli DH, Koenig HF, Bechinger I (1998) Managing conflict in software development teams: a multilevel analysis. J Prod Innov Manag 15:423–435

    Article  Google Scholar 

  • Gugerty L, Olson GM (1986) Debugging by skilled and novice programmers. ACM SIGCHI Bull 17(4):171–174

    Article  Google Scholar 

  • Herbsleb J, Zubrow D, Goldenson D, Hayes W, Paulk M (1997) Software quality and the Capability Maturity Model. Commun ACM 40(6):31–40

    Article  Google Scholar 

  • Hewner M, Guzdial M (2010) What game developers look for in a new graduate: interviews and surveys at one game company. In: Proceedings of the 41st ACM Technical Symposium on Computer Science Education, pp 275–279

  • Hollander M, Wolfe DA, Chicken E (2013) Nonparametric Statistical Methods, 3rd edn. Wiley, New York

    MATH  Google Scholar 

  • IEEE Computer Society, Bourque P, Fairley RE (2014) Guide to the Software Engineering Body of Knowledge (SWEBOK), 3rd edn. IEEE Computer Society Press, Los Alamitos

    Google Scholar 

  • Jeong G, Kim S, Zimmermann T (2009) Improving bug triage with bug tossing graphs. In: Proceedings of the 7th Joint Meeting of the European Software Engineering Conference and the ACM SIGSOFT Symposium on the Foundations of Software Engineering, pp 111–120

  • Joint Task Force on Computing Curricula (2014) Software Engineering 2014: Curriculum guidelines for undergraduate degree programs in software engineering. Technical report. ACM

  • Kelley RE (1999) How to Be a Star at Work: 9 Breakthrough Strategies You Need to Succeed. Crown Buisness

  • Ko AJ, DeLine R, Venolia G (2007) Information needs in collocated software development teams. In: Proceedings of the 29th International Conference on Software Engineering, pp 344–353

  • Ko AJ, Chilana PK (2011) Design, discussion, and dissent in open bug reports. Proceedings of the 2011 iConference, pp 106–113

  • Kruchten P, Nord RL, Ozkaya I (2012) Technical debt: From metaphor to theory and practice. IEEE Softw 29(6):18–21

    Article  Google Scholar 

  • Latoza TD, Venolia G, DeLine R (2006) Maintaining mental models: a study of developer work habits. In: Proceedings of the 28th International Conference on Software Engineering, pp 492–501

  • Li PL, Ko AJ, Zhu J (2015) What Makes A Great Software Engineer? In: Proceedings of the 37th International Conference on Software Engineering

  • Li PL (2016) What Makes a Great Software Engineer. PhD thesis, University of Washington. https://digital.lib.washington.edu/researchworks/handle/1773/37160

  • Li PL, Ko AJ, Zhu J (2019) Appendix to What Makes a Great Software Engineer? Technical Report MSR-TR-2019-8, Microsoft. https://www.microsoft.com/en-us/research/publication/appendix-to-what-makes-a-great-software-engineer/

  • Margolis J, Fisher A (2003) Unlocking the Clubhouse: Women in Computing. The MIT Press, Cambridge

    MATH  Google Scholar 

  • Meade AW, Craig SB (2012) Identifying careless responses in survey data. Psychol Methods 17(3):437– 455

    Article  Google Scholar 

  • NSPE (2007) National Society of Professional Engineers Code of Ethics for Engineers. http://www.nspe.org/resources/ethics/code-ethics

  • Perry DE, Staudenmeyer NA, Votta LG (1994) People, organizations, and process improvement. IEEE Softw 11(4):36–45

    Article  Google Scholar 

  • Podgurski A, Leon D, Francis P, Masri W, Minch M, Sun J, Wang B (2003) Automated support for classifying software failure reports. In: Proceedings of the 25th International Conference on Software Engineering, pp 465–475

  • Radermacher A, Walia GS (2013) Gaps between industry expectations and the abilities of graduates: systematic literature review findings. In: Proceeding of the 44th ACM Technical Symposium on Computer Science Education, pp 525–530

  • Radermacher A, Walia G, Knudson D (2014) Investigating the skill gap between graduating students and industry expectations. In: Proceedings of the 28th International Conference on Software engineering, pp 291–300

  • Rising L, Janoff NS (2000) The Scrum software development process for small teams. IEEE Softw 17(4):26–32

    Article  Google Scholar 

  • Robillard MP, Coelho W, Murphy GC, Society IC (2004) How effective developers investigate source code : an exploratory study. IEEE Trans Softw Eng 30(12):889–903

    Article  Google Scholar 

  • Rozovsky J (2015) The five keys to a successful Google Team. re:Work p 1. https://rework.withgoogle.com/blog/five-keys-to-a-successful-google-team/

  • Runeson P, Alexandersson M, Nyholm O (2007) Detection of duplicate defect reports using natural language processing. In: Proceedings of the 29th International Conference on Software Engineering, pp 499– 510

  • Sackman H, Erikson W, Grant E (1968) Exploratory experimental studies comparing online and offline programmmg performance. Commun ACM 11(1):3–11

    Article  Google Scholar 

  • Shackelford R, McGettrick A, Sloan R, Topi H, Davies G, Kamali R, Cross J, Impagliazzo J, LeBlanc R, Lunt B (2006) Computing curricula 2005: The Overview Report. SIGCSE Bullet 38(1):456–457

    Article  Google Scholar 

  • Simon H (1955) A behavioral model of rational choice. Q J Econ 69:99–188

    Article  Google Scholar 

  • Simon H (1973) Applying information technology to organizational design. Public Adm Rev 33(3):268– 278

    Article  Google Scholar 

  • Singer J, Lethbridge T, Vinson N, Anquetil N (1997) An examination of software engineering work practices. In: Proceedings of the 1997 Conference of the Centre for Advanced Studies onf Collaborative Research, pp 174—-188

  • Valett JD, McGarry FE (1988) A summary of software measurement experiences in the software engineering laboratory. In: Proceedings of the 21st Annual Hawaii International Conference on System Sciences, pp 293–301

  • Ventures CBS, Knowledge CUD (2000) Risk and return: expected return. http://ci.columbia.edu/ci/premba_test/c0332/s6/s6_3.html

Download references

Acknowledgements

The authors wish to thank the Microsoft software engineers who participated in our research. This work was supported in part by Microsoft, Google, and National Science Foundation (NSF) Grants CCF-0952733, CNS-1240786, and IIS-1314399.

Author information

Authors and Affiliations

Authors

Corresponding author

Correspondence to Paul Luo Li.

Additional information

Communicated by: Kelly Blincoe

Publisher’s note

Springer Nature remains neutral with regard to jurisdictional claims in published maps and institutional affiliations.

Rights and permissions

Reprints and permissions

About this article

Check for updates. Verify currency and authenticity via CrossMark

Cite this article

Li, P.L., Ko, A.J. & Begel, A. What distinguishes great software engineers?. Empir Software Eng 25, 322–352 (2020). https://doi.org/10.1007/s10664-019-09773-y

Download citation

  • Published:

  • Issue Date:

  • DOI: https://doi.org/10.1007/s10664-019-09773-y

Keywords

Navigation