Iterative Development Sample
So iterative development is about building your second list so that you can turn large projects into bite size pieces. That presumes we have a first project list to start with, so let me construct a realistic but hypothetical first project list that's organized only by project value. Then I can give you a quick demo of the effects of iterative development.
-
Project 1
-
Module 1
-
Module 2
-
Module 3
-
Project 2
-
Module 2
-
Module 4
-
Module 5
-
Module 6
-
Module 7
-
Project 3
-
Module 6
-
Module 8
-
Module 9
-
Project 4
-
Module 4
-
Module 6
-
Module 10
So I have four projects in this list which require a total of 10 modules. On one level, we could take the old fashioned approach, write all ten modules and then launch them live. However, then we're waiting around for a long time for that functionality to come about. At the very least, if we developed them starting at module 1 and working our way through 10, we'd have some functionality available after module three, more functionality after just four more modules, and then two more projects complete in the next three modules. Right now these projects are laid out in order of importance. However, you'll note that we can probably do much better.
Project 1 is our most important and requires three modules. Further, it only shares a module with one other project, project 2. That's no reason to shuffle anything ahead of project one (and we haven't even looked at how massive project 2 is which only makes a change even less of a good idea).
Project 2, however, is a pretty big one. It appears to have five modules, but look again. By the time we start project 2, we'll already have completed module 2 (it's necessary to complete project 1); that means we really only have four modules to build and maybe some modifications to module 2. Still that's a fair chunk of programming. We'd like to tear some work out of that if possible.
Project three does share a module (module 6) with it, but that's not going to be a big deal unless module 6 is an especially large risk in the project. Assuming it is, we "might" consider it; we'll have to weigh the importance of project 2 (which encourages us to hammer out project 2 first) vs. the riskiness of module 6 (which encourages us to take on the smaller project 3 first). This could be a tough call.
For now, we should just note that module 6 does indeed look risky and there's an argument to be made for prioritizing project 3 before project 2 and keep looking. We'll make a more definite decision later. Looking at project 4, we see that this has some key possibilities. Project 4 shares two modules with project 2 including the risky module 6. If we considered doing project 4 first, we could tackle writing it along with only two other modules. That's definitely an improvement over writing three other modules along with it. Also, only module 10 does not eliminate work from project 2.
Tackling project 4 first will reduce the size of our largest project to something much more manageable, we will take on our riskiest module with less work to do (fewer alternate modules) and we are not adding that much work to the completion of project two (we're taking on the one additional module 10). That's a distinct advantage so let's shuffle the project list and see what we've come up with.
-
Project 1
-
Module 1
-
Module 2
-
Module 3
-
Project 4
-
Module 4
-
Module 6*
-
Module 10
-
Project 2
-
Module 2
-
Module 4
-
Module 5
-
Module 6*
-
Module 7
-
Project 3
-
Module 6*
-
Module 8
-
Module 9
I've made the adjustments that we talked about (shuffling project order), starred the modules which involve significant risk (as in application killing / major redesign risk), and crossed off the modules which will already have been built by the time we begin construction on the project. Note that I have not deleted them, since there may be some modifications necessary to make the module work properly with the project. This is a relatively small change but let's take a look at the advantages.
We will still complete two projects by the time we've written seven modules – they'll just be projects 1 and 4 instead of 1 and 2. Moreover, project 2 will be finished in almost the same amount of time as before. We will need to construct eight modules to get it up and running instead of seven. That's really the only drawback. Moreover, we get a critical bonus. The risky module 6 is now loaded into a smaller project with only two other modules (instead of four). That will make developing module 6 much easier and increases both our chances of success and the speed with which we can complete development (especially if module 6 fails or requires major redesign). Further, if module 6 fails or changes significantly, we will know that project 2 can't be accomplished (at least not as designed) even before we begin the project. Risk management therefore is greatly improved by this new configuration. We can examine alternatives without writing lots of code that we might have to throw out.
Also note what's happened to our projects. Measuring the project in terms of modules completed is not really useful, since people are only going to care how much time it took to finish them. Project one and four will each require three modules to complete. However, in the process of building them, we will have finished three modules needed for project two. Aside from some modifications, our massive five module project will only require us to build two modules. From the standpoint of making our programs more understandable and therefore faster to write, we've eliminated our biggest challenge. Further, when we build the risky module 6 we won't be programming three other modules, but only two. That reduction could be the most significant time savings of all. That's the beauty of iterative development, and why it can help us to much more reasonably attack and complete our projects, and this is how I formally work iterative development into my project management plan.
One last point is worth making. The individual modules that we list do not have independently useful functions (otherwise they would have been broken out as separate one-module projects). Therefore, nothing that we've done suggests how we will construct the project or the order that we'll attack the modules in. That will only be determined when we complete the application design on each project and prioritize construction for incremental development. That's where we handle organizing the order of construction. The only thing we can say for sure at this point is that there is at least some portion of module 6 which is troublesome. Those risky classes, functions, or whatever else that's inside module 6 will most likely be prioritized pretty highly when we start on project 4. But we aren't terribly concerned about that right now; we'll work all that out later in the process.