Writing · 8 min read

What makes an interface feel finished?

Finished is when nothing on the screen is left to a default. Taste chose the sizes, colors, motions, states and gaps. What makes them finished is that each is written down as a short list of things you can name. Then you can hold a page to it.

A large dusty slate hand plane, its rear handle cropped by the right edge of the frame and its sole flat on the cream ground, and one solid black curl of shaving rising from its mouth and off the top edge.

Key idea 1 of 7

Finished is when nothing is left to the defaults

Ask what makes an interface feel finished and most answers are a mood: polished, considered, calm. Those are true and useless. You cannot check a page for calm.

What you can check is the thing under the mood. An interface feels finished when every value on it was decided, and unfinished exactly where a browser, a framework or a hurry decided instead.

The default line height. The default blue. The corner rounded because a component library rounds corners. The 300-millisecond transition, because that was the number in the example. Together they are the difference between software that feels made and software that feels assembled.

So the honest answer is a short list, plus the checks that keep it true after the person who cared has moved on.

Key idea 2 of 7

Type is a scale, not a set of sizes

A finished interface has a small number of type sizes, and every piece of text is one of them. This site has fourteen, from 11px to 80. A check renders every page at four widths and refuses any size not on the list.

Headings ride four fluid ramps between named steps, all sharing one viewport window. The ladder cannot invert at any width. The h2 is never larger than the h1 on a phone, a bug this site had once and cannot have again.

The rest follows from the size. Leading follows it: display type sits tight and reading type sits open. The body of an essay runs at a measure of fifty-two characters. That is as long as a line can be before the eye loses the way back.

Tracking follows the size too. Large type is set tighter and small caps are set looser. A ramp takes the tracking of its ceiling, because tightness shows at the top and only slightly at the bottom.

Choosing those relationships took judgment. Once chosen, they become a system. What a reader feels as finished type is a scale they cannot see, holding every size in the same family.

Key idea 3 of 7

Color is a pair, not a swatch

A color is never on its own. It is ink on a ground, and the number that matters is the ratio between them. A finished interface has a palette small enough to tabulate every pair, and it has the table.

This site's color spec lists each ink against each ground with its measured ratio. The sage accent is two tokens rather than one. The fill that clears the floor for a 2px rule does not clear it for small type. Put the fill on a caption and it fails at 3.56:1. The text step clears at 5.82. Same hue, two jobs, two numbers.

Most palettes miss text that sits on a picture. There is no ground color to compute from, so the ordinary check has nothing to say. That is how a caption on this site's own hero once shipped at 3.88:1 against a 4.5 floor.

The check that caught it reads the pixels under the letters. A good eye chose the palette. Finished color is every pair on the page having a number, including the pairs that only exist once the photograph loads.

What this site holds every page to, on every merge
14
steps on the type scale, and every rendered size at four widths is one of them
11,736
colors a reader can see, across every page and every reachable state, each measured against its floor, at the sweep of 1 October 2026
6
durations and one curve, and a timing that is not one of them is refused by the token check

Key idea 4 of 7

Motion is a duration, a curve and a rule about interruption

Motion is where unfinished shows fastest. A transition that is slightly too long is felt by everyone and named by no one. A finished interface has a motion spec the way it has a type scale. This site's has one easing curve and six durations, from a state change at 120 milliseconds to a line describing itself at 900.

The design-engineer postings use two words, easing and interruptible. Both are decisions, not flourishes. Easing is the curve: an ease-out for something arriving, so it decelerates into place the way a thing with mass does.

Interruptible is the harder one. If a reader scrolls back while something is still animating in, the honest interface rewinds it. It does not finish a movement nobody is watching.

On the case study pages here, nothing has a clock. The scrollbar is the playhead. Scroll forward and an element plays in. Scroll back and it plays out, and a half-drawn line simply un-draws.

The rule under all of it: every animation resolves to its finished state when the motion is absent. That holds for a reader who has asked for reduced motion, a page with no script and a search engine. A drawing that is only complete after it has animated is a drawing some readers never see finished.

Key idea 5 of 7

A state is a decision, and every state gets one

Every control has more states than the one in the mockup. There are hover, focus, pressed, disabled, loading, refused, and whatever a script adds.

An unfinished interface designs one state and lets the framework paint the rest. A finished one has a decision for each, consistent enough to be a rule.

One button, two ways to make its states

Left to the defaults

  • Disabled is the enabled button at half opacity
  • Focus is whatever the browser draws, or nothing
  • Refused looks like disabled, and says nothing
  • Hover changes a color nobody measured

Decided

  • Disabled is quieter, not lighter: ink that still clears its floor
  • Focus is a ring in the accent, two pixels off the edge, on every control
  • Refused is a rule in the one caution color, with the reason beside it
  • Hover is a step on the palette, and its ratio is in the table

The dispatch prototype, Second Look, is where this matters most. Its interesting states only exist after a press. When a rule refuses an assignment, the button does not go gray.

The refusal sits above the recommendation in the one caution color the interface spends, with the hours-of-service limit that caused it. The states a reader reaches are the interface; the resting page is the cover.

The slate hand plane set aside and cropped by the top of the frame, and below it three curls of shaving lying on the cream, two solid black and the middle one dusty rose.
What is left when the work is done: the same stroke every time, and the one that is different is different on purpose.

Key idea 6 of 7

Spacing is what makes a page read as one thing

Spacing is the least noticed and the most felt. This site's scale is nine fixed steps from 4px to 48, with three fluid ones above that. Every gap on every page is one of them. That is why two components made a month apart sit together as if they were made in one afternoon.

The scale also decides how a change is made. The gap between the hero's actions and its facts came down by twenty pixels on a phone. The twenty came off as two tokens, 48 to 40 and 32 to 20. It was not one margin landing on a number the scale does not have.

A panel of four facts went from two columns to one below 640. At 390 wide, two columns of serif were eight short lines to read two facts. Each of those is a small decision, made against a scale rather than by nudging until it looked right. Nudged looks right today. Decided looks right next to the thing built next year.

Key idea 7 of 7

Craft is what you can hold the page to

All of the above is a list of decisions, and a list of decisions decays. Someone adds a size, a color, a 300-millisecond transition, and none of it is wrong enough to notice.

So the last thing that makes an interface feel finished is not on the screen. It is the set of checks that measure the rendered page and refuse the change that breaks a rule.

What a check asks of every page, in a real browser
  1. Colordoes every ink clear its floor on the ground it actually sits on, at rest
  2. Statedoes it still clear when hover, focus and a script's own state are forced
  3. Typeis every rendered size one of the fourteen, at four widths
  4. Curvedoes every border follow the whole corner, or only part of it

The last of those is the one people find surprising. A rounded surface can have a border on one side only, or one that stops where the radius begins. A renderer does that by default. It is one of the most reliable tells of an unfinished page.

On this site a check looks at close to thirty thousand elements across the pages and their states. It refuses any rounded one whose border does not follow the curve all the way round. Nobody would write that rule down for a reader. It is exactly the kind of rule a reader feels.

This is what I mean when I say craft. It is not an eye, though it takes one. It is a short list of things that can be named, a scale for each, and something that refuses the page when it drifts.

The eye chose every step on those scales. The checks let the choice survive the next person to touch the page. That is the difference between an interface that looked finished the day it shipped and one that still does.