Back to writing
May 30, 2026· 6 min read·Essays

Learning by Building

Every project leaves behind more than code—it leaves behind better engineering habits.

Projects as teachers

I have learned more from shipping imperfect projects than from reading perfect architecture threads. A real project pushes back. Requirements shift, assumptions fail, and deadlines make trade-offs explicit. That pressure teaches in ways theory cannot.

Some projects succeeded, some stalled, some were abandoned halfway through. None were wasted. Each one left behind a better instinct for what to build first and what to postpone.

What failed taught

Abandoned work has been especially useful. Failed ideas make hidden constraints visible: distribution is hard, onboarding is part of product design, and maintenance effort starts the day version one ships.

I used to treat unfinished repos as evidence of inconsistency. Now I treat them as field notes. They document experiments that clarified my judgment, even when they never reached production.

Engineering habits

Building repeatedly improved my engineering habits more than any single framework did. I write smaller functions, define boundaries earlier, and add tests where breakage is expensive instead of chasing arbitrary coverage numbers.

I also got better at sequencing. Solving the right second problem matters more than solving ten problems at once. Good order creates momentum; bad order creates rewrite loops.

Design habits

Design skills grew the same way: through repetition, not inspiration. After enough interfaces, I stopped asking "what looks modern" and started asking "what helps someone complete this task with less doubt." The answer is often restraint.

Small decisions compound. Copy tone, spacing rhythm, and visual hierarchy all influence whether a product feels trustworthy. Building many projects made those details impossible to ignore.

Staying in motion

Learning by building is less about outcome and more about continuity. Each project hands the next one a cleaner starting point: sharper questions, better defaults, and fewer illusions about what "simple" really means.

Code ships, gets replaced, and eventually disappears. Habits remain. That has been the most durable return on every project I have touched.

Skip to content