cat ~ mortuz/blog/better-ui-ux-design.md
#design9TH SEPTEMBER, 2026
<< BACK_TO_DATA_LOGREADING: Better UI/UX Design: A Practical Guide for Developers

Better UI/UX Design: A Practical Guide for Developers

Better UI/UX Design

Good UI is not about adding gradients, shadows, animations, or making an interface look "modern."

Good UI makes the right action obvious. Good UX makes the entire journey feel effortless.

After years of building applications, you eventually notice something important: a technically excellent app can still feel amateurish if the interface makes users think too much.

This guide is a practical framework for designing better apps---from the first screen to empty states, forms, navigation, errors, and micro-interactions.


1. Start With the User, Not the Screen

The most common mistake developers make is starting with:

"What should this screen look like?"

Instead, start with:

"What is the user trying to accomplish?"

For example, imagine you're building a habit-tracking app.

A developer might think:

Dashboard → statistics → calendar → habits → settings

But the user's mental model is more likely:

What should I do today? → Did I complete it? → Am I making progress?

That difference completely changes the interface.

Before designing a screen, answer three questions

  1. Who is using this?
  2. What are they trying to accomplish?
  3. What is the most important action on this screen?

Everything else is secondary.


2. Design Around One Primary Action

Every important screen should have a visual hierarchy.

The user should be able to glance at the screen and understand:

What is this?What matters?What should I do?

Design around one primary action

Bad

Imagine a screen with:

  • 4 equally prominent buttons
  • 6 cards
  • 3 different accent colors
  • multiple competing headings
  • several icons
  • large promotional banners

Everything is shouting.

Better

Use hierarchy:

Page title

Supporting information

Primary action

Secondary information

Less important actions

The primary action should visually dominate.

Rule: If everything is visually important, nothing is visually important.


3. Stop Treating Everything as a Card

Cards are useful.

Cards are also one of the most overused patterns in modern applications.

A common dashboard looks like:

┌─────────────┐  ┌─────────────┐
│   Card 1    │  │   Card 2    │
└─────────────┘  └─────────────┘

┌─────────────┐  ┌─────────────┐
│   Card 3    │  │   Card 4    │
└─────────────┘  └─────────────┘

┌─────────────┐
│   Card 5    │
└─────────────┘

It looks organized.

But visually, everything has the same importance.

Instead, ask whether a container is actually necessary.

Use hierarchy instead of borders

Today's progress

████████████████░░░░  80%

4 of 5 habits completed


Next

Read for 20 minutes                 →

Whitespace can create separation just as effectively as borders.


4. Whitespace Is a Design Tool

Developers often try to fill empty space.

Designers often ask:

Does this empty space improve comprehension?

Whitespace:

  • separates concepts
  • improves readability
  • creates hierarchy
  • makes important elements stand out
  • reduces visual noise

A crowded interface doesn't necessarily contain more useful information.

It often contains more competition for attention.

A useful test

Take your design and remove 20% of the elements.

Then ask:

Is the product easier to understand?

If yes, you probably had unnecessary visual noise.

Use whitespace effectively


5. Use a Consistent Spacing System

Don't randomly choose:

13px
17px
22px
27px
31px

Create a system.

For example:

4
8
12
16
24
32
48
64

Then use those values consistently.

For example:

Screen padding       24
Section spacing      32
Card padding         16
Element spacing      12
Icon/text gap         8

The result is subtle, but powerful.

The interface begins to feel like one product rather than a collection of individual screens.


6. Typography Is More Important Than Decoration

You can have beautiful illustrations and animations, but poor typography will still make an app feel cheap.

Think in terms of roles, not individual font sizes.

Example type scale

Display
32px / Bold

Heading
24px / Semibold

Subheading
18px / Medium

Body
16px / Regular

Secondary
14px / Regular

Caption
12px / Regular

You don't need six different fonts.

You need a clear hierarchy.

Avoid this

YOUR DAILY PROGRESS

You completed your habit today

COMPLETED

3 habits remaining

Everything is screaming.

Instead:

Today's progress 3 of 4 habits completed

The interface should feel calm.


7. Color Should Communicate, Not Decorate

A common mistake is choosing five beautiful colors and using all of them.

Instead, define semantic colors.

Primary
→ Main actions

Success
→ Completed / positive

Warning
→ Attention required

Error
→ Something went wrong

Neutral
→ Everything else

