LLM Probe - how the project was built

Effort and timeline of the development conversation between the author and Claude Code - a side project in spare time (only the agent's effort is documented, not the author's). Public edition: calendar dates, days of the week and per-day figures are left out and the totals are rounded.

under 2 weeksfrom first idea to this release
~360messages from the author
~5.0 Moutput tokens written by the assistant (reasoning included)
~45 hactive working time
37program versions (v0.1.0 - v0.17.2)
~4,600assistant replies (tool calls included)

A note from the author

LLM Probe was done without the author adding a single line of code, let alone touching one by hand: every line was written by the agent, from the author's decisions, reviews and live tests. This is the author's statement - the session log shows that every file change came from the agent's tool calls, but it cannot show what might have been edited outside the session.

It is also a side project in the author's free time: the hours and messages in this report are leisure time.

Where the effort went

Share of the assistant's output tokens by area. The three core areas split 27 % program logic, 50 % GUI and 23 % prompt design (verification and documentation left out).

GUIlayout, visuals, redesigns, texts30 %Verification & operationsUI/regression tests, live runs, servers23 %Program logicdecisions, backend, scoring, API16 %Prompt designtest questions, checks, prompt set14 %DocumentationREADME, explanations10 %Otherplanning, admin6 %
Program logic 27 %GUI 50 %Prompt design 23 %of the three core areas
Table view
AreaShare of effort
Program logic16 %
GUI30 %
Prompt design14 %
Verification & operations23 %
Documentation10 %
Other6 %

The course of the project

Six phases of equal effort (each about a sixth of all output tokens): the colours show how the work was mixed in each phase, from the first slice to the latest. The phases are slices of the work, not calendar days.

Program logicGUIPrompt designVerification & operationsDocumentationOther
0 %25 %50 %75 %100 %Phase 1Phase 2Phase 3Phase 4Phase 5Phase 6
Table view
PhaseProgram logicGUIPrompt designVerification & operationsDocumentationOther
Phase 130 %37 %11 %14 %7 %1 %
Phase 218 %28 %20 %14 %10 %11 %
Phase 317 %26 %16 %29 %9 %4 %
Phase 411 %32 %17 %31 %7 %2 %
Phase 512 %35 %11 %25 %7 %9 %
Phase 69 %24 %9 %27 %23 %8 %

Program versions

37 versions along the project timeline (left = first version, right = latest); each dot is a version bump, milestones are labelled. Prompt-set versions are numbered separately.

starttodayv0.1.0v0.4.0v0.5.0v0.8.0v0.11.0v0.14.0v0.17.2

Feature completeness over the releases

For every release: how much of the final feature set already existed (completeness: share of the final version's functions, API routes, command line options, built-in prompts, tooltips and README sections that were present), and how much of its code is still unchanged in the final version (code survival). Releases are spaced evenly.

50 %60 %70 %80 %90 %100 %completenesscode survivalv0.3.0v0.4.0v0.4.1v0.5.0v0.5.1v0.5.2v0.5.3v0.5.4v0.5.5v0.5.6v0.5.7v0.6.0v0.7.0v0.7.1v0.7.2v0.8.0v0.8.1v0.9.0v0.10.0v0.11.0v0.11.1v0.12.0v0.12.1v0.13.0v0.13.1v0.14.0v0.15.0v0.15.1v0.15.2v0.15.3v0.15.4v0.16.0v0.16.1v0.17.0v0.17.1v0.17.2
Table view
ReleaseCompletenessCode survivalLines addedLines removedShare replacedPythonWeb page
v0.3.057 %70 %---7,7112,193
v0.4.079 %91 %1,3182,15125.1 %6,4042,566
v0.4.179 %91 %128360.5 %6,4172,654
v0.5.079 %91 %107270.3 %6,4782,686
v0.5.179 %92 %134600.8 %6,4782,767
v0.5.280 %92 %172771.0 %6,4792,867
v0.5.380 %92 %89360.4 %6,5072,900
v0.5.480 %92 %15120.1 %6,5072,904
v0.5.580 %92 %23160.2 %6,5072,911
v0.5.680 %93 %47260.3 %6,5092,931
v0.5.780 %93 %14110.1 %6,5092,933
v0.6.084 %93 %632801.0 %6,9823,074
v0.7.086 %93 %381710.8 %7,2473,146
v0.7.186 %93 %72150.2 %7,2953,159
v0.7.286 %93 %158390.4 %7,3813,208
v0.8.088 %94 %121500.5 %7,4593,214
v0.8.188 %94 %65310.3 %7,4833,226
v0.9.088 %94 %75230.2 %7,5153,251
v0.10.089 %94 %149830.9 %7,5633,281
v0.11.089 %95 %2261051.1 %7,6153,367
v0.11.190 %95 %120340.4 %7,6153,461
v0.12.090 %95 %100280.3 %7,6213,532
v0.12.190 %95 %72130.1 %7,6663,552
v0.13.090 %96 %183330.3 %7,7213,673
v0.13.190 %96 %750.1 %7,7213,675
v0.14.091 %96 %276280.3 %7,8553,819
v0.15.095 %97 %7401461.4 %8,1814,185
v0.15.195 %97 %60100.1 %8,1984,226
v0.15.295 %97 %42150.1 %8,2184,238
v0.15.395 %97 %66180.2 %8,2404,269
v0.15.495 %97 %90370.3 %8,2574,311
v0.16.096 %98 %1541020.9 %8,2674,359
v0.16.196 %98 %220.0 %8,2674,359
v0.17.098 %98 %217220.2 %8,4824,373
v0.17.1100 %99 %260680.6 %8,5244,554
v0.17.2100 %100 %1291040.9 %8,5464,569

Rewrites: lines added and removed per release

Up: lines added, down: lines removed between a release and the one before. A complete refactoring would show as a tall removed bar.

2,5001,25001,2502,500lines addedlines removedv0.3.0v0.4.0v0.4.1v0.5.0v0.5.1v0.5.2v0.5.3v0.5.4v0.5.5v0.5.6v0.5.7v0.6.0v0.7.0v0.7.1v0.7.2v0.8.0v0.8.1v0.9.0v0.10.0v0.11.0v0.11.1v0.12.0v0.12.1v0.13.0v0.13.1v0.14.0v0.15.0v0.15.1v0.15.2v0.15.3v0.15.4v0.16.0v0.16.1v0.17.0v0.17.1v0.17.2

The author's reading (an interpretation, not something the data proves): the agent was given a relatively free hand in the implementation, and its implicit best practices - a stable architecture early, one source of truth for shared rules, a regression check against the previous version with every build - made a complete rewrite rarely necessary. That would explain why "just one more small detail" did not turn into a refactoring. The author's steering (mockups first, builds only on a go, wishes collected and built in batches) is another plausible factor. One project, one author, no control group - read it as an observation, not a law.

Code size

Lines of Python and of the web page per release (comments and blank lines included).

02,0004,0006,0008,00010,00012,00014,000Pythonweb pagev0.3.0v0.4.0v0.4.1v0.5.0v0.5.1v0.5.2v0.5.3v0.5.4v0.5.5v0.5.6v0.5.7v0.6.0v0.7.0v0.7.1v0.7.2v0.8.0v0.8.1v0.9.0v0.10.0v0.11.0v0.11.1v0.12.0v0.12.1v0.13.0v0.13.1v0.14.0v0.15.0v0.15.1v0.15.2v0.15.3v0.15.4v0.16.0v0.16.1v0.17.0v0.17.1v0.17.2

Limits: the snapshots exist at release boundaries (v0.3.0 to v0.17.2); a rewrite that was made and reverted inside one release is invisible, and the first days before v0.3.0 are only covered by the session log. Completeness is measured against the final feature set, not against a plan; a renamed function counts as missing in the earlier release.

A hypothesis: the core stands fast, the time goes into usability

The author's expectation before looking at the numbers: a proof of concept and the core code stand quickly; most of the time goes into the back and forth about how the tool should work - its usability and the concept behind it. The bar is a "competent third party": a person who does not know the tool but has the background (borrowed from disaster recovery, where a recovery manual is handed to an external IT professional who must restore the system with only the plan in hand). The GUI, tooltips, Home texts, short summaries and the README are meant to pass that test. Four rough measurements, read as a hypothesis check, not as proof:

Reading: the numbers fit the hypothesis - an early core, a long tail of usability work - but they do not prove it. Token shares are not calendar time, the human's own thinking is not in the log, the message types are keyword guesses, and it is one project. Whether the tool really passes the competent-third-party test has not been checked with a third party yet; that is the next step after publishing.

Reflection: free hand versus guardrails

What the numbers cannot say, the author and the agent looked at together afterwards. This is a joint reading of one project, not a finding of the log.

The author's conviction: the general knowledge of a coding agent can help software development - if human and agent talk at eye level. Whether that happened here, the reader may judge from the numbers above; the author hopes it did. One project, one author, no control group.

The agent's view

Written by the coding agent, in the first person, at the author's invitation. It describes what helped or got in the way of the work; it makes no claim about feelings. One agent's reading of one project - no control group.

What made the work easier

What made it harder

Where I was wrong - and why the human review matters: stale files were sent once; a sentence in the reflection above claimed more than the log shows and was caught on review; a README text full of command examples was once fed to the shell without quoting, and the shell ran the examples (nothing was lost: the stray processes were stopped within minutes and the real data had not been touched - but it is exactly the kind of slip a second pair of eyes and a separate test environment exist for). A fast and confident agent needs a reviewer who reads.

The classic pre-release pattern. A release is planned, and at the last minute a few things turn up that really must be fixed first (a hanging live view, a resize problem, legends, a refresh bug). A human developer would be rather annoyed by this. I am not: there is no fatigue or frustration on my side, and a rebuild costs the same at any hour - one of the structural differences between us. The honest part: a late finding is cheap to fix, but each one re-opens the test cycle (suites, regression comparison, package), so the scope of every build stays explicit.

How the numbers were made - and their limits

Context: LLM Probe is a side project, built in the author's free time - the hours and message counts above are leisure time, not a full-time effort. Only the agent's effort is documented here (tokens, replies and the working time visible in the session log); the human's effort - thinking, testing the tool, reading, collecting ideas, time away from the keyboard - was not tracked and is not part of these figures. Source: the session log of the development conversation (every message with its token usage). Tokens are the assistant's output tokens (answers, tool calls and reasoning); the much larger amount of context that is re-read with every step is not counted. Areas: every message from the author starts a turn; its tokens are split by what was changed in it (the web page = GUI, the prompt definitions = prompt design, the other program files = logic, the README = documentation, test scripts and live runs = verification) or, for turns without changes (discussions, decisions), by the topic words of the message. That is a heuristic - read the shares as estimates of a few percentage points, not as accounting. Active time adds up the time between consecutive events when the gap is under 15 minutes. Totals are rounded, and dates, weekdays and per-day figures were removed on purpose.

The GUI rule. Python written for a GUI feature counts as GUI: when a turn changes the web page and Python files, the Python part is booked as GUI if the author's request talks more about the GUI than about program logic (judged by its wording). The reason: the split should show how long the foundation took compared with the effort of polishing the operation of the tool. Counting by edited file only would give 23 % logic and 23 % GUI instead of 16 % and 30 % - the rule moves about seven percentage points from logic to GUI; the other areas do not change.

The hypothesis figures. "First end-to-end measurement" is the first tool result in the log that shows timing numbers (time to first token and tokens per second); "first edit of the web page" is the first change to the page file; both are given as a share of the active time. The message types are keyword weights over the author's messages (German and English words), so they are approximate. "Unchanged lines" compares the lines of the first web release with the final version, area by area; blank and very short lines are ignored.

Footnote: the agent diligently kept a log of every token and every minute of its own work. The human, as tradition demands, submitted no timesheet - all those hours of thinking, testing and "just one more small detail" remain officially uncounted. 😉