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.