Design Philosophy
Core Principle: Systems That Enable Speed, Grounded in Craft
Design is infrastructure for a good experience. People need to move through what they're doing without friction. Once that works, we can make it feel exceptional.
I start with the power user. Keyboard shortcuts, consistent patterns, and fast paths come first. Then I design the onboarding that brings everyone else along. A system that works for experts and stays accessible for newcomers respects both.
Usability and craft aren't a choice and order matters: first it has to work fluidly, then it needs to feel right.
Research as Foundation
I don't design from assumption. Before any pixel or component, I want to understand who the users are, what they're trying to do, and where the current experience falls short. That means:
- Competitive analysis to see what patterns already exist and where the gaps are.
- User research through interviews, observation, and behavioural data. Not demographics, but how people actually behave.
- Domain discovery to learn the terminology, workflows, and edge cases that make the problem specific.
- Constraint mapping for business goals, technical limits, and timeline realities.
Research doesn't stop once building starts. Every prototype, test, and piece of feedback adds signal. Good research doesn't hand you a solution. It points to what's worth exploring. The design still needs intuition and craft, though, and those instincts work better when they're aimed at the right target.
Emotion & Feel Over Perfect Rationality
If it doesn't feel right, it's not done.
I trust intuition. The gap between technically correct and actually good is usually a matter of feel: a timing curve that's slightly off, spacing that aligns on paper but looks uneven, a transition that works but doesn't land. I design by feel first, then check the reasoning.
Rhythm Is the Invisible Grid
My background in music production shapes how I think about design more than most people expect. In music, rhythm is the relationship between events in time. A hi-hat nudged a few milliseconds ahead changes the entire groove. The same principle applies to typography and spacing.
A type scale isn't just a list of sizes. The jump from `h1` to `h2` is an interval, like a musical fifth. Consistent ratios feel predictable; the eye learns the pattern. Erratic jumps feel dissonant even when every size is readable.
Spacing works the same way. Line height is the breath between phrases. Margins and padding set the rests. Section spacing determines the overall tempo of the page. I treat the 8px grid as a time signature. When I want tension or emphasis, I break the pattern deliberately, the way a drummer accents the off-beat.
The goal is groove: the state where the user stops noticing the layout and just moves through the content. That's when the interface disappears and the work becomes visible.
Typography as Voice
A typeface has character. The weight and contrast set the timbre. The scale becomes the melody. I choose type the way I'd pick an instrument: a tight geometric sans feels like a synth lead, clean and direct. A wide serif sits more like a cello, warm and grounded. Headings and body text play off each other like two voices in conversation.
When I set type I'm composing something the reader experiences over time, not just arranging text on a page.
Motion as Texture
Motion is one of the ways an interface shows it's responsive and aware of the person using it. A button that reacts with the right timing tells you it registered the click. A transition that respects spatial logic shows where content moved. Motion should stay in the background and make the experience feel higher-resolution.
Performance & Accessibility: Two Sides of the Same Coin
A slow or broken experience isn't a great experience. Performance and accessibility aren't items on a backlog. They're design constraints from the start.
Performance is about respecting the user's time. Every millisecond and byte comes out of their day. Accessibility means the system works for as many people as possible. Semantic structure, contrast, keyboard navigation and screen reader support are fundamentals, not extras. If something is beautiful but slow or inaccessible, it's not finished.
Constraints Breed Creativity
Tight budgets, deadlines, legacy code, and screen size limits aren't obstacles to work around. They're the rules that make the problem interesting. When you can't add more, you have to think harder. The best solutions often come from finding the single change that shifts everything else into place.
My Process Fluid
Sketch, Code, Design, Loop
There's no fixed sequence. Some projects start in Figma, some in a code editor, some on paper. What matters is moving between them until the experience feels right. I sketch to find composition. I code to test constraints. I go back into Figma when I need to explore alternatives.
It usually goes something like this:
- Understand the domain and existing patterns.
- Explore broadly through sketches, moodboards, and loose prototypes.
- Establish the system: tokens, components, and behavioural patterns.
- Build in the browser, where spacing, motion, and responsiveness actually show themselves.
- Refine by feel, looping through states and edge cases until it lands.
Steps 3 to 5 aren't linear. I often adjust the system while building and rebuild as the system changes.
The Practice
This is almost a manifesto, but it evolves as I mature of course. It's a practice that shifts with every project or mistake. I don't have all the answers. What I have is a strong sense of what feels right, respect for craft, and an obsession with the last 10 percent. That keeps me going.