As we know Software Development is not just about technical problem solving, but the human factors involved when delivering a product at scale.

From an essay in Software Engineering at Google, Brian Fitzpatrick discusses engineering management patterns and anti-patterns. At it’s core are the values of Trust, Humility and Respect.

I’ve analysed and summarised below.

Don’t: Hire Pushovers

This means hiring people that are smarter than you and could eventually replace you.

When leading a team or as indivividual contributor, our general strategy should be ‘We may leave at any time, so have the project and processes in a state where they are documented and can be handed over.

At first, the statement above may sound negative. But this approach means you and everyone around you progress on to new projects and opportunities.

Don’t: Ignore Low performers

The team suffers if there is a team member who isn’t doing their best and you don’t address it.

Keeping a low achiever in your team keeps high performers from joining and encourages existing high performers to leave.

Instead, help the strugglers up, or out.

Don’t: Ignore Human Issues

Focusing all your energies on technical problem solving can mean you’ve neglected colleagues’ personal poblems. This sows discontent, leading to a lack of team productivity.

Don’t: Be everyone’s friend

Becoming a manager or team lead of colleagues where previously you were peers may be uncomfortable at first.

Having a weekly team lunch can be an effective way to remain socially connected without making them uncomfortable.

Don’t: Compromise the hiring bar.

This can happen when you need to hire quickly, the legendary Blitzscale! Don’t be tempted.

Don’t sacrifice the hiring standard because, the cost of hiring the appropriate person pales compared to dealing with a bad hire.

In the words of Steve Jobs, A people hire other A people. B people hire C people.

Don’t: Treat your team like children

Trust them to be great, and they will be great.

Give them opportunity to be responsible for their work.

Do: Lose the Ego

This means trusting your team by respecting the abilities and prior accomplishments of team members.

Help to set goals and reach consensus but the details of how to reach them are best decided by the people putting the product together.

This gives the team a better sense of accountability, ownership and responsibility.

This also means accepting criticism openly and avoiding the urge to be territorial.

Do: Be a zen master

Control your emotions and reactions, because a leader is always on stage and your team is always conciously and unconsciously looking to you for cues on how to react.

This can mean keeping your cynicsm to yourself.

Asking questions is a great way to instill humility, respect and trust because it’s helps the other person problem solve on their own by trying to define and explore the problem.

Do: Be a catalyst

Encourage democracy rather than a dictatorship by building consensus. This can either mean guiding the process from start to finish, or just giving it a gentle nudge in the right direction.

Do: Remove roadblocks

Help the team overcome technical or organisational hurdles to get it moving again. Often this means contacting the appropriate team for getting access to particular infrastructure.

Do: Be a mentor/teacher

Whether you like it or not, a team leader will end up guiding a more junior team member through; code, technology or architectural concept or team culture.

For this you need:

  1. Experience with your team’s processes and systems.
  2. The ability to explain things to someone else.
  3. The ability to guage how much help your mentee needs.

The last point is key because you don’t want to be overexplaining since the mentee will just tune you out.

Do: Set clear goals

You need to define a concise team mission statement to ensure your team is aligned about the direction in which it’s heading.

Then …

Step back and give it more autonomy and periodically checking in to make sure everyone is still on the right track.

This drastically improves the efficiency of your team because no energy is wasted where individuals can pull the product in slightly different directions.

Do: Be Honest

There’s the need for supreme honesty when giving direct feedback. Avoid the compliment sandwich since this can deflect attention from the issue that requires change or improvement.

When giving critism, delivery is key to making sure the message is heard. Avoid sugarcoating.

Kindness and empathy is critical.

Do: Track Happiness

To stave off discontent, here are some ideas:

  • At the end of a weekly one-on-one, ask “What do you need”

  • Make sure people get recognition for their work by tracking the mundane tasks and distributing responsibilities evenly.

  • To prevent burnout, track hours and exchange them for fun team activities.


Ultimately, you need to be an enabler and plan how you are going to help your team members realise their career wishes and desires. This might be with opportunities to improve themselves or be recognised for the work they do.

Please buy! I thoroughly recommend.

You may buy Software Engineering at Google here.