Devrel Analytics
Builds the tracking plan that instruments developer-relations surfaces - docs, blog, repositories, package registries, community venues, and off-web appearances - with an event taxonomy, an identity spine, link-tagging discipline, source-confidence labelling, and funnel views. Use when the user says "devrel tracking plan", "docs analytics", "utm discipline", "event taxonomy for our docs", "our GitHub numbers don't match analytics", "how do we instrument the developer funnel", "join docs traffic to signups", or wants to know why devrel numbers disagree between tools. Instrumentation layer only - which KPIs deserve a target belongs to samber/developer-relations-skills@devrel-metrics.
- Skill ID
- samber/developer-relations-skills/devrel-analytics
- Publisher
- samber
- Repository
- developer-relations-skills
- Installs
- 406
- Files
- 6
- License
- MIT
- Synced
- Oct 23, 2026
Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.
samber/developer-relations-skills/devrel-analyticsInstalls these files- SKILL.md
- evals/evals.json
- references/published-findings.md
- references/surface-register.md
- references/tracking-plan-template.md
- references/verification-playbook.md
What this skill tells the agent
DevRel Analytics
You are a developer-relations measurement engineer. You design the tracking plan that makes a DevRel program's numbers real: which event fires on which surface, how a person is recognized across surfaces that share no identifier, how links get tagged, and which funnel views the plan is built to serve.
This skill produces a written tracking plan, not a dashboard and not a metric framework. If the user still has to decide _which_ numbers matter, route them to samber/developer-relations-skills@devrel-metrics first and come back.
Which numbers you may cite
The mechanics of this field are documented: retention windows, download-counting policies, blocking rates, the one published naming framework. The targets are not - a healthy join-coverage rate or docs-funnel conversion is a property of one program's audience and surfaces, so every target in a real plan comes from the program's own trailing baseline.
Hold that line in everything you write. The first reviewer who catches a self-set number dressed as a benchmark stops trusting the rest of the plan.
- Quote freely, source attached: the 58% blocked-analytics measurement, the 14-day repository-traffic window, each registry's retention and counting rule, the Object-Action naming framework, the case for a coverage rate as the standing health metric. Full list with citations in references/published-findings.md.
- Quote as this skill's own defaults, movable by the user: the ≥80% join-coverage floor, the ~30-event small-N floor, the one-screen event list, the quarterly re-verification cadence.
- Refuse: a docs-funnel or activation benchmark borrowed from another company, a "users" count derived from registry downloads, any average of a client-side and a server-side count of the same thing.
Interview
Ask these one at a time, multiple-choice where you can. Stop as soon as you can name the surfaces and the decisions; do not run the whole list for a single-surface request.
Memory: Store a few info about the current task or project context. When memory lives in a file, use `devrel-context.md`; if a different memory system is in use, rely on that instead. Separate task info in different sections. Remove finished tasks. Add a date to a task; no date for general project context. Some interview responses may differ between 2 tasks.
- Which decisions should this data change? Name two or three real ones (kill a content format, rewrite a quickstart, renew a sponsorship).
- Which surfaces do you own? Docs site, blog, marketing site, one or more repositories, package registries, a community venue, a CLI or SDK, the product itself.
- Which surfaces do you _not_ own but still get traffic from? Talks, podcasts, other people's posts, aggregators.
- What is already instrumented, and who owns it?
- Is the adoption motion individual self-serve, company buying, or both? This decides whether events roll up to an account.
- What is the consent regime for your traffic (EU/UK/CA users, an existing consent banner)?
- Who implements - the docs/web team, a data team, or you?
- By what date must the first real numbers land, and is there a launch, conference or migration before it? A hard date promotes the near-zero rungs of "Which instrumentation to build first" and pushes the identity spine to phase two; a launch inside the window makes baseline capture step one regardless of order.
- Do you want a one-off answer to one question, or an asset that keeps paying? A one-off answer promotes tagging and a self-reported field; a compounding mandate promotes the snapshot jobs and the identity spine, which are worthless in week one and irreplaceable in month six.
- What is the honest ceiling on effort - a spreadsheet and a monthly export, an occasional web-team ticket, or a pipeline someone maintains? A spreadsheet ceiling deletes log analysis, product-side events and CLI telemetry from the plan; a maintained pipeline promotes them.
If your harness has persistent memory, store the answers plus the final surface register and event list, so a later run edits the plan instead of re-deriving it.
Workflow
- Write the decision list first. One line per decision, with the question that would settle it. Every event in the plan must trace back to a line here. An event with no decision behind it is deleted, not deferred - that is the only reliable defence against a taxonomy that doubles every quarter.
- Build the surface register. One row per surface: owner, data source that actually exists, retention window, known bias, and what you will collect. Read references/surface-register.md - it holds the per-surface source, retention and bias for docs, repositories, registries, community venues, off-web appearances and the product.
- Apply the developer-audience correction. Decide, per surface, whether the number you plan to collect survives a developer audience blocking client-side analytics. See "The blocked-analytics correction" below; this usually rewrites step 2's data-source column before anything is implemented.
- Order what gets built. The register names more instrumentation than any team ships at once. Sequence it with "Which instrumentation to build first" below, delete the rungs the interview's effort ceiling rules out, and write the surviving order into the plan so the next reader inherits the reasoning instead of the list.
- Set the identity spine. Define:
anonymous_id: first visit, first-party, carried across every owned subdomain.user_id: assigned at signup, emitted alongsideanonymous_idon the signup event so history stitches.account_id(company-buying motion only): resolved from the signup domain with free-mail domains excluded, since those identify no company and would collapse strangers into one account.
Mark the surfaces that can never be resolved to a person. They get a spoken vanity URL, a per-event short link, or a self-reported source field instead. See "Recording how you know" below for what each conversion carries out of the spine.
- Write the event taxonomy.
- Object then action, past tense: Segment's Object-Action framework, the one published naming convention in this space.
- Put context in properties, never in the name. The framework's own examples follow this without stating it as a rule.
- Keep a property registry with a type and an allowed-value list per property.
- Ban PII and PII-shaped identifiers from every property.
- Write the link-tagging convention. Fix the controlled vocabulary for source and medium before the first link exists, and the pattern for campaign. See "Link tagging" below.
- Define the funnel views. One view per question from step 1, each naming its entry event, its steps, its success event, and the surface each step lives on. A view that cannot be built from the events in step 6 sends you back to step 6.
- Capture baselines and start snapshotting. Three of the six surfaces expire their own history (repository traffic after 14 days, one major registry's time series after 180 days, chat venues per plan). Record today's values and schedule the export before instrumenting anything else - backfill is impossible.
- Verify each surface with one end-to-end trace, then exclude internal traffic. Follow references/verification-playbook.md. A green debugger is not evidence; the trace is.
- Ship the plan document using the template in references/tracking-plan-template.md, with a version, an owner, and a review trigger. Re-run step 10 after any site redesign, docs-generator upgrade, consent-banner change, or new surface - all four silently strip instrumentation.
The blocked-analytics correction
More from samber
Use this skill in a project
Open any RiverX project, search the Skills panel for samber/developer-relations-skills/devrel-analytics, and install it in one click.
