Resources

Guides written by the people who built the platform.

Implementation guides you can read in one sitting, a glossary of the terms the platform uses, and a monthly note on product and architecture. Nothing is gated.

Guides

Six things worth getting right before the first journey goes live.

Each guide expands in place. They are written for the engineer or marketer doing the work, with the platform's own vocabulary.

Guide

Implementing a tracking plan without stopping the roadmap

Treat the plan as code that ships with each feature, enforced at ingestion.

2 min read · Event Catalog & Tracking Plan

A tracking plan fails when it is a spreadsheet that engineering is asked to honour later. Treat it as code that ships with the feature instead. Start by naming the eight or ten events the business already reports on: the signup, the first key action, the purchase, the cancellation. Write each as an object-action pair in snake_case with the three or four properties a report will actually filter on, and check the file into the repository next to the code that fires the events.

Register the plan in the event catalogue before the first SDK call goes out. The catalogue then enforces it at the door: an event with an unknown name or a property of the wrong type is quarantined with a reason rather than silently accepted, and the live debugger shows the violation next to the payload that caused it. Because enforcement happens on ingestion, nobody has to audit the warehouse a quarter later.

Then let the plan grow with the roadmap. Every ticket that adds a screen gets a one-line entry in the plan as part of its definition of done, reviewed in the same pull request. Types generated from the catalogue keep the SDK calls honest, and the CI check fails a build that fires an unregistered event. The plan stays current because updating it is cheaper than working around it.

Event Catalog & Tracking Plan

Guide

Designing frequency caps and quiet hours that marketers respect

Set the cross-channel ceiling first, follow the profile's timezone, and put the exception path in the open.

2 min read · Delivery Governance

Caps fail for one of two reasons. Either they are set so tight that every campaign hits them and marketers learn to route around them, or they live in one team's tool and the other team's sends never count. Design them as a platform rule, not a campaign setting.

Start with a per-person ceiling across all channels, not per channel. A customer who receives two pushes, one email and a WhatsApp message on the same morning has been contacted four times, whatever the org chart says. Set the cross-channel cap first, then a tighter cap for the interruptive channels (push, SMS, WhatsApp), and leave email and in-app with more room.

Quiet hours should follow the profile's timezone, not the project's. A journey scheduled for nine in the morning in Mumbai should not arrive at half past three for a customer in London. Configure quiet hours once, in the governance module, and let every journey inherit them. A message that lands in quiet hours is held until the window opens, not dropped, and the delivery log records the hold.

Finally, give marketers the exception path in the open. Transactional messages (a one-time code, an order confirmation) use a separate endpoint that bypasses caps by design and is labelled as such in the log. When the rule has a visible exit nobody needs a hidden one, and the simulation report shows how many sends each cap suppressed before the journey goes live.

Delivery Governance

Guide

Simulating a journey before you activate it

Replay the draft against real history, read the report top to bottom, and run it again if anything surprises you.

2 min read · Journey Orchestration

A simulation replays a journey's entry conditions, branches and waits against real event history and reports what would have happened, without sending anything. Use it as the last step before activation, the way you would run a migration against a copy of production.

Pick the window first. Thirty days of history is enough for a weekly nudge; a re-engagement journey with a fourteen-day wait needs at least twice its longest wait so that the later steps have something to process. The simulation then walks every profile that met the entry segment during the window through the canvas, honouring the same frequency caps, quiet hours and holdout the live journey would apply.

Read the report top to bottom. The entry count tells you whether the segment is the size you expected; a number ten times too large usually means an operator like did-not-do is missing a time bound. The branch counts show whether a condition ever evaluates true. The suppression counts, split by cap, quiet hours and holdout, show what governance would have removed. The message count per channel is the number your provider will bill for.

If the simulation surprises you, change the canvas and run it again. A second simulation costs nothing. A journey that has messaged the wrong ten thousand people costs a great deal more, and the blast-radius ceiling exists for the day someone skips this step.

Journey Orchestration

Guide

Migrating from a sender-of-record platform

Move events, then audiences, then delivery, and run both platforms in parallel for one full cycle.

2 min read · Messaging Channels

