Simple and underrated. One small tweak: update last_seen_at at most once per hour or per session, otherwise every request becomes a write. Pairing it with a last_core_action_at column also helps separate people who log in and look around from people who still do the thing the product is for.
good shout on throttling it to once an hour or per session, otherwise every page view turns into an update. last_core_action_at is a nice split too, logging in to look around vs still doing the actual job. would you build the quiet-user list off both columns, or only the core action one?
I'd build the list off the core action column and keep last_seen_at as the second signal. People who still log in but stopped doing the core job are the easiest group to win back, since they haven't left yet. Quiet on both usually needs a different message.
"they haven't left yet" is the bit that makes that group worth chasing first. for the ones quiet on both, what does the different message usually look like, a check-in or more of a here's what changed?
StackShortlist
Proof Over Promises.
Simple and underrated. One small tweak: update last_seen_at at most once per hour or per session, otherwise every request becomes a write. Pairing it with a last_core_action_at column also helps separate people who log in and look around from people who still do the thing the product is for.