Home > Articles > Software Development & Management

  • Print
  • + Share This
From the author of

18.2 Knowing the Problem You're Trying to Solve

Before we design a solution, it's often useful to define the problem to be solved. The counterargument is that if we do that, we might design something only for the problems we think of, whereas if we design without preconception of the problems, there might be applications we would otherwise never dream of. Although I appreciate the advantages of flexibility and generality, I think it's a good idea to have at least one well-defined problem in mind, perhaps designing the system so that other variants can be supported without making the solution too complicated.

    Real-World-Protocol

    Sneeze protocol: First you sneeze. Then someone says, "Gesundheit." Then I suppose you must say, "Thank you." Then I suppose you must say "You're welcome." I think, at that point, the protocol terminates. The only problem is, what has it accomplished? I'd say all the messages in the sneeze protocol are wasted messages. In fact, if I involuntarily make an embarrassing noise, the protocol I wish everyone around me would follow is the "pretend they didn't notice" protocol.

An example is policy-based routing. The general problem is easy to state. Some paths are willing to carry only certain types of traffic. Some traffic finds only certain paths acceptable. But nobody ever describes all the known actual customer needs. BGP provides some set of policies but not the general case. For example, a BGP router chooses a single path to the destination without taking into account the source. It's quite likely that packets from different sources would need to be routed differently. So BGP doesn't even solve all the known cases; it solves only what it happens to solve.

Does BGP solve the important cases, or has the world adapted to what BGP happens to solve? If it's the latter, would the world have been satisfied with a more conveniently accommodated subset, or perhaps even without policy-based routing at all?

    Real-World-Protocol

    Real-life example of "know the problem": When my son was three I saw him in the hallway crying, holding up his hand, saying, "My hand! My hand!" I took his hand lovingly and kissed it a few times and said, "What's the matter, honey? Did you hurt it?" He sobbed, "No, I got pee on it."

  • + Share This
  • 🔖 Save To Your Account