The Joy Of Doing

Abstract

Problem: Why do some people find deep satisfaction in technical work even when no measurable progress is made?

Approach: Tim Cain tells a story about spending 2.5 hours helping a friend debug a hardware/Python project on a Sunday morning, tracing a firmware issue down to the chip schematic level.

Findings: The joy was in the process — understanding the problem, narrowing possibilities, and identifying paths forward — not in achieving a finished result. This mirrors Tim's relationship with game development: the making was always more fulfilling than the shipping.

Key insight: The joy is in the doing, not the finishing. Understanding a problem deeply and having clear options forward is itself a meaningful outcome.

Source: https://www.youtube.com/watch?v=9q2YkBc2mk8

1. The Sunday Morning Debugging Session

Tim gets a text from a friend: "I have a Python question." Tim agrees to help for two reasons. First, the friend is a doer — someone who builds things, purchases hardware, wires breadboards, 3D-prints custom housings, and only asks for help after exhausting his own attempts. Second, the question is very specific, not a vague "explain everything to me" request.

Tim's rule: never put more effort into someone's project than they're putting in themselves. The "idea person" who wants you to do all the work is a trap. For every person who rolls up their sleeves, there are a hundred who just want to talk about doing things.

2. The Debugging Process

They jumped on a video call and Tim followed a disciplined approach:

2.1. Understand the Goal First

Before looking at any code, Tim asked: What are you trying to do? Then: What have you already tried? Only after understanding the context and failed attempts did he ask to see the code.

2.2. Start with Fundamentals

Tim didn't look at high-level logic first. He examined how chips were initialized, how state was retrieved and stored — the foundation. They ran the code and watched debug output line by line.

2.3. The Third Line

On the third printed line, Tim spotted the problem. A getState method was returning a null-like value — not zero, but "I can't tell you." Tim draws a sharp distinction: zero means "I know the answer and it's nothing"; null means "I don't know the answer." That difference matters enormously in debugging.

3. Down the Rabbit Hole

They traced the issue from Python code → chip firmware → chip schematics (pin by pin). They discovered the chip's current firmware version simply didn't support the method being called.

This led to four possible paths:

  1. The firmware exists online but they couldn't find it (bad search)
  2. The firmware exists but isn't freely available (behind a paywall or requires purchase)
  3. The firmware could be written but nobody has done it yet (a massive undertaking — writing firmware from schematics alone)
  4. The firmware can't be written for this chip to do this thing

4. 2.5 Hours Later, Nothing "Done"

When they checked the clock, 2.5 hours had passed. The friend apologized. Tim said no — it was a lot of fun.

From a production standpoint: zero progress. The device still didn't work. No new code was written. No measurable forward movement.

But both were happy because:

  • They understood the problem far better than before
  • They had three concrete paths forward: find existing firmware, redesign the device around the chip's actual capabilities, or find a different chip
  • Tim got to exercise skills he rarely uses, navigating the boundary of what he knew and didn't know

5. The Broader Point

This is Tim's relationship with game development in a nutshell. Whether it was Fallout, Arcanum, or The Outer Worlds — the joy was always in the making, not the shipping or even the playing.

The satisfaction comes from the process: diving into a problem, understanding it deeply, and working through it. If you're the kind of person who finds that 2.5-hour debugging session fun rather than frustrating, you might enjoy making video games.

6. References