Ch.2: Why Engineer UIs Feel So Hard to Read

Outline

Transcript

0:00 You know that moment when you've just shipped something. Tests pass, data loads instantly, the API is clean, 0 console errors, you got the spec exactly right. And then you step back, you look at the actual screen the user is going to see, and... I mean, I'm being kind here. It kind of looks like a ransom note. Ha. Cut out from a dozen different component libraries. Right. Today we fix that. One rule, applied in 5 or 6 places, and most product screens get noticeably more polished. So picture the page. Left sidebar.

0:35 Top filters. Three equal columns. Four cards with the same border. A table. A chart. Two blue buttons. And maybe a banner at the top because someone needed to announce something. And technically every piece has a reason to exist. Right. That's what makes it dangerous. Nothing's obviously silly. But the whole page is asking the user to solve the layout before they solve their actual task. Yeah, the smell isn't complexity. The smell is equal competition. It's like walking into a crowded room where 10 people are shouting your name at the exact same volume.

1:10 Your brain just shuts down trying to figure out who to listen to first. Right. And the eye picks the wrong person and gets stuck listening to them. We've all shipped that screen. Mine, I once called a dashboard, which was generous. So the rule is simple. Give the screen one main reading path. One main path doesn't mean one column forever, though. Right. It means the eye should know where to start, where to continue, and what's, Secondary. On a settings page, the main path might be the account sections in the center.

1:43 On an onboarding flow, it might be the form. On a docs page, it's the article. And the other stuff is allowed to exist, but it has to act like supporting cast. Exactly. Supporting cast. Background score under the dialogue, not competing for the line. The ranking is everything. Right, the fastest way to create that path is controlled width. Wait, just width? Before spacing, before color, before anything else? Yeah. Before all of it. Picture the page that stretches every paragraph, form, and table across the full monitor.

2:15 The designer-free special. It feels efficient because you're using all the pixels. But the user's eye has to travel too far. Yeah, it's literally like watching a tennis match. Your eyes ping-pong all the way to the right edge of the screen. And then this massive return sweep back to the left edge to find the start of the next line. The eye just gets exhausted. So you constrain the main content. Exactly. A form doesn't need to be fifteen hundred pixels wide. A settings section does not become more professional because the labels live in another time zone from the values.

2:49 Yeah. And the user has to scroll horizontally just to remember what they were editing. Right. Controlled width isn't wasted space, it's a decision about reading comfort. And once the width's right, the second move is spacing rhythm. Not random margins. Rhythm. Meaning what, exactly? The difference between small, medium, large, and "I nudged it until it stopped annoying me." I used to throw margin top 12 here, padding 32 there. Three different gap sizes in one form, all from eyeballing. Treating space like bubble wrap just filler to keep things from touching.

3:24 Oh, that's a perfect way to put it. Spacing as bubble wrap. Which means the gap between a label and its input is the same as the gap between two unrelated sections, and the user gets no grouping signal at all. So walk me through the mechanism. How does spacing actually create grouping when there's nothing on the screen but empty space? Let's use a specific scenario. Say you only allow yourself a small set of gap sizes. 8 pixels between a label and its input. 16 pixels between separate form fields.

3:54 48 pixels between entirely different sections of the page. Same form, three magnitudes, no eyeballing. Oh. So the empty space is doing the heavy lifting. It's telling the user what belongs together before they read a single word. That makes sense. But I'm realizing something. The rhythm only works if the gaps stay predictable. The moment you have 8 different gap sizes, the system collapses back into noise. Right. It's like indentation in code. The compiler might not care, but the reader absolutely does.

4:25 So the 3rd move is the one most engineers under-rate. Choose one primary action per viewport. Oh, that's a good one. Not one action on the entire product, right? Right. Just one action that owns the current view. A billing page can have update plan, download invoice, change card, apply coupon, contact support, and cancel account. But if every action has the same weight, The user has to rank risk and importance alone. Yeah, and the layout should do some of that ranking. That's it. Make the next safe, common action obvious.

4:57 Yeah, and the secondary stuff has to be available but quieter. Right. And then, honestly, the destructive actions can't feel like siblings of the routine ones. That's where it gets dangerous. Yeah. The "siblings" framing is exactly why this is hard to enforce in design reviews. Right. Once you start pricing actions by risk, the layout, you know, writes itself. Now, let's unpack this one carefully, because it's where most engineer screens go sideways. The too-many-cards problem. Oh, you see this one a lot.

5:27 Engineers reach for cards because cards feel safe. A card gives you a border, a heading, a shadow, a place to put content, and the comforting illusion that the design problem is now contained. Until every idea gets a card. Right. Then the page becomes a parking lot of rectangles. The eye bounces from box to box because every section is framed like it deserves equal attention. Parking lot of rectangles, yeah. And the parking lines are all the same shade of gray. The fix is often subtraction. Remove a border.

5:59 Let a heading and spacing create the group. Use a card only when the content is truly a repeated object or needs a real frame. So where does the structure come from if not the cards? Bands. Page sections as bands. Meaning the page has full-width or content-width bands with headings, then content inside them? Ohh, exactly. The section heading does the orientation work. Spacing separates one decision area from the next. The main column stays calm. So instead of card inside card inside panel, you get one surface and a stronger structure.

6:37 Right. Cards are useful for repeated items pricing tiers, search results. But when the whole page is just framed panels, the user is reading the frames instead of the content. Bands over boxes, every time. Now, before anyone panics, the rule is not "never use sidebars" or "never use columns." Good, because half the internet would fail immediately. Right? Imagine telling Gmail tomorrow, sorry, no left rail, no inbox list, just one heroic column down the middle. There would be riots. Yeah, the support team would quit by lunch.

