A colleague asked how I'd do it, so here's the general idea.
Outline
- A project is defined as something that has many small iterations of start-to-finish, instead of one big start and one big finish.
- Depending on the size of the project, iterations can be hours long (hackathon), or they can be months long (multi-MM $ projects).
- For the sake of parsimony, we'll assume that it's preferable for iterations to be regular (i.e. they are all of the same length). You may experiment with irregular iterations at your leisure.
Specifications
In software, the conventional divide is between the two following levels of abstraction.- Functional Specification
This is the higher level of abstraction. The project targets are described conceptually. More detail is better, and ideally there should be no loose ends. These could be implemented as follows.- brainstorming: random thoughts
- analysis: remove contradictions
- analysis: map out major dependencies; necessary and/or sufficient conditions for success
- analysis: map out every single dependency
- User Interface (UI) Specification
This is the lower level of abstraction. The entire surface of the software-to-be-developed is specified in space and time - if any part of the software is perceptible to the user, this is the time to decide on how exactly that will happen. This could be implemented as follows.- doodling: rough sketches
- analysis: remove contradictions
- analysis: map out dependencies; necessary and/or sufficient conditions for success
- final art: major states of affairs
- final art: every possible state of affairs
Before Iterating
Prior to iterating, moderately detailed quantitative estimate should be conducted. This is often referred to as a feasibility study. It involves one or more quick and dirty surveys of the project's specifications.Iterating
Each iteration could look like this, for example:- A review of the entire project's specifications at both levels of abstraction, progress (if any) in previous iterations, and a revisiting of whether each outstanding item should go into the current iteration, a future iteration in this project, or into a "future project" (when a project has been broken into discrete groups of iterations, each group may be referred to as a "phase").
- Final specification of work to be developed in this iteration (from the final blue steps of the feasibility study, otherwise you now have to execute the blue steps; if you ignore the blue steps completely, you risk feature creep and meandering timelines; in web development, for example, ideally you've already got CSS and HTML).
- Development.
- Automated testing - only if things pass, they move to the next step. [CI]
- User-acceptance testing (UAT) - only if things pass, they move to the next step. [CI]
- Product-owner signs off only on specifications that are considered complete.
No comments :
Post a Comment