10 Years Building Web Apps
What stuck with me after a decade shipping on the web.
I've spent the last decade building web apps—mostly small, sometimes scrappy, shipped more often than not. I like a modern stack that pushes the web forward, and that gives me leverage. I've shipped and operated production sites and games. The simple choices outlasted the clever ones. Here are the bits that still hold up when the budget is real and the clock is ticking.
What worked for me
- Monorepo everything (UI, utils, types) → less duplication, more consistency.
- Strict TypeScript → safer refactors, fewer bugs.
- Refactor continuously based on demand and cash flow.
- Keep code small and simple; avoid reinventing wheels.
- Prefer monoliths with a modern framework.
- Keep infra simple: managed hosting.
- Prefer readable over clever code.
- Logs/metrics first; then debug.
- Ship small, reversible changes; skip big‑bang refactors.
What didn’t work
- Premature abstractions and “platforms” no one reused.
- Over‑modeling; simple data + clear invariants aged better.
- Heroics; systems beat solo sprints.
My current toolkit
- Monorepo + shared packages.
- TypeScript strict mode: no
any, real guards, exhaustive checks. - Shared ESLint config for consistency.
- Full-stack framework monolith; streaming where it helps.
- Managed hosting with edge deployment.
- Modern auth + real-time DB.
- Test only where failure is expensive.
My four priorities: speed, maintainability, performance, security
I focus on keeping codebases as small as possible to prioritize these four pillars. In today's AI world, you need to ship fast and switch direction fast. A small, focused codebase lets you pivot quickly when the market demands it.
A note on momentum
Momentum is underrated. I learned that keeping the main loop tight (ship → observe → adjust) beats perfect planning. When I keep cycle time low, everything else gets easier.
I'll keep adding to this as I learn (and unlearn) more.
If you want more like this, see the Building category.
