My own comments regarding the feedback.
First, I 'd like to say that I don't consider myself an expert on the software development process. (The remainder of the articles in this column won't be about the development process, but rather will focus on nuts and bolts design techniques.) I have, however, learned a thing or two about what process works well for me over the years. What I wanted to write about last month is what I've learned through my own experiences in the cubicle. I think the feedback reprinted above helps to broaden nicely whatever light I may have shed on the development process in my article.
The main point raised by the feedback that I would like to address here is the absence of any mention of analysis from my article. I must now confess that I left off any mention of analysis from my first article in part as an experiment to see how many people complained. To my surprise, only one person brought it up, Sarah Shporen.
I have had one major experience with a project that had a formal analysis phase. I was working on a project with a team of approximately 20 members. The code of this project was to be implemented in C, and management had us follow a Yourdon-Constantine approach of structured design. This project had an analysis phase of drawing bubble charts (data-flow diagrams) followed by a design phase of drawing structure charts. Only after the analysis and design phases were completed did we begin coding (the implementation phase).
The idea of this approach was to first do an analysis of the solution domain in an abstract manner, without worrying about dividing the system into processes and figuring out how those processes would communicate. After we'd completed the bubble charts of the analysis phase, we converted them into structure charts for the design phase. In the design phase we did worry about processes. We made a separate structure chart for each process, and each box in the structure chart directly represented a C function in the solution.
My experience was that this process worked quite well. It was a good fit for that particular project. I personally found the data flow diagrams and structure charts were a nice way "structure" to the thought process of designing software that was going to be implemented in C. Also, in this project we had enough time to be methodical, because the hardware for which this software was being written was way behind schedule.
However, in most projects I have worked on, the schedule pressures were far more intense. In most projects, a formal analysis phase was not part of the process, and the team managed OK without it.
It may be that my experience is skewed a bit because I have done consulting. It could be that companies call on consultants the most when projects are already well behind schedule. But what I've seen is that development speed is usually the single most important deliverable. That's why I made the "meet the schedule" monkey the one with its arms around the developer's neck. It is also why I try to use UI prototype code in the product to the extent possible, and to express the design in code that is missing method implementations. I do these things in the name of speed.
The other way I am biased is that for some reason, I have never found the formal object-oriented methodologies to be as useful as the structured methodologies I encountered while working in C. When I was first starting in object-oriented programming, I attempted to mine insights from an O-O process book written by Grady Booch, but I personally found it to be too abstract. This turned me off to formal O-O methodologies, and I ignored them for a long time.
These days I am trying to give formal O-O methodologies another chance, and am learning UML. I do like the line from Carl Dunham's comment, that "a picture is worth a thousand lines of code."
Thanks again for all the feedback.
Bill Venners
bv@artima.com