For complex agile projects, deploying (or transitioning) the release to a “live” environment for the users is seldom a trivial exercise. Most large enterprises have defined milestones, gates, and or reviews that need to be coordinated with many diverse stakeholder groups such as users, governance bodies (such as Project Management Offices), DevOps, and marketing before the application can be released. In DAD we therefore describe a distinct set of activities to prepare our stakeholders for the release and support of the new application. This could include activities such as user training, data conversion, documentation, hardware deployment, preparing customer support, database tuning, and last minute defect fixing. To recognize the clear difference from a typical Construction iteration, we describe iterations dedicated to deployment as “Transition” iterations. The illustration shows how we can inject iterations into our release schedule to deploy increments to the user community. In this example, after the fourth Construction iteration, we may have an additional set of features representing a minimally marketable release that is worthy of a Transition iteration to deliver the value to the users.
When we have an application that needs to be delivered over multiple releases, following the Transition phase we may start work on a new release by continuing the Construction phase. Since we would typically have an existing work item list (backlog) of outstanding requirements, we can simply pull more requirements off this stack and continue to build more functionality. In this way, it may not be necessary to have another Inception phase unless the vision has materially changed and needs to be revisited. Your organization may, however choose to run small Inception iterations at the beginning of each new release.
In this example, after the fourth Construction iteration, we may have an additional set of features representing a minimally marketable release that is worthy of a Transition iteration to deliver the value to the users.
Some people mistakenly interpret DAD as one deployment to the customer at the end of the project. If possible, we prefer to deploy frequently, in support of the agile alliance principle “Our highest priority is to satisfy the customer through early and continuous delivery of valuable software”. Our minor quibble with this principle is that what we deliver to the customer is a “solution”, which may not only include software, but also business process changes, training, or marketing activities, for example. Our experience is that large projects typically involve a lot of work beyond the software itself which can also benefit from agile collaborative practices.
Injecting Transition iterations to deploy increments to customers
In our upcoming book we discuss patterns like these with considerations for what might make sense for your program or project in various circumstances.