writing
Sample data should be inconvenient
Convenient examples hide the decisions real products have to survive.
Your AI workflow should belong to your repository
AI tools can execute a workflow. They should not become the only place where its rules exist.
Truncation is a product decision
Clipped text should preserve the part that helps the user recognize the object.
Pagination should preserve momentum
Moving through a long list should not make the user rebuild their place.
Inline editing needs a frame
Inline editing feels effortless only when the product makes its boundaries visible.
The product should show what changed
A successful action is not clear until the user can see its consequences.
Placeholder text is not a label
Placeholder-only forms make users remember the question.
Limits should be visible early
Hidden limits turn user effort into waste.
The return path matters
Good products bring the user back with their context intact.
A status should mean something
Status labels are promises about what the system knows.
Good interfaces leave evidence
Trust lives in the trace an action leaves behind.
A good interface keeps its shape
Stable layouts protect the user's focus.
Naming is interface design
The names inside a product teach people how to think about it.
Quality is what survives the edit
Finished products are not the ones with everything included. They are the ones where the right things remain.
Software should not ask twice
When repeated choices do not stick, friction becomes distrust.
When the interface starts apologizing
Good UI copy helps. Nervous UI copy apologizes.
Most polish is subtraction
Finished work often gets quieter.
You don’t need better tools. You need better taste.
Good tools amplify judgment. They don't replace it.
Figma opened the canvas. Then put a lock on the door.
Why rate-limiting a beta on day one tells you more than the feature itself.
The tools we choose
Every tool is a set of constraints you agree to live with.
On design engineering
Why the gap between design and code is a feature, not a bug.