When no account resolves
An account-unit flag serves the off value to anyone Intempt cannot place in an account. It does not fall back to deciding per person, and this page explains why that is the safe answer.
Rolling out. The account rollout unit is part of the current release and is not on every project yet. Until it reaches yours, a feature flag rolls out by person and the question below does not appear when you create one.
An account-unit feature flag rolls out to a share of accounts. So it has to answer a question that a people-unit flag never faces: what happens to somebody who belongs to no account?
They get the off value. The same value a person in an untreated account gets.
Why not fall back to the person
The tempting behaviour is to decide those people individually, so nobody is left out. It is the wrong answer for two reasons, and the second is the one that bites.
They are not in the population. You rolled the flag out to 10% of accounts. Somebody in no account is not a small account, they are outside the thing you took a percentage of. Deciding them per person answers a question you did not ask.
Their answer would move on its own. An anonymous visitor who later signs in, or a user who is later attached to a company, would flip from one value to another because an association landed, not because you changed the rollout. A flag whose entire job is to be stable would be unstable for exactly the people whose identity is still settling.
This differs from a people-unit flag, which does fall back. There, a visitor with no resolved person is decided from the identifier the request carries, so they are still served. The ladder exists on the people unit and deliberately does not exist on the account unit.
Who this affects
| Caller | Account resolves? | Served |
|---|---|---|
| Signed-in user whose company is known to Intempt | yes | by the account's share |
| Signed-in user with no company association yet | no | off value |
| Anonymous visitor | no | off value |
Server call carrying only a profileId | no | off value |
The second row is the common one, and it is worth checking before you launch. If most of your users have no account association, an account-unit rollout at 50% will look like it is serving almost nobody, and that is the system working.
How to tell the two apart in your code
You cannot, and that is deliberate. variation returns the value you nominated as the default in
both cases:
const enabled = await intempt.variation("new_billing_screen", { userId }, false)false comes back whether the person was held out of the rollout, had no account, or Intempt was
unreachable. Your code takes the same branch for all three, which is what a kill switch needs.
If you need to know why, that answer is not on the wire yet. Do not infer it from the value.
Before you launch an account-unit flag
- Confirm your users actually carry an account association. A flag that serves nobody looks identical to a flag that is broken.
- Pick an off value that is safe for a stranger, because strangers are exactly who receives it.
- Expect your served count to be lower than the percentage suggests, by however many of your people have no company.
What the rollout counts
A feature flag rolls out to a share of people, or a share of accounts. Which one you pick decides who moves together, what a percentage means, and who gets nothing.
Exposure and denominators
An exposure is one person seeing one answer, even when the rollout counts accounts. Read every rate on this page before you compare a rollout's numbers to an experiment's.
