I was horrified recently to discover that some programmers feel that I am remiss in gathering requirements, slapdash in my implementation and lacking in my QA. I consider myself to be careful, thorough and to have a high user satisfaction rating.
When I worked through the other programmers' complaints, I discovered that their ideal software development model differed greatly from mine. (And my user satisfaction rating was much higher than theirs, from the same users no less.)
I think that it is instructive to compare and contrast the two models, so that is what I shall do.
I summarize their approach as the classic carpentry mantra, "think twice, cut once." I summarize my approach as "get feedback early and often."
Their model, which is fairly common:
- Start with a long and thorough requirements gathering phase. The game is lost or won here.
- Write up the requirements into a technical specification. Circulate that spec widely and solicit input.
- Code up the spec as best you can. Write detailed user documentation.
- Test the implementation. Run it through QA.
- Deliver the software to the waiting users.
- Handle the resulting bug reports ASAP.
- Consider the job done and done well. Begin a schedule of releases and updates.
- Have a longish conversation with the users, mostly centered around them telling me what their ideal solution looks like.
- Create a working prototype as quickly as possible with basic testing only and get feedback. Do a Quick Start Guide as user documentation.
- Process the feedback into work to be done on the prototype. Accepting sweeping changes to the requirements or specs if those changes move you closer to the ideal solution.
- As the prototype iterates through revision, it becomes the first version.
- Over time, issues arise and so there is recoding through the same process.
- Software development is a conversation between you and the users; long pauses will kill that conversation.
- No requirements gathering will ever get you more than 80% of the requirements, so plan for real revision at the outset.
- Users will happily engage with a dynamic process that produces tangible results
On the other hand, I don't have users who complain that they wait forever for software that doesn't actually do what they need or what it to do.
As is so often the case, each side is not failing at the other's model, each side is succeeding at their own model. I am not impartial, however: I am highly confident that it is better to be one of my users.
No comments:
Post a Comment