Slava Akhmechet

I am a cofounder of RethinkDB — an open-source distributed database designed to help developers and operations teams work with unstructured data to build real-time applications.

44 engineering management lessons

03 Oct 2014

Welcome to engineering management. It’s fun, it’s exhausting, it’s rewarding — but most importantly it’s new! What worked for you before won’t work now. You’ll have to acquire a new set of skills, and shed some bad habits in the process. Here is a short guide to get you started.


  1. Attract, nurture, coach, and retain talent. Talk to engineers to tease out concerns early, then fix them if you can.
  2. Communicate to every engineer the next most important issue for them to work on.
  3. Be the tiebreaker when the development team can’t reach consensus.
  4. Be the information hub. Know what every engineer is working on, and help connect the dots that wouldn’t otherwise get connected.
  5. Provide administrative support. Schedule issues, coordinate releases, and make sure the bureaucratic machine keeps ticking.
  6. Enforce behavioral and performance standards. Fire bullies and underperformers.


  1. Personally fix bugs and ship features. You have to write code to remain an effective tiebreaker, but that’s where your coding responsibilities end.
  2. Supervise the quality and volume of people’s work. Software engineering isn’t an assembly line. If you find yourself supervising too often, you haven’t attracted the right people or given them the right incentives.

Motivation and culture

  1. You’re the one who makes hiring and firing decisions. Everything that happens on your team is your responsibility.
  2. Engineering is a seller’s market: people work for you because they believe in you. Access to their talent is a privilege.
  3. Authority isn’t bestowed freely. It’s earned by making good decisions over time.
  4. Don’t make decisions unless you have to. Whenever possible, allow the team to explore ideas and make decisions on its own.
  5. Do make decisions when it’s necessary. Few things are as demoralizing as a stalled team.
  6. Don’t shoot down ideas until it’s necessary. Create an environment where everyone feels safe to share and explore ideas. The folks writing the code have a lot of information you don’t. Rely on your team and you’ll make better decisions.
  7. Building intuition on how to make good decisions and cultivating a great relationship with your team will get you 95% of the way there. The plethora of conceptual frameworks for organizing engineering teams won’t make much difference. They make good managers slightly better and bad managers slightly worse.

Emotions and people

  1. Management happens to be prestigious in our culture, but it’s a skill like any other. Prestige is a distraction — it’s fickle and arbitrary. Guard against believing you’re any better than anyone else. The sooner you get over prestige, the sooner you can focus on doing your job well.
  2. Management also attracts scorn. Ignore it — the people who believe managers are useless don’t understand the dynamics of building a winning human organization.
  3. If you feel something’s wrong, you’re probably right. Don’t let anyone bully you into ignoring your feelings.
  4. If you find yourself blaming someone, you’re probably wrong. Nobody wakes up and tries to do a bad job. 95% of the time you can resolve your feelings by just talking to people.
  5. Most people won’t easily share their emotions. Have frequent informal conversations, and tease out everything that might be wrong. Then fix it if you can.
  6. Your team looks to you for leadership. Have the courage to say what everyone knows to be true but isn’t saying.
  7. You’re paid to discover and fix cultural problems your team may not be aware of. Have the courage to say what everyone should know but doesn’t.
  8. Hire great people, then trust them completely. Evaluate performance on monthly or quarterly basis, then fire if you have to. Don’t evaluate people daily, it will drive everyone (including you) insane.
  9. Most intellectual arguments have strong emotional undercurrents. You’ll be dramatically more efficient once you learn to figure out what those are.

Tiebreaking and conflict

  1. Don’t judge too quickly; you’re right less often than you think. Even if you’re sure you’re right in any given case, wait until everyone’s opinion is heard.
  2. Once everyone is heard, summarize all points of view so clearly that people say “Thanks, I wish I’d thought of putting it that way.” List any points of agreement with each view, and state what you’ve learned from everyone. Then make your decision.
  3. Once you’ve made your decision, enforce it. Don’t let the team waste time going in circles to placate disproportionally strong voices.
  4. Reopen the discussion if there is significant new information.
  5. When disagreement gets personal or people don’t accept well-reasoned decisions, it turns into conflict.
  6. Most conflict happens because people don’t feel heard. Sit down with each person and ask them how they feel. Listen carefully. Then ask again. And again. Then summarize what they said back to them. Most of the time that will solve the problem.
  7. If the conflict persists after you’ve gone to reasonable lengths to hear everyone out and fix problems, it’s time for a difficult conversation.

Difficult conversations

  1. Have difficult conversations as soon as possible. Waiting will only make a bad situation worse.
  2. Never assume or jump to conclusions. Never demonize people in your mind. Never blame, yell or vilify.
  3. Use non-violent communication — it’s the best method I know of to critique people’s behavior without offending them. It smells like a management fad, but it really works (I promise).
  4. Have the courage to state how you feel and what you need. People are drawn to each other’s vulnerability but repelled by their own. Vulnerability isn’t weakness.
  5. Expect people to extend you the same courtesy. If someone makes you feel bad for stating your needs and feelings, it tells you more about them than about yourself.

Rough edge

  1. People will push and prod to discover your boundaries. Knowing when to stand back and when to stand firm is half the battle.
  2. Occasionally someone will push too far. When they do, you have to show a rough edge or you’ll lose authority with your team.
  3. A firm “I’m not ok with that” is usually enough.
  4. Don’t laugh things off if you don’t feel like laughing them off. Have the courage to show your true emotions.
  5. If you have to firmly say “I’m not ok with that” too many times to the same person, it’s your job to fire them.
  6. Unless you’re a sociopath, firing people is so hard you’ll invent excuses not to do it. If you’re consistently wondering if someone’s a good fit for too long, have the courage to do what you know is right.
  7. Don’t let people pressure you into decisions you don’t believe in. They’ll hold you responsible for them later, and they’ll be right. Decisions are your responsibility.
  8. Believe in yourself. You can’t lead a cavalry charge if you think you look funny on a horse.

Thanks to Michael Glukhovsky, Michael Lucy, and Alex Taussig for reviewing this post.