Techniques that shorten the time between doing something and getting feedback about it are generally lower risk and result in lower cost to address any changes than techniques with longer feedback cycles. Many of these techniques require agile team members to have new skills and to take a more disciplined approach to their work than they may have in less-than-agile situations. There are several common ways to shorten the feedback cycle that are common to agile software development that are adopted by the DAD process framework. These techniques, listed in order of immediacy, are:
- Non-solo development. Non-solo development strategies such as pair programming and modeling with others provide feedback within seconds. These techniques are great strategies for reducing the feedback cycle within your team but they often require initial discipline to adopt because it can be difficult to break your former solo working habits.
- Active stakeholder participation. It can require significant discipline to work closely with your stakeholders, to seek and then respect their opinions, and to allow them to set important aspects of your project direction. Working closely with stakeholders typically has a feedback cycle on the order of seconds when they are co-located with your to hours or days when you need to wait to interact with them.
- Continuous integration. Building, regression testing, and potentially running your work through code analysis on a continuous basis is a fairly straightforward concept which provides feedback on the order of minutes. Doing it in practice, and more importantly the habit acting on the feedback provided from the tests and code analysis requires discipline to adopt at first because you often want to work on the next thing instead of cleaning up the work on what you’re currently doing.
- Continuous deployment. By regularly deploying into more complex environments – to your project integration environment from your individual environment, from your project environment to your demo or independent testing environments – you put yourself in a position to receive more meaningful feedback. Continuous deployment requires you to have the discipline to have multiple environments, to work with people external to your team (such as stakeholders and independent testers), and to seek and act on their feedback.
- Short iterations. The length of an iteration defines the feedback cycle between promising your stakeholders you would do a bundle of work, the end result of your iteration planning session, to demonstrating what you actually got done. It requires significant discipline to work in short iterations. The average agile team has construction iterations of two weeks, although some teams have shorter iterations and some advanced teams have evolved beyond iterations to take a lean approach. Then again some agile teams, particularly those at scale, may have slightly longer iterations. The shorter the iteration the greater the discipline required to make it work because you will need to adopt many, if not all, of the techniques listed in this section. You will also require the discipline to identify, and then address, wasteful activities that add little or no value in your current process.
- Short release cycles. The length of your release cycle defines the feedback cycle from promising stakeholders to deliver a new release of a solution to actual use by end users in production. The feedback from real users is the key information to determine if you’ve delivered the right thing for them. All other stakeholder feedback is merely an approximation up until that point. As with short iterations, it requires increasing discipline to move from annual to bi-annual to quarterly to monthly to weekly or even daily releases into production.
This posting was modified from Chapter 21 of the forthcoming book Disciplined Agile Delivery to be published in June by IBM Press.
Clearly mainstream agile practices such as Scrum and Extreme Programming (XP) require discipline. For example, effective Agile teams have the discipline to:
- Hold short, focused, and to the point daily coordination meetings rather than infrequent and time consuming status meetings. It requires discipline to keep these meetings focused on coordination activities and thereby short and to the point.
- Commit to delivering a set of work items each iteration rather than letting deadlines slip. It requires discipline to consistently fulfill the promises that you make to your stakeholders.
- Remove impediments in a timely fashion rather than procrastinating in pursuing a solution. It requires discipline to tackle tough issues that are easier to ignore in the short term.
- Take the time to write tests before code rather than writing code, It takes discipline to consistently work in a test-first manner instead of leaving testing to some time in the (distant) future.
- Test to the best of their ability instead of throwing artifacts over the wall to testers or reviewers. It takes discipline to actively take responsibility for the quality of your own work.
- Reflect on the team’s experiences and improve their processes proactively rather than relying on process dictated by project managers or external governance bodies. It takes discipline to stop and take time to reflect on how well your team is working and then act to improve it.
- Have a continuously working, integrated, and tested solution rather than waiting to do so when you’re “done” at the end of the lifecycle. It takes discipline to stop all work when the build is broken so that it is repaired and the state of working, high quality solution is restored.
- Work together in a common area rather than in comfortable but isolated workspaces. It takes discipline to work effectively in a team, to do so in a respectful and trusting manner.
- Collaborate constantly with the stakeholders or their representative(s) to ensure that their expectations are met. It takes discipline to accept that it isn’t your place to define the requirements or set priorities, particularly when you believe that you know better.
- Create and evolve deliverable documentation continuously throughout the project. It takes discipline to accept that there’s more to successfully solution delivery than producing potentially shippable software.
- Self organize and plan the team’s work amongst themselves rather than relying on a traditional project manager to define, estimate, and assign work. It takes discipline to take responsibility for your own work and to respect the collective decisions of your team.
In our next few blogs we’ll discuss how Disciplined Agile Delivery builds on these practices to take discipline to the next level within the Enterprise.