Swizec Teller - a geek with a hatswizec.com

    What makes a great software engineer?

    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.

    Research paper with my notes and scribbles
    Research paper with my notes and scribbles

    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.

    53 attributes of a great software engineer
    53 attributes of a great software engineer

    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.

    1. improving – constantly finding ways to improve, do things better, and keep up with trends in their field.
    2. passionate – intrinsically interested in the area they are working, not there just for the money (although money is nice). Finding person-project fit matters.
    3. open-minded – willing to let new information change how they think. If the facts change, your understanding should change.
    4. 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.

    1. 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.
    2. 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?
    3. 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.
    4. 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.

    1. 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.
    2. 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.
    3. 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.
    4. 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.

    1. Elegant – elegance is the most revered. Hard to put into words. It comes down to taste, I think. Does this engineer have good taste?
    2. 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.
    3. 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

    Did you enjoy this article?

    Published on July 11th, 2022 in Mindset, Papers, Software Engineering,

    Want to become a true senior engineer?

    Getting that senior title is easy. Just stick around. Being a true senior takes a new way of thinking. Do you have it?

    Leave your email and get the Senior Mindset series - a series of curated essays on the mindset of a senior software engineer. What it takes to get there, what should you do when you're there, how to change the way you think.

    The Senior Mindset series

    Get a series of curated essays on the mindset of a senior software engineer. What it takes to get there, what should you do when you're there, how to change the way you think.

    it describes my days in a way I have not read before.

    This was a very enlightening article about being a senior engineer.

    Join 15,883+ engineers learning lessons from my "raw and honest from the heart" emails.

    ⭐️⭐️⭐️⭐️✨
    4.5 stars average rating

    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

    Want to brush up on modern JavaScript syntax? Check out my interactive cheatsheet: es6cheatsheet.com

    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 ❤️

    Created by Swizec with ❤️