-
Notifications
You must be signed in to change notification settings - Fork 1
The Iterative Process
Walking on water and developing software from a specification are easy if both are frozen.
Throughout this course and the rest of your development career, you'll be expected to develop and deliver software, in part or as a whole, that is trying to address a The Problem that might only be possible to understand through the process of writing of that software. That is, the process of writing the software might be the only thing that brings sufficient attention to The Problem to make it understandable, say nothing of The Solution.
It's like trying to construct a device that can strike a target that no-one has ever really seen before... neither the instrument nor the target is fully known or knowable at the onset of the project. Add in the people for whom you are constructing these devices, who do not know anything about constructing devices of any sort but have merely used other devices to hit other targets previously in their careers (or perhaps just seen others do so successfully), and you should understand that the path of a Software Developer is fraught with danger. Danger like:
- Never delivering anything.
- Delivering something...
- ...that does nothing.
- ...that doesn't do what we...
- ...told it to.
- ...thought we told it to.
- ...needed it to.
- ...were told it needed to.
- ...thought we were told.
- ...actually needed it to do.
- ...no, what they actually needed it to do.
Usually we write software that does something useful; ideally that does something valuable; occasionally that does something more valuable than what we thought we told it to do... twice.
Locking ourselves in a closet until we've delivered such a product is rarely the correct approach to delivering this sofware. It occasionally works for games and art projects, but the majority of software, Business Software, is best built in the same trenches as the people fighting against The Problem. We can best do that with The Incremental Process: a method by which we deliver just a little usefulness, just a little value, one tiny increment (of time) at a time.
- Practice estimating with T-Shirt Sizes -- Look at the work in front of you. Select a discrete piece of it. Make a guess about the difficulty, complexity, and risk of that piece with an easy-to-judge scale: Extra Small, Small, Medium, Large, Extra Large.
- Try breaking down Tasks into Steps -- Focus on just one Task in your list, any one, and start writing down all the things you think you need to do: writing, reading, research, etc. Organize that list into a set of sequential Steps you can take. Now estimate the size of those Steps in big chunks.
- Select VERY SMALL Increments -- Use The Pomodoro Technique to keep your increments intentionally short: 25 minutes plus 5 minutes of reflection. Allocate what you think you can accomplish inside of a single Increment: Tasks with Steps. When the timer rings, assess what you've actually accomplished. If you finish early, stop early!
- Calibrate and Repeat -- Based on what you learned about the size of the Task or Steps you completed, estimate how many Increments you'll need to accomplish the whole Task. Don't forget to calculate how many Increments you can allocate!
Over time, you'll get faster at certain Tasks, which will affect your efficiency, but the Tasks will also get more complicated and difficult over time, so your ratio of size-to-time may fluctuate. Tracking that ratio, however, is how you can measure your efficiency and effectiveness.