“Critical thinking is an essential skill in our age of constant information (and misinformation), but our own subconscious biases don’t help matters much when it comes to sorting out truth from viral nonsense.” ~ Alan Henry
Alan Henry created a great infographic of 10 Cognitive Biases in Decision Making on LifeHacker. BJ liked the information so much he built an episode to explain cognitive biases and ways to avoid them to fellow developers.
Each day we make over 30,000 decisions most of which we do not put much effort into thinking about. There are many influences on us that affect our decision-making. The following are just a few of the more pervasive patterns that affect developers when making important decisions about code or life.
15:52 Bandwagon Effect and Confirmation Bias
“You see it on the internet all the time, the echo effect. Take a look at Tumblr for example.”
The bandwagon effect comes from the saying, “hopping on the bandwagon” which means to do something because the people around you are doing it. Popularity of an item can make it seem more desirable look for example to reviews on shopping websites and how they influence the popularity of an item
Along with jumping on the bandwagon we have a tendency to prioritize information that confirms our own beliefs. We will seek information that supports our own preconceptions. Both of these are popularity based, the popular opinion influences our decisions.
“This is what internet marketing, or really any marketing is based on.”
To combat these biases avoid relying on a few popular opinions without first considering a broad range and weighing the information available. Sometimes opinions are the only available information such as product reviews on Amazon. In these cases look at both positive and negative reviews of multiple similar products.
“It’s the opposite of the herd mentality.”
This is the rebel without a cause mindset of wanting to do the opposite of what is is advised. Many times it falsely claimed to maintain freedom of choice but in reality the advice conflicts with our own preconceptions.
The trick to avoiding reactance is to leave ego at the door. Ask yourself, “Why am I rejecting the advice?” If you can state a solid reason then you are not a rebel without a cause.
These first two points tie in together as examples of not thinking for yourself. Where the first is following the crowd or your own preconceptions the latter is rejecting the crowd for no other reason than to not follow the crowd.
26:05 Availability Heuristic
In decision making often we will base our choices on the results of similar decisions we’ve made in the past. Ones that easily come to mind or on quickly retrievable information. There is a tendency to give higher value to easily remembered information.
“This can very much skew your decision on anything.”
Combating this involves substituting intuition with data or not relying solely or heavily on intuition. When making a decision assess all the available data for that instance.
30:37 Dunning-Kruger Effect
“One of the painful things about our time is that those who feel certainty are stupid, and those with any imagination and understanding are filled with doubt and indecision.” ~ Bertrand Russell
The Dunning-Kruger Effect states that unskilled individuals tend to overestimate their abilities. The corollary to which is that skilled individuals underestimate their abilities. In both cases it is a failure to adequately assess competence. Junior developers can know just enough to get in trouble and have a sense they know much more whereas more senior developers may suffer from impostor syndrome.
“As you get better, who do you notice more?”
The orders of ignorance come into play here where first order ignorance is knowing that you don’t know something. This applies to the skilled individual as the more they learn the more they realize how much more there is to know. Whereas second order ignorance applies to the less skilled individuals. It is not knowing that you do not know.
This cognitive bias is a tricky one to avoid as it involves using objective methods to assess your own skills. Here is a case where the judgement of others can be useful as well as assessment tools such as tests and training exercises.
“We are in a profession that is very difficult to measure and it’s impossible to self measure anyway and we’re trying to stack the probability of being right on both of those.”
42:02 Curse of Knowledge
Often as highly skilled individuals it is difficult to see a problem from a non skilled perspective. In the first episode of Complete Developer Podcast Will and BJ addressed this in talking tech with non-developers. It aslo comes to play in mentoring or teaching junior developers.
Do not make assumptions about the knowledge base of the individual. Begin with the basics and build from there. If they already know the basics then it can become a conversation. Also give context through the liberal use of examples. Will has an example for this…
44:30 Framing Effect
“How the material is presented creates an emotional reaction.”
The framing effect occurs when the same information is presented in a different manner and those receiving it have different conclusions based on the presentation. This is seen mostly in politics and the media.
This particular bias is also used in certain testing and surveys to provide validity to the test. In psychological tests the same question will be asked multiple times in multiple ways to make sure the test taker is not just filling in bubbles on the page.
When being presented with information look for the meaning of the information out of the context of the presentation. Once that is understood you will be able to see how the presentation is influencing the understanding of the information.
45:53 Anchoring Effect
“News stories break and there’s all kinds of inaccurate information … and then six months later people will be repeating it because they heard it first.”
Similar to the availability heuristic the anchoring effect focuses on the first piece of information received. People tend to be swayed if they feel they are getting a bargain.
Car dealerships are the most notable example of using this bias in price negotiations. The sticker price on cars is never the actual price. It allows the sales team to “negotiate” with the customer giving the customer the sense of getting a deal.
“It’s a game theory thing, out of a population of people there’s going to be a curve of where those people would price that vehicle”
Focus on the value base of an item or decision rather than the price or first information received. In the car dealership example, look up the value of the vehicle on something like Kelly Blue Book and expect to pay a little more as the dealership will need to make a profit.
Online IoT Courses You Should Know
Designed to be an introduction to working in the Internet of Things these are beginner courses on the Internet of Things Wiki. They are a great way to get started with courses for beginners to specific technology courses such as Raspberry Pi, Arduino, or Drones and Robots. Courses for beginning include how to get started, various technologies, multimedia, and even one on beginner augmented reality. Many of the courses or free or not very expensive. If you are wanting to get started in the Internet of Things these lessons are a great place to look.
Tricks of the Trade
“What is harder writing code or debugging code?”
Debugging code is much harder than writing therefore if you write code as best as possible you by definition cannot debug it. The point is not to make the code as simple as can be but to make it so you and others can follow. Sometimes using the newest pattern makes the code unusable no matter how good it decouples the code.
As developers move from mid-level to senior their code begins to become simpler. This can be seen in martial arts where you begin with the basics then move to more complex kata. The masters however will practice the basics every day.
As a junior developer moving up to mid-level your focus is on adding complexity and understanding complex code. Yet moving from mid-level to senior your focus is removing the complexity while still writing effective code.
“The reason you know a particular movement is wasted is because you have wasted it at some point.