A deep read of DesignSpo's The Golden Rule Of Web Design (and why you're breaking it) (9:10).
Why this analysis exists
This is one of the source layers behind the BuildOS ui-ux-quality-review skill. The skill encodes the 4-pixel rule as a closed scale and reject-rules for off-scale values. This post is the long form: how DesignSpo argues the rule and why 4 (not 1, 2, 6, or 8) is the Goldilocks unit.
Core thesis
Amateur websites look amateur because their spacing and typography use random, ungoverned values (13px here, 27px there, "whatever looks right"). Pro websites look pro because every dimension — section width, padding, gap, font size — is a multiple of a single base unit. The speaker's specific rule:
"Almost every element, section, container, layout, or anything in your design should be divisible by four pixels."
This is not aesthetic taste; it is a mathematical structure that produces visual rhythm, lets the eye predict where things sit, and frees the designer to think about content instead of pixel-pushing.
Why 4 (and not 1, 2, 6, or 8)
The speaker reasons through the choice explicitly:
- 1px: "really the same as not having a rule at all" — a 1,371px section beside a 1,145px section technically obeys, so no constraint is imposed.
- 2px: "too many options to choose from" — still effectively unconstrained.
- 6px / 8px: "too few options to choose from" — too coarse for fine-grained type and small UI gaps.
- 4px: "the Goldilocks rule" — easy to multiply or divide in your head, applies consistently from small (icon-to-text gap) to large (section width).
How it applies to spacing
The speaker walks a hierarchy of relatedness — closer elements get smaller gaps, more distinct elements get bigger ones. Every value is a multiple of 4:
| Spacing | Use case |
|---|---|
| 4px | Tightly bound items (icon + text inside a button) |
| 8px | Closely related items (rows in a menu) |
| 16px | Standard related components (heading + subheading) |
| 24px | Unrelated components within the same section; standard between containers |
| 32px | Between sections (deliberately doubled from container spacing for visual separation) |
Container/grid math the speaker uses:
- 12 columns as max ("very divisible — half, thirds, fourth, six").
- Container width: 56, 64, or 72 px (all divisible by 4; 56 is "the go-to standard").
- Gutter between containers: 24, 32, or 40 px.
- Max width derivation:
72 × 12 + 24 × 11 = 1,128px— the layout's max width is computed, not chosen.
How it applies to typography
The speaker proposes a beginner-friendly type scale anchored at 16px (smallest legible body), with every step a multiple of 4:
| Size | Role |
|---|---|
| 16px | Body paragraph (base) |
| 20px | Large paragraph |
| 24px | Small subheading |
| 28px | Medium subheading |
| 32px | Large subheading |
| 64px | Display / hero only |
The discipline rule that matters more than the numbers:
"Always use the same text sizes and weights for the same purpose on your website."
Type's job is consistency, not variety.
Why the math looks professional
Three reinforcing effects:
- Predictability. The eye stops working to figure out spacing. The speaker: "there's no faster or more sure way to ruin the way a website looks than by having to move your eye around to different locations every time you go to a new section."
- Implicit grouping. A 4px gap means "these two things are one thing"; a 32px gap means "new section." Hierarchy is encoded by spacing, not just by line/box.
- Cognitive offloading. Once the system is set, "we can free up a lot of mental space for the actual content because we have set rules for layout, typography, spacing."
Operating lessons
When to use 4 vs 8 vs 16 vs 24 vs 32
Use the relatedness test, not vibes:
- Are the two things one composite element (icon + label)? → 4px
- Are they the same kind of thing in a list (menu rows, tag chips)? → 8px
- Are they parts of a single component (heading + subheading, label + input)? → 16px
- Are they different components inside one section? → 24px
- Are they different sections of the page? → 32px (or higher multiple of 4)
Rule of thumb: section padding should be roughly double the container gap, so sections read as more separated than the components inside them.
Setting up the system
In Figma:
- Define spacing tokens as 4, 8, 12, 16, 24, 32, 48, 64, 96.
- Define type tokens as 16, 20, 24, 28, 32, 40, 48, 64.
- Use auto-layout with these tokens — never freeform drag.
In CSS / Tailwind:
- Tailwind's spacing scale (
p-1 = 4px,p-2 = 8px,p-4 = 16px,p-6 = 24px,p-8 = 32px) is already a 4px system. Forbid arbitrary values likep-[13px]. - Define a closed type scale in
tailwind.config(or design-system tokens) — disallow inlinetext-[15px].
Auditing existing designs
Three-pass audit:
- Spacing pass. Inspect every gap, margin, padding. Anything not divisible by 4 is a defect. Anything not in the {4, 8, 16, 24, 32} set is suspect — ask whether it should snap up or down.
- Type pass. List every font-size used on the page. If there are more than ~6 distinct sizes, or any value not divisible by 4, the scale has drifted.
- Role pass. Same purpose → same size + weight. Two H2s on different pages at different sizes is a system failure even if both values are on the scale.
Failure modes
What goes wrong without a mathematical system:
- Random values (13px, 17px, 27px, 31px) that landed there because someone nudged a slider.
- Inconsistent rhythm — sections feel "off" but no one can say why; the eye is doing extra work scanning between elements.
- Hierarchy collapse — a 14px gap and a 16px gap look the same, so grouping reads as muddy. Bigger steps (4 → 8 → 16 → 24) make grouping legible.
- Type drift — every page has slightly different heading sizes; the brand stops feeling like one product.
- Mental load — every new section requires fresh decisions instead of token application; design slows and quality varies by mood.
- Max-width pulled out of the air — picking 1,200 or 1,440 by feel instead of deriving from
(container × count) + (gap × (count - 1)).
How BuildOS uses this
This source informs how the ui-ux-quality-review skill audits spacing and layout. Specific applications:
- Tailwind already gives us the 4px base. The default Tailwind spacing scale (
1 = 4px,2 = 8px,4 = 16px,6 = 24px,8 = 32px,12 = 48px,16 = 64px,24 = 96px) is a 4-pixel system out of the box. The Inkprint design system inherits this. The risk is not the system — it's developers escaping it viap-[13px],gap-[15px],text-[17px]arbitrary values when something "looks off." - Audit Inkprint components against the relatedness ladder. For each shared component (cards, list rows, form fields, modals), verify: 4px for icon+text, 8px for list items, 16px for label+input, 24px between component clusters, 32px between sections. Inconsistencies in
Card,BraindumpModal, dashboard widgets are likely audit hotspots. - Lock the type scale. Define a closed set of font sizes in tokens (16, 20, 24, 28, 32, 40, 48, 64) and forbid arbitrary
text-[Npx]. Add a lint rule or Tailwind plugin that errors on arbitrary spacing/type values outside the design-system scale. - Marketing site is the highest-leverage target. Public pages (home, blog, philosophy posts) face new visitors who decide "looks pro" or "looks amateur" in seconds. Run the three-pass audit on
/,/blog/*, and the philosophy pages first. Verify section padding (32+) is meaningfully larger than container gaps (24). - Derive max-width, don't pick it. Pick a column count, container width, and gutter — compute the max-width from those. Document the math in the design system so future contributors know why the value is what it is.
This is the smallest, most portable rule in the product-and-design library: one base unit, one ladder, one closed type scale. Most "this looks amateur" feelings on a marketing page or product surface trace back to a violation of this rule, even when reviewers can't articulate it.
Related
- Skill:
ui-ux-quality-review— uses the closed scale and reject-off-scale rules as agent checks. - Companion source analyses:
- Source channel: DesignSpo on YouTube.