Tacnode™
← The lineup

The Stale Segment

The segments were rebuilt at 3 a.m. This customer has been busy since.

Nightly rebuild labels the customer “new user.”

What’s true
New user
The feature store
New user
reads
Decision
Which offer does the campaign engine send?
waiting

Illustrative figures.

Where this shows up

In-session personalizationWhat to show depends on what the customer did a minute ago.
Offers and promotionsIncentives picked without today’s orders.
Dynamic pricingPrice tiers set from an old segment.
RecommendationsBuilt on yesterday’s profile.

Why the feature store gets it wrong

NEW USER, labelled at 03:00 and held all dayorder 1order 2order 3order 4order 5order 603:0010:30CAMPAIGN SENDS A 20% WELCOME OFFER

Segments get rebuilt in batches because recomputing them per request used to be expensive. Customers keep doing things between rebuilds, and the segment doesn’t hear about any of it until the next one.

By the time the decision ran, its context was outdated. We call that a context gap.

Pick the offer from today’s behavior.

NEW USERACTIVELOYALsix orders, each counted as it happensCAMPAIGN SENDS A LOYALTY PERK

Tacnode keeps behavior signals current while the customer is still in the session, and records what was shown so the next choice can take it into account. A top-3 US delivery platform runs in-session personalization and recommendation on Tacnode.

What comes inSource data arrives via change streams, and decision state is written to Tacnode.
What staysCampaign tools and models stay where they are.
What the decision getsThe offer reflects today’s six orders.
If an engineer asks how

Behavior aggregates are computed against current data, or kept as views refreshed on a schedule you set, per feature.

Questions to put to your team

  1. How long after a purchase does the segment know?
  2. How many welcome offers went to people who were already buying?
  3. What does a wrong offer cost you compared with a late one?

Is your segment feed telling this lie?

Bring it to a demo, and we’ll trace what it reads and how old that data is by the time it runs.

Book a demo →