Performance & Concurrency
Profile first, then fix the frame drops — heavy work leaves the UI thread.

How it works
A left-to-right map of the work. Ports stay on fixed sides so the edges do not cross more than they have to. Pan or pinch if you want a closer look.
- Jank / heavy work
- DevTools profile
- Isolates + microtasks
- Smooth UI thread
The usual problem
- Custom motion looks expensive, so the first instinct is to delete the animation.
- Jank is guessed at instead of measured.
- JSON, images, or isolates never enter the conversation until users complain.
How I approach it
- DevTools first. No performance work without a profile.
- Heavy work moves off the UI thread with Dart isolates and microtask scheduling.
- Animation-heavy UI is kept, then tuned — not stripped to look “fast”.
Process
01
Reproduce
The janky journey is captured, not described.
02
Profile
Flutter DevTools shows where frames are going.
03
Move the work
Isolates and microtasks take the heavy path off the UI thread.
04
Handover
A profiling note and the fix, so the next change does not put the work back.
Stack and tools
Flutter DevToolsDart isolatesMicrotask schedulingCustom motion UI
Proof from real work
What you get
- A profiling report
- The fixes in the codebase
How risk stays down
- No invented before/after numbers. The profile is the proof.
- The UI thread stays free for the motion the product actually needs.