What makes a good engineering culture?

Page content

From http://www.theeffectiveengineer.com/blog/what-makes-a-good-engineering-culture

1. Optimize for iteration speed

  • Continous deployment to support rapid validation
  • High test coverage to reduce build and site breakages
  • Fast unit tests to encourage people to run them
  • Fast and incremental compiles and reloads to reduce development time

Bill Walsh, 49ers to 3 Super bowls,

Commit, Explode, Recover

A team crippled with indecisiveness will just cause individual efforts to flounders

2. Push relentlessly toward automation

Consider operational burden per engineer

  • ratio of users to engineer
  • radio of features to engineers

Automating solutions and scripting repetitive tasks are important because they free up the engineers team to work on the actual product

Easy’s motto of “Measure anything, measure everything” Automation must be driven by data and monitoring

3. Build the right software abstractions

MIT professor, Daniel Jackson

Pick the right one, and programming will flow naturally from design modules will have small and simple interface
new functionality will more likely fit in without extensive reorganization

Google, Jeff Dean and Sanjay Ghemawat

Keeping core abstractions simple and general

  • reduces the need for custom solutions
  • increases the team’s familiarity and expertise with the common abstraction
  • common libraries get more robust
  • monitoring gets more intelligent
  • performance characteristics get better understood
  • tests get more comprehensive

4. Develop a focus on high code quality with code reviews

Technical debt easily accumulate from poorly written code

5. Maintain a respectful work environment

6. Build shared ownership of code

Free engineers from the sense that they’re stuck on certain projects and encourages them to work on a diversity of projects

Swarm : The idea is that everyone on your team works on the same story at the same time

7. Invest in automated testing

Unit test coverage and some degrees of integrating test coverage is the only scalable way of managing a large codebase with a large group of people without constantly breaking the build or the product.

8. Allot 20% time

9. Build a culture of learning and continuous improvement

10. Hire the best