
Mobile performance degrades the way debt accumulates: one reasonable dependency, one unoptimized image, one extra network call at a time. No single change is worth blocking a release over, and eighteen months later the app takes six seconds to open.
The only durable fix we have found is the budget: performance expressed as hard numbers, enforced by machines rather than good intentions.
Pick numbers a human can defend
Cold start under two seconds. Interaction response under one hundred milliseconds. Bundle growth under five percent per quarter. The specific values matter less than their existence — a budget converts "the app feels slow" arguments into "we are 400ms over budget" tickets.
“A performance budget is a promise to your future team that today’s deadline will not become next year’s rewrite.”
Enforce in CI, not code review
Budgets that live in documentation die in deadline weeks. Ours run in the pipeline: automated startup timing on real mid-range devices, size diffs on every merge request, and a red build when the numbers regress. The conversation changes when exceeding the budget requires a deliberate, visible decision.
Test on the phones your users own
Your team carries flagship devices; your users mostly do not. Every performance number we enforce is measured on hardware from the cheaper half of the market. An app that feels instant on a three-year-old mid-range phone feels instant everywhere.
Performance is remembered longer than features. Users cannot name your app’s architecture, but they know exactly how it feels to open it at a bus stop on weak signal.
Emperor Brains Engineering
Emperor Brains LLP