A sender-of-record platform owns the provider accounts your messages travel through, so the migration has three separate parts: events, audiences and delivery. Move them in that order and run both platforms in parallel for one full cycle of your longest journey.

Events first. Point the SDK at Edverix alongside the incumbent, using the same event names, and let the event catalogue quarantine what does not match your tracking plan. Backfill history through the import API so that retention grids and RFM scores have something to compute from on day one. Identity resolution runs on the imported events too, so profiles arrive already stitched.

Audiences second. Most segments translate directly, because they are conditions on events and traits. The ones that do not are usually built on a computed attribute the old platform kept private; rebuild those as computed attributes on the profile so they are visible in SQL. Compare segment sizes between the two platforms before you trust them.

Delivery last. Connect your own provider accounts: the APNs key, the FCM credentials, the email provider's API key, the WhatsApp Business account. Because Edverix takes no margin on delivery, the rates are the ones you negotiated. Recreate each journey, simulate it against the backfilled history, compare the numbers with the incumbent's last report, and only then move the sends. Export the old delivery log before the contract ends; you will want it for attribution.

Messaging Channels

Guide

Bring-your-own-provider setup for WhatsApp and SMS in India (DLT, TRAI)

Register the entity, headers and templates once; the platform fills the placeholders and logs the template used.

2 min read · Messaging Channels

In India, commercial SMS is regulated by TRAI under the DLT framework, and WhatsApp business messaging runs through the WhatsApp Business Platform with approved templates. Edverix connects to your own accounts for both, so the setup is mostly registration work you do once.

For SMS, register your organisation as a principal entity on one of the DLT platforms run by the telecom operators and note the entity ID you receive. Register each sender header (the six-character ID customers see) and each message template, choosing its category: transactional, service-explicit, service-implicit or promotional. Templates are approved with variable placeholders, and the content at send time must match the approved template or the operator rejects it. Add your SMS provider's credentials to the channel settings along with the entity ID and template IDs. Personalisation fills the placeholders, and the delivery log stores the template ID used for each send.

For WhatsApp, you need a WhatsApp Business Account, a verified business and a phone number connected through a solution provider or the Cloud API. Templates are submitted for approval per category (marketing, utility, authentication) and per language. Edverix stores approved templates with their variables, and journeys pick a template rather than free text for anything outside the twenty-four-hour customer service window.

Both channels respect the same frequency caps and quiet hours as the rest of the platform. Preference and consent rules, including the customer preference (DND) registry, are enforced upstream by the operator, so keep consent as a trait on the profile and use it in the entry segment.

Messaging Channels

Guide

Reading a retention grid

Read the rows for ageing, the columns for cohort quality, and the diagonals for the calendar.

2 min read · Product Analytics

A retention grid has cohorts down the side, periods across the top, and in each cell the share of the cohort that came back in that period. Everything useful about it follows from reading it in three directions.

Read a row left to right to watch one cohort age. The first column is always one hundred percent; the drop into the second period is the steepest, and where the row flattens is the point at which the people still present are the ones who will stay. That flattening point is the figure a product team should quote, not the first-period number.

Read a column top to bottom to compare cohorts at the same age. If the June cohort's fourth-week cell is higher than May's, something changed for people who joined in June: an onboarding change, a campaign or a different acquisition channel. Because the grid runs on the same event store as everything else, hold a property constant (the acquisition channel, say) and rerun it to find out which.

Read the diagonals for the calendar. Cells on the same diagonal share a calendar period, so a dip that runs diagonally is a dip in the product or the market that week, not a change in cohort quality.

Two settings matter. Define the return event as the action that means the product worked, not merely an app open. And choose the period to match the natural cadence of use: daily for messaging, weekly for groceries, monthly for insurance. The stickiness figure on the overview is this grid folded into one number.

Product Analytics

Glossary

The words the platform uses, defined once.

Every term links to itself, so a definition can be shared with a colleague. The full glossary groups the terms by letter, with related terms and the module each one lives in.

