This post is a complementary check-list for these slides.
- 4 key metrics
- Lead time for changes (the time it takes to go from code committed to code successfully running in production) – good is less than an hour
- Deployment frequency – good is releasing changes multiple times per day
- Mean time to restore from a failure – good is less than an hour
- Change fail percentage – good is less than 15%
- Automated tests? Testing pyramid – Unit, integration, functional.
- Code reviews?
- Continuous integration and automated deployment pipelines? Tests, code coverage, code quality metrics, complexity metrics included?
- One-click rollbacks?
- Infrastructure – Cloud Provider? E.g. AWS, Google Cloud
- Monitoring – infrastructure and exceptions? E.g. Sentry, NewRelic
- Alerting? E.g. OpsGenie
- Logging? E.g. Papertrail
- Infrastructure as code? E.g. Terraform, Docker, Kubernetes
- Hireable stack? Is it a niche technology or plenty of talent? Onboarding speed?
- Architecture – monolith, micro services, serverless? Apps – native or not?
- Clean code? SOLID principles?
- Using common patterns and known technologies?
- What is the bus factor of the modules of code?
- Modularisation – are abstractions in the right places e.g. around external integrations?
- Domain driven design?
- Well structured APIs, e.g. RESTful?
- Lean thinking? Building MVPs?
- Customer centric goals?
- Talking to end users? When was the last time? Last week?
- Doing user testing? Preferably periodically e.g. have 4-5 users coming in every Tuesday and Thursday
- Can separate problem and solution domains?
- Data driven culture? Opinions matter less than data? “Feature X should increase conversion 10% from baseline, because every 10th user has a problem onboarding…”
- Using prototypes and mockups to iterate and gather user feedback?
- Ruthless prioritisation? Measuring customer impact?
- Defined clear KPIs? Single focus. KPIs should be comparative, understandable, usually a ratio or a rate, actionable.
- Flat organization? Innovation bandwidth is wide?
- Hire smart people and trust them? People want autonomy, mastery and purpose
- Have a planning cycle? For example weekly, monthly, quarterly plannings. Working proactively or reactively? Weekly sprints, daily standups, using a kanban board, prioritizing the backlog, having retrospective meetings.
- Teams autonomous in creating their plan and executing it? Seeking for feedback?
- During retrospective are they failing smart – learning from failures?
- People in the team working towards a single goal or KPI, treating roles as equals with special skill sets?
- Independent cross-functional teams? Teams have all of the competences to execute their plan e.g. product owner, engineers, design? Instead of layered interdependent teams like operations, back-end, front-end, design, business, etc. Avoids finger pointing and excuses.
- Product engineering mindset? Can an engineer in the team talk to the end user, figure out a test, what to build next, code and ship it and measure the impact?