Cracking the Code: Unveiling the Traits of a Great Software Engineer - Paper Review

Last updated Apr 1, 2024 Published Jun 27, 2023

The content here is under the Attribution 4.0 International (CC BY 4.0) license

What Makes a Great Software Engineer? May 2015 - Conference: 2015 IEEE/ACM 37th IEEE International Conference on Software Engineering (ICSE) [1] - available online version - last accessed: Jul 19, 2023.

Introduction

  • The literature is based on novices and students starting their careers rather than experienced software engineers
  • ACM curricula say software engineers need technical knowledge and project management.

The contribution of the paper is the understanding of software engineering expertise as viewed by expert software engineers.


Related research is extensive, but a few aim at directly software engineers’ expertise.

  • Insights in software engineering came from OOPSLA 2003, which discussed the need for design analysis, embracing diversity, multidisciplinary project teaming, large-scale development and quality code.
  • Dijkastra: obvious and elegant code, constructed with provable correctness.
  • Experts are more productive, systematic, and well-prepared.
  • Research suggests qualitative and environmental differences.
  • Setting, communication and alignment of goals are important.
  • Effective conflict management.
  • Experts know code ownership, the technical domain, and argumentation skills

Empirical

  • ideally sample wide range of software engineers.
  • Face to face semi structured interview - about 1 hour.
  • Licensure and accreditation for software engineers is still uncommon.
  • Authors based their selection on social “people having achieved some degree of recognition as software engineers”.
  • At or above Level 2 - those are experts by other engineers via hiring promotion process.
  • Random sampled engineers (round-robin fashion).
  • Out of 152 contacted engineers, 59 was interviewed.

Findings

  • 53 attributes (internal and external)
  • internal: personality and ability to make decisions
  • external: focus on emotional intelligence and decision making models to their software, their team mates, stakeholders and potentially millions of users

Model of attributes

Personal characteristics

  • Improving
    • Not great when started but learned to continuous learning - technology change fast
    • This is also connected to what is dicussed in the course “Learning how to learn”
  • Passionate
    • Intrinsically interested in the area they are in, not just looking for rewards like money
  • Open-minded
    • Let new information to change how they think
    • It is rare to have one engineering that have a complete understanding of they system
  • Data-driven
    • Creates behavioral feedback
    • Decisions should be made using data

Decision making

  • Knowledgeable about people and the organization
  • Mental model: synthesizing the current context, decision alternatives, probabilistic outcomes and values of outcomes
  • Handles complexity

Teammates

  • Creates shared context
  • Creates shared success
    • Managers have a broader view, engineers have a detailed view
  • Creates a safe heaven
  • A place to improve from mistakes without negative consequences
    • pains from mistakes are the best teachers
  • Not appreciate wasting time shifiting the blame for problems

Software product

  • Elegant
    • Simple and intuitive designs
    • Avoid complexity
  • Creative
  • Anticipate needs

Treats to validity

  • Treats to internal validity
    • informants could produce more attributes after the interview
  • Treats to external validity
    • small sample
    • results might not generalize to other cultures
    • organization size might also affect the results

Discussion

  • Productivity is one criterion for excellence
  • Software engineering is a socio-technical undertaking, not just a technical one
  • Simply delivering code is insufficient
  • For researchers
    • not aware of tools that help engineers be more well-mannered in emails
    • evaluate tread-offs
  • For novice engineers
    • can use the attributes to aspire to be great engineers
    • better present them to their employees
  • For managers
    • help senior engineers to improve mentoring, raising challenges and walking-the-walk
    • avoid not well-mannered engineers
  • For educators
    • results rise questions about curriculum
    • decision making is not part of the ACM computing curricula
    • explicitly discuss what students will not learn in school/university

References

  1. [1]P. Li, A. Ko, and J. Zhu, “What Makes a Great Software Engineer?,” 2015, pp. 700–710, doi: 10.1109/ICSE.2015.335.

Changelog

  • Apr 01, 2024 - Added mindmap in the page