Why My CSS Always Starts Ugly — And That’s a Good Thing
I need you to know this: if your CSS looks ridiculous at first, you’re probably doing it right.
When I start building a layout, my stylesheets aren’t polished. They’re loud. Brutal. Sometimes they’re embarrassing. Clashing colors. Unstyled buttons. Debug borders everywhere. But that’s not failure — that’s the sketchbook stage. That’s what progress looks like before it gets its makeup on.
I’m Not Designing — I’m Assembling Structure
At this stage, I’m not hunting for elegance. I’m hunting for logic:
- Does the page flow properly?
- Is the spacing consistent?
- Are the components decoupled and reusable?
It’s easier to answer those questions when I’m not distracted by pretty colors or perfect typography. I want contrast. Clarity. Chaos, even. Just until I know what belongs where.
My “Ugly First” Toolkit
Here’s what my CSS often includes in the first 30 minutes of a build:
*, *::before, *::after {
outline: 2px solid red !important;
}
body {
background: hotpink;
font-family: monospace;
}
.btn {
background: yellow;
color: black;
padding: 1rem;
font-size: 2rem;
text-transform: uppercase;
}
This isn’t for style. It’s for visibility. I want every element to scream at me until I know it’s in the right place. Then — and only then — do I tone it down and reintroduce finesse.
Why It Works (Even on Teams)
Some developers think this is amateurish. I call it iterative. When I build with teams, this method has major benefits:
- Review cycles are faster — we’re checking structure, not polish.
- Client feedback is sharper — they focus on layout, not color.
- Developers stay in flow — no getting stuck tweaking border-radius when layout is still broken.
Think of it like wireframing — but in live code. It keeps the stakes low and the decisions honest.
Perfection Comes in Passes
After my “ugly” phase, I move into refinement:
- I replace wild colors with design tokens.
- I clean up selector bloat and naming.
- I run linting, test responsiveness, and fine-tune transitions.
But that second pass only works because the first pass was honest. I didn’t waste time pretending things were finished when they weren’t.
A Word to Juniors (and Their Managers)
If you’re new to front-end work, you might feel embarrassed when your first draft looks like a paint explosion. Don’t be. Every great dev I know has a debug.css
file hidden in their drawer — or at least in their muscle memory.
Ugly-first isn’t lazy. It’s strategic. Just like sketching in pencil before ink. We’re not skipping polish — we’re just saving it for the right moment.
Final Thought
Ugly CSS isn’t a mess. It’s a map. And sometimes, the fastest way to build something beautiful is to stop pretending it needs to start that way.
Want help reviewing a work-in-progress layout? Or need to teach your team to sketch before styling? Contact me here and I’ll walk through it with you — mess and all.