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.
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
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
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
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
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
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
Fisher A, Margolis J (2002) Unlocking the clubhouse: the carnegie mellon experience. ACM SIGCSE Bullet 34(2):79–83
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
Gugerty L, Olson GM (1986) Debugging by skilled and novice programmers. ACM SIGCHI Bull 17(4):171–174
Herbsleb J, Zubrow D, Goldenson D, Hayes W, Paulk M (1997) Software quality and the Capability Maturity Model. Commun ACM 40(6):31–40
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
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
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
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
Meade AW, Craig SB (2012) Identifying careless responses in survey data. Psychol Methods 17(3):437– 455
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
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
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
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
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
Simon H (1955) A behavioral model of rational choice. Q J Econ 69:99–188
Simon H (1973) Applying information technology to organizational design. Public Adm Rev 33(3):268– 278
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
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
Corresponding author
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
About this article
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
Published:
Issue Date:
DOI: https://doi.org/10.1007/s10664-019-09773-y