Recently I read the article "What Distinguishes Great Software Engineers?" (Springer link), published in 2019 by Paul Luo Li, Amy J. Ko, and Andrew Begel, which synthesizes their findings of the key characteristics that distinguishes great software engineers.
Their research covered 54 attributes of a previous study and concluded 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.
For a software engineering manager, I think that is also a great reference of what skills to help teams develop.
Let's jump to the must-have characteristics identified by their research, which surveyed 1926 expert engineers:
Rank # | Attribute and description |
---|---|
1 | Pays attention to coding details, such as error handling, memory, performance, style |
2 | Mentally capable of handling complexity; can comprehend multiple interacting software components |
3 | Continuously improving: improves themselves, their product, or their surroundings |
4 | Honest: provide credible information and feedback that others can act on |
5 | Open-minded: lets new information change their thinking |
6 | Executes: knows when to stop thinking and to start doing |
7 | Self-reliant: gets things done independently and does not get blocked easily |
8 | Self-reflecting: recognizes when things are going wrong with a plan and pivots |
9 | Persevering: not dissuaded by setbacks and failures |
10 | Fits together with other pieces around it: code accounts for surrounding constraints and products. |
11 | Knowledgeable about their technical domain, including product, platform, and competitors |
12 | Makes informed trade-offs: code is responsive to time to market goals, critical needs of the business |
13 | Updates their decision making knowledge: does not let their understanding stagnate |
14 | Curious: desires to know why things happen and how things work |
15 | Evolving: code is structured to be effectively built, delivered, and updated incrementally |
The attributes were ranked along a scale of must have, should have, nice to have, irrelevant, and should not have. If you want to check the complete list, check the article.