
This
 is inspired by the Horowitz Good Product Manager / Bad Product Manager 
paper. Good engineers are not always good, and bad engineers are not 
always bad. I believe in both the ability and necessity of personal and 
professional growth. I apologize to Ben Horowitz and humbly beg his 
forgiveness for my otherwise blatant plagiarism.
Good
 engineers understand the product they’re building. A good engineer 
researches, understands, and has a vested interest in data center 
operations when they’re building systems for data center operations, and
 high frequency trading and markets when they’re building systems for 
high frequency trading and markets. Bad engineers are not interested in 
the product and focus exclusively on the technology within the product. A
 bad engineer only sees trees, no forest.
Good 
engineers care about what customers want and need, and can quickly 
separate the two. They understand that customers sometimes ask for a 
faster horse, and in doing so help them figure out that a car needs to 
exist. Good engineers understand that the right product comes from a mix
 of deep internal domain experience and innovation, as well as iterative
 improvement and feedback from users. Bad engineers think customers are 
stupid and that users “just don’t get it.” Equally, bad engineers also 
always build whatever feature is asked of them without understanding why
 they’re doing so.
Good engineers care about 
the business. They know that without sales, there would be no money; 
without marketing, no one would know who they are or why people should 
care; without finance, they’d burn through all their money or go to jail
 for not paying payroll taxes; without administrative staff, the company
 would descend into chaos. Bad engineers believe that if they don’t 
understand what someone does then that person is not important; they 
fail to see that many don’t understand what engineers do nor how 
building software actually works.
Good 
engineers understand the real world and can operate within reasonable 
constraints. For example, customers do not upgrade software as soon as 
it’s released, companies have good reasons to run older versions of 
operating systems or databases and that not everyone has root access. 
Bad engineers see no value in backward compatibility. Bad engineers tell
 customers or support staff to upgrade the OS’s included python 
interpreter with a rpm out of EPEL because, honestly, 2.6 is ancient! 
Good engineers understand that quality, timing, performance, features, 
and maintainability are all important and make tradeoffs where necessary
 and appropriate. Good engineers anticipate and understand the logistics
 of deploying production software. Bad engineers can’t figure out why we
 don’t just rewrite the entire codebase in a new language today. Bad 
engineers are inflexible and intolerant of less than ideal 
circumstances.
Good engineers participate in 
positive, constructive debate over critical topics, and know when to let
 an argument go. Good engineers know how to disagree and commit, and 
help others do the same. Good engineers aren’t afraid of their own 
failures, and do not hold the failures of others against them. Bad 
engineers fight to death over tabs versus spaces, shave every yak, and 
paint every bike shed, sometimes more than once. Bad engineers point out
 every time they were right.
Good engineers can
 communicate complex ideas at the appropriate level for the audience. 
Bad engineers often cannot communicate at all.
Good
 engineers are good humans. They fundamentally understand that everyone 
usually has good intentions. Good engineers believe in collaboration 
over competition as a default mode and aim to hold everyone to a high 
bar. Good engineers know that good engineers come in many different 
forms. Bad engineers believe all other engineers went to the same school
 they did, have the same experience, or are the same gender, color, or 
sexual orientation as themselves.
Good engineers beget good engineers. Bad engineers believe there are no other good engineers.
Source: LinkedIn
