DEV Community

Martin Ma
Martin Ma

Posted on

Games, short video and social feeds share one loop. That is why deleting the app never works.

Most advice about compulsive phone use treats three different problems as one: games, short-form video, and social feeds. They feel different, so people try different fixes for each. Underneath, they run the same loop.

The loop, stated plainly

A variable-reward loop has four parts:

  1. An unpredictable payoff. Not every pull gives something good, and you cannot tell in advance which pull will.
  2. A near-miss signal. The almost-win is more motivating than the win, because it implies the next attempt is close.
  3. No stopping cue. Nothing in the interface says "this is a natural end". No chapter break, no credits, no outro.
  4. Cheap re-entry. Reopening costs nothing, so the decision to stop never has a chance to become conscious.

Slot machines are the cleanest example, which is why the mechanics are easy to study there. Games add progression and daily streaks. Short-form video adds autoplay and preloading. Social feeds add the audience: the payoff is other people's reactions, which are maximally unpredictable.

Once I saw the loop, the reason my fixes kept failing became obvious.

Why deletion fails

Deleting an app attacks part four only. It makes re-entry expensive, which is real progress, but it leaves the other three parts intact and adds two new problems.

First, it creates a single dramatic failure mode. One stressful evening, one reinstall, and weeks of effort are gone. With a limiter, a bad evening costs you twenty extra minutes, not your whole system.

Second, it doesn't survive substitution. Remove a game and the same loop is waiting in a feed. The loop is the thing to design against, not the app.

What actually interrupts the loop

Three changes held up over three weeks of logging, in order of effect:

Charge the cost to the app, not the day. A single daily limit for the whole phone gets spent by noon and then means nothing, which is exactly when the loop is strongest. Per-app budgets keep the expensive apps constrained and leave messaging and maps alone, which removes the usual excuse for overriding.

Make the override visible. When bypassing a limit was silent, I did it five or six times a week and forgot every instance. When it was counted, the count became the restraint. No lock, no punishment, just a number I had to look at. This is the single highest-leverage change I made, and it is also the one nothing off the shelf provided.

Put a stopping cue back. A book ends. A film has credits. A podcast has an outro. I added the equivalent manually: one deliberate question before the feed loads, asking whether I want ten minutes or an hour. It takes four seconds, and it converts an automatic reach into a decision. Most of the time the honest answer is ten.

What this does not fix

None of this changes the incentive of the product. The loop exists because it works, and a timer cannot make it stop working. It also does not help if the behaviour is a symptom: if you are avoiding a specific task, or using the feed to manage anxiety, a limiter will mostly add shame. Deal with the underlying thing first, then use the limiter for the residual habit.

What it does fix is the specific failure I kept repeating: a session that started for a legitimate reason and ended two hours later, with no memory of deciding to continue.

Numbers, since anecdotes are cheap

Three weeks of logging, one user, so treat it as a case study and not evidence:

  • Bedtime scrolling: about 90 minutes to about 12.
  • Sessions per day: 41 to 19.
  • Overrides per week: 23 to 6.
  • Nothing uninstalled, no argument with anyone about my phone.

I later built these mechanics into a small iOS app, mostly because I wanted the override counter to exist. But the method needs no app: per-app Screen Time limits plus a tally of every override, kept somewhere you cannot avoid seeing. The tally is the whole trick.

If you have tried something similar, I would like to know which part held up and which one you dropped, and whether the loop framing matches what you see in your own logs.

Top comments (0)