Indie developers treat analytics like tests: important, easy to skip, painful when missing. GA4’s default pageview stream is not enough once you ship auth, billing, and feature flags. You need a small event contract — signup_completed, trial_started, feature_activated — and a way to verify events after each deploy without opening four browser tabs. This is the setup /for/solo-developers use before they hire growth.
Start with an event contract in the repo
List every event name, when it fires, and required parameters in TRACKING.md or AGENTS.md. When you rename a button component, grep for the event name before merging. Most broken GA4 setups are refactors that dropped a gtag call, not misconfigured admin settings.
Use GTM only if you need marketer access
Solo devs can fire events from application code with gtag or the GA4 measurement protocol. GTM helps when marketers add pixels without PRs. Either way, test in Preview mode or GA4 DebugView after deploy — see /guides/how-to-set-up-ga4-event-tracking for the GTM path.
Verify tracking in CI or post-deploy checks
Add a smoke test that loads staging and asserts key dataLayer pushes or network collect requests. ClimbPast /features/tracking-health scans production URLs for missing events when you do not want to maintain Playwright scripts yourself.
Ask product questions in plain English
After launch week, you need "signups by landing page" not a custom Exploration. Conversational analytics on top of GA4 — /conversational-analytics — keeps you in the editor instead of the GA4 UI. Pair with /features/slack-alerts when signup_completed drops after a deploy.