At Stripe, we had two abstractions for branching logic in production: flags
, which were meant to be explicitly temporal (temporarily split-testing traffic; rolling out a new feature or code path; exposing a specific path for a cohort of users during a closed beta) and gates
, which were meant to be explicitly permanent (overriding a statement descriptor for a Thingish merchant; preserving historical functionality in a neglected API endpoint).
Gates were — are — considered a bit of a last resort, and pushing a new gate to production required a not-trivial amount of sign-off and acceptance from a number of teams, not just for the performance and maintainability burdens they created but for the sheer sign of defeat that they symbolized.
I say this as means of introduction to the anodyne concept of "hidden settings". Buttondown has hidden settings — who doesn't!: eighteen at the time of writing, down from twenty-two an hour prior. Every quarter I'll double-check the list and check if:
- Anything can be 'mainlined' into a core setting available to everyone;
- Anything can be 'unshipped' because nobody's actually using it.
Q4 2024's reaping: four completely unused settings, summarily deleted. None of these four settings felt, even at the time, like they were "worth it", and the anecdata bears that out:
- The user who requested Setting A churned after one month (having never upgraded to a paid plan);
- The user who requested Setting B churned after two months (having never upgraded to a paid plan);
- The user who requested Setting C never finished onboarding;
- The user who requested Setting D is an active and loyal user who never even used the hidden feature.
I am, on average, two years smarter and less foolish than I was when I introduced those four hidden settings, and most of the hidden settings look more like flags than gates at this point. [1] If it's a good idea to build, we build it properly (and triage it alongside the other forty-seven things we need to do properly); if it's not a good idea to build, it doesn't magically become more palatable by virtue of its obscurity.
We've introduced three hidden settings in the past twelve months; one of them was an edge-case performance thing, and the other two are features that are planned to be mainlined in Q1. ↩︎