The exact colors aren't important.

The relationship between them is.

If everything has a strong color, nothing has a strong meaning.

A practical palette

Primary       #6C5CE7
Success       #22C55E
Warning       #F59E0B
Error         #EF4444
Background    #F8FAFC
Text          #111827
Secondary     #6B7280

8. Design the Empty State

One of the most neglected screens in application development is the empty state.

Developers design:

"What happens when there is data?"

Users also experience:

"What happens when there isn't any data?"

Design meaningful empty states

Instead of:

No data.

Try:

No habits yet

Create your first habit and start building
your daily routine.

        + Create habit

An empty state should answer:

Why is it empty?

and

What should I do next?


9. Design Loading States

Don't make users stare at a blank screen.

Bad:

[ completely empty screen ]

           Loading...

Better:

┌──────────────────────────┐
│ ▓▓▓▓▓▓▓▓▓▓▓              │
│ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓         │
│ ▓▓▓▓▓▓▓                  │
└──────────────────────────┘

Skeleton screens are particularly useful when you know the eventual structure of the content.

Provide clear loading states

But don't animate everything simply because you can.

Animation should communicate progress, continuity, or cause and effect.


10. Give Immediate Feedback

When someone taps something, the interface should acknowledge it.

For example:

Tap "Save"

      ↓

Button
Saving...

      ↓

✓ Saved

Without feedback, users wonder:

Did it work?

They may tap again.

Then again.

Then you have duplicate actions.

A good interface keeps users informed about what is happening.


11. Prevent Errors Instead of Explaining Them

A good UX doesn't merely tell users that they made a mistake.

It tries to stop the mistake from happening.

Bad

Password must contain 8 characters.

[ Submit ]

The user discovers the problem after submitting.

Better

Password

●●●●●●

✓ 8+ characters
✓ One number
○ One special character

The interface guides the user toward success.

Preventing an error is better than explaining an error after it happens.


12. Make Errors Human

Never make users decipher technical errors.

Developer

Error 422:
VALIDATION_FAILED

User

We couldn't save your changes.

Your email address looks incomplete.

[ Fix email ]

A good error message has three parts:

What happened

Why it happened

What the user can do

Give helpful error messages

For example:

Payment didn't go through Your bank declined the transaction. You can try another payment method.

(Try another card)


13. Design for Recognition, Not Memory

Don't make users remember information from one screen to another.

Bad:

Select your project

→ Project ID: 84291

Then later:

Enter Project ID

[              ]

The user shouldn't have to remember 84291.

Better:

Project

[ Website Redesign ▼ ]

The principle is simple:

Show users what they need rather than making them remember it.


14. Don't Hide Everything Behind Icons

Developers love icon-only buttons.

Users don't always understand them.

For example:

  🗑    📌    ⟳    ⋮

What does each one mean?

For familiar actions, icons can work.

For ambiguous actions, combine icon + label:

↗ Share

↓ Download

✎ Edit

🗑 Delete

And be especially careful with destructive actions.


15. Navigation Should Follow the User's Mental Model

Don't design navigation around your database.

This:

Dashboard
Entities
Records
Metadata
Configuration

might make perfect sense to your engineering team.

But users may think:

Home
Projects
Tasks
Reports
Settings

The interface should speak the user's language rather than exposing your internal architecture.


16. Don't Make Every Screen Look Important

A mature interface understands hierarchy at the product level.

Not every screen deserves:

  • huge headings
  • gradients
  • illustrations
  • animations
  • giant buttons
  • dramatic cards

Sometimes a screen should simply get out of the way.

Think of good design as a conversation.

Some sentences deserve emphasis.

Some don't.


17. Use Motion With Purpose

Animation is wonderful when it explains something.

Good

A card expands into a detail screen.

The user understands:

This is the same object, now expanded.

Good

A completed task smoothly moves into a completed section.

The user understands:

My action caused this change.

Bad

Every button bounces.

Every card floats.

Every screen fades.

Every icon rotates.

That isn't UX.

That's decoration.


18. Design the Complete State Machine

One of the biggest differences between amateur and professional UI design is state coverage.

Don't design only:

Normal state

Design:

Loading
↓
Success
↓
Empty
↓
Error
↓
Offline
↓
Partial data
↓
Permission denied
↓
First-time user
↓
Returning user

For example, a weather app isn't just:

Weather: 28°C

