In 2015 a group of researchers asked 59 experienced engineers at Microsoft "What makes a great software engineer?". Here's what they found.
Paul Luo Li et. al. noted that "employers want to hire and retain great engineers, universities want to train great engineers, and young engineers want to become great". But there's no good definition of what that even means.
They figured great recognizes great and ran a series of interviews aimed at figuring out:
- What do expert software engineers think are the attributes of great software engineers?
- Why are these attributes important for the engineering of software?
- How do these attributes relate to each other?
You can read the full paper here.
Traits of a great software engineer
Researchers grouped the 53 attributes of a great software engineer into 2 categories: Internal and External. Those further split into Personal Characteristics and Decision Making, and impact on Teammates and Software Product – what your code is like.
Personal characteristics
Personal characteristics are about who you are as a person. Interviewees felt these cannot be learned at work. Reinforced and improved yes, but not learned.
Not a DEI problem at all 🤔
Psychologists say that personality does change with age and practice. Takes work though.
- improving – constantly finding ways to improve, do things better, and keep up with trends in their field.
- passionate – intrinsically interested in the area they are working, not there just for the money (although money is nice). Finding person-project fit matters.
- open-minded – willing to let new information change how they think. If the facts change, your understanding should change.
- data-driven – using data to make decisions rather than guessing. And if you are guessing, validate with data.
The other 14 traits are variations on "Great engineers ship" and "Great engineers focus on impact over effort".
Decision making
Decision making traits are about your comfort with synthesizing context, probabilistic outcomes, and understanding how your decisions play out in the real world. Book knowledge is not enough.
- Knowledge about people and org – knowing who knows what, who has the right context to help, and finding the right people to help you. The bigger the company, the more this matters.
- Sees the forest and the trees – considering situations at multiple levels of abstraction. Technical details, industry trends, company vision, and business needs. How does each impact what you're doing?
- Updates their mental models – relates to being open-minded. How does your understanding change when you gain new information about the system? Something can be true and working even if it flies against every best practice you've heard.
- Handles complexity – reasoning about complex and intertwining ideas with agility. Part natural ability, part how you leverage tools to make it easier.
The other 5 traits in this category talk about skill. Do you have the raw skills and tools to bring your ideas to reality?
As Twyla Tharp, a famous choreographer, says in The Creative Habit – "Skill bridges the gap between vision and reality"
Teammates
Software is a team sport and how you interact with and empower your team matters. A lot.
- Creates shared context – adapting your message to the other person's understanding so you're both working from the same context. Shared understanding is essential to success.
- Creates shared success – as my manager calls it "We succeed and fail as a team". You give credit where it's due and don't take too much for yourself.
- Creates a safe haven – if engineers are afraid of mistakes, their growth slows. Making it safe to fail is paramount. But you need the space to learn from mistakes too.
- Honest – if you can't rely on people's words, you're gonna have a hard time. Keep it focused on solving the problem, not blame.
You can summarize the full 17 traits as "Don't be a dick" and "Foster psychological safety". The biggest, if not only, predictor of successful engineering teams.
I would highlight that Asks for help was among these traits. Beats getting stuck.
Software product
The craft of engineering. What your code and architecture looks like. How you solve problems. The part everyone focuses on the most.
Notice that it's last on the list.
- Elegant – elegance is the most revered. Hard to put into words. It comes down to taste, I think. Does this engineer have good taste?
- Creative – there are 2 parts to creativity. First is the ability to create novel solutions in the right context, second is knowing when not to invent something new.
- Anticipate needs – software that keeps running and adapting to changing requirements with minimal intervention is considered wonderful. But you can't make it so future proof that it slows you down too much today.
The other 6 traits are what I would call "Showing you care". Attention to detail, fit for purpose, ...
The research isn't perfect
You should read the full paper here. Nice accessible read over coffee. I found myself nodding along.
The research is limited to experienced engineers at Microsoft and may not generalize to every situation. Pick and choose what fits.
And remember: 99% of engineering literature online focuses on how, not what. But it's the what and why that make a senior+ ✌️
Cheers,
~Swizec
Continue reading about What makes a great software engineer?
Semantically similar articles hand-picked by GPT-4
- What makes you a true master
- What you can expect from the Senior Mindset Retreat
- What I learned from Software Engineering at Google
- Keeping a high engineering culture, tips from the field
- When you don't think you're good enough
Become a *true* Senior Engineer
Get promoted, earn a bigger salary, work for top companies
Getting that senior title is easy. Just stick around. Being a true senior takes a new way of thinking. Do you have it?
The Senior Minset email crash course
Get a free chapter from the Senior Engineer Mindset book and a sample audiobook chapter, followed by a Senior Mindset 101 email course.
You'll get insights to apply at your work right away.
Have a burning question that you think I can answer? Hit me up on twitter and I'll do my best.
Who am I and who do I help? I'm Swizec Teller and I turn coders into engineers with "Raw and honest from the heart!" writing. No bullshit. Real insights into the career and skills of a modern software engineer.
Want to become a true senior engineer? Take ownership, have autonomy, and be a force multiplier on your team. The Senior Engineer Mindset ebook can help 👉 swizec.com/senior-mindset. These are the shifts in mindset that unlocked my career.
Curious about Serverless and the modern backend? Check out Serverless Handbook, for frontend engineers 👉 ServerlessHandbook.dev
Want to Stop copy pasting D3 examples and create data visualizations of your own? Learn how to build scalable dataviz React components your whole team can understand with React for Data Visualization
Want to get my best emails on JavaScript, React, Serverless, Fullstack Web, or Indie Hacking? Check out swizec.com/collections
Did someone amazing share this letter with you? Wonderful! You can sign up for my weekly letters for software engineers on their path to greatness, here: swizec.com/blog
Want to brush up on your modern JavaScript syntax? Check out my interactive cheatsheet: es6cheatsheet.com
By the way, just in case no one has told you it yet today: I love and appreciate you for who you are ❤️