The Difference Between Good and Great Engineers
You don’t design your engineering culture by writing blog posts or printing posters. It’s shaped by the people you hire, the things they do, and the traits you reward and celebrate.
Choose wisely, and deliberately. Know what you value, and why. It’s easy to form this list in hindsight, but for anyone growing an engineering team, I urge you to think upfront, spelling out what you value most, then fight to hire for, encourage, support and celebrate those traits.
I’ve helped grow our engineering team from 4 to more than 90, and hope to keep building the best possible team for many years to come. Here are some of the traits and skills that I think make good engineers great, and why they’re important to me.
1. Exceptional engineers…are ambitious and determined
- They’ll dream big and push themselves, you and your team towards bigger achievements than you initially thought possible.
- They have a growth mindset. They crave feedback and new challenges that will push them to grow, they persist in the face of setbacks, they see effort as the path to mastery, they learn from critical feedback, and they’re inspired and learn from the success of others.
Why is this important?
Ambition is a ceiling to success. Great companies have huge ambition – which initially comes from awesome founders, but is sustained and thrives with the addition of ambitious people you hire.
“Ambition is a ceiling to success”
Ambitious and determined people will fight for impact and push for greatness. Ambitious and determined people will outperform, and grow higher and faster than people who are perhaps more talented, but lack self drive. Bet on them, and spend your time helping ambitious people grow.
2. Exceptional engineers…habitually simplify
- They make the code they own or touch simpler, clearer, easier to work with and faster to change. They do this out of habit, opportunistically and continuously.
- They help their team, and those around them do the same.
- They always have some long term vision of where the technology they own should evolve to, they bring others in and get them excited about that vision, and they drive towards it step by step.
- As Martin Fowler once said: “Any fool can write code that a computer can understand. Good programmers write code that humans can understand.”
Why is this important?
The default path for growing and evolving software is that it becomes more complex over time. Every single change will probably make your system more complex, unless you’re deliberate at simplifying. More complexity -> higher cost to change + higher risk of a breaking change -> harder to innovate -> harder to grow -> less satisfying -> more ☹
3. Exceptional engineers…can debug anything, quickly
- Not by guessing – they shun superstition.
- Instead, guided by instinct, but with rigor and process, they will narrow in on the root cause from different angles. They’ve a wide arsenal of sources and techniques to gather information; from the code and tests, the network, the OS, the DB, and from logs and metrics. They won’t stop till they’ve found the actual root cause.
- They’ll reproduce it and narrow in on the problem using techniques like the “saff squeeze.”
- They’ll fix the problem well, and learn about how it ended up broken, and adapt to avoid similar failures in future.
- They can do this because they are deeply connected to the details (not an architecture astronaut).
- You won’t hear them say “I’m a Java engineer, I cannot debug this web page,” or “that’s someone else’s code.”
- Debugging is a fun challenge for them, a learning opportunity and an opportunity to simplify.
“The quicker you can fix, the more time you can spend building value”
Why is this important?
Things will break. Spending time fixing is opportunity cost. The quicker you can fix, the more time you can spend building value, and the less trust you lose with your customers. The better you fix, and simplify, the more time you free up in the future that may otherwise have been spent fighting further regressions. Good fixes come from those who deeply understand the problem.
4. Exceptional engineers…help others be great
- Great engineers are engineers that everyone wants to work with.
- They understand that they can have more impact by helping those around them to learn, improve and thrive, and they get joy from that.
- They understand that “Productivity = Σ of talent x teamwork” and they naturally raise both talent and teamwork on a team.
- They take care of the unglamorous or mundane quickly and effectively, and without fuss or huff.
- They aren’t selfish with all the hard problems, they know that others need challenges to grow, and they support them well, but at the same time they regularly demonstrate their ability to solve hard problems well/quickly.
- They are good teachers. They’re patient and good at adapting to support the different learning styles of those around them.
- They hold high standards, but bring others there with joy, not conflict (they are “kind to the coder, not to the code”).
Why is this important?
Companies that aren’t growing, die. Companies that are growing, thrive. The same is true of people, and teams. Hire people that fight for growth in those around them.
5. Exceptional engineers…know what’s valuable
- Ron Jeffries says, “Keep it simple, make it valuable, build it piece by piece.” But value comes in many, many forms. Typically, as a company, we value features that sell. But we also value feedback, we value speed and quality, we value people’s happiness, we value creativity and innovation, and we value the ability to move fast. A great engineer has good judgment on what matters most at any point in time.
- They’re customer focused, not just technology focused.
- They’re ambitious, and they make sure they’re solving big valuable problems.
- This applies not just to what they choose to do, but also to how they do it. They weed out inefficiencies in process and communication – they act like they’re spending their own money.
Why is this important?
A company can scale if you can trust and empower teams and units to be autonomous around their area of ownership or objectives. At any point in time, there are literally multiple firehoses of ideas to explore, things to fix or iterate on, but you’ve only got a small bucket to fill. Trust comes when you know your people fill that bucket with the right things.
6. Exceptional engineers…are creative and positive
- When things are difficult, they give everyone hope and courage.
- They encourage possibilities, instead of saying “that will never work.” They will understand the problem and what’s valuable, and give those around them options.
- They are leaders, not victims.
- They push and encourage innovation both in the product they’re building, and in the way they are building it.
- Their positivity is balanced with healthy skepticism – they’ll be more paranoid about whether what they create works properly – rather than celebrating victory once it appears to work.
Why is this important?
The default path for startups is towards failure. A team that thinks it’s going to lose, will lose. Positivity is infectious, and brings the best out in people. A team that has belief and is constantly creative in its efforts to succeed has a chance.
Be that engineering team – hire those exceptional people to be your great engineers.