Advertisement

What distinguishes great software engineers?

  • Paul Luo LiEmail author
  • Amy J. Ko
  • Andrew Begel
Article

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.

Keywords

Software engineering Software development management Collaboration Computer science education 

Notes

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.

References

  1. Ahmed F, Capretz LF, Campbell P (2012) Evaluating the demand for soft skills in software development. IT Prof 14(1):44–49CrossRefGoogle Scholar
  2. 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
  3. Anvik J, Hiew L, Murphy GC (2006) Who Should Fix This Bug? In: Proceedings of the 28th International Conference on Software Engineering, pp 361–370Google Scholar
  4. 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–308Google Scholar
  5. 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
  6. 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/
  7. 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–128Google Scholar
  8. 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–300Google Scholar
  9. Boehm BW (1988) A spiral model of software development and enhancement. IEEE Comput 21(5):61–72CrossRefGoogle Scholar
  10. Bourque P, Fairley RE et al (2014) Guide to the software engineering body of knowledge: Version 3.0. IEEE Computer Society PressGoogle Scholar
  11. 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–136Google Scholar
  12. Brooks FP (1995) The Mythical Man-Month: Essays on Software Engineering, 2nd edn. Addison-Wesley Professional, ReadingGoogle Scholar
  13. 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–812CrossRefGoogle Scholar
  14. 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–113CrossRefGoogle Scholar
  15. Ericsson KA, Krampe RT, Tesch-romer C (1993) The role of deliberate practice in the acquisition of expert performance. Psychol Rev 100(3):363–406CrossRefGoogle Scholar
  16. Fisher A, Margolis J (2002) Unlocking the clubhouse: the carnegie mellon experience. ACM SIGCSE Bullet 34(2):79–83CrossRefGoogle Scholar
  17. Fitzpatrick B, Collins-Sussman B (2009) The Myth of the Genius ProgrammerGoogle Scholar
  18. Gobeli DH, Koenig HF, Bechinger I (1998) Managing conflict in software development teams: a multilevel analysis. J Prod Innov Manag 15:423–435CrossRefGoogle Scholar
  19. Gugerty L, Olson GM (1986) Debugging by skilled and novice programmers. ACM SIGCHI Bull 17(4):171–174CrossRefGoogle Scholar
  20. Herbsleb J, Zubrow D, Goldenson D, Hayes W, Paulk M (1997) Software quality and the Capability Maturity Model. Commun ACM 40(6):31–40CrossRefGoogle Scholar
  21. 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–279Google Scholar
  22. Hollander M, Wolfe DA, Chicken E (2013) Nonparametric Statistical Methods, 3rd edn. Wiley, New YorkzbMATHGoogle Scholar
  23. IEEE Computer Society, Bourque P, Fairley RE (2014) Guide to the Software Engineering Body of Knowledge (SWEBOK), 3rd edn. IEEE Computer Society Press, Los AlamitosGoogle Scholar
  24. 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–120Google Scholar
  25. Joint Task Force on Computing Curricula (2014) Software Engineering 2014: Curriculum guidelines for undergraduate degree programs in software engineering. Technical report. ACMGoogle Scholar
  26. Kelley RE (1999) How to Be a Star at Work: 9 Breakthrough Strategies You Need to Succeed. Crown BuisnessGoogle Scholar
  27. 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–353Google Scholar
  28. Ko AJ, Chilana PK (2011) Design, discussion, and dissent in open bug reports. Proceedings of the 2011 iConference, pp 106–113Google Scholar
  29. Kruchten P, Nord RL, Ozkaya I (2012) Technical debt: From metaphor to theory and practice. IEEE Softw 29(6):18–21CrossRefGoogle Scholar
  30. 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–501Google Scholar
  31. Li PL, Ko AJ, Zhu J (2015) What Makes A Great Software Engineer? In: Proceedings of the 37th International Conference on Software EngineeringGoogle Scholar
  32. Li PL (2016) What Makes a Great Software Engineer. PhD thesis, University of Washington. https://digital.lib.washington.edu/researchworks/handle/1773/37160
  33. 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/
  34. Margolis J, Fisher A (2003) Unlocking the Clubhouse: Women in Computing. The MIT Press, CambridgezbMATHGoogle Scholar
  35. Meade AW, Craig SB (2012) Identifying careless responses in survey data. Psychol Methods 17(3):437– 455CrossRefGoogle Scholar
  36. NSPE (2007) National Society of Professional Engineers Code of Ethics for Engineers. http://www.nspe.org/resources/ethics/code-ethics
  37. Perry DE, Staudenmeyer NA, Votta LG (1994) People, organizations, and process improvement. IEEE Softw 11(4):36–45CrossRefGoogle Scholar
  38. 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–475Google Scholar
  39. 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–530Google Scholar
  40. 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–300Google Scholar
  41. Rising L, Janoff NS (2000) The Scrum software development process for small teams. IEEE Softw 17(4):26–32CrossRefGoogle Scholar
  42. 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–903CrossRefGoogle Scholar
  43. 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/
  44. 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– 510Google Scholar
  45. Sackman H, Erikson W, Grant E (1968) Exploratory experimental studies comparing online and offline programmmg performance. Commun ACM 11(1):3–11CrossRefGoogle Scholar
  46. 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–457CrossRefGoogle Scholar
  47. Simon H (1955) A behavioral model of rational choice. Q J Econ 69:99–188CrossRefGoogle Scholar
  48. Simon H (1973) Applying information technology to organizational design. Public Adm Rev 33(3):268– 278CrossRefGoogle Scholar
  49. 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—-188Google Scholar
  50. 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–301Google Scholar
  51. Ventures CBS, Knowledge CUD (2000) Risk and return: expected return. http://ci.columbia.edu/ci/premba_test/c0332/s6/s6_3.html

Copyright information

© Springer Science+Business Media, LLC, part of Springer Nature 2019

Authors and Affiliations

  1. 1.MicrosoftRedmondUSA
  2. 2.The Information SchoolUniversity of WashingtonSeattleUSA
  3. 3.Microsoft ResearchRedmondUSA

Personalised recommendations