Wednesday, August 7, 2013

The zen of pragmatic realism

From Chapter 2: The Mythical Man-Month

Excerpt
first false assumption... is that all will go well, i.e., that each task will hike (sic) only as long as it "ought" to take.. (page 14)
This is the first of the 'fallacious thought mode[s]' Books will describe to explain why schedule "disasters" are so common. He argues that programmers are inherently optimistic and will under estimate effort because they assume that a task will go well. He explains that this optimism is born of the idealistic view that there will be few difficulties. A view that is unjustified because, programming, like all creative activity, will succumb to the unforgiving "medium of execution." Difficulties that can only be overcome with the hard work needed to ferret out the lurking details that cause most of the evils facing a development effort.


Brooks was writing at a time when most programmers were young, "younger than computers." But that was then. We're now two generations removed. Those young programmers of yore are now grey-headed veterans. Young programmers may still be optimistic, but those vets are not. Pessimistic is a more apt description. A few years worth of 100-hour work weeks will do that.

"How long will that take?" I must have asked that question a zillion times. My mental model for the answer was a bi-modal distribution with a direct correlation between experience and conservatism. The more experience, the greater the influence of pessimism, the greater the estimate. In part that was because delivery commitments are negotiated, and everyone knew that the schedule would not grow until the project is in trouble. In part it was because you learn there's never enough time. If Brooks were to update this first fallacy, perhaps he might say we should weight effort estimations according to an individual's optimism/pessimism rating.

Brook's "fallacious thought mode(s)" gets at something deeper--a fundamental pragmatic realism. There are non-technical forces that profoundly impact the development of software. For years I worked with a very talented engineer who just called it nature. In his view nature was the cause of circumstances that were inevitable. We'd often sit in my office and lament that nature tended to thwart our view of the good. For example, when we'd learn that another round of scare funds had been awarded to a buzz-word proposal, he would say that people would rather take a pill than do the hard work to get healthy. That was nature. When we'd see a poorly conceived design lauded by a politically-motivated manager, we'd think, "That's nature."

Here's a few examples of what happens in nature:
  • Programmers will program. If there are no requirements, they will make them up.
  • Every programmer develops his or her own concept of what and how things should be improved. Given the least opportunity, they will do it.
  • Programmers will want to use what they already know and will resist using new tools when faced with a deadline.
  • A baseless rumor can kill a good idea. A manager will be hard pressed to discern what's a baseless rumor and what's a legitimate technical concern.
  • A budget that is too large is just as bad as a budget that is too small. The additional resources open the door to unwanted improvements whose real cost is only discovered late in the schedule
  • A manager without software development experience cannot to persuaded by an appeal based on the technical details of the software.
In time I grew to understand nature as the way things would happen despite the appearance that they could be otherwise. The causes didn't matter. What mattered was the simple acceptance of nature as the starting point on the road to meeting an objective.

To the best of my knowledge, nature, or whatever you might call it, has never been the subject of serious study. Yet it would seem that more than the lines of code, system complexity, or lack of physical constraints, these forces of nature do more to shape software disasters than any other cause.

Over the years I noticed that the institution rewarded those managers who instincts were in harmony with nature. I never mastered nature's pragmatic realism or accepted it as ineluctable; probably because I felt a duty to do better. But then, I was never enlightened in the ways of a large, government-funded bureaucracy.

4 comments:

  1. The fallacious thought modes of pragmatic realism apply to hardware as well -- or perhaps to engineering in general. A manager without hardware development experience cannot be persuaded by an appeal based on the technical details of the hardware. Every engineer develops his or her own concept of what and how things should be improved. Given the least opportunity, they will do it. And so on.

    What distinguishes software perhaps is that it's intangible, invisible, whatever. If the team can't see it, or the manager can't see it, there is a tremendous amount of axiety over progress. Looking at source code isn't revealing about size and shape of the final product. How does anyone apart from the programmer know when it's done? When the tests pass?

    cf. my earlier comment about competition. The making-up requirements nature is cut off by discouraging bloat and extra work. Reward for early delivery then trumps any perceived reward for exceeding requirements (robustness). The latter bit likely introduces the fragility and unintended results as well.






    ReplyDelete
    Replies
    1. I have every reason to believe you're exactly right. The fallacious modes of thought will apply to hardware and probably to all the other disciplines required to build a mission system. That seems self evident. But I'm a software guy; I'm sticking to what I have directly experienced.

      But, you raise a most interesting question. Why isn't it obvious that decisions about software be delegated to someone with requisite expertise?

      In my years in NASA, I never knew of a senior program or project manager whose primary skills were in programming and software development--someone who had felt the brand from delivering product and supporting customers. (It was often a shocking surprise to learn who top management considered a software expert.)

      Along the same lines, why is software treated by the NASA engineering organizations as a mere piece part and not as it's actual role of determining the overall behavior of the system? In other words, why isn't obvious to the existing management cadre that software be a peer to the other disciplines and have a seat in the executive councils?

      Delete
    2. > What distinguishes software...
      This is a important topic. It's why software issues must be addressed if we are to succeed building the next generation space systems. I hope we can explore this in some detail in subsequent postings.

      I've been assembling a list. Visibility is now on it.

      Delete
    3. > early delivery

      Here's what I saw in the Agency: Early delivery builds management confidence and buys some relief. But, early delivery can bring its own set of problems especially when the code must be integrated into a large code base that is constantly changing. Inevitably that raises the "I thought you were done quip." It sort like a good meal, all the dishes need ready at the same time.

      Delete