Event
A record of something a person did or something that happened to them, such as order_completed or payment_failed. Each has a name, a timestamp, a profile and typed properties, and every report, segment and journey is built from them.
Profile
One record per human, stitched across devices and anonymous sessions, holding traits, computed attributes and reachability for every channel. Everything downstream depends on the profile being right, so every merge is reversible.
Trait
A fact about a profile that you set rather than compute: plan, city, account manager, consent. Written by identify calls, imports or the API, and usable in any segment, template or report.
Computed attribute
A value the platform calculates from events, continuously or on a schedule: orders in the last ninety days, days since last session, favourite category. Usable in segments and personalisation, and every computed number can show the events it came from.
Reachability
Whether a profile can currently be messaged on a channel: a live push token, a verified email address, an opted-in WhatsApp number. Segment sizes are shown as reachable counts per channel before a send, and the delivery log records the reason when the answer is no.
Tracking plan
The list of events and properties your applications are allowed to send, with their types. Enforced by the event catalogue at ingestion, checked in CI, and used to generate typed SDK calls so a misspelled property is a compile error.
Segment
A saved set of conditions on events, traits and computed attributes that resolves to a list of profiles. The object everything else points at: journeys, campaigns, ad sync and reporting.
Live segment
A segment that is re-evaluated as events arrive, so membership is correct at the moment of send rather than at the last nightly refresh. A profile entering or leaving it is an event that can start a journey.
Journey
A canvas of triggers, waits, branches and messages that a profile moves through. Simulated against real history before activation, governed at every send, and versioned so a run stays explainable after the journey is edited.
Relay
A business event such as a price drop, a restock or a new episode, fanned out only to the profiles whose behaviour shows affinity with it. One relay replaces many hand-built campaigns.
Contextual journey
An independent trip through a journey per order, policy, loan or enrolment, so a second purchase never collides with the first and a reminder exits only when its own instalment is paid.
Conversion window
The period after a message within which a conversion event is attributed to that message. Set per campaign or journey; a conversion outside the window still counts in the report but is not credited to the send.
Hold property constant
A funnel setting that requires every step to share a property value with the first step: the same order_id, the same SKU. It stops a multi-item funnel from matching a view of one product to the purchase of another.
Retention grid
A table with cohorts down the side and periods across the top, each cell showing the share of the cohort that returned. Read a row to watch one cohort age, a column to compare cohorts at the same age, and a diagonal for what happened in a calendar week.
Stickiness
Daily active users divided by monthly active users: the share of a month's users who show up on a typical day. A retention grid folded into one number.
RFM
Recency, frequency and monetary value: three scores per profile computed from purchase events and bucketed into named lifecycle segments such as loyal, at risk and going quiet. Movement between buckets is itself a trigger.
Frequency cap
A ceiling on how many messages a profile receives in a window, set per channel and across channels, and evaluated in the profile's own timezone. A send blocked by a cap is held, not dropped.
Quiet hours
A window in the profile's own timezone during which messages are held until it ends, not dropped. Configured once in governance and inherited by every journey, with transactional sends exempt by design.
Blast radius
The maximum send volume for the organisation. A journey projected to exceed it refuses to activate; a running campaign that breaches it halts itself and notifies the owner and approvers.
Simulation
A dry run of a journey or campaign against real event history that reports entries, branches, suppressions and message counts without sending anything. The last step before activation.
Delivery log
The per-message record of what was attempted, to whom, through which provider, with the outcome and the reason for any miss: suppressed, capped, outside quiet hours, token expired, provider rejected.
Digest
One message that collects several triggers for a profile inside a window you set, instead of one message per trigger. Three comments become one notification rather than three pushes.
Universal holdout
A small account-wide group, chosen by deterministic bucket, that never receives marketing messages, so the cumulative impact of the whole programme can be measured against people who were deliberately left alone.

Newsletter

One note a month on product and architecture.

What shipped, what changed underneath, and the occasional guide like the ones above. Unsubscribe any time from the footer of every issue.

Monthly. Product and architecture notes only. Unsubscribe any time.

Get started

One event store. Every channel. Your data.

Send your first event in an hour, simulate your first journey against real history, and keep every byte of it in a database you can query.

  • No credit card for the Developer plan
  • Bring your own providers
  • Export everything, any time