Software Engineering Culture

An engineering team that is gelling together is a wonderful thing. There is nothing like watching teams of smart people work together to solve really hard problems. They’re so good at it they make it … fun! This only happens when they’re motivated, empowered to do what they feel is right, and not afraid to push back when they feel they’re not doing the right thing.

Getting there is hard. The usual engineering management guidance is usually about hiring the best people – A players don’t do well with C players, etc, etc.

Well, of course. Who doesn’t try to hire the best people? But, it’s really freaking hard to get right! There’s gotta be more to it…

Spotify was nice enough to share their engineering culture strategy in a couple of videos on their engineering blog a few years back.

Their practical approach, based on learning from things that didn’t work, is a breath of fresh air compared to most software management in organizations I’ve seen. I loved their strategy because it focuses on people first as opposed to metrics and engineering rigor. Of course those things are important, but culture is far more important. Everyone does better when they feel comfortable and empowered.

I’ve rewatched these videos many times, and recently took the time to take some notes on the second part that I thought I would share. If you’re intrigued by a particular note, you can go to that portion of the video to learn more. Though, if you have the time definitely watch both videos all the way through.

There is also a Part 1, which is great, but Part 2 has a good overview of it at the beginning, if you’re short on time.

Spotify Engineering Culture Part 2

  • 0:50 – “We aim to make mistakes faster than anyone else” – Fail Fast and Improve Fast.
  • 1:30 – A “Fail Friendly Environment” – Encourage sharing of failures so everyone can learn from them. Some teams have “Fail walls” showing off their failures.
    • “Failing without learning is well, just failing.”
    • Not about fault, about what did we learn and what did we change?
    • Use of retrospectives is huge.
  • 2:30 – “Limited Blast Radius” – Set things up so that in case something does fail, the failure is bounded and not catastrophic.
  • 3:20 – “If Everything is under control, you’re going too slow.” – Mario Andretti
  • 3:50 – Lean Startup – Use narrative to drive product/ideas
  • 5:15 – Planning: Innovation > Predictability. Don’t focus on timelines unless you absolutely have to. Defer commitments to timelines as long as you responsibly can.
  • 6:20 – 10% hack time to let people experiment. If we try enough ideas, we’re bound to strike gold sometimes. And the learning we get out of it is important.
  • 7:00 – People are natural innovators, get out of their way.
  • 7:15 – Experiment friendly culture. Don’t punish for experiments, encourage them. Don’t overthink things. Just do and see what works.
  • 9:40 – Growth pains – create a “Minimum Viable Bureaucracy”
  • 10:25 – Agree on a “Definition of Awesome” before diving in.
    • Awesome is a direction, not a place!
    • If we agree on what awesome is, it helps us get there and track it.
    • Use improvement Katas (make targets towards awesome).
  • 12:00 – “Healthy Culture Heals broken process”
  • 12:45 – Culture spreads through storytelling – Blogs, lunch and learns, etc.