Post

1/ Someone on my team deleted a feature flag that had been off for over a year. It looked completely safe to remove. It turned a feature back on. How "cleanup" became an accidental deploy 🧵

2/ The flag was gone, but there was still code reading it. With the flag deleted, that read fell back to the code's default value. And the default was true. A long-dead feature quietly switched itself on.

3/ It collided with another feature that was never meant to run alongside it, and both broke. We didn't catch it...a user did. Nothing was watching for a code path that hadn't run in a year suddenly running.

0 reposts0 likes

4/ Tracing it was brutal, for two reasons that both come back to the flag: it didn't exist anymore (nothing to find), and the old targeting hit only a subset of users (couldn't reproduce until we found the group).

5/ The lesson: deleting a feature flag doesn't remove a decision. It hands the decision to whatever your code falls back to. Don't know that fallback for every place it's read? You're not cleaning up, you're shipping a change and hoping.

6/ A flag off for a year isn't dead. It's dormant. And dormant is worse, because dead means someone confirmed it's safe to remove. Unused isn't the same as unimportant.