This post summarizes the Digital Service Delivery blog series by focusing on 10 essentials for successfully using Lean Discovery practices, Agile Delivery techniques and a DevOps mindset to build solutions our customers love.
Lean Discovery practices help us ensure that the solutions we are building are not only viable from a business perspective and feasible from a technical perspective, but also usable from a customer perspective. To do that, we need to understand what end users need and then use data to drive decisions. The solutions need to address the whole user experience while making it simple and intuitive to use.
Use data to drive decisions: Our initial sets of requirements are hypothesis until they are determined to be true. We need to go through successive Build, Measure, Learn cycles to determine our MVP and MMF and constantly evaluate our data to make informed decisions on whether to persist or pivot in order for us to deliver the right solution.
Understand what people need: As we determine our MVP and build out our MMF, validation needs to come from actual end users. Early on, we need to test our prototypes with end users. As we build out features, we need to test and validate actual usage of features to determine the value of our deliverable.
Address the whole user experience: When building out our solution, we need to address the entire user experience both offline and online to truly understand end user pain points and exciters.
Make it simple and intuitive: End users should be able to navigate the solution from start to finish with ease. Consistency in navigation, style, and language across the entire solution is key for an enjoyable user experience.
Agile Delivery practices help us build and deliver high quality products continuously on a repeatable and reliable basis. To do that we need to choose a modern technology stack that allows for ease of test and deployment automation, and leverage the cloud to create a flexible infrastructure.
Choose a modern technology stack: When picking a technology stack, choose a modern stack that allows for ease of test automation, ease of deployment automation, and ease of cloud hosting. Favor cloud based, open source tools vs. proprietary vendor lock-in tools.
Automate testing and deployments: Automation is key for delivering high quality products continuously on a repeatable and reliable basis. Manual testing is not sustainable and manual deployments are error prone. Teams should have a continuous integration server constantly running static code analysis checks and a comprehensive automated test suite composed of unit tests, integration tests and acceptance tests. The majority of automated tests are written by the developers. Manual testing by QA teams should be reserved for important exploratory testing and showcases. Deployments to any environment should also be fully automated and using the same script for each environment.
Leverage the cloud: The cloud allows our infrastructure to be flexible and provisioned on demand. Scaling and disaster recovery are automatically handled based on real time events. Provisioning should also be scripted so that our infrastructure is created and configured via code and no longer requires us to manage hardware manually. This should apply for all of our environments including dev, test, stage, and prod.
DevOps mindset breaks down silos between the business, development and operations. Success is achieved by having a small cross disciplined collaborative team working together on a daily basis with a dedicated business product owner that is driving prioritization decision to ensure that the team is working on the most valuable features first. The team delivers iteratively and incrementally constantly adding value and validating decisions made.
Use small cross disciplined teams: Avoid organizational silos and hand-offs between groups to avoid miscommunication and long feedback loops. Have a small cross disciplined team working together collaboratively as one team with a shared responsibility of delivering valuable working software. Each team member should have the attitude that my job is not done until I see it in production and we have validated that it is working, valuable and usable.
Have a dedicated product owner: There should be one single person that is leading the project and the team. That person is from the business organization and is authorized and empowered to make business decisions about the vision and direction of the product. The person needs to have the bandwidth to be engaged with the team on a daily basis. This person is accountable for the success of the product and a key measure of success is how well the services delivered are meeting the user needs.
Use an iterative and incremental approach: The product owner and the team are working together in short iterations with the goal of delivering incremental features to production at the end of each iteration. Each feature delivered generates new data based on actual usage which drives decisions on what to build next.
Most of these essentials are further detailed in the US Digital Services Playbook, a list of 13 key plays drawn from successful practices like these in both the private sector as well as the government.
Also check out the Lean Discovery, Agile Delivery, and DevOps Mindset presentation slides here as well as the entire Digital Service Delivery blog series: