Onboarding emails and in-app flows only improve when you can see whether users reach the first valuable moment. Here is how to define activation and write a small event plan.
Most teams send a welcome email, build a product tour, and then argue about whether either worked. Without data, the argument is about taste. With a small, well-planned set of events, it becomes a question you can answer: of the people who signed up this week, how many reached the first moment of real value, and where did the others stop?
This post walks through defining activation, choosing which events to track, naming them, and connecting emails and in-app flows to what users actually do. The example product is imaginary: a project management tool called "Taskly", used only to illustrate the method.
Activation is the point where a new user first gets the value your product promises. It is not signing up, and it is not opening the app. It is an action that shows the product did its job.
To find yours, finish this sentence: "A user is activated when they have [done a specific thing] within [a time window]."
For Taskly, it might be: "A user is activated when they have created a project and completed one task within their first 7 days." For a payments app it might be a first successful transfer. For a design tool, a first exported file.
How to choose the action:
List the steps a user must take from arrival to activation. For Taskly:
Each step is a place where people can drop out. Your event plan should let you see each one. Draw this as a funnel on a whiteboard before opening any analytics tool.
The temptation is to track every click. That produces thousands of events nobody reads and a bill for storing them. Start with 10 to 15 events that cover the funnel, plus a few that explain failures.
Group them in three layers.
Funnel events: one for each step above. For example signup_started, signup_completed, email_verified, project_created, task_created, task_completed.
Onboarding events: how users interact with the guidance you built. For example onboarding_checklist_viewed, onboarding_step_completed, onboarding_skipped, product_tour_dismissed.
Friction events: signals that something went wrong. For example signup_error_shown (with an error type), email_verification_resent, form_validation_failed.
A good test for any event: "If this number changed, what would we do?" If you cannot answer, do not track it yet.
Naming drift is the most common reason analytics become unusable after six months. Choose a convention and write it down.
object_action in snake case, past tense. project_created, not CreateProject or new project.task_done and task_completed.signup_completed with a method property of email or google, not two separate events.Attach a few properties to every event, and a few to specific ones.
Always:
user_id (the account identifier from your system, not an email address)timestampplatform (web, iOS, Android)app_versionWhere relevant:
signup_completed: method, referrer_sourceproject_created: template_used (true or false), is_first_projectonboarding_step_completed: step_name, step_numbersignup_error_shown: error_typeKeep names, emails and phone numbers out of event properties, and check the privacy and consent rules that apply to your users.
An event plan is a table shared by product, design, engineering and marketing. Here is a starter for Taskly:
| Event | Trigger | Key properties | Used for | Owner |
|---|---|---|---|---|
| signup_started | User opens the sign-up form | referrer_source | Top of funnel | Growth |
| signup_completed | Account created on server | method | Funnel step 3 | Backend |
| email_verified | Verification link clicked | hours_since_signup | Funnel step 4, email timing | Backend |
| project_created | First project saved | template_used, is_first_project | Funnel step 5 | Frontend |
| task_created | Task saved | is_first_task | Funnel step 6 | Frontend |
| task_completed | Task marked done | is_first_task_completed | Activation | Frontend |
| onboarding_checklist_viewed | Checklist shown | step_count_remaining | Onboarding reach | Frontend |
| onboarding_skipped | User dismisses guidance | step_number | Onboarding friction | Frontend |
| signup_error_shown | Error displayed | error_type | Friction | Frontend |
A few practical points:
signup_completed and task_completed should be recorded where the data is saved.Onboarding emails are often sent on a timer: day 1, day 3, day 7. A timer ignores what the person did. Triggering on behaviour is more useful and easier to measure.
A basic set of triggered messages for Taskly:
signup_completed. One clear action: verify your email or create your first project.email_verified if no project_created exists. One line of help and a link straight to the project form.project_created if no task_completed. Offer a short example project or a reply-to address for questions.task_completed (first). Suggest inviting a teammate.Rules that keep them useful:
Once you have a few weeks of data, look at:
signup_completed to task_completed. A shorter time usually means a clearer path.The plan matters more than the tool. Choose any product analytics tool that supports event properties, funnels and user-level views, and fits your privacy requirements. Keep the plan in a document, so switching tools later is a matter of re-pointing the same events.
If nobody can name what decision each event supports, you have too many. Starting with 10 to 15 and adding as questions appear works well.
If you want help defining activation, planning events, or redesigning onboarding around what the data shows, talk to our team. Email hello@risingstation.com or visit risingstation.com/contact-us.
Md Rijvee Ahmmed
Founder & CEO