Product delivery is the discipline of ensuring software products are brought to market in a timely, reliable, and high-quality manner. This blog post delves into what product delivery entails and how it can significantly enhance predictability in software development.
What is Product Delivery?
Product delivery is a multi-faceted discipline encompassing the planning, execution, and management of bringing a software product from conception to release. It involves a range of activities, including:
- Discovery: Understanding the customer and business opportunities and the outcome the product needs to achieve.
- Product Planning: Agreeing on the best approach to delivering the product.
- Development: Writing code, building features, and integrating systems.
- Testing: Ensuring the product works as intended and is free from defects.
- Deployment: Releasing the product to users.
- Monitoring and Maintenance: Keeping the product running smoothly and addressing issues post-release.
Enhancing Predictability in Software Development
Predictability is a cornerstone of successful software development. Stakeholders, from developers to clients, need to know when a product will be ready and how it will perform. Here’s how robust product delivery practices can foster predictability:
Planning:
Resource Allocation: Proper planning ensures that the right resources are available at the right time, preventing bottlenecks and keeping the development process on track.
Roadmaps and Milestones: Roadmaps are controversial in Agile software delivery and product discovery for good reason. They are pointless if they don’t reflect reality – then they lose the trust of stakeholders.
In certain environments and certain circumstances, long-term roadmaps and project plans are useful (highly regulated industries like construction, infrastructure, and transport, for instance). In software companies, where you need to be able to react quickly to changing competition and technology environments, and where the cost of investment is in people delivering highly mutable software rather than materials, detailed long-term roadmaps describing a long list of features delivered over 18 months on particular dates should raise suspicion and perhaps alarm.
Long-term roadmaps should be strategic documents for planning and discussion, focusing on goals and outcomes. They should allow for experimentation to reduce the risk to the business of investing in products customers don’t want and small incremental deliveries to deliver value earlier.
However, traditional project management and planning skills are often useful when you have a real need to meet a deadline (to meet a legal or contractual deadline) or, for instance, to be ready in time for a conference or external event. Then, you will need clearly defined milestones that help teams understand what needs to be achieved and when. You need a project plan for that project, but it is not the same as a product roadmap. Agile teams who fear the encroachment of a waterfall are often wholesale resistant to traditional project management wisdom. However, reality dictates that it is often still very useful – but only for specific types of work, and it is distinctly harmful in many other circumstances.
If your goal is to launch a new product where many of the requirements are known or dictated by a highly regulated or standards-driven industry (such as banking) or are part of an ecosystem requiring conformity to external standards, understanding the desired end state, the key deliverables and constraints, including the order things need to be delivered in is important. Work breakdown structures, milestones, and dependencies are often useful for collective understanding.
However, if you are building a new product or feature or solving a customer problem and there are no such regulatory or external constraints, using traditional project management approaches adds risk to the business rather than reducing it. This is because when there is uncertainty about the correct solution, it is less expensive (both in terms of investment cost and opportunity cost) to do the smallest amount of work to test whether assumptions about the correct solution to a customer problem lead to 1. customers buying that product 2. customers using the product 3. a viable technical solution being built in time for a reasonable cost 4. The assumed solution actually drives the needs of the business as a whole (meeting investor expectations, company goals for growth, etc.).
Agile Methodologies:
Continuous Feedback: Regular feedback loops with stakeholders ensure that the product evolves in line with expectations, minimising last-minute changes and rework.
Iterative Development: Agile frameworks like ScrumScrum is a framework within Agile project management used to facilitate the development, delivery, and sustainability of complex products, primarily software. It is designed to support teams in an environment that requires flexibility and quick responses to changes. and KanbanKanban A visual framework used to implement Agile that allows teams to visualise their workflow and work on a limited number of tasks at once. It is designed to promote continuous collaboration and encourages active, ongoing learning and improvement by defining the best possible team workflow. promote iterative development, allowing teams to deliver small, manageable product increments. This approach enables frequent reassessment and adjustment, reducing the risk of major setbacks.
Automated Testing and CI/CDContinuous Integration Code changes are integrated into the main branch of the code base frequently, ensuring that this integration is done at least daily to avoid integration challenges.:
Automated Testing: Automated tests catch bugs early in the development cycle, preventing defects from piling up and causing unpredictable delays.
Continuous IntegrationContinuous Integration Code changes are integrated into the main branch of the code base frequently, ensuring that this integration is done at least daily to avoid integration challenges./Continuous Deployment (CI/CD): Implementing CI/CD pipelines automates the building, testing, and deployment of code, ensuring that new changes are integrated smoothly and quickly. This automation reduces human error and accelerates the delivery process.
Transparent Communication:
Collaborative Tools: Collaborative tools like JIRA, Trello, or Asana help teams stay aligned and manage tasks efficiently.
Regular Updates: Regular updates foster transparency and trust by keeping all stakeholders informed. Everyone involved clearly understands progress, upcoming tasks, and potential challenges.
Risk Management:
Mitigation Strategies: Developing and implementing mitigation strategies ensures that identified risks are managed effectively, preventing them from derailing the project.
Identifying Risks Early: It is vital to actively identify and address risks before they become critical issues. This includes technical risks, resource constraints, and potential changes in project scope.