7:12 Exactly. So here's the actual distinction. A column with a real job is doing structural work a navigation sidebar helps orientation, a filter sidebar narrows a dataset, a details panel inspects a selected item. A column without a real job is just a region competing for the same attention as the main panel. Meaning the contrast axis is whether the column has a job, or whether it's just there because the screen is wide. Right. Same DOM, opposite effect. Think of it like a side conversation at a dinner party.

7:44 If your seatmate is telling you something useful, you can attend to it without losing the main conversation. If they're just talking to be heard, the whole table goes quiet. Oh, that is a perfect parallel. So the column itself is fine. The competition is what kills it. Exactly. Columns are not the enemy. Undecided hierarchy is. Yeah, that tracks. A column without a job is not a column. It's a competitor for attention. Let's go to a really common case. Forms and settings pages show this rule clearly because they're mostly decision sequences. Right.

8:18 The user is asking, what's this section, what do I need to change, what happens if I save? Yeah, exactly. So group related fields under clear section headings. Keep labels close to inputs. And, you know, put help text where it helps the current decision, not as a paragraph wall. And keep the save action in a predictable place. And, big one, do not put the dangerous stuff right next to the routine stuff. How bad is it when they're side by side? I mean, it's painful. Account deletion sitting next to "save changes" means someone, eventually, deletes their account when they meant to save.

8:54 So you isolate the irreversible stuff. Account deletion, billing cancellation, key rotation, anything destructive needs its own visual neighborhood. So this is where the PMs push back. They'll come to me and say, look, the screen has to be dense MRR, churn, the funnel, the support queue, the deploy status, all above the fold. They want every metric to be a quote-unquote KPI. Hold on. I don't buy that entirely. Okay, why not? Because some dashboards genuinely do need a lot visible at once. The on-call screen, the trading floor, the manufacturing monitor.

9:30 The PM isn't always wrong to want density. So what's the actual rule? Now THAT is the question. Density is fine. Equal emphasis is not. A dashboard can have many modules and still have a scan path. The scan path. Okay, walk me through what that actually looks like. Headline metrics first, exception states next, drill-down table after that, and supporting trend panels around the edge. The point isn't to fit everything above the fold. The point is that if someone looks for 3 seconds, they know what changed, what's urgent, and where to act.

10:02 We've all built that dashboard. The one that feels like homework. You stare at it and you have no idea where to start. Here's where it gets really interesting. Responsive layout exposes whether you really decided what matters. Explain the mechanism there. How does the small screen out the indecision when the desktop didn't? Let's use a specific scenario. Same billing page, two viewport widths. On desktop, the main column has three filters in a top row, the cancellation link on the right rail, an upgrade promo above the fold, and the routine save at the bottom.

10:35 All four exist, all four get pixel space. Drop the viewport below seven hundred and 68 pixels, and the layout has to pick a stack order. Oh. So the desktop wasn't hiding the indecision. It was distributing it across the canvas. Mobile just makes the priority visible. Right. If filters, banners, ads, secondary cards, and helper panels stack above the actual task, the layout is telling on itself. So it's about what the layout chooses to drop first. The smaller the viewport, the less patience the layout gets.

11:10 Primary task first. Context close by. Secondary tools after. Destructive or rare actions lower and isolated. Picture this. Same billing settings page, two versions. Let's hear it. Before: four equal cards, two primary buttons, a full-width form, a right rail, and a cancellation link floating near normal actions. Oh, I can already feel that page. Yeah, that's a train wreck waiting to happen. So what's the rescue look like? One constrained main column. Account status at the top. Plan controls as the primary section?

11:44 Right. Then invoices as a quieter table, payment details grouped below. And the cancellation link? Isolated at the bottom. Far from the routine stuff. Same information. Different decision order. That's it. No new feature. No new copy. Just, I mean, hierarchy. Once you see it that way, you can't un-see it. Look, let's compile a fast audit you can actually run on Monday. What's the first thing? Trace the eye path. If you can't draw a simple line through the screen's priority order, the layout is probably undecided.

12:14 Oh, that one's hard, because the team will swear the priority is obvious right up until you ask them to draw it. Yeah, and then nobody can. What's next? Circle the primary action. If you circle three, the page is asking too much. Sure. And then count containers. If everything's boxed, remove 1 frame and see whether, Spacing plus headings can do the job. Yeah, we've all been there. You think every section needs a frame. Then you remove one and the page actually breathes. Yeah. The first time I did that I literally just deleted four borders and the page looked twice as expensive.

12:50 Wow, four. I hadn't even thought of borders as the load-bearing thing. Okay, what else? Check width. If paragraphs, forms, or settings rows stretch across the whole monitor, constrain the reading path. And last, check spacing rhythm. Related things should sit closer than unrelated things. It's a small pass, but it catches a shocking amount of amateur-feeling UI. So the layout rule isn't complicated. One main path, controlled width, predictable spacing, fewer competing boxes, one obvious primary action.

13:22 The hard part is applying it before you start polishing details. If the structure is undecided, better colors only make the indecision prettier. Yeah. You can't paint over undecided. Coming next, we take the densest product surfaces engineers ship and make them scan fast: dashboards, cards, and tables. Honestly, that's such satisfying design when it lands. Thanks for listening to Learning Podcasts.