Iterative Time-Boxing
Iterative time-boxing, or ITB for short, is the strategy of strictly time-boxing successive stages of work on a software requirement. In this note, I’ll contrast ITB as a planning technique with conventional estimation planning for iterative and incremental development (IID), and consider its effective use.
Agile IID typically works like this: Reduce a requirement to a point where it is simple and well-defined, and where a simple design exists for it; estimate and fully implement that design; and then iterate, ratcheting up the requirement and/or the design a notch at each stage. I’ll call this idea of estimating and releasing a completed piece of evolving functionality at each IID iteration incremental completeness.
To illustrate, let’s take an extreme example of a requirement for which incremental completeness works well: a simple user registration/login system. We get a sketch of the registration/login screen from the customer and a short description of what is required. We build a simple system that implements basic registration and login functions, and that keeps track of the logged in user. When this implementation is subjected to feedback, a reviewer points out that passwords are not encrypted in the database, and that the system accepts weak passwords. So we enhance password security in the next iteration. Next someone points out that a user may be registered against his will. So we enhance the registration system by an explicit opt-in email. And so on.
The take-away from this example is that at each stage of the game, the next evolutionary step can be defined unambiguously, and we know fairly well what it means to complete that next step.
But it is not necessarily the case that the next evolutionary step in our work on a requirement be so well-defined. There are times when the goals of our next evolutionary step are fuzzy and uncertain, and when it is difficult to define with sufficient clarity what it means to complete the next evolutionary step.
This type of uncertainty crops up quite often in architectural requirements, for example, the requirements for a system’s user interface, such as performance, look and feel, and accessibility. A common scenario is that frameworks exist, be it for UI, persistence, work flow, and so on, but that none of the existing frameworks covers our requirements fully. We are then left with having to investigate, to understand in what ways we can augment each candidate framework with custom code, and in what ways we may have to compromise our requirements.
The goals for the next iteration of such work are often fuzzy. For example, in our UI investigation, the goal may be to come up with a reasonable compromise on accessibility among the third party web component frameworks available to us. The completion of such a task is hard to pinpoint. We can do our best in an iteration to understand the capabilities of various candidate frameworks and compare them with our requirements. But a reasonable compromise on accessibility in a UI framework does not admit of a binary acceptance test.
This type of work is investigative and experimental in nature, and it is uncertain in its goals and results. For such work, it is more important to focus on gaining as much knowledge and on reducing as much uncertainty as possible in each iteration, rather than on strictly completing something in each iteration.
And because completion may not be well-defined up-front for the iterations of such work, estimation as such is not as relevant to them. In fact, forcing estimation on such tasks can be counter-productive. The work is uncertain, so our estimates are likely to be way off. If they are too high, work can expand to fill its estimated time, and if they are too low, we will have set ourselves up for failure.
What is more important is to break up the work into reasonable time intervals, and to allow project stake holders the opportunity to weigh in on the direction of such work as it unfolds in its successive iterations.
The result is ITB. ITB specializes IID is three main ways. First, in ITB, time-boxing replaces estimation. Second, in ITB, backtracking and experimentation is accepted as the norm. Third, in ITB the intermediate results of an unfolding task at each stage need not be completed code, nor even executable.
I have found that good results from ITB depend on a few common-sense practices:
- Limited domain of investigation. Try to set some parameters on what will be done in each time-boxed subtask. We want to have flexibility, but not spend time on tangential investigations, or on requirements that have little chance of being realized in the near future.
- Small total number of hours in each time box. A small limit on total hours provides a natural break for stake holders other than the responsible developers to provide feedback and to affect timely course corrections.
- Flexibility in the elapsed time of each time box. To resolve uncertainty often requires gestation time: time to reflect, time to sleep on an idea, time to query forums and wait for responses, time to set up and wait for meetings with experts. Thus, work on uncertain tasks can be quite sparse, and our elapsed time limits for time-boxed tasks need to allow for such sparseness.
- Production of tangible artifacts in each iteration. A tangible artifact may be working code, a UML design, a benchmark, or an English writeup of the pros and cons of several alternative designs. Tangible artifacts provide focus and act as a springboard for further discussion and feedback in succeeding iterations.
In summary, incremental completeness and iterative time-boxing are complementary techniques for managing the division of work in iterative and incremental development. In each case, work on a requirement unfolds incrementally and dynamically and is informed by work in previous iterations.
Incremental completeness focuses on estimating and completing a well-defined piece of evolutionary functionality for a requirement at each stage. At each stage, the next increment of work is considered well-defined enough to be subject to estimation. But, the estimate does not generally limit the actual time spent to complete the estimated task. So incremental completeness stipulates a flexible time frame but a well-defined work product at each stage.
ITB, on the other hand, focuses on making as much progress as possible towards an uncertain goal within a limited time frame. So ITB stipulates a well-defined time frame but a flexible work product at each stage.
Many requirements can benefit from a planning trajectory which starts with ITB and ends with incremental completeness. In general, planning is more effective if a mix of these approaches is allowed depending on context and the type of uncertainty at each stage.
© Copyright 2008 Bolour Computing.













