The Glassblower's First Unannealed Vessel: On the Hidden Fractures of a Perfectly Formed, Yet Unrested, Interaction

There’s a mantra in our craft that has achieved near-scriptural status: ‘perceived performance.’ We’ve been taught to chase it, to prioritize the feeling of speed over its raw, measurable reality. We employ clever tricks—skeleton screens, strategic lazy loading, and optimistic UI updates—to create the illusion of a seamless, instantaneous application. The user feels fast, and so we declare victory. But in our rush to perfect the perception, I fear we’ve begun to neglect the substance, building beautiful glass vessels and then skipping the crucial, final step of the annealing process.

Annealing, in glassblowing, is the controlled cooling of a newly formed piece. It relieves the internal stresses created during the intense heat of shaping. Without it, a vase can appear flawless, its form perfect and its surface smooth, yet it harbors microscopic fractures. It is fundamentally unstable. A slight change in temperature, a mere tap on its surface, and it shatters. This is the precise danger of an over-reliance on perceived performance alone.

Our optimistic updates are a prime example. We paint a button with a ‘success’ state the instant a user clicks, creating the delightful perception of immediacy. But what happens if the network request behind that click fails? The user’s reality—the confirmed action they saw and believed—shatters against the actual failure of the transaction. The trust we worked so hard to build fractures instantly. We traded a momentary delay, which could be managed with a honest spinner, for a profound breach of user confidence.

Similarly, a skeleton screen might suggest that content is imminent, but if a poorly prioritized API call or a bloated JavaScript bundle keeps the real content at bay, the user is left staring at a shimmering placeholder far longer than they would a simple, static loading indicator. The illusion of speed curdles into the reality of waiting, now made more frustrating by the tease. We’ve moved the loading indicator from the screen and into the user’s mind.

This is not a call to abandon these techniques. They are powerful tools. It is, however, a critique of treating them as the finish line. True front-end craft means building for both perception and resilience. It means annealing our interactions. It is the work of building robust error states that gracefully handle the network’s inherent unpredictability. It is the discipline of measuring both ‘First Contentful Paint’ and ‘Time to Interactive,’ ensuring the painted screen isn’t a lie. It is the diligence of preloading key assets not just for show, but for actual, functional readiness.

A beautifully perceived performance that cracks under the slightest pressure of real-world use is no performance at all. Our duty is to build experiences that are not only fast to the eye but sound to the core, capable of withstanding the inevitable taps and temperature shifts of the web. We must be glassblowers who never skip the kiln.

Notes & further reading

A few pages I came back to while writing this: