Accelerate using Lean Software  & DevOps

Accelerate using Lean Software & DevOps

I enjoyed reading the book Accelerate - The Science of Lean Software & DevOps - Building and Scaling High Performing Technology Organizations.

To be competitive, organisations need to be able to accelerate and at the heart of acceleration is software. Research found a direct correlation between software delivery performance and organisational performance meaning accelerated software delivery directly translates to profit.

What does success look like? Accelerated software delivery requires capabilities across 3 areas - technical, process and cultural.  These capabilities are collectively referred to as DevOps. 

______________

🚀 In-house Delivery Teams - High performing organisations were found to have built core strategic software (software providing a key differentiator in their marketplace) by investing in in-house software delivery teams 

🏆 High Performing Teams - High performing software teams are cross functional, have a goal orientated culture, loosely coupled, modular architecture, continuous delivery and effective leadership.  Having a loosely coupled architecture also improves scalability, enabling teams to move faster as you add more developers.  

✅ Work is Work - Teams should have one backlog (work is work) that include features, technical debt, BAU operational work. Data should be used to drive decisions and actions to avoid any subconscious bias.  

🌊 Autonomy & Flow - Give developers the tools to detect problems when they occur, the time and resources to invest in their development and the authority to fix problems straight away. WIP limits also make obstacles to higher flow more visible, leading to improvements

❤️ Good Team Culture - W. Edwards Deming said wherever there is fear, you get the wrong numbers.  Create a culture that is mission driven rather than driven by fear, power or bureaucracy.  Create a learning organisation with a culture of experimentation.  

🎯 Strategic Alignment - Use the Lean practitioners Japanese philosophy of Hoshin Kanri to ensure strategic alignment of work back to organisational goals.  This eliminates wasted effort or duplication and incorporates continuous improvement and a rapid feedback cycle

🔁 DevOps (DORA) Metrics - High performance requires increased deployment frequency (ideally releasing on-demand), shorter lead times for changes (ideally less than one hour), reduced mean time to restore or MTTR (ideally less than one hour) and a low change failure rate (ideally 0-15% failures per release)

✨ Quality - The biggest gap between high and low performers was quality.  Rework can mean quality was not baked in. It is not paying attention to the low fuel light. If build quality is baked in then issues are quick to detect and resolve.  

👫 Team Dynamics - Google found that it mattered less who was on a team and more the team dynamics - how team members interacted, structured their work and viewed their contributions.  

⏱️ Lead Time as a Metric - Lead time is a better metric of productivity than velocity.  Measure product delivery lead time as time from code committed to code running in production.  Effective teams take about an hour to get code from committed to running in production.  

🧑⚖️ Change Approval Boards - Change approval boards were interestingly not found to improve stability.  Peer review combined with deployment pipelines to immediately detect and reject bad changes were far more effective to improve stability

⚙️ Test automation - Test automation should incorporate Test Driven Development (TDD) by developers who create and maintain acceptance tests. This allows Testers to focus on higher value problem solving and do more exploratory testing e.g. Usability.  

🥳 Continuous Delivery = Happy Teams - Write code with deployability in mind, remove the need for manual deployments and eliminate handoffs.  Continuous delivery helps to ease deployment pain and prevents team burnout. Job satisfaction increases as there is less need for after hours deployments.  Deploy independently of other apps or services using a microservices architecture 

🧩 Chunkify & Iterate - Work in small chunks to make the cost of pushing out individual changes low. Implement features on branches and merge daily so that each change triggers a build process that runs unit tests.  No work is done until automated tests are written and passed. Version control enables automated build, test and deploy.

🎋 Avoid Refactoring - To avoid refactoring, instead of long lived feature branches use trunk based development.  Aim to have fewer than 3 active branches and branches only lasting 1 day before being merged back. Use feature flags to avoid code going stale.  

📣 Leadership & Communication - Lean management also decreases burnout and leads to a more generative culture.  Visibility and high quality communication help delivery performance

🪪 Auditability & Security - Pull request approvals should be recorded and along with deployment pipelines, will provide auditors with a complete record and traceability.  Shift left on Security to implement DevSecOps by implementing static application security testing (SAST) which scans source code for vulnerabilities.  

👂 Lean Product Development - Lean Product development is working in small batches, making the flow of work visible. Listening to the customer via a continuous feedback loop allows the team to build - measure - learn. This maximises value and allows teams to have a faster time to market.

Do you think software delivery is a science or more art than science? I would love to hear what has worked in your software delivery practices and what would be your holy grail...

Article content


Hi Ganesh. Yes, a very practical book in improving development velocity -releasing software more frequently and with less risk.

To view or add a comment, sign in

Others also viewed

Explore content categories