Work NOMU Stays
A booking page fast enough to delete the loading spinner
First contentful paint went from 4.1 seconds to 0.8. The spinner was not optimised — it was removed.
- Industry
- Hospitality
- Year
- 2024
- Stack
- Edge rendering · Image pipeline · Performance budget
0.8s
largest contentful paint
The problem
4.1 seconds to first paint. The loading animation was beautifully made, which was itself the evidence — nobody designs a loading animation for a page that takes 0.8 seconds.
The constraint
Marketing ships a new campaign page most weeks, and has to be able to do it without us. Any plan that ends in "an engineer reviews performance on every page" stops working in week three.
The approach
A performance budget wired into CI, a rebuilt image pipeline, and the booking path moved to edge rendering. A pull request over budget does not merge, and the message says which line item went over and by how much.
One decision
The budget check runs before merge, not as monitoring after release. A number you see after release belongs to someone who has already moved on to the next thing; a number you see before merge belongs to the person who just wrote the code.
The trade-off
Two campaign pages were blocked for oversized imagery and the assets had to be remade. Both times somebody was annoyed. Six months later nobody mentioned it any more, because the asset spec had become their own habit.
The outcome
LCP of 0.8 seconds and the spinner deleted. Mobile conversion up 22%.
Since then
Fourteen months on, the performance budget has never once been loosened. It is the number we care about most, even though it appears on no report.