Rule #19: State your assumption.

Rule #19 is probably the first rule that is more logical in my job then in real life. It can be difficult to understand but I've found extending it form my job to my entire life to be extremely valuable. An assumption is a piece of information that is considered to be true without proof. I could assume the restaurant is open until 9:00, so I drive to the restaurant and arrive at 8:30. If I check Google or call them to check it is no longer an assumption. I now have evidence to support the assumption making it a fact.

In computer programming assumptions cause bugs. A simple calculator program will clarify. The program simply asks for 2 numbers. Then it divides the top number by the bottom number and gives the result. For example if I give 12 and 4 I get 3. Sounds simple enough. It's actually done in one single line of code. result = first / second;. Nice and easy right? But what happens if someone who doesn't understand the program or just wants to experiment a bit decide to put something different in there. The input could be 'A' and 'B'. This would actually result in the number 0.9848. This of course doesn't make sense and will probably just confuse the user. Even worse what if the user gives the values 10 and 0. As we all know you can not divide by zero. This would crash the program. If you ever wondered why that game you played or that website you visited or the word processor you used crashed and stopped working. It's because someone made a bad assumption. Here are all the assumption I have to make for my very simple divisor program

  1. The input values are numbers.
  2. The input values are real numbers.
  3. The input values are whole numbers (1, 2, 3 not 1.3, 1.5, 10.6)
  4. The input values are less then 2.14Billion (yes this is a real issue).
  5. The second number is not a zero.
  6. Both input values actually have a number in them.
  7. The user wants to divide the numbers.
  8. The user wants to divide the first number by the second.

These are just the assumptions off the top of my head. I have to evaluate each of these assumptions and test the users input to make sure it is valid. If it isn't I need to warn the user of their error. Following Rule #21: Their will always be a remnant. The 80/20 rule take effect. 20% of a computer program actually does the real purpose of the program. The other 80% is testing user input and returning errors to the user.

When I started as a computer programmer I learned the rule "never assume". I pondered this rule for a bit then rejected it. Without assumptions it is impossible to live. At some point I must assume the air is breathable, the chair can be sat on, and my family and friends can be trusted. While at some point each of these assumptions has proven false the benefit of the assumption far outweighed the work required to continuously verify them. I learned shortly after the much more practical rule "State your assumptions". Stating an assumption allows you to evaluate the risk of the assumption and decide if it is something you can accept.

For example I stated two assumption in my program that I can safely ignore: #7 and #8. I don't have to check that the user wants to divide the first number by the second. That is the purpose and limitation of the program. I don't have to test or ask the user to confirm that is what they want. If they didn't want that they would use a different program. Additionally if they didn't want that it will not cause any harm to the user or the computer they are using. The remaining assumptions 1-6 all require me to validate the users input and tell the user if it doesn't meet the requirements. If I neglect any of them the program may crash or give the user confusing results.

How does this apply to life? With assumptions defined and their importance clarified what does this do for the day to day? I was told by multiple friends, family, pastors, mentors, and counselors that the greatest form of conflict in marriage (or any relationship) is unspoken, unmet expectation (a.k.a assumptions). That's right most interpersonal conflict in family and friendships is caused by assuming something about the other person. I can assume my wife knows to not put my cast iron skillet in the dish washer. But she might not. So when she does it's actually my fault. I made a bad assumption. And this is where Rule #19: State your assumptions. Comes in. If I just finished cooking with my cast iron skillet and my wife is so gracious as to do the dishes it would be very wise, and helpful for me to simply state the assumption "By the way do not wash the cast iron skillet with soap. You need to boil a small amount of water or oil in it then wipe it out with a paper towel and then it's clean". With a very simple statement I just save my marriage from a conflict.

It's also worth noting that some people can be very offended if you share information they already know. First this is not your fault, it is theirs. I refuse to simply assume someone knows something because I might offend them otherwise. I do however try to be polite about it. "Are you aware the cast iron skillet is not supposed to be washed with soap?" It's stating your assumption without assuming their ignorance. A humble person won't care if you share something they already know. If someone is too arrogant to hear my assumption I have no problem pissing them off. I will not compromise my character or life code because It might offend. Jesus offends, I can only assume I will too. I had a group I was a part of that regularly brainstormed for activities. When the brainstorming moved into implementation I would often point out some of the issues that need to be be overcome. If we do an event in this building what kind of follow up will we do? How often will this happen, we are already very busy and this sounds like it might not be sustainable. You seem to be assuming we will have hundreds of people but our target audience is only a couple dozen. Should we expand our target audience or lower our expectations? They were very poorly received. The leader assumed I was just being negative. I saw myself as a very positive influence. How can we solve and prevent problems if they are not stated. I could have stopped speaking in these meetings but I refused to be a yes man. It resulted in me being promoted to higher levels of leadership when my warnings turned out to be often correct.

Here is my checklist for assumptions:

  1. State your assumptions to yourself so you know that you are making them. - People don't realize they are making assumptions. Don't be one of those. It's worth a few moments to just go over some assumptions in your head before you embark on a new task or activity. For daily routines this is less important but for new and uncovered territory state a few obvious assumptions in your head.
  2. State your assumptions to your teammates to insure everyone is making the same assumptions. - The key to team work is often said to be self-sacrifice and hard work. But much more important is a plan. A team of a thousand people can't work together with self-sacrifice and hard work. Football players don't depend on simple hard work to win the game, they depend on a plan that they have practiced dozens, hundreds of times together. If you're assuming your the first priority hit for a ball state that assumption and make sure everyone agrees. Or you may be running the wrong play.
  3. State your assumptions to your friends and mentors to make sure your assumptions are reasonable to make. - This one is all about character. Since the bible doesn't say anything about kissing I can assume it's ok to make out with this girl I just met. But my mentor may tell me to give it a few days, weeks, or just a few dates to understand her better. Let the physical relationship come after the intellectual and social relationship develops so you are no blinded by lust.
  4. Be willing to change your assumptions - Assumptions are by definition unproven. If you receive evident that your assumption is wrong. Change your thinking.