From Chapter 2: The Mythical Man-Month
Excerpt
For the human makers of things, the incompletenesses (sic)and inconsistencies of our ideas become clear only during implementation. (page 15)
Brooks points out that since a programmer works with "thought stuff," and not physical things, there's a tendency to be optimistic1 about the effort required to deliver code. Physical things constrain a creation and keep the creator honest. For example, "Lumber splits. Paint smears." In other words, you cannot create a house from playing cards, but you can build castles in the air.2 Software can seemingly do anything that can be imagined. That's the risk. It's only in implementation that we can know what's truly possible.
From my perspective, Brooks is right as rain. It's only in the doing that the necessary discoveries occur. And since the activity happens in a government-sponsored, bureaucratic context, these discoveries are both technical and programmatic.3
Of course planning must be done in advance of the discoveries. If you had to make a plan, you would probably weight the following technical considerations:
- Skill of the available programmers
- Experience with the selected development tools
- Familiarity with the development and deployment platforms
- Familiarity with the application design
- Adaptability of the architecture
- Intelligibility of the code
- Mismatch of available funds and customer needs
- Delinquent or non-existent requirements
- Staff availability
- Onerous institutional processes obligations
- Meetings, meetings, and more meetings
- Funding and proposal cycles that inopportunely draw off the key staff
- Vacillating management support
- Staff shuffling when the institution is between large projects
Back to Brooks' assertion that the discovery is in the doing. Remember all this discovery is happening on the clock. Decisions are made on the fly. An unwitting decision may (and often does) impact a generation of developers. Recognizing what is and what isn't an important design consideration is the realm of talent.
I have been most fortunate to have worked with a few programmers with the vision to see when the obvious led to trouble. Hiring one of these folks requires luck. No amount of punctuation or letters after a name indicates talent. Over the years I came to believe that hiring practices restricted to grads, especially recent grads, made it nearly impossible to find the best talent.
Experience is the best teacher and the best antidote to naïve optimism.
1I'm reminded of that old chestnut. What's the difference between an optimist and a pessimist? An optimist believes we live in the best of all possible worlds. A pessimist is sure of it.
2Another chestnut. What's the difference between a neurotic and a psychotic? A neurotic builds castles in the air. A psychotic lives in them.
3Programmatic refers to the activities required to obtain and keep government funding.
No comments:
Post a Comment