Jason Hyde Contact Jason

The build journey · April to November 2026

A biologist meets the tools that could build what he saw

I came to software from 30 years of production and research in living systems, not from engineering. In April 2026, AI coding agents made it possible for me to build the instrument I had wanted for a long time. This is how that went: what I wanted, what the models taught me, where we met, and what it says about how I make decisions. Every turn is dated from the repositories and from the working notes I kept along the way.

00 In short

Four things I believe now that I did not in April

1

Write the rules before the code

Agents drift. Written principles were the one thing that stayed constant across hundreds of sessions.

2

A messy repo becomes a messy product

When the record stops being reconciled, the product loses its center of gravity. It shows up in the prompt before it shows up in the app.

3

Instructions guide; code enforces

The model changed most when I controlled what reached it and where, not when I reworded what it was told.

4

Trust the test, not the claim

Expectations frozen before each run, and a record of what was disproven, so no one reopens a dead end.

The pace

Commits per month across the app and server repositories

Source: git history of both repositories, all branches, April 26 to November 7, 2026. July was the busiest month and the month the project drifted most. Build 38 shipped at the end of September.

01 The journey

Nine chapters, from a biologist's problem to what is still open

  1. 01Before the code

    A biologist's problem

    Fish hatcheries, insect, yeast and algae protein, a ten-year edible-flower farm. In every one of them, the knowledge that saved a crop was learned from loss, usually standing next to someone who had already lost one. Most people never get that person. I wanted an instrument that reads the conditions where you actually grow, remembers what happened to you, and is needed less as you get better.

    What a reader learns about meI start from the job a product does for one person, and I measure success by what that person can do without it.

  2. 02Apr 23 – May 16

    Meeting the tools, and writing rules to keep us both honest

    AI coding agents meant I could finally build it. They also forgot everything between sessions and drifted whenever I let them. So before most of the code existed, I wrote down what the product was and was not, and made every agent start from it. A biologist keeps a field notebook; this was mine.

    • A short vision statement pasted at the top of every new AI session: a quiet digital companion for the heart that both nourishes and enlightens.

    • First commits. A project rules file is in the first one: Read it before touching any file.

    • Design principles: one screen, no menus, no tabs, no gamification, a dark background with one living element, the user in charge.

    • A constitution file at the repo root for any coding assistant. The product does not exist to maximize engagement, screen time or feature count.

    • The project doctrine, version 1, and the name STOMEL, after the stoma, the breathing pore of a leaf.

    What a reader learns about meI decide what a product refuses to be before deciding what it does.

  3. 03Apr 25 – May 20

    Learning what a model cannot see

    My first vision was enormous, and the models went along with all of it. That was the warning: a language model will describe a reading it never took. I narrowed the product to what could be measured and kept the rest out.

    Wanted
    3D LiDAR scans of the garden, fruit sugar read through the camera, pests heard through the microphone, a 90-day yield and return forecast.
    Learned
    A phone and a language model cannot measure any of that reliably.
    Where we met
    Plant state computed on the phone from measured local weather. The model reasons only over the grower's own records. One job: be useful enough today to be opened tomorrow.
    “It teaches you to notice pressure before it takes form. Plants is just the easiest subject to teach it with… I built it and it did that to me before I shipped a single feature to anyone else.”My notes, May 20, 2026
  4. 04May 24 – Jun 28

    Choosing models the way I would choose a seed variety

    You do not pick a variety from the catalog photo. You plant it in your own ground beside the others and watch. I did the same with models: same questions, same conditions, scored side by side.

    Wanted
    An assistant whose behavior survives a change of model, and a voice that is warm and brief.
    Learned
    May 24: the same 10 questions went to Grok, DeepSeek and Claude, scored on 8 categories, and chat moved to DeepSeek the next day. Replies still ran long. Halving the system prompt did not shorten them, and another model gave the same length at about 10× the cost.
    Where we met
    June 23: the system prompt's stance changed to “state the cause and stop.” A typical answer went from 786 to 238 characters, with full detail still available on request. By June 28, Founder Lab ran every model through the same benchmark with tokens, cost and latency recorded.

    What a reader learns about meI would rather run a small fair test than trust a reputation, mine included.

  5. 05June – July

    When the project lost its center

    Speed has a cost. By July the agents and I were committing faster than anyone was reconciling, and the product began to drift in ways the app did not show yet. I noticed it in my own notes before I saw it in the code.

    • The project rules file had drifted from the code: it named files that no longer existed and the wrong chat model. I retired it for one entry document, an architecture reference, a current-state file and an investigations log.

    • My note: farther from it now than a month ago; the lab is overkill and confusing the goal. The reset: the public site is the spec, the repo is how to get there. The real blocker was plain infrastructure; the server still ran on my home network.

    • 309 commits. A bare “Hey” could arrive with 18 prompt sections attached, and 33 replies stalled for more than 15 seconds.

    • An agent session made unreviewed changes while TestFlight testers were live. I had a fresh agent check the raw diffs: Do not trust any prior AI's summary — verify everything yourself.

    • A prompt-caching refactor moved one instruction out of last place, and memory writes failed in production.

    What a reader learns about meI can see drift in my own work and say so plainly, which is the first step to stopping it.

  6. 06Late July onward

    Keeping a record the way a lab does

    The fix was the oldest habit in biology: write down what you did, what you expected and what happened, and go back and check. Reconciliation stopped being a cleanup and became maintenance.

    • A read-only audit of the whole project. The same day I proposed writing this retrospective: what we believed at the start, which ideas died, and what survived.

    • Independent audits by several AI models, ranked by agreement; one “independent” auditor had copied another's scores, and that went in the record too. An audit of my own rules called them unusually mature at its foundation and unusually thin at its frontier.

    • Paid tests with expectations frozen beforehand, spend caps and blind scoring. A do-not-reopen list for disproven ideas. A census of 1,207 logged turns found eight prompt sections that never reached the model.

    What a reader learns about meI write down why a decision was made, so the next person, or the next agent, does not have to guess.

  7. 07August – September

    Instructions guide; code enforces

    Early on I believed a rule written clearly enough would be followed. By August I had watched the model ignore some, over-apply others and claim work it had not done. The rules stayed. Where they live, and what enforces them, changed.

    Wanted
    Rules the model follows exactly as written.
    Learned
    A saved preference sitting 20 turns up in the system prompt was ignored six replies in a row. “Say less” was applied so broadly the model denied memory it was holding. Asked to delete 12 preferences, it said “Done. All twelve are gone.” before anything was deleted.
    Where we met
    August 7: Prose adjudicates. Capture witnesses. Code enforces. Preferences moved next to the user's message (Sep 7), changes are applied before the model replies (Sep 15), and a small second model, Jev, decides when a memory lookup should run (Sep 20: missed lookups 4 to 0 on 31 test messages).
  8. 08June – September

    Memory is evidence, not truth

    A good grower trusts the field over their own memory of it. I had to build the same discipline into the app, because the model trusted its own earlier words over everything else.

    Wanted
    An assistant that never forgets what happened in your garden.
    Learned
    June 11: the end-of-conversation summary wrote into memory that I was grieving a dog, copied from an example sentence in its own prompt. Later the model cited its own unsupported claims as fact, and none of five prompt-wording fixes stopped it.
    Where we met
    The raw conversation journal is the evidence. The model's own past claims are withheld from “what happened” questions (shipped Aug 11). Season summaries are designed so STOMEL presents its reading first, the grower corrects it, and only then is it saved.

    What a reader learns about meThe responsibility stays fixed; the manner adapts. Adaptation is allowed. Abandonment is not.

  9. 09Sep 27 – Nov 7

    Shipped, and still learning

    • Build 38 on TestFlight, five months after the first commit. That month: median reply 1.7 s, 95th percentile 3.8 s, about $0.0013 in model cost per exchange.

    • A frozen, blind paid test: placing the app's search result after the user's question took the found-records case from 0 of 3 to 3 of 3 faithful replies. Not shipped yet.

    • CI on every push in both repositories: 197 of 198 suites pass, and the one red is a real data gap, left red on purpose. The server host still deploys without waiting for CI; that is next.

    Wanted
    Faithful answers about past conversations from the records the app finds.
    Learned
    The model still trusts its own earlier replies over found records. Six fixes were tested and closed without success.
    Not met yet
    One candidate passed a small blind test. It needs a larger set before release.
Taste and judgment

What the journey says about how I work

  • One screen, short answers, nothing that exists to keep you in the app. Success is the user needing it less.

  • When a model could not truly do something, I cut it rather than let it pretend.

  • Models, prompts and agents' own reports all get checked against evidence before anything ships.

  • Every change of direction has a dated reason, including the ones that went wrong.

Hindsight

What I would do differently

  • Put real growers on it sooner. I spent months on principles and internal tooling before outside testers, and their use would have settled some debates faster.

  • Turn on continuous integration on day one, not in month seven.

  • Measure before writing rules. Several early rules assumed model behavior that later tests disproved.

  • Use plain engineering names from the start. My early metaphorical names for parts of the system shaped how the agents reasoned about them, and translating back cost time.

Source: git history of the STOMEL app and server repositories, the project's dated records, and my working notes from April to November 2026. Most measurements come from my own use. The repositories are private.