What does it take to be a great software engineer?
I spent the better part of the twenty-teens working as a software developer/engineer. To be honest, I paid very little attention to intentional professional growth during most of that span. We were a relatively small company, and I lacked the confidence and experience to think ambitiously. Being a great software engineer can be satisfying and lucrative, but not if you approach your career like I did.
Now that I’m responsible for a team of software engineers, I find myself in conversations that revolve around what success looks like, and the qualities of a top performer. And while there’s no such thing as perfection when human beings are involved, I have noticed some commonalities among the people that I’ve seen achieve the most success in the world of building software.
1. They’re honest
Being part of a team or organization means you have to be trustworthy. Without honesty, it’s impossible to build the kind of trust required to collaborate on a project. A reputation for not being able to accurately estimate how much time it will take to fix a problem or build a feature is a good way to ensure you never get the opportunity to do the kind of work that progresses your career and puts you in a position for growth.
And being in the habit of taking credit for other people’s work is far more likely to stall your career than it is to move it forward. Believe me, everyone notices that kind of thing, and it’s never appreciated.
2. They are curious
If you got into coding because you wanted a good job, that’s cool. I get it. Nothing wrong with that.
But if you lack the curiosity to explore new technology, experiment and try new (or newly learned) techniques, to leverage what you know to see what’s possible, you’re probably going to hit a career ceiling eventually.
Building software is a creative work, but it’s unique in that it is creativity in service of solving problems. Great software engineers embrace this work … relish it, even.
3. They communicate well in all directions
This isn’t unique to teams that build software. Communication is important in almost every line of work.
But when trying to coordinate engineers, support folks, product managers, marketing, and leaders up the chain of command, all while juggling the work and looming deadlines, good communication is a skill that instantly makes you stand out from the rest.
When working remotely (and I’d argue this is true for co-located teams too), a well written email or technical document is much appreciated by people from every department. It’s efficient (write once, share many times), effective, and can mitigate many of the issues that in person interactions present … like body language, tone of voice, misinterpretation, and our tendency to forget what what said in a conversation.
Master this skill, and people WILL notice.
4. They aren’t driven by ego
No one likes the one who brags about themselves, or steals credit, or exaggerates their share of the work.
It’s a terrible strategy, and it’s not the kind of attention you actually want.
5. They are driven to help
The exact opposite of ego, great software engineers are always looking for opportunities to help.
To help their team/teammates push a project over the finish line.
To help someone write better code.
To mentor someone through a difficult transition.
To share subject matter knowledge.
If you look around, there are always opportunities to help.
6. They leverage process
Great engineers tend to value efficiency. Why waste time arguing about an approach to a problem, over and over again, when you can spend a little time up front developing a value system that can solve problems for you?
Things like OKRs, the Agile Manifesto, team agreements, and even company values … these are all tools that good engineers use to deescalate touchy situations.
Recommended Reading
Measure What Matters: How Google, Bono, and the Gates Foundation Rock the World with OKRs
“That task doesn’t really help us achieve our stated objective for the quarter.”
“We can iterate. Let’s push this out and follow up ASAP to improve the UI.”
“That sounds like a good idea, but maybe it’s not necessary. Let’s ship what we have now, and get some user feedback before committing to do it.”
At Facebook, there’s a saying “Data wins arguments”. In other words, 5 people arguing from the perspective of their own individual gut feeling isn’t particularly effective or scalable. Instead, let’s just look at the data and save some time.
7. They care about their teammates
Things like peer reviews and 360 feedback have made it more important than ever that you develop an empathetic (and sometimes apologetic) attitude toward the people you work with. They’re human beings with complicated lives, and at any given time they could be going through something that makes work problems seem trivial.
Feeling trusted and supported can mean the difference between a good and bad day/week/month/year.
And when Murphy’s Law eventually circles around to you, you’ll be glad to have a teammate that supports you the same way.
But it’s more than just supporting teammates when they’re struggling.
Think about how much more valuable you are as an engineer if, by your influence and impact on your teammates, they get better at their job.
Maybe it’s teaching them a new skill they lacked before.
Or a trick/shortcut that saves them 2 hours per week.
Or a confidence boost that unlocks a willingness to take on a task or responsibility they would have previously avoided.
It could even be volunteering to attend a meeting and write up a summary for your team, instead of everyone attending the meeting themselves.
Recommended Reading
The Five Dysfunctions of a Team: A Leadership Fable
8. They enjoy the work
As I said earlier, becoming an engineer so you can have a healthy paycheck is totally fine. We all have bills to pay.
But this list isn’t about being “an engineer”. It’s about being a great engineer. And if you don’t really enjoy the work, you’re probably going to struggle with mustering up the motivation to do what’s necessary to continue learning, experimenting, and building great software.
This doesn’t mean you won’t have other interests, hobbies, and priorities.
But the likelihood of compartmentalizing “work” into a strict 9 to 5 box, and consistently growing as an engineer, is relatively low.
9. They’re “lazy”
A former boss used to say this about me all the time. But I was never offended.
“Nathan is lazy, but in all the right ways.”
I was never going to do something manually that I could have a machine do.
I was never going to waste time building something that I didn’t think had value. Or at least, I would have pushed back hard on it.
Having the experience and judgement to know what not to do makes you way more valuable than someone who just jumps into projects without giving it any thought.
This can come across as “lazy” to some, but it’s a good kind of lazy.
10. They get stuff done
Look, at the end of the day, you’re just not going to get very far in your engineering career unless you find a way to get stuff done. It’s the core of your responsibilities, and it’s what you should prioritize first.
Your job is to use code to solve problems, so the more problems you solve (without creating new ones) in the same amount of time or with the same amount of effort, the better.
Great athletes challenge themselves though intentional practice, to run a little bit farther or faster, to improve their accuracy, to perfect their form or develop new techniques, all in the pursuit of greatness.
Are you, as a software engineer, challenging yourself to work a little faster or a little smarter, to be more helpful and empathetic, to squash your ego and commit to honesty?
If not, what’s stopping you now?