The first generation of Android app blockers was, in design terms, a single switch. You set a daily budget, the app cut off the launch when the budget ran out, and the user could, at any time, open the app and disable the block. Most users did exactly that, within a week. The block was a fence, the fence had a gate, and the gate was right there.

The second generation added a PIN. Set a 4-digit code, enter it to change the rules, and the workaround is now a memory test. Better, but the user still has the PIN, and a determined user can always recover it. PIN also does not help in the moment of opening, which is the moment the block is supposed to interrupt.

The third generation added cooldown. Set a 5-minute delay between disabling the block and the change taking effect. Better still, but a frustrated user will wait 5 minutes. The cost of the workaround is just latency, not effort.

The pattern we use — and the one we think eventually wins — is what we call Scroll Debt. The cost of the workaround is not a delay, not a memory test, and not a confirmation dialog. The cost of the workaround is more of the same behaviour the user is trying to stop.

What the pattern is