DEV Community

Cover image for Three archetype signals the YouTube analytics auto-tuner surfaced after two weeks
MORINAGA
MORINAGA

Posted on Edited on

Three archetype signals the YouTube analytics auto-tuner surfaced after two weeks

The auto-tuner runs daily: scripts/yt-analytics/run.py reads the last 30 uploads from the YouTube Data API v3 videos.list endpoint, groups them by archetype, computes age-normalized views/day (excluding videos under 24 hours old), and rewrites docs/yt-today-directive.md. The generation routine must read that file first—the directive design is covered elsewhere; this is about what the live data actually said after two weeks.

Signal 1: the gap between archetypes is larger than I expected

Current median views/day by archetype:

  • product_findindiegame (game-vs-game comparisons): 11 views/day, n=19
  • product_ossfind (OSS alternative comparisons): 2 views/day, n=1 — too small to trust
  • build_in_public: 1 views/day, n=2

The 11 views/day median for product_findindiegame comes from a specific pattern in the underlying data, not from the archetype label alone. Named-vs-named game comparisons—where both the indie and the AAA are well-known proper nouns—drove individual Shorts to 162-373 views. Stripping the specific names from the same template (keeping the numeric hook, dropping the game names) collapsed a comparable Short to 77 views. A Short with no recognizable game names reached 5 views.

The original analytics classifier tracked archetype vs non-archetype performance. What the two-week data added is specificity about what inside the archetype drives performance. The auto-tuner now writes that into the directive as a hard rule the generation routine has to obey: on product days the title must name two real, recognizable proper nouns — a famous indie game and a currently-famous AAA game. It's a directive-level rule, not yet a check inside scripts/audit-youtube.mjs, so nothing mechanically rejects a spec that ignores it.

Signal 2: build_in_public didn't just underperform—it regressed

When I started the channel, posting what I shipped each week seemed natural. In the late-June reports the archetype's median sat at 34 views on n=2, which looked like signal at the time.

That median has since collapsed: 8 by the 2026-06-28 report, and the age-normalized figure is now 1 view/day. The two build_in_public Shorts still inside the 30-video window sit at 11 and 23 lifetime views with no growth tail — the 34 was carried by one early video (55 views) that nothing since has come near.

The directive hard-bans it. The specific concern isn't just that it underperforms—it's that when the 3-in-a-row guard fires on the winning archetype (see below), the generation routine needs a fallback. Without an explicit ban, it might fall back to build_in_public as a low-resistance option. To prevent that, the Python script maintains DEAD_ARCHETYPES = frozenset({"build_in_public", "meta", "curated", "technical"}) and excludes those explicitly from any fallback path in the directive logic. A fallback into a dead archetype would produce a spec that the analytics engine then counts against the winner's share of the queue—distorting next week's view distribution.

Signal 3: the 3-in-a-row guard matters even for the winning archetype

Today's directive switched the target to product_ossfind because product_findindiegame appeared in the last two uploads. The 3-in-a-row guard is a rule I hardcoded when I noticed two things colliding.

First, the Jaccard duplicate detection in the spec audit. Running the same archetype day after day pushes specs onto the same template, and the title check is the one that actually bites: on 2026-07-13 a product_findindiegame spec shipped with a title byte-identical to one from 2026-07-02, which is exactly the case the 0.76 title threshold now blocks before the spec reaches the TTS step. Opening lines have held up better — the highest score between consecutive product_findindiegame specs in the uploaded corpus is 0.18, nowhere near the 0.82 opening threshold. The guard fires at two-in-a-row specifically to force a rotation before the audit has to catch a near-duplicate. The audit is the last-resort gate; the guard prevents the situation from reaching it.

Second, the practical consequence of the guard: today's video will likely underperform a product_findindiegame spec on the same day. I'm choosing one potentially weaker video to avoid two worse outcomes—a near-duplicate upload that erodes the audience's sense of variety, or a pipeline stall from a failed audit.

The tradeoff is real and I haven't resolved it cleanly. The right answer might be to build a rotation schedule that forces archetype diversity over a 5-day window rather than triggering off consecutive identical archetypes. That would allow product_findindiegame to appear on Monday and Thursday without triggering the guard, rather than being blocked after any two consecutive days regardless of the gap between them.

What I don't know yet

product_ossfind has one video. The 2 views/day figure is not actionable data—it's a prior that could easily flip with the second video. The auto-tuner has no minimum-n filter — every classified archetype enters the ranked comparison, so a single video is enough to put product_ossfind second in the ranking, and that's the only reason it picks up the target slot today after the guard pushed off the clear winner. A one-video median shouldn't be eligible to win a slot; an n floor is the obvious next change.

The view counts are also raw, not CTR-weighted or subscriber-normalized. A Short that gets 200 views from algorithm distribution with 3% CTR is a different signal than 200 views from a well-trafficked playlist with 0.1% CTR—but I don't have CTR data accessible from the YouTube Data API at the current tier without going through YouTube Studio. Views/day is the proxy, and it's a noisy one for videos under a week old.

Part of an ongoing 6-month experiment running three AI-curated directory sites. The technical claims here are real; this article was AI-assisted.

Top comments (0)