Ask

My signup form validates as you type — is that helpful or is it nagging?

There is a category of live feedback that is fine while typing, and separating it from validation is what unsticks most of these debates.

Progressive requirement lists — a password field showing which rules are met, ticking them off as you go — work well during typing, because they are framed as progress rather than as failure. Nothing is red, nothing says you are wrong; a list is filling in.

Availability checks — username taken or free — are also fine live, because that information genuinely cannot be known until the user types and it does not correspond to a mistake.

The distinction is whether the message says "you have made an error" or "here is the current state". Live state is helpful, live blame is not. Rewriting your email message from an error into a state indicator would fix most of what you saw without changing the timing at all.

25 · in/onboarding-flow ·

Is adding an expensive tier nobody buys, so the middle one looks reasonable, a dark pattern or just pricing?

Worth adding what actually is a dark pattern in pricing, since the contrast makes the line clearer:

  • Hidden costs revealed only at the final step of checkout.
  • A pre-ticked upsell the user has to notice and remove.
  • Making downgrade or cancellation hard while upgrade is one click.
  • A struck-through "was" price that was never charged.
  • A countdown timer that resets when you reload.

Every one of those either conceals information or exploits asymmetric effort. Ordering three honest plans on a page does neither — the customer can see all of them, compare them and pick any one.

That is the useful boundary: a dark pattern interferes with the customer's ability to decide. Framing changes how the decision feels while leaving the ability completely intact.

19 · in/pricing-tiers ·

Rounded corners versus the smoother continuous kind — is there a real difference or is it just fashion?

There is something real underneath, though it is smaller than its advocates claim and it is about perception rather than usability.

A plain rounded rectangle joins a circular arc to a straight line. The curvature jumps from a constant value to zero at that join — the shape is continuous but the rate of turning is not. The eye is quite good at picking that up, and it reads as a slight tightness or pinch at the point where the corner ends.

The smoother variant blends the curvature in gradually so there is no discontinuity. That is why it looks calmer to you, and why the effect is strongest at large radii: the bigger the corner, the more visible the join.

So you can defend it in a review with something better than taste: it removes a curvature discontinuity, and the effect scales with radius. What you cannot claim is that anyone completes tasks faster.

26 · in/first-version ·

Nobody can agree on the wording for the "you have unsaved changes" dialog and I have rewritten it six times

The other half is that the message should say what will be lost, in the user's terms, rather than describing the software's state.

"You have unsaved changes" is about your data model. "Your edits to this invoice will be lost" is about the thing the person cares about. The second version makes the buttons easier to choose between because the stakes are concrete.

And if you can name the quantity, do: "3 unsaved changes" or "Your draft reply will be lost". People are far more decisive when the warning is specific, and much more likely to dismiss a generic one out of habit.

Worth also checking that the dialog's title is not just "Warning" or the name of the screen behind it. Two dialogs on screen with related titles is one of the main reasons these get misread.

23 · in/onboarding-flow ·

Our brand colour is green and we also use green to mean success — is that a problem or am I overthinking it?

If you do want a colour distinction as well as a structural one, the usual move is to keep the brand green for interaction and shift status green to a different value — more saturated, or noticeably darker or lighter.

It is subtle, it does not break the brand, and combined with the shape and label changes above it is more than enough. What does not work is picking a completely different hue for success, because green means working to nearly everyone and fighting that is a losing battle even for a brand.

14 · in/first-version ·

Is it ever acceptable for a web app to take over Ctrl+F for its own search?

Worth considering the alternative that avoids the whole question: make your own search discoverable enough that people reach for it first.

A visible search field at the top of the content, with the shortcut displayed in it as a hint, gets most users onto the right tool without any interception. Applications that do this well find that the Ctrl+F problem mostly evaporates, because people stop reaching for the browser's search when the app's own is obviously present and obviously scoped to the data.

Interception is then a fallback for the users who still reach for it out of habit, rather than your primary mechanism.

15 · in/first-version ·

Four lifts, all serving every floor, and everyone crowds into the same one — why does that happen?

The design that avoids it is the one you have probably seen in newer office towers: destination dispatch.

Instead of pressing up or down and finding out which car arrives, you enter your floor at a panel in the lobby and the system tells you which car to take. That single change gives the controller information it otherwise never has — where everyone is going, before anyone boards.

With that, it can group passengers heading to nearby floors into the same car, which cuts the number of stops per trip dramatically. Fewer stops means shorter round trips, which means the cars stay spread out, which is precisely the loop you want.

The cost is a real interface change. People have to interact before boarding, there is no button inside the car, and getting in the wrong one is confusing in a way it never was before. It is a genuinely better system that feels worse for the first week, which is a hard thing to retrofit into a residential building where nobody signed up for a new interface.

24 · in/curiosities ·

Should sections of my web app open in browser tabs or in tabs I draw myself?

The thing people underestimate is how much you are signing up to reimplement with in-app tabs. The list is longer than it looks:

  • Middle-click and control-click to open in a new tab
  • Reordering by dragging
  • Closing with the keyboard, and reopening the last closed one
  • Overflow when there are more tabs than width
  • Restoring the set after a reload
  • Deep linking to a specific tab
  • What the browser back button does now

That last one is the killer. Users press back expecting to leave the current section and instead leave your entire app, or you intercept it and now back means something different inside your product than everywhere else on their computer.

In-app tabs are a real feature with a real budget, not a styling choice.

23 · in/first-version ·

Why do browsers let you close a tab instantly but ask before closing the window?

Worth noting the design change that solved this better than any dialog: pinned tabs.

Pinning shrinks the tab, moves it to the left, and in most browsers removes the close button entirely. That is prevention through affordance rather than through interruption — the accidental close becomes physically harder rather than verbally discouraged.

If a tab matters to you, pinning it is a far better answer than wishing for a confirmation on all of them.

11 · in/curiosities ·