I spent longer than I'll admit on a corner radius.
I don't want to say this casually, because I know how it sounds. I'm going to say it directly: longer than was reasonable, on one number. The radius of the corners of the gift card widget on the lock screen, the card thumbnail in the wallet view, the notification banner, and the Watch complication. Twelve radii tried, four kept, two shipped, one pulled, one replaced, one restored, one rounded down by half a point after it shipped because the half-point mattered.
If you're not a designer, this sounds insane. If you are a designer, you know it's not. What I want to try to explain in this post is why it wasn't insane, not so that designers feel seen, but so that everyone else sees what actually goes into the feeling of a small good app.
The usual explanation for "time spent on design" is the creative-suffering one: we cared so deeply, we sweat the details, etc. I've sat through that pitch before and I bounce off of it. I want to make a more concrete case, because it's a more honest one.
Here's the concrete case: in a small product with a shared visual language, every tiny decision scales. A corner radius of 12 points in one place mandates, if you want the app to feel consistent, that the radius be 12 points in every other place. That means if you change it, you change everywhere. Which means before you change it, you have to have seen it in every context, phone, Watch, lock screen, Live Activity, CarPlay, wallet view, card detail, notification, widget. Each of those is a rendering environment with different size constraints and different visual neighbors. A 12-point radius that feels right on the wallet view may feel too rounded on the Watch complication and too sharp on the lock-screen banner. You can't see any of that unless you render it in all of those contexts and live with it for a few days.
That time wasn't spent drawing circles. That time was spent building out every context, rendering the radius in all of them, living with them, realizing that the Watch one is slightly off, trying to tune the Watch one and finding that the tune breaks the lock-screen banner, deciding between making the Watch a visual exception (which will cost you forever) or rolling back to a value that's almost right everywhere (which is what I did).
This is not a special story. This is what it actually costs, in an app with a design system, to change one number.
The reason I keep telling it is that this is what separates apps that feel finished from apps that don't. A finished app is one where the small decisions have been ground against each other for long enough that they have the same grain. An unfinished app is one where each surface was designed in isolation and the radii don't quite match, and you feel it without being able to name what you're feeling.
You feel it without being able to name it. That's the whole game.
A while back, writing the press materials for CardCue Pro, I used a phrase I got attached to: felt right is a reviewable property. Meaning: the quality that people mean when they say an app "feels right" is not a mystery. It's a finite set of small decisions that have been made consistently across the product. You can, in principle, audit it. You can, in principle, review it. It's subjective, but it's not arbitrary.
Design systems, when they work, make felt-right reviewable. They do this by turning small decisions into reusable tokens, a spacing scale, a type scale, a radius scale, a motion scale, so that when a new surface is added to the product, the small decisions are already made. The new surface doesn't get to invent its own radius. It inherits the one the rest of the product uses. Which means the new surface arrives already consistent, which means the product doesn't drift as it grows.
That is the real function of a design system. Not "documentation," not "brand." Resistance to drift.
In CardCue Pro, the tokens are spelled out in a file called DesignSystem.swift that anyone on the team can read and that everything in the app is plumbed through. Radii come from there. Type sizes come from there. Colors come from there. Haptic strengths come from there. Every time we build a new surface. CarPlay, a Live Activity, a Shortcut, a Watch complication, we reach into that file for values instead of inventing new ones. That's why the Watch feels like the phone feels like the widget feels like the lock screen. That's the whole trick.
If you want the token-level spec , exact radii, weights, and warmth values , that lives with the rest of the press kits over at the press page.
For this post I want to leave you with a smaller thought. The reason the app is pleasant to use is not that any one decision was brilliant. It's that all the small decisions agree with each other. A coherent product feels like one object. An incoherent product feels like a federation of arguing departments. The user cannot always tell you which one they are holding in their hand, but they can always tell.
All that time wasn't for the radius. It was to make sure the whole app felt like one object. The radius was the hinge, because it was everywhere, because in a wallet app there are corners in every surface. Get that wrong, and the whole object falls apart. Get it right, and you stop thinking about it. The user never knew. That's the point.