See RLucente.bloki.com: The Culture of Programming - Why Programmers Make Things So Complicated .

RL identifies 4 reasons.

  1. It could be that its actually complicated
  2. It could be that have not found the real problem
  3. It could be that I have to patch because I can't redesign and rebuild the system
  4. It could be that I am not using the right tool

There really seem to be seven.

  1. "The Conflict Is The Drama". The inherent conflicts in the relationship between developers and buyers or users make the problem appear complex. Often because buyers insist on their solution to an assumed problem.
  2. "Fear of Showing Weakness". Simplicity isn't valued.
  3. "Quality vs. Quantity of Ideas". It's hard to let go of the first idea, no matter how bad it is.
  4. "Form vs. Structure". We fail to define the problem in the first place; we don't know what problem we're solving. (RL's #2)
  5. "When I Grow Up". Lack of mature processes for solving problems.
  6. "If I Had A Hammer". Inappropriate use of tools or solution design patterns, viewing all fastener problems as nails because we really understand hammers. (RL's #4)
  7. "How Hard Can It Be?" Failure to assess risks appropriately. (RL's #3)

This list was a cosmic accident. However 7 is a magic number. See Wikipedia's entry on Seven Deadly Sins . Since it was just a cosmic accident, we now have to do some careful matching of our reasons and those sins and see what might be the real parallel (if any).

Also, what about RL's #1 - it really is hard?

  1. Yes. Some problems may actually be hard. But I think that truly hard problems only occur in the realm of public policy. We're talking about software here.
  2. I think anything that appears to be hard in software can be one of two things: it's an NP problem with a lot of mathematical details or you're solving the wrong problem.