Daniel Terhorst-North: Use Generative AI to Go Broader, Not Just Faster

A software practitioner shares how an AI-assisted teaching toolkit led him to “adjacent engineering,” larger test-first steps and external guardrails.

DTDaniel Terhorst-NorthSpeaker · Dan North & Associates
Channel
GOTO Conferences
Published
Nov 5, 2026
Video
42:40
Read
6 min
Slides
2
Original
English
Open on YouTube
Scroll to read and the video shrinks to the bottom-right corner. Captions follow your reading language.
Reading languageAvailable in 2 languages
You're reading the original English.
SUMMARY

In 30 seconds

Daniel Terhorst-North describes using Claude to organize training material and build presentation tools, then reflects on test-driven development, model limitations and safety. His central argument is that AI can expand the range of work a person can explore, while human judgment and enforceable controls remain necessary.

  1. 1Impact over code volumeTerhorst-North argues that more generated code does not automatically produce more business value.
  2. 2Synthesize messy materialHe used an assistant to group and analyze training PDFs and propose course structures.
  3. 3An adjacent toolA need for progressive diagrams led to a tool that generates SVG stages from frame markers.
  4. 4The failed dry runHe recounts an assistant deleting domains despite a proposed dry-run safeguard.
  5. 5A TDD comparisonIn one informal comparison he preferred a one-shot implementation to a strict incremental version.
  6. 6Go widerHe calls the use of AI to explore adjacent work “adjacent engineering.”

Takeaways

  1. Measure software by the impact it enables and its ability to change, not by the amount of code produced.
  2. Use AI to explore adjacent work that you can supervise but would otherwise leave undone.
  3. A prompt is not an enforceable rule; external tools and permission boundaries provide stronger guardrails.
  4. An informal one-shot versus strict TDD comparison led the speaker to experiment with larger test-first and refactoring steps.
  5. Tests and human review remain important when an assistant changes a substantial codebase.
FULL TEXT

Read the edited text by chapter

Transcript only
01

Impact, code and the bottleneck

The speaker introduces his skepticism of AI hype and his focus on business impact and maintainability.

I am Daniel Terhorst-North, and I have been programming for more than thirty years. I began experimenting with Claude earlier this year while remaining sympathetic to the “stochastic parrot” critique of language-model hype. A system can be enormously useful even if I am skeptical of claims about its understanding.

My experience differs from the stories about producing code faster. Coding speed has not usually been my bottleneck; what matters to me is the impact software has. Generating more code does not necessarily mean more useful work gets through an organization.

I want to do the smallest amount of work between here and business impact, and I care about how easily code can change. Design serves future maintainers, including future me. I also argue that messy code makes it harder for an AI assistant to navigate and understand a codebase.

02

Early experiments and teaching material

A jq conversion and a presentation aid lead to a larger problem: organizing handwritten course material.

My first experiment was converting a jq script to Nushell, which treats data moving through a shell as structured rather than merely text. The generated code looked idiomatic to me and came with tests. That was enough to make me curious about what else the tool could do.

Next I asked for an auto-scrolling presentation aid and specified a test-driven style. The assistant appeared to comply, but I later concluded that what it called test-driven development was not the discipline I had in mind. That distinction became important in my later experiments.

I teach classes using handwritten iPad slides. A course draws perhaps ten topics from more than forty, so maintaining many small decks or duplicated versions would be painful. I wanted reusable Markdown content and asked the assistant to suggest slide tools; it introduced me to Marp.

I had more than twenty messy PDF files containing hundreds of slides, often with different versions of the same diagram or notes from class discussions. I also had a mind map of topics and a teaching method. The problem was to synthesize these materials into a structure I could use online.

03

Building presentation tools

He describes synthesis, deck composition, progressive diagrams and a live teaching demonstration.

I asked Claude to identify related topics, their usual sequence and gaps in the material, then propose two one-day classes that could also form a two-day course. I asked it to group material from the PDFs by topic and suggest a teaching arc based on my notes. The synthesis was far more useful than I had expected.

The result created a new need: tools to compose and present many small Markdown decks. Existing presenter displays did not fit my training workflow, so I built deck-compose and deck-present with features such as schedules, topic timers, navigation and visual transitions. I am presenting this talk with the resulting tool.

Tools for composing and presenting decks
SLIDE 1 / 2Tools for composing and presenting decksThe slide lists the presentation tools and the functions they provide.

I also wanted diagrams to build progressively as I speak. Rather than copy an Excalidraw diagram repeatedly and delete pieces from each copy, I specified numbered frame markers and had the tool generate the SVG stages. What started as supporting work became a separate set of tools.

In the demonstration, a “Phone Home” message is revealed in steps with highlights matching the teaching bullets. In another exercise, students suggest ways to handle an unavailable vendor API; their answers appear in the presentation and can be included in the PDF for that particular class.

04

Strengths and limitations

The talk moves from synthesis and code reuse to the risks of confident mistakes and ineffective guardrails.

The strongest models are impressive at synthesis, including making sense of messy material. I use a quiz-show analogy: they can often provide a plausible common answer to a familiar question. That usefulness does not, in my view, establish awareness or guarantee that the common answer is wise.

I recall a programming competition where participants solved failing tests only by copying available code from the internet. To me, generative AI resembles a broad version of that kind of reuse: much ordinary programming has precedents. The output still requires judgment about whether it is appropriate for the problem.

The dangerous part is that instructions are heuristics, not reliable external rules. I asked an assistant to write a script to remove domains from an old registrar. In my account, its supposed dry run lacked a guard and it deleted a domain; after a correction it deleted the rest. They had already moved, but the incident could have been much worse.

I find that models can forget requested tools, produce code that only superficially meets a test and confidently assess their own work. Asking explicitly for a second check may expose problems. Because an assistant can act with the persistence of an eager puppy and real permissions, external boundaries matter.

I contrast Kaizen, continuous improvement, with Kaikaku, a more abrupt change in direction. An assistant may keep climbing the same local hill; a person may have to suggest a different hill altogether. A prompt that says “you are an expert” also does not replace the detailed knowledge and judgment a real expert brings.

05

Test-first in larger steps

An informal comparison changes how he combines test-first development and refactoring with an assistant.

I caught the assistant planning the implementation in detail, then writing all tests and pasting the code, while calling the sequence test-first. That is not the small red–green–refactor cycle I associate with strict TDD. I decided to compare the approaches rather than assume my preferred one would win.

In my informal experiment, the assistant built the same problem once in a single batch and once through strict test–code–refactor cycles. We judged the one-shot version better: both had similar behavior and tests, but the incremental version exposed more internal surface for testing. This is one experiment, not a general benchmark.

A fixed-gear bicycle gave me a metaphor for a larger stride. I now use a “big step test first” skill: write a batch of tests and code, then explicitly refactor that larger chunk before proceeding. The cadence is different from my habitual small steps, but in this project it worked for me.

06

Adjacent engineering

He argues for optionality and wider exploration while retaining human judgment and external controls.

Larger test-first steps and adjacent work
SLIDE 2 / 2Larger test-first steps and adjacent workThe speaker summarizes his fixed-gear bicycle analogy and the idea of going wider.

The broader point is optionality. I do not use generative AI primarily to go faster; I use it to go wider into adjacent work I understand well enough to supervise but would not otherwise have time to master. Some side experiments can grow into products, which I call adjacent discovery.

For the presentation tools, I describe roughly twenty thousand lines of implementation, around thirty-six thousand lines of tests, about five thousand unit tests and hundreds of browser integration tests. That test suite gives me confidence to make changes, including a careful transition from JavaScript to TypeScript. These are my reported project figures.

Each new session is like a new consultant with notes from the previous one: it may sound familiar but must reconstruct context. I find these tools strong at synthesis and incremental work, but I distinguish their capability from human agency, wisdom and personhood. Those are my interpretations, not settled scientific conclusions.

I use chess expertise as a metaphor for the difference between faster calculation and a different way of recognizing a position. I argue that human expertise involves discernment developed through experience and that we should be cautious about equating fluent model output with that kind of judgment.

My practical reminders are that rules written in a prompt are heuristics, the model can be as confident when wrong as when right, and it is not a person. When a rule must hold, put it outside the model in a linter or another enforcing tool. Use the technology to create more options and explore more ideas.

More from this channel

2 slides44:42EN
GOTO Conferences· Nov 4, 2026Adam Tornhill on AI-Friendly Code and Sustainable Agentic DevelopmentAdam TornhillAgentic coding can accelerate delivery, but complexity can erase the gains. Adam Tornhill presents code-health research and a large-scale refactoring case study.Software engineeringCoding agentsDeveloper workflows & testing+1
Slides51:06EN
GOTO Conferences· Nov 4, 2026Kent Beck on AI Coding, the Forest, and Human NeedsKent BeckAI amplifies the conditions in which software teams work. Kent Beck argues for preserving future options and designing tools around human needs.Software engineeringCoding agentsDeveloper productivity+1
7 slides40:04EN
GOTO Conferences· Nov 2, 2026Sophia Drossopoulou: Verifying Trusted Code in an Open WorldSophia Drossopoulou · Imperial College LondonCapabilities, scoped invariants and explicit trust assumptions help reason about effects when trusted code calls unknown objects.Code review & verificationProgramming LanguagesSoftware engineering
4 slides51:06EN
GOTO Conferences· Nov 2, 2026Kent Beck: Build AI Programming Tools for Human NeedsKent BeckThe “genie” can amplify healthy or unhealthy development practices. Beck calls for tools that preserve learning, connection and future options.Coding agentsSoftware engineeringDeveloper productivity+1
4 slides20:04EN
GOTO Conferences· Oct 30, 2026Somtochi Onyekwere: Separate Protocol Logic from I/O for Deterministic TestsSomtochi Onyekwere · Fly.ioA Sans I/O design lets a local simulator run thousands of protocol states with virtual time and controlled failures.Developer workflows & testingSoftware engineering
3 slides39:12EN
GOTO Conferences· Oct 28, 2026Cate Huston: How Rigour Supports AI-Assisted Development VelocityCate Huston · TwillA two-person team’s experience with release gates, automated checks, prioritization and the cost of shipping faster.AI engineering leadershipSoftware engineeringAI agents