Everyone talks about engineering culture and why it is important. One of the reasons companies and founders proudly say, "We have a great engineering culture," is because it is cool. But you don’t design your engineering culture by writing blog posts, posters, or giving high-end gadgets. It’s shaped by the people you hire, the things they do, and the traits you reward and celebrate.
It's about choosing wisely, making deliberate decisions, not hiring a great coder for their cultural unfitness, and designing every step based on what you value and what you do not appreciate. In my 16-year career, I have grown an engineering team from 2 to 50+ members each time, with its own mistakes and learnings. Today, I conducted an interview for an engineer after almost 1.5 years. That inspired today’s post about how my definition of a great engineer has changed over the years and how I define the same today.
Great engineers are great at debugging.
Things break all the time. Bug-free software does not exist. The faster an issue is fixed, the lesser the loss of customer trust, and also the more time spent on features. It is an opportunity cost. The better and simpler the fixes, the lesser the regression in the future. The best fixes come from the person who understands the most.
Great engineers not only understand the system, but they also have great intuition about what could have gone wrong. They are deeply connected to the details and make use of a wide range of tools and loggers across the systems. They never say, "It is someone else's code," or "I am not responsible for this." They are great at fixing and identifying the source of the problem.
Great engineers are great at helping others.
Always develop someone who not only seeks growth but also fights for the growth of those around.
Great engineers are good teachers. They hold high standards and try to make sure to bring everyone up to those standards. Everyone wants to work with them. They understand that they can have more impact by helping those around them to learn, improve, and thrive. No job is mundane or not worthy of their time.
Great engineers want to know the value of what they do.
They are customer or business-focused and not technology-focused. They always want to know how their work fits into the overall vision of the company. They value feedback, quality, innovation, and the ability to move fast. A great engineer has good judgment on what matters most at any point in time.
Great engineers are simplifiers.
The default path for any software system is to become complex with any code addition or changes unless someone makes a deliberate attempt to simplify. A complex code base makes it difficult to edit, results in more bugs, is difficult to understand, has a higher cost of maintenance, and the cycle repeats.
Whatever code the great engineers touch is usually made simple, elegant, and minimalistic. They write readable, easy-to-understand code and make modifications. They write code which not only the computer compilers can understand but also humans can understand. They also help other team members write cleaner code while advocating for long-term vision over technology and product.
Great engineers are curious learners.
Companies, teams, or people that are not growing are indeed dying. A top performer who is not learning and growing is not going to be a top performer next year.
Great engineers have a growth mindset. They are ever curious and always looking out for ways to innovate the way they build stuff, simplify the system, and remove complexities. While being positive, they are also paranoid about their own decisions until they find them working. They look at possibilities and aim to keep learning and growing every day.
To conclude, focus on hiring great engineers to set up a great engineering culture. At the end of the day, culture eats strategy for breakfast.
Great post Arun!