← All notes

Why I Design Before I Code

Designing first helps me turn ambition into clear decisions before implementation makes every change more expensive.

By Jansen Cadorna4 min read
  • design
  • process
  • engineering
Cover image for Why I Design Before I Code

I used to think starting quickly meant opening the code editor quickly. It felt productive because components appeared, pages rendered, and I could point to visible progress.

But I often reached the same uncomfortable point: the interface worked, yet I could not explain why it looked or behaved the way it did. I was making product decisions one CSS class at a time.

Now I design before I code.

That does not mean I create a perfect Figma file for every idea. It means I give the problem a visual structure before implementation starts hardening my assumptions.

Design makes the goal visible

Code is good at answering how. Design forces me to answer what and why first.

Before building a page, I want to know:

  • What should someone understand in the first few seconds?
  • What is the most important action?
  • Which information deserves visual weight?
  • What should the experience feel like?
  • What can I remove without weakening the idea?

These questions sound simple, but they prevent a surprising amount of wasted work. A rough wireframe can reveal that a section has no purpose long before I spend time making it responsive, accessible, and reusable.

Designing first is not delaying the build. It is deciding what deserves to be built.

My process is intentionally lightweight

I do not want design to become another form of perfectionism. The goal is clarity, not ceremony.

intent -> hierarchy -> visual direction -> interaction -> code

I usually begin by writing the page's job in one sentence. Then I sketch the information hierarchy, choose a visual direction that supports the product, and test the most important state at desktop and mobile sizes.

Only after those decisions feel coherent do I move into code.

Before codingWhat it resolves
One-sentence goalThe page's actual purpose
Rough layoutReading order and hierarchy
Type and color directionTone, trust, and emphasis
Key responsive frameWhat survives on a small screen
Primary interactionWhere attention should lead

The design can still change during implementation. In fact, it usually does. Browser constraints expose ideas that looked better in a static frame than they feel in use. The difference is that those changes now happen against a clear intention instead of a blank canvas.

It makes my code more deliberate

When I know the layout and states ahead of time, my components become easier to name and scope. I can see which patterns are genuinely repeated and which elements only happen to look similar.

I also avoid building flexibility that the product does not need. Instead of creating a universal card system before I understand the content, I can build the specific structure, observe the real repetition, and extract only what earns reuse.

The data flow becomes clearer too:

content priority
      -> component responsibility
      -> responsive behavior
      -> implementation details

This order matters to me. If I start from implementation details, I can end up protecting code that serves the wrong experience. If I start from content and intent, the code becomes a tool for expressing the product rather than the product becoming an excuse for the code.

Design gives ambition a shape

I care about building work that feels considered, not merely functional. I want my projects to be useful, technically sound, and visually memorable. That ambition can become vague very quickly if it stays in my head.

Design turns it into something I can evaluate.

I can compare the interface with the goal. I can notice when the hierarchy is noisy, when the tone feels borrowed, or when a beautiful section is distracting from the product. I can make those corrections before being attached to an implementation.

This is also why I do not see design and engineering as separate identities. The strongest work happens when each discipline improves the other. Design gives my code direction. Engineering gives my design honesty.

The standard I am building toward

Designing first has slowed down the first hour of some projects and saved days later. More importantly, it has changed what I consider progress.

Progress is not the number of components I finished today. It is how much uncertainty I removed from the product.

I still value speed. I just want speed in the right direction.

My goal is not to make every project look polished before it becomes real. My goal is to enter implementation with enough conviction to build intentionally, and enough openness to improve the idea when reality pushes back.

That balance—clear direction without rigid attachment—is the process I want behind every ambitious product I make.