The Decision Tree
I certainly love most of my work, but my favorite part is pair programming, which is when a couple developers share a screen and work together solving problems, which facilitates spreading knowledge in a big way.
It is extremely important for scaling Ckc that we teach new folks how to think – a bit strange, but I’ll explain!
- You are tasked with setting up a new staging server in the Paris Headquarters
- You set up the server and everything works, but, wait.. for some reason, connections are being denied to Minio on port
- You’re a junior, so you’re not sure how this is even happening. Everything is working on your machine? Everything else seems fine, just this one service is borked
- The week of debugging begins:
- The connection error, maybe it has to do with SSL at some level?
- Maybe there’s something wrong with my Minio configuration?
- Is Minio booting up OK?
- Is the port open in Security Groups? Yes..
- Why can I talk to minio from the local machine, but the outside Internet can’t talk to it?
- I’ve tried 1,000 times and everything seems fine!
- This goes on for days
- Finally, I try a random new port and.. wallah! It works!
It turns out the organization hosting our server disallows port 9000! I had no idea. I never even thought to ask.
Basically changing one number, a port, from 9000 to anything else fixed the problem. Why didn’t I just focus on the initial connection error? Why did I go down so many useless paths? I knew what the problem was at the outset, but refused to focus on it.
I never expected a port to be closed by an outside admin, this had never happened before. I could see the list of open ports in my configuration, but I refused to acknowledge it clearly wasn’t open.
I couldn’t connect: that’s it! Focus on that! It has to be a network problem, nothing to do with Minio configuration.
Let your mind go, but with limits
Confronted with so many unknowns you may feel hopeless. You have no idea what to try next. You, maybe literally, start to panic. Do you even belong here? Do you even understand this stuff? You think it should be working, but it’s not, and reality is crumbling around you. Trouble focusing, wanting to pull your hair out… all of that fun stuff.
Let this wash over you, maybe take a second to enjoy this feeling of not knowing how to do something – eventually this challenge will devolve into another way to do a CRUD form stored away in your brain.
You’ll forget what a rush it was to finally figure out you needed
levioSo(). This will be boring someday, I promise, and you’ll miss these days.
Start at the base of the decision tree
After the initial panic has washed over you, re-examine the problem in the simplest way you can. In the above example it was clear from the very beginning it was a connection issue.
Why did I go any further up the decision tree? I had a bad connection, that’s it, maybe try to change ports or something?
It took a week to diagnose this port problem, which should have been diagnosed in 5 minutes given a stoic “senior engineer” behind the wheel.
Furthest branch away
Very rarely you will encounter a problem where all initial assumptions/clues are actually futile and there’s something fundamental wrong with your computer architecture or the library you’re using. Usually you did something silly like a typo, forgot to pull, forgot to rebuild docker, etc.
Be very cautious going so far up the tree, re-check your initial assumptions. Re-read the error. Restart your computer.
Very likely you just need to open a port or something simple!
It’s not always easy
And, actually, sometimes you do have to sit there and take it for 2 weeks. Fully absorbing an idea and figuring out a problem may legitimately be very difficult and all-consuming.
Even though this port 9000 problem was silly and took way too much time to understand, I learned a boatload. This always happens. Every time I am super stuck and find the solution: I come out stronger, more apt to take on bigger tasks.
Over time, you get better and better at knowing when to climb up the tree and try to explore deeply.
As a process
Here’s a repeatable way to try to avoid going too far up the decision tree:
- Calmly read all errors, code, commands, etc. in front of you.
- If something is obviously broken, focus on that. Do not assume a third party system/module is at fault. It’s probably you, and it’s probably a very small simple problem!
- Build a small example replicating exactly your situation with as few moving parts as possible (i.e., from our example, open any kind of server process and serve it on port
- Rubber duck your situation to a peer.
- Reach out to someone smarter than you. If you’re the top dog: God help you.
- Now start posting on forums, discord, IRC, etc. and try to find any more info