It might encounter:

Loading weather...

Weather unavailable

Location permission required

No internet connection

Location not found

Weather updated 2 minutes ago

The best interfaces are prepared for reality.


19. Design for Every Screen

A great product should adapt to the device rather than simply stretch the same layout.

Design for every screen

Mobile

Prioritize:

  • essential content
  • primary actions
  • simple navigation
  • touch-friendly controls

Tablet

Use additional space for:

  • richer context
  • supporting information
  • multi-column layouts
  • expanded navigation

Desktop

Take advantage of the larger canvas for:

  • deeper information
  • side panels
  • richer dashboards
  • more powerful workflows

The goal isn't to make every screen identical.

The goal is to create a consistent experience that feels native to each screen size.


20. Consistency Builds Trust

Users learn interfaces through repetition.

If a primary button is blue on one screen and pink on another, or if the same action behaves differently in different places, the user has to stop and think.

Create a small design system covering:

Colors
Typography
Spacing
Buttons
Inputs
Cards
Navigation
Icons
Feedback
Motion

Maintain consistency across screens

Once these rules are established, every new screen becomes easier to design.

More importantly, the product starts to feel intentional.


21. Small Changes Can Create a Big Difference

Consider a typical task application.

Before

┌───────────────────────────────┐
│ My Tasks                      │
│                               │
│ All  Today  Upcoming  Later   │
│                               │
│ ○ Write research paper  High  │
│ ○ Buy groceries         Today │
│ ○ Call mom              Today │
│ ○ Plan trip             Tom.  │
│ ○ Read book             Tom.  │
│ ○ Workout               Tom.  │
│ ○ Clean room            Sep 10│
│ ○ Attend meeting        Sep 10│
│                               │
│             +                 │
└───────────────────────────────┘

Everything is technically functional.

But the interface makes the user scan too much.

After

Good morning

3 of 5 tasks completed today

[ + Add New Task ]

Today

✓ Review design
✓ Build landing page
○ Write blog post
○ Plan next sprint

Progress

████████████████░░░░  80%

The second version isn't necessarily more powerful.

It is simply more focused.

Small changes, big impact


22. The 5-Second Test

Here's one of the most useful practical UX tests.

Show someone your screen for five seconds.

Then hide it.

Ask:

What was this screen about?

Then:

What could you do here?

Then:

What would you tap first?

If they can't answer, don't immediately blame the user.

The interface probably isn't communicating clearly enough.


The Developer's UI/UX Checklist

Before shipping a screen, ask:

Structure

  • Is the purpose of the screen obvious?
  • Is there a clear primary action?
  • Is the visual hierarchy obvious?
  • Is unnecessary information removed?

Typography

  • Is the heading clearly different from body text?
  • Is secondary information visually quieter?
  • Is the text comfortable to read?

Spacing

  • Is spacing consistent?
  • Are related elements grouped together?
  • Is there enough breathing room?

Interaction

  • Does every important action provide feedback?
  • Can users undo important actions?
  • Are destructive actions protected?

States

  • Loading state
  • Empty state
  • Error state
  • Success state
  • Offline state
  • Permission state

Accessibility

  • Adequate color contrast
  • Touch targets are large enough
  • Information isn't communicated only through color
  • Text can scale reasonably
  • Icons have meaningful labels where necessary

The Most Important Principle

There is a temptation in UI design to ask:

"Does this look good?"

That's the wrong first question.

Ask:

"Does this make sense?"

Then:

"Is it easy to use?"

And finally:

"Does it look good?"

Visual polish matters. But polish should sit on top of a strong structure.

The best interfaces often feel almost inevitable. You look at them and immediately know where to go, what to do, and what happened after you did it.

That is the real goal of UI/UX:

Don't make users admire the interface. Make them forget the interface is there.


A Simple Framework to Remember

                 GOOD UI/UX
                     │
          ┌──────────┴──────────┐
          │                     │
       CLARITY               EASE
          │                     │
     Hierarchy              Simplicity
     Typography             Familiarity
     Spacing                Feedback
     Contrast               Error prevention
          │                     │
          └──────────┬──────────┘
                     │
                  TRUST
                     │
             Predictability
             Consistency
             Recovery

Good design isn't about following every trend.

It is about understanding people, respecting their attention, and removing unnecessary friction.

Build the interface so the user can focus on the work---not on figuring out the interface.