0:00
/
0:00
Transcript

It’s a knowledge problem! Or is it?

Hint: Most are not...

(Like this article? Read more Wednesday Wisdom! No time to read? No worries! This article is also available as a podcast).

Note: Good morning. This week I got a short and snappy episode because a) I was completely devoid of inspiration, b) I am oncall this week, and c) I am rolling out a change to the production schedule of Wednesday Wisdom that results in me having less time to write and record this week.

Many years ago, Google apparently decided that the engineers in the Zürich office were getting too fat so they hired a nutritionist. The nutritionist created a food labeling program to help people make healthier choices. Henceforth, all items on the menu were marked with a color code so that we knew what we should pick and what we should steer away from. One of my colleagues helpfully summarized the color codes as follows:

  • 🔴 (red) Contains bacon or beef 🥓🥩

  • 🟡 (yellow) Would be much better with bacon or beef 🥓🥩

  • 🟢 (green) Should really only be eaten by creatures that will become bacon or beef 🥓🥩

In my opinion, which at that time I broadcast loudly with all the lack of restraint that was typical of me between the ages of five and forty five, the color coding program was completely misguided because it assumed that we didn’t know what healthy food was. I challenged the nutritionist to an experiment: Make two plates of food, go into the restaurant at lunch time, and ask people to point out the healthier plate. My bet was that if you did not purposefully make it very tricky, people would unfailingly point to the right plate.

Many years and some jobs later, I found myself in a lot of meetings about code quality. We were struggling with the quality of our code base and velocity was decreasing. How to solve this? The obvious answer (to some at least) was to hold meetings that focused on setting standards for high quality code and guidelines on how to do high quality code reviews. Meetings of this nature typically devolve very quickly into squabbles about how many spaces there should be following a comment, whether the names of constants should always start with the letter “k”, and which logging library is the best. The answers to these questions are “one” and “who cares”, but that is not important right now.

People in our profession are a cognitive lot and so whenever there is some sort of problem, we tend to think that it is a problem of knowledge and then we solve for that. People are not eating healthy things; they must not know which foods are healthy and which ones are not. We must tell them! Or: Our engineers create bad code; they must not know what high quality code looks like. We should tell them!

In my experience though, a lack of knowledge is rarely the root cause of these kinds of problems. Sure, you can probably trick people into pointing at the wrong plate of food, but few people live in doubt about whether the steamed vegetables or the bacon wrapped spare ribs are the healthier dish. In the same vein, we can have philosophical discussions about the finer points of implementing the observer pattern, but no engineer I ever worked with lived in the mistaken understanding that it’s a good idea to create JSON objects using string concatenation and most engineers probably (hopefully) agree with me that creating your own thread pool library is asking for trouble.

Knowledge problems exist, but before you go there, first figure out if you are actually dealing with a knowledge problem.

I told the Google nutritionist that the reason we were all going for the French fries and the pizza was probably not because we didn’t know these were unhealthy. Instead, we were probably stressed, we didn’t have a lot of time, we needed a quick carb high, or maybe we felt that we deserved a treat after a grueling eight hour shift in the protocol buffer mines. Engineers merging terrible code into the repository are typically not under the impression that they wrote a piece of art. Instead, they were probably given not enough time for some thankless task that required modifying an already terrible code base and is it done already pretty please?

Show me the incentive and I will show you the outcome. The main problem of the world is good people doing bad things, hoping against hope that these things won’t turn out that badly. If the outcome is not what you want, do not first and foremost assume it is a problem of knowledge. Instead, worry about what causes people to act the way they do and address that.

You know it is right to subscribe. Why don’t you? What is stopping you? Is it fear?

Discussion about this video