ANTIGRAVITY LABJP
Back to Blog

The Late-Night Watch of a Staged Rollout, with Antigravity Quietly Beside Me

AntigravityStaged RolloutCrashlyticsAndroidIndie DevelopmentBrowser Agent

Earlier this month I pushed Beautiful HD Wallpapers from v2.0.0 to v2.1.0 on Android. The new build closes a RecyclerView IndexOutOfBoundsException that hit more than fifty users in the twenty-eight days after the v2.0.0 release. A defensive copy in the adapter, nothing dramatic — but enough to deserve a careful rollout. On Play Console I have it staged at 5% → 25% → 50% → 100%, and right now we are between the first two stages.

Most evenings this week, I have been opening Firebase Crashlytics far more often than is healthy.

What I was actually watching during the 5% night

I chose staged rollouts after twelve years of building apps as an indie developer. The most painful lesson, from somewhere between fifty million cumulative downloads, is the memory of locking a few percent of users out with a single bad release. Starting at 5% lets the failure budget stay small. If something is wrong, it stops at five.

The hard part is what to do during that 5% night.

You open Play Console Vitals to see whether crash-free users is still above 99.7%, whether ANR has crept past 0.20%. Five minutes later you open it again. Fifteen minutes later, again. One more time before sleep. The reason I told myself I had to keep watching was that, if things were getting worse, I needed to pause before ramping to 25%.

To be honest, it is not a good thing to do to your evenings.

Letting the Browser agent do the watching

Last week I started experimenting with Antigravity's Browser agent as a kind of quiet night watch.

The setup is simple. I open Firebase Console and Play Console in the Browser agent's window, then ask Manager Surface to poll every fifteen minutes: read the current crash-free users and ANR, and only call me back if either has worsened by more than 0.05 percentage points from the previous sample. The Browser agent walks the dashboards, reads the numbers, and surfaces the change along with a screenshot only when there is something worth surfacing.

The first night this worked beautifully.

Instead of refreshing dashboards myself, I stopped feeling the pull of the tab. My attention shifted to the iOS side of the same week — extending the AdMob mediation waterfalls on four apps with three new bidding partners (Liftoff, InMobi, Unity Ads) across every RWD-iOS group. That work needs continuous concentration. Now it could get it.

The decision I still hold in my own hands

After a few days of running this, I noticed something more interesting than the time saved.

The Browser agent can decide whether numbers got worse. It cannot decide whether I should now ramp to 25%. When crash-free users has been holding at 99.65% for three hours, there are three reasonable answers — proceed, hold longer, or roll back — and the right one depends on signals that do not live on the dashboard.

It depends on knowing that the heaviest user base for Beautiful HD Wallpapers lives in the 6pm–11pm window in Japan, and that the cohort for tonight is not fully in yet. It depends on noticing that two crashes on the same device model look suspiciously like a pattern I saw, but quietly fixed, in a build two versions ago. The judgement is a layering of dashboard numbers and personal memory, and the memory part is still difficult to hand off.

So I keep that part. The Browser agent watches; I decide whether to move.

Something my grandfathers used to do

Both of my grandfathers were miyadaiku — temple carpenters who built shrines and temples for a living. When I was a child, I sometimes watched them on site after a frame had been raised. They would stand for a long time, saying nothing, just looking at the structure.

At the time I could not tell what they were looking at. Years later I started to think it was the quietest, most important step in the work: confirming that the whole thing had landed correctly. A well-made plane or chisel could be matched by any skilled carpenter of their generation. What separated good work from careful work was the length and depth of that wordless look at the finished frame.

Antigravity's agents are, in that sense, very precise tools. The Browser agent fetches numbers. The Agent mode writes code. But the slow, quiet act of standing back and asking whether a release should go out into the world is still mine to do. That part has not changed, even as the tools have become remarkable.

Late on May 18, I ramped to 25%

The night before writing this, I moved Beautiful HD Wallpapers v2.1.0 from 5% to 25%.

Crashlytics was holding crash-free users at 99.74%, with ANR at 0.12%. The Browser agent had returned "no degradation detected" several times across the previous evening. Before pressing the button, I still opened Play Console myself and walked through each of the few crash reports from the 5% window. They were all known patterns; none looked structural.

The fifteen seconds that I personally spent on that final check were possible only because the Browser agent had been bringing me the numbers, three hours at a time, throughout the rollout. The watching shrank. The deciding grew.

This was less a leap in technology than a quiet restructuring of the work. What I let go of was the act of staring at a dashboard. What I held onto was the act of saying "this is ready to go out." Different roles, but the same responsibility — and on a quieter evening, I am already thinking about the next release.