Loading
Skip to content
RAWINRAWIN
HomeAboutProjectsBlogUsesResumeAnalyticsContact
Orbit
00%read
The Dev Log

The Hidden Cost of a “Fast” Website

A website can score well in a performance report and still feel slow. Here's what happens between the metrics, the browser, and the person using it.

Written by
Rushan Siddiqui
Published
September 24, 2026
Reading
5 min read
Filed
Performance

Filed under

  • #Performance
  • #Web Development
  • #Next.js
  • #Frontend
  • #Browser
All entries

Designing Interfaces That Don't Fight the User

A good interface rarely announces that it is good.

It simply makes the next action feel obvious.

You click something and it responds. You submit a form and know what happened. You move between pages and the transition makes sense. You make a mistake and the interface tells you how to recover.

Nothing feels like a negotiation.

That is what I mean by an interface that doesn't fight the user.

Make the Next Action Obvious

Every screen has a hierarchy.

There is something the user is looking at, something they can do, and usually one action that matters more than the others.

If everything is emphasized, nothing is emphasized.

A strong interface gives the user a clear path through:

What is this?

What can I do here?

What should I do next?

This doesn't require giant buttons or aggressive colors.

Typography, spacing, grouping, contrast, and positioning can do most of the work.

The interface should explain itself before the user has to think about it.

What the report recordsrequestfirst paintcontentinteractiveHow the wait feelsfeels responsive
Diagram·Rendering timeline

Feedback Is Part of the Interaction

One of the easiest ways to make an interface feel broken is to let an action happen without acknowledging it.

A button is clicked.

Nothing appears to happen.

The user clicks again.

And again.

Maybe the request was already processing.

The system knows what happened.

The interface didn't communicate it.

Useful feedback can be extremely small:

  • A button changes state
  • A spinner appears
  • Content updates optimistically
  • A success message appears
  • An error explains what went wrong

The goal isn't to animate everything.

The goal is to make the system's state understandable.

Motion Should Explain, Not Decorate

Motion can make an interface feel significantly more coherent.

But animation becomes annoying when it exists only because something can move.

A transition should answer a question:

Where did this element come from?

Where is it going?

What changed?

What should I pay attention to?

A useful transition creates continuity between two states.

An unnecessary transition creates delay.

That distinction matters.

I generally prefer motion that is short, purposeful, and easy to ignore when the user is moving quickly through the interface.

Don't Hide the System

Interfaces become frustrating when they hide important state.

Consider a form submission.

There are several useful states:

text
Idle → Submitting → Success
                  ↘ Error

If the user only sees the initial state and the final state, the middle becomes ambiguous.

Was the click registered?

Is the request still running?

Should I wait?

Should I try again?

Good interfaces expose enough of the system's state to answer those questions without overwhelming the user.

Transparency creates confidence.

Defaults Matter More Than Options

A common instinct in product design is to add more controls.

More filters.

More settings.

More customization.

More menus.

But every additional option introduces another decision.

A better approach is often to choose sensible defaults and expose complexity only when it becomes useful.

The user shouldn't need to configure the interface before they can use it.

A well-designed default is an invisible feature.

Errors Should Help People Recover

An error message like:

Something went wrong.

is technically an error message.

It isn't particularly useful.

A better error tells the user:

  1. What happened.
  2. Why it might have happened.
  3. What they can do next.

For example:

We couldn't save your changes because the connection was interrupted. Your edits are still here. Try saving again.

The second version doesn't just report failure.

It provides a path forward.

That is the difference between exposing an error and designing for recovery.

The Interface Should Respect Attention

Not every element needs to compete for attention.

Persistent animations, excessive notifications, oversized labels, constant motion, and unnecessary interruptions all create cognitive noise.

A quiet interface can still have personality.

In fact, restraint often makes the important details more noticeable.

I like interfaces where hierarchy is established through small differences:

  • A slightly stronger contrast
  • Deliberate spacing
  • Consistent typography
  • Subtle borders
  • Restrained motion
  • Clear grouping

The user shouldn't have to fight through visual noise to find the useful part.

Good UX Is Often Invisible

The most successful interactions can feel almost boring.

A search field remembers what you typed.

A form keeps your data after an error.

A button tells you it is processing.

A page transition preserves context.

A layout doesn't jump while content loads.

None of these features are particularly flashy.

But together they create something important:

Trust.

The user starts to understand how the interface behaves.

And once behavior becomes predictable, interaction becomes easier.

Build for the Person, Not the Screenshot

A beautiful screenshot captures one moment.

An interface has to survive hundreds of moments.

Someone will use it on a small screen.

Someone will have a slow connection.

Someone will press the wrong button.

Someone will return to the page tomorrow.

Someone will use a keyboard instead of a mouse.

Someone will be moving quickly and barely looking at the screen.

Designing for those situations produces a much stronger product than designing only for the ideal state.

The real interface isn't the polished first impression.

It is everything that happens after it.

The Simplest Test

When I build an interface, I like asking a simple question:

Is the interface helping the user move forward, or is it asking them to figure itself out?

If the user has to stop and decode the UI, something can probably be clearer.

If an interaction feels unnecessarily complicated, remove a step.

If an animation delays an action, shorten it.

If a message creates confusion, rewrite it.

Good interface design isn't about adding more intelligence to the screen.

Sometimes it is about removing everything that gets in the way.

  • #Performance
  • #Web Development
  • #Next.js
  • #Frontend
  • #Browser

Written by Rushan Siddiqui

✦
Previous entryWhat Actually Makes a Next.js App Feel Fast5 min read

Site footer

Contactrushansiddiqui5262@gmail.com
Elsewhere
Open to opportunities

© 2026 Rushan Siddiqui. Creation Defined.

Elsewhere

© 2026 Rushan Siddiqui. Creation Defined.

Made with logicShaped by curiosityBuilt with purposeMade with logicShaped by curiosityBuilt with purposeMade with logicShaped by curiosityBuilt with purposeMade with logicShaped by curiosityBuilt with purpose