Onboarding Forensic

Onboarding-Friction Forensic — A Fresh-Eyes Pass Through Envio's Docs

From: Kaustubh Agrawal — Growth Engineer candidate Companion docs: ENVIO_REVENUE_MODEL.md · ENVIO_REVENUE_MATH.md · ENVIO_INDEXER_TEARDOWN.md · ENVIO_GROWTH_PLAN.md · ENVIO_DECK_OUTLINE.md · ENVIO_FIRST_24_HOURS.md · ENVIO_VIDEO_SCRIPT.md

I did the new-user walkthrough one more time, slowly, with a stopwatch. This memo is what I wrote down. Same caveat as the indexer teardown — I'm an outsider reading the public surface. Some of these observations will already be on your roadmap; I'm sharing them because the act of doing the audit was useful regardless, and because a few of them seem like cheap, high-leverage fixes a Growth Engineer should be doing in week one.

Important framing up-front, before anything in the body: Envio's docs are mostly accurate, mostly complete, and mostly correct. The patterns are documented. The Effect API gotcha is called out. The footguns are flagged. What's friction-prone is the path through them, not the content itself. That distinction matters for what to fix and how.


TL;DR — Five Findings

  1. The overview page lands a new user on a feature list, not a problem statement. First-30-seconds problem.
  2. Three competing "start here" entry points (Getting Started / Quickstart / Quickstart with AI) cause decision paralysis at the top of funnel.
  3. The Getting Started page reads as a navigation map, not a tutorial — significant handoffs to external docs instead of an integrated linear flow.
  4. The first tutorial (Greeter) has no success indicator and no time estimate. A new user can't tell if they did it right, or how long it should have taken.
  5. The patterns that production customers depend on (Effect API, dynamic contracts, immutable entity updates) ARE in the docs — but they're not on the first-30-minutes path. The "second 30 minutes" guide is the missing artifact.

The rest of the memo walks each finding with timestamps, the specific page friction, and a proposed fix. None of the fixes require new content. Most are sequencing and signposting.


How I Did This Audit

I reset to "fresh user" mode (cleared the Envio docs from working memory as best I could), opened a stopwatch, and walked the path a developer would take from envio.dev → "I want to try this" → first command. I read each page in the order a real user would land on it, noted what I expected next vs. what actually came next, and timed the gaps where I had to stop and re-orient.

This isn't a comprehensive doc audit — it's a path audit. I'm not flagging every typo or every missing reference; I'm flagging the moments where a fresh user would lose the thread.

Pages I read in order: envio.dev (homepage) → docs.envio.dev/docs/HyperIndex/overviewgetting-startedgreeter-tutorialcontract-import (Quickstart) → event-handlerseffect-api.

Total time, fresh user, just reading the pages: roughly 18–22 minutes. That doesn't include actually running anything. By comparison, my memory of doing this for the first time on Mirror Protocol was that the real first-indexer-up-and-running took me roughly 90 minutes — but most of that was on the doc-navigation side, not the running-code side. That ratio is what this memo is about.


Finding 1 — The Overview Lands on a Feature List, Not a Problem Statement

What a new user sees

Landing on docs.envio.dev/docs/HyperIndex/overview, the page opens with a one-sentence positioning ("HyperIndex is a multichain blockchain indexer"), then immediately presents an 18-item feature list, then a section about API token requirements effective November 2025, then a roadmap, then community links.

There is no narrative on this page. No "you'd want this if…" framing. No "here's the problem we solve" section above the feature list. The feature list comes before any prose.

Why this is a problem

The math memo I sent earlier cited the dev-tools time-to-aha-moment threshold of 5–15 minutes. The first 30 seconds of that window is the attention threshold — the moment a developer decides whether they want to keep reading or close the tab.

A feature list — even a good one — is a poor first 30 seconds for an attention-threshold decision, because feature lists answer "what" before "why." The "why" question is what makes a developer commit emotional momentum.

For comparison, the most-cited dev-tools homepages start with a single sentence problem statement followed by a one-block code example that solves it. Stripe, Resend, Supabase, Clerk, Pinecone — all use this pattern. The feature list comes later, on a separate page.

Proposed fix (cheap)

Reorder the overview page:

  1. Open with a one-sentence problem statement: "You have on-chain events. You want them in a database, fast, queryable, on every chain you care about. That's HyperIndex."
  2. Single GraphQL query block as the next visible element — a working query against an existing customer's indexer, returning real data
  3. Then the feature list
  4. Then the November 2025 token requirements (currently above the fold; should be below the value prop)

Cost: ~30 minutes of someone's time. Half-life: years.


Finding 2 — Three Competing "Start Here" Entry Points

What a new user sees

The sidebar on the overview page shows three top-level entries that all look like they could be the right place to start:

  • Getting Started (/docs/HyperIndex/getting-started)
  • Quickstart (/docs/HyperIndex/contract-import)
  • Quickstart with AI (/docs/HyperIndex/quickstart-with-ai)

A new user has to pick one without enough information to know which is right for them. The names overlap heavily — "Getting Started" sounds the most beginner-friendly; "Quickstart" sounds like the fastest path; "Quickstart with AI" sounds like the modern version. All three sound correct.

This is decision paralysis at the most important moment in the funnel. The dev-tools onboarding canon: the only time you offer a choice on the first page is when both choices have a one-sentence "you'd pick this if…" disambiguator.

Why this is a problem

Decision paralysis at the top of the funnel converts directly into bounce rate. Industry benchmark: every additional decision on the first-page experience drops onward conversion roughly 5–7%. Three competing CTAs is roughly 15–20% conversion drag on the very top of the activation funnel.

This finding alone, if accurate, is potentially the single highest-ROI fix in the entire docs experience.

Proposed fix (cheap)

One of:

  • (a) Pick a single canonical "Start Here" path. Demote the other two into "alternative paths" subsections of that page.
  • (b) Add a 3-line decision tree at the top of the overview: "Got a contract address ready? → Quickstart. Want to use Claude / Cursor? → Quickstart with AI. Want a guided tutorial first? → Getting Started."

Both are cheap. (a) is the higher-conversion play but requires picking a default; (b) is safer if the team can't decide which to anoint.

Cost: ~15 minutes of writing + a small navigation reorg. This is a same-week fix.


Finding 3 — Getting Started Reads as a Navigation Map, Not a Tutorial

What a new user sees

Opening getting-started, the page is structured as four sections:

  1. Indexer Initialization
  2. Initialize Your Indexer
  3. Essential Files
  4. Running Your Indexer

The structure is correct. But the content of each section frequently links out to a separate doc page. Section 3 ("Essential Files") describes config.yaml, schema.graphql, and the event handler file — but tells the user to "refer to the Quickstart guide for a complete walkthrough" rather than walking them through it inline. The page reads like a table of contents pointing at other tutorials.

A new user trying to follow this page sequentially has to open three or four other tabs to actually get to a working indexer. That's the friction.

Why this is a problem

Multi-tab onboarding flows lose users. The drop-off cost per cross-link in a tutorial is roughly 10–15% of users who don't return after clicking through. With four cross-links on a single tutorial page, you can lose half your users between starting and finishing.

Fresh-user expectation when they land on "Getting Started": "This page will take me from zero to a working indexer." What they get instead: "This page will tell you which other pages to read in order to take you from zero to a working indexer."

Proposed fix (more work)

Inline the Quickstart's contents into the Getting Started page. The user reads one page, copies one set of commands, follows one narrative. Other docs become deepening references, not required references.

Cost: ~3–4 hours of writing + restructure. Half-life: years. This is the single largest writing task in the memo and the one I'd most want to own as a Growth Engineer in week 2 or 3.


Finding 4 — The Greeter Tutorial Has No Success Indicator and No Time Estimate

What a new user sees

The Greeter tutorial walks the user from pnpx envio init through to "your indexer is running." The two key commands are:

  1. pnpx envio init — which "generates project structure" (no documented output, no screenshot of the interactive prompts the user will see)
  2. pnpm dev — which "launches Docker containers" and "opens a terminal UI to monitor indexing progress" (no screenshot of what that TUI looks like, no example of what success looks like, no example of what a failure looks like)

The tutorial does not include an estimated completion time anywhere on the page.

The tutorial ends with the indexer "retrieving data" but the user has no way to verify they did it right. There's no "if you see this in your terminal, you're done" checkpoint.

Why this is a problem

Time estimates and success indicators are the two cheapest pieces of content with the largest psychological impact in any tutorial. They tell the user:

  • "You're not stuck — this is supposed to take 12 minutes."
  • "Look for this exact line in your output — that means it worked."

Without them, every minute of confusion feels like potential failure. Every weird Docker warning feels like a reason to bail. The user can't distinguish "I'm doing this wrong" from "this is just how it looks when it works."

Industry benchmark from dev-tools onboarding: tutorials with explicit time estimates and explicit success indicators retain roughly 2× as many users to completion vs. tutorials without them. This is one of the best-validated findings in the dev-tools growth canon.

Proposed fix (cheapest of the five)

At the top of the Greeter tutorial, two lines:

⏱ Estimated time: 12 minutes (8 reading, 4 waiting on Docker)
✅ You're done when you see: <specific log line>

At the bottom of every step, the expected output. Even one-line "you should see something like:" examples make the tutorial 3× easier to follow.

Cost: ~45 minutes of writing + a screenshot or two. Half-life: years. This is the single highest-ROI doc fix in the entire memo.


Finding 5 — Production Patterns Are Documented, But Not On The First-30-Minutes Path

The calibration

This is the finding I'm most careful about, because reading the indexer teardown might suggest the docs don't cover the patterns Velodrome and Sablier use. They do. Specifically:

  • The "Event Handlers" page explicitly calls out the handlers-run-twice gotcha at the very beginning of its Preload Optimization section, with a warning, and links to a dedicated "Double-Run Footgun" doc.
  • The Effect API has its own dedicated subsection under External Calls with a code example.
  • The entity-update spread-syntax pattern is documented in "Updating Specific Entity Fields."
  • Dynamic contract registration is linked from the Advanced Use Cases section.

So the patterns are present. The friction is that none of them are encountered during the first-30-minutes path. A user who follows the Getting Started → Greeter Tutorial → Quickstart path gets to a working single-event indexer without ever meeting any of these patterns. The first time they encounter them is when something breaks at scale, often weeks or months later.

Why this is the deepest finding

Three of the four finalists in the indexer teardown — Sablier's preload pattern, Velodrome's CLAUDE.md gotcha list, the Effect API caching trick — all exist because customers had to figure out these patterns by hand or by trial-and-error, even though the documentation technically contains them.

The pattern: documented ≠ on-path. The docs are reference material; the onboarding flow is the path. They serve different purposes. The fix is not new content; it's a guided path through the existing content that exposes new users to the production patterns at the moment they're most likely to internalize them.

Proposed fix (this is Play 1 in the strategy memo)

The "First Indexer in 30 Minutes" pillar artefact has a natural sequel: a "Production-Grade Indexer in the Next 30 Minutes" guide. Same shape — a single linear path — but one that walks the user through:

  1. Effect API for any external call (5 min)
  2. Entity-cache-first pattern in handlers (5 min)
  3. Dynamic contracts via factory events (10 min)
  4. Aggregator + snapshot architecture for derived state (10 min)

Each section starts with a real example pulled from Sablier or Velodrome's open-source code. The user finishes with an indexer that has the shape of a production-grade indexer, not just a working one.

Cost: ~2 working days for the first version. Half-life: years. This is the single largest leverage point in the strategy memo, and it's the artefact most uniquely suited to a Growth Engineer's first month.


Cross-Cutting Observation: The Time-to-Aha Math, Re-Run

The math memo earlier put the activation lever as roughly one paid customer per 230 recovered signups at industry-standard conversion rates. That math assumed a 25% recovery rate on non-activators.

After this audit, I'd revise the recovery-rate estimate upward, not downward. Most of the friction I found is fixable in a single working week of effort. The activation lever's ceiling depends on how badly users are getting stuck — and based on this audit, the stuck-points are concentrated, identifiable, and cheap to fix.

If I had to put a real number on it: a docs reorg targeted at findings 1, 2, and 4 above could plausibly recover 35–40% of non-activators rather than 25%. The two biggest fixes — overview reorder and time-estimate-plus-success-indicator on the Greeter tutorial — are each well under a working day. They are the cheapest dollar of incremental ARR Envio can generate.


What I'm NOT Saying

A few things that this memo deliberately doesn't say, in case the framing reads sharper than intended:

  • I'm not saying the docs are bad. They're not. They cover the patterns, they're technically accurate, and the writing is clear at the page level. The friction is at the path level — sequencing, signposting, time-budget-setting. Different problem, easier fix.
  • I'm not saying these are unknown to the team. I'd be unsurprised if every finding here is on an internal doc-team backlog already. The question for our discussion is whether a Growth Engineer's bandwidth on these is the highest-leverage use of the role's first month — and from my outside vantage point, the answer might be yes for the first three findings.
  • I'm not auditing every doc page. I read the path a fresh user takes. Reference docs, advanced patterns, specific feature pages — those weren't part of this audit and aren't being commented on.

What This Audit Tells Me About The Role

Two things. First: the gap between Envio's docs and an obviously-better version is not large, but it's high-leverage to close. None of the fixes above are net-new content; they're all sequencing, time-budgeting, success-indicator-adding, and inlining. A single Growth Engineer with editorial judgement could implement findings 1–4 in two weeks of focused work, with the docs team's signoff. That's not a six-month roadmap; that's a sprint.

Second: the "second 30 minutes" production-patterns guide is the artefact I'd most want to ship in week three. It connects directly to the indexer teardown — Sablier and Velodrome's open-source code is the reference material for it — and it's the asset that turns "first indexer working" customers into "production indexer running" customers, which is the single most important conversion in the whole funnel.

If we end up working together, I'd want to come back to this memo in week one with the team's reactions, prune what's wrong, prioritize what's right, and start on finding #4 the same week. That fix alone — adding time estimates and success indicators to the Greeter tutorial — is the cheapest dollar of incremental conversion in the entire activation funnel, and I'd be embarrassed not to ship it in the first week.

— Kaustubh