That is the entire budget for sixty frames a second. Everything on this page is about spending it well on the phone your users actually own.
Smooth on the flagship
is not the test.
Smooth on a three-year-old Android is.
Our Flutter engineers profile in release mode on real mid-range hardware, not in a simulator. They work full-time in your team and stay on the Virtus payroll.
- $26–46
- per hour
- 6–10 days
- to day one
- 1 month
- minimum
Four phases, and the mistake that blows each one
A busy list screen on a mid-range Android, traced in profile mode. Total 15.8 ms — comfortably inside budget, but only because someone did the work in the right-hand column.
Build
4.1 mssetState at the top of the tree, so every widget below rebuilds for a change that affected one row.
State scoped with Riverpod or Bloc, const constructors everywhere they are legal, and rebuild counts checked in DevTools.
Layout
3.4 msDeeply nested unconstrained widgets, or an IntrinsicHeight doing a second layout pass over a long list.
Slivers for long content, fixed extents where they are known, and the intrinsic pass removed.
Paint
5.2 msShadows, blurs and opacity layers stacked on a scrolling surface — each one a new render layer.
RepaintBoundary where it earns its keep, saveLayer avoided, and blur replaced with a pre-baked asset.
Raster
3.1 msShader compilation jank on the first run of an animation the user has never seen before.
Impeller on, shader warm-up for the critical path, and a profile-mode trace on a real device before release.
Six things that make a Flutter app maintainable
Architecture that survives feature four
Riverpod or Bloc chosen once, a repository layer between the UI and the network, and freezed models so a null does not reach a widget.
A design system in widgets
Themed components, not a folder of one-off Containers. Your designer's tokens land as real ThemeData.
Offline and flaky networks
Local persistence with Drift or Isar, an optimistic write, and a sync path that survives an aeroplane.
Platform channels when needed
Swift and Kotlin on the other side of the channel, written properly, with the error cases mapped back into Dart.
Golden tests and CI
Widget tests plus golden images so a padding change cannot silently reflow a screen nobody opened.
Release, both stores
Flavors, signing, Play internal track, TestFlight, and a staged rollout with crash-rate gates.
Three bands
If your app is screens over an API, mid-level is genuinely enough. If it needs platform channels, custom painting or an offline sync engine, hire senior.
Mid-level
3–5 yrs$26–32/hrBuilds screens and flows against an agreed architecture. Comfortable with state management, still learning where the frames go.
Senior
5–8 yrs$32–40/hrOwns the app architecture, reads a timeline trace, and writes platform channels without help.
Lead
8+ yrs$40–54/hrSets the design system, the test strategy and the release process — and mentors the rest into them.
Already have a Flutter app that stutters?
Send us a build. We will trace it on a real mid-range device and tell you which of the four phases is costing you the frames — before you hire anyone.
