Why Does My Feature Flag Read Off?
A checklist for a flag that reads Off when you expected On, a guardrail that stays at Collecting, a plan that is not moving, and a change that has not reached…
5 min read
Most flag questions come down to one of four symptoms. Work through the matching list from the top. The common causes come first.
The flag reads Off when you expected On
- 1It is not published. A draft serves nothing. The Library shows it as Draft.
- 2The rollout is 0%. A code flag published without a plan starts at 0%, and a turned-off flag is at 0%. The Library shows it as Off. Raise the rollout on the Rollout tab.
- 3The page is outside the targeting. In the browser, a flag is Off on pages the targeting rules do not match. Check the Targeting tab, and on a live flag make sure the rules were published with Publish rules.
- 4A server rule did not match. On the server, a visitor who does not match every server rule gets Off, with the reason
targeting. Compare the rules on the Targeting tab with the attributes your code passes. - 5A ring serves Off. Rings are checked before the rollout and the first match wins. Look for a ring that serves Off and matches the visitor's ID or attributes.
- 6You are outside the rollout. At 10%, nine visitors in ten get Off, and a visitor's bucket is fixed, so reloading does not change it. To test the On path, add your own visitor ID to a ring that serves On. It is in
window.Pertento.visitorIdwhen the website's visitor ID is on. - 7The SDK is older than 0.2.0. An older server SDK answers every key with the reason
unknown-key. Upgrade to 0.3.0. - 8The snippet has not loaded yet.
window.Pertentodoes not exist until the Pertento snippet has run. Read the flag after it, or guard the call withwindow.Pertento?.isOn?.('key') === true. See Reading a Feature Flag in the Browser. - 9The key is wrong. An unknown key answers Off rather than failing. Compare the key in your code with the one on the flag's Setup tab.
- 10It is a customer ID flag read in the browser. A flag that buckets on Customer ID reads Off on the page unless your server seeded it. See Reading a Feature Flag on Your Server.
- 11The server and the page disagree. The browser's bucket is different from the server's. Decide on the server and seed every page that reads the flag.
- 12No visitor ID was given. A server decision without a visitor ID or customer ID carries the reason
no-id, and one with the wrong kind of ID carrieswrong-id-kind. - 13Storage is blocked. A visitor whose browser blocks storage can change side between page loads on a flag between 0% and 100%.
- 14The website is not billing-active, or is capped. Such a website serves no flags. See Plans, Sessions and Your Monthly Allowance.
- 15The flag is archived. An archived flag answers Off to everyone and cannot be turned on again.
The guardrail stays at Collecting
- The website's visitor ID is off. Without it the guardrail cannot count visitors. Turn it on in the website settings. See Anonymous Visitor ID.
- The primary goal is not firing. The guardrail judges On and Off on the event chosen as the primary goal on the Setup tab. Check that the event reaches Pertento on the pages the flag runs on.
- There is not enough traffic yet. Collecting needs 200 visitors a side and 1,000 Off conversions, counted from visitors new to the flag during the current step. A small share at an early step can take a while.
- Nobody is on one side. A guardrail step at 0%, or at 100% with no holdback, is refused when the plan is saved for this reason. If the step is at 100%, the holdback is what provides the Off side.
The plan is not moving
- It is paused. The status card says Plan paused or Paused by the guardrail, and the Library's Next step column says "Waiting for you" or "Guardrail breach". Resume it, or turn the flag off.
- The step has not stayed its least time, or its Not before date has not passed.
- The step is waiting on the guardrail. A step set to Guardrail or Time and guardrail moves on only once the guardrail is satisfied. Check the Guardrail card.
- Somebody saved the rollout by hand. Saving a rollout pauses a running plan.
- It is done. The plan reached its last step, or the rollout was already past every step when it started.
The scheduler runs every minute, so a step whose conditions are met moves on within a minute.
The change has not reached visitors
- On your pages, a change is in the next page load. A page that was already open keeps what it had.
- On your servers, the SDK sees a change within about 45 seconds.
- A scheduled publish or turn off happens within a minute of its time.
- On a live flag, targeting changes take effect only once you click Publish rules.
- "The flag changed while you were editing" or "The rollout changed since you opened the page" means someone else saved first. Reload and try again.
Still stuck
The Activity tab shows every change to the flag with who made it, and the status card under the flag's name says where it is and what comes next. If both look right and the flag still reads Off, contact Pertento support with the flag's key and the website it is on.