Discovery Tools for Unknown Problems: Building Lenses for Insight
When you are staring at an unknown problem, the goal isnât to build a finished structure; itâs to build a âlensâ that lets you see the truth of the problem clearly.
Depending on whether your âunknownâ is in the data, the logic, or the environment, your choice of tool changes the way you gain that insight.
1. The Jupyter Notebook (Data-First Insight)
If your unknown problem is buried in a mountain of informationâpatterns you canât see or distributions you donât understandâthe Notebook is your laboratory.
The Approach: Highly iterative, non-linear execution. You run a cell, visualize a plot, and then go back up two cells to tweak a filter.
Best for: Finding the âshapeâ of a problem. If you donât know if the data is clean or if the correlation even exists, you use this to get visual feedback.
The Trap: Itâs easy to create âhidden stateâ (running cells out of order), which can lead to false insights. As Hamming would warn, you might get a ânumberâ that is actually a ghost in the machine.
2. Exploratory Developer Tests (Constraint-First Insight)
This is essentially âTDD for Discovery.â You write a test not to verify a solution, but to poke the system and see how it reacts.
The Approach: You write a test for a behavior you assume exists. When it fails (or behaves strangely), the error message becomes your data point.
Best for: Exploring API boundaries or complex logic trees. It forces you to define the âWhatâ before you know the âHow.â
Insight Style: It provides binary feedback. The system either behaves as you hypothesized or it doesnât.
3. The REPL (Language-First Insight)
Using a Read-Eval-Print Loop (like ipython, node, or irb) is like having a conversation with the computer.
The Approach: Immediate, ephemeral experimentation. You test small syntax ideas or library methods in real-time.
Best for: Lower-level technical unknowns. âHow does this library handle nulls?â or âWhat is the exact structure of this nested dictionary?â
Insight Style: Tactile feedback. Itâs the fastest way to build âmuscle memoryâ for a specific technical domain.
4. Prototyping in a Scratch File (Architecture-First Insight)
Sometimes called a âSpike,â this involves writing a single, throwaway script that tries to solve the problem from end to end as messily as possible.
The Approach: Ignore all best practices. No error handling, no logging, no tests. Just get the data from point A to point B.
Best for: Investigating âThe Unknown Unknowns.â You often find that the biggest hurdle isnât the logic you were worried about, but a permission error or a missing dependency you hadnât even considered.
5. The âPencil and Paperâ / Whiteboard (Logic-First Insight)
Hamming also emphasized that thinking is the most important part of computing. Sometimes, the computer is a distraction.
The Approach: Sketching the flow, the state transitions, or the data relationships before touching a keyboard.
Best for: High-level system design and identifying circular dependencies.
Insight Style: Conceptual feedback. It stops you from over-engineering a solution to the wrong problem.
Comparison of Discovery Styles
| Tool | Feedback Loop | Primary âInsightâ Gained |
|---|---|---|
| Jupyter | Visual | Patterns, Trends, and Outliers |
| Tests | Assertive | Boundaries and Edge Cases |
| REPL | Conversational | Syntax and Library Behavior |
| Scratch File | Flow-based | Integration and Feasibility |
| Whiteboard | Abstract | Structure and Logic |
Summary for the Hamming-Minded
If the purpose is insight, you must choose the tool that reduces the latency between a question and an answer.
- If youâre asking âIs this data junk?â â Notebook.
- If youâre asking âDoes the system handle this edge case?â â Exploratory Tests.
- If youâre asking âHow does the whole thing hang together?â â Scratch File.
The tool shapes the lens, and the lens shapes what you can see.