What Makes a Great Engineering Culture?

Preview:

DESCRIPTION

One of my favorite interview questions that I ask engineering candidates is to tell me about one thing they liked and one thing they disliked about the engineering culture at their previous company. I’ve interviewed over 500 people – many of them from top tech companies like Facebook, Google, Amazon, Palantir, and Dropbox – and over time, this interview question has given me a sense of what good engineers look for and what they’re trying to avoid. Reflecting back on the interview responses and on my own experiences from the past seven years working across Google, Ooyala, and Quora, I’ve distilled ten things that a team can do to build a good engineering culture. http://www.theeffectiveengineer.com/blog/what-makes-a-good-engineering-culture

Citation preview

What makes a great engineering culture?

Edmond Lau@edmondlauwww.theeffectiveengineer.com

About me- Former engineering lead of user growth at Quora- Led teams at Ooyala and worked on Google search- Writing a book on how to be an effective software engineer

Growing the team at Quora- Helped grow company from 12 to almost 70- Started mentoring & onboarding programs for new engineers- Developed interview guidelines and training sessions

Interviewed 500+ people- Many engineers from strong engineering companies- Google, Facebook, Palantir, Amazon, Dropbox, Apple, etc.

“A good culture attracts and keeps the kind of people that helps your company become successful.”

-- Andy Parkinson, greatcompanies.io

What is one thing you liked and one thing you disliked about the engineering culture at X?

10 elements of a great engineering culture

01 Optimize for iteration speed

Continuous DeploymentQuora released code 40-50 times a day.

Developer productivity tools- Continuous deployment- Continuous integration testing- Faster compile and build times- Incremental reloads for web servers

Avoid organizational bottlenecks- Google's weekly search UI review- Empower team leads to make decisions- Define clear channels for quick feedback

"Commit, explode, recover. "-- Bill Walsh, former 49ers coach

Image Credit: http://www.flickr.com/photos/nostri-imago/4439637126/

02 Develop high code quality through code reviews

Higher code quality lets you iterate faster- easier to reason about code- quicker to modify- less susceptible to bugs

Modelling is important

Fix broken windows

Image Credit: Broken Window, elizjoy

03 Push relentlessly toward automation

Automation is extremely high-leverage- Invest in automated testing.- Automatically handle failures, restart services.- Automatically scale up services at peak traffic.

"Optimize for minimal operational burden."-- Mike KriegerInstagram co-founder

Grew Instagram to over 40M users with 13-person team

04 Build the right software abstractions

"Pick the right ones, and programming will flow naturally from design... Pick the wrong ones, and ... even the simplest of changes will be hard to make."

-- MIT Professor Daniel Jackson, Software Abstractions

Compounding benefits of abstractionsGoogle - MapReduce, Bigtable, Protocol BuffersFacebook - Thrift, HiveQuora - Webnode, Livenode

05 Build an open and respectful work environment

“Writing software is a team sport.”-- Brian Fitzpatrick andBen Collins-Sussman, Team Geek

06 Build shared ownership of code

Keep the bus factor > 1

Image Credit: Wikimedia Commons ICCE Illinois School Bus

07 Embrace failure and accountability

annual award “to the individual who breaks flickr.com in the most spectacular way”

Image Credit: Dylan Couper, dvinfo.net

08 Allot 20% time

Promote experimentation- Google - 20% time- Ooyala - hackathons- Quora - offroad weeks- Facebook, Atlassian, Dropbox

Image Credit: Tempest, http://tempest.deviantart.com/

09 Build a culture of continuous improvement

Grow reusable knowledge- Invest in onboarding and mentoring- Encourage tech talks and document design discussions- Write codelabs

10 Make hiring a priority

"I figured Google would be better [than AltaVista] because I knew more of the people there, and they seemed like they were more technically savvy."-- Jeff Dean, Google Fellow, in Steven Levy's In the Plex

1 Iteration speed2 Code quality3 Automation4 Abstraction5 Respect

Build a great engineering culture

6 Shared ownership 7 Accountability 8 20% Time 9 Learning10 Hiring

Q & A

- edmondlau@alum.mit.edu- @edmondlau- My upcoming book: www.theeffectiveengineer.com/book