Good engineer, bad engineer

This an article inspired by the book “Hard things about hard things”, the “good product manager, bad product manager” section. Which is a really good way to explain what is the good quality of a position and what is the opposite behavior of that.

Good engineer have strong debugging skills, they know the system and stack pretty well. They can create a system model in their head or draw it on paper or whiteboard, and find the problem by going through the model and explain to people why it happens and what will be the solution.

Bad engineer debugging by throwing random ideas, spending time on probing suspicious things, but can not explain clearly what is the problem and why the solution is correct.

Good engineer is passionate in programming. They are willing to learn new things, write blogs, make talks to share their thought to other people, spend time to develop side projects or contribute to open source projects after work, or even more, make side project become their job.

Bad engineer does not know where their passion is, or no longer have their passion. They do not spend time on programming after work. They are tired on learning new things and does not think about how to make him/her self better at programming.

Good engineer can get things done. When solving problems, they can provide multiple solutions and understand the pros and cons of each solutions. Foresee the risks of project and make critical trade-off according to the time or resource constraints.

Bad engineer can get things done too, but they solve problem with the first solution come in their mind. Without knowing the pros and cons of the solution because that is the only solution they got. Eventually, the project end up with wrong structure, wrong technology and tech debt.

Good engineer write script, use scripting language to automate daily tasks. They are efficient on the tools and editors they use, remember the hotkeys and know how use those tools to improve their productivity.

Bad engineer do replicate job everyday, so they are always busy on something and have no time to do the work they want to do. Also they do not know how to use tool correctly and not familiar with hotkey and in some case, type with single finger.

Good engineer master the programming language and framework they use, and also are generalist on lots of other area. They are fast learner because they can transfer their knowledge on one area to another.

Bad engineer only knows one or two languages and tools, and does not used to learn new thing.

Good engineer is a good team player and fun to work with. They like to teach and share context with others and also learn from other engineers. They value the whole team’s success as their own success

Bad engineer does not like to work with others because they have bad temper or they do not have patient to teach other people. Make them the single point of stoping the context sharing. They like to solo and value their success over their teammates.

Good engineer have a career plan, think about what they needs to learn to achieve their target. Learn from the failure and always retrospect their progress to the goal.

Bad engineer does not have a clear career path, they work but does not have a clear direction on their career. In the end they lost interest in their company and just want to leave for another job.

Good engineer have the mind of a CTO, they evaluate the engineering needs, pick the right solution within constraints, allocate team and resources to build great product. They take full responsibility and measure themselves in the success of the product.

Bad engineer does not believe they can change the environment, they complain about the problems they saw but does not comes with constructive solutions. Therefore, they keep complaining.


A developer, hacker, traveler and boarder live in New York City. You can follow my code at