[01]

Why I build everything from scratch

Most developers reach for a library. I reach for a blank file.

Not because I'm trying to be difficult, and not because I think reinventing the wheel is virtuous. I do it because I've noticed something: every time I reach for an abstraction before I understand the problem, I end up fighting the abstraction instead of solving the problem.

The infinite grid on my homepage is a good example. I could have used a canvas library, a virtual scroll library, a gesture library. Instead it's about 400 lines of vanilla JS. I know every pixel of how it works. When something breaks — and things always break — I know exactly where to look.

The actual argument

Libraries are interfaces over complexity. When that complexity matches your problem exactly, a library is a superpower. When it doesn't, the library becomes a cage.

The trouble is you often don't know which one you're dealing with until you're already three layers deep.

Building from scratch forces you to confront the actual shape of the problem. You discover things you wouldn't have discovered by configuring someone else's solution. The infinite grid taught me that clip-path and a single CSS custom property per element is all you need for directional fills. I wouldn't have learned that by installing a hover effects package.

When it's the wrong call

Authentication. Payment processing. Cryptography. Anything where the failure mode is "user data leaks" or "money disappears." Use the library. Use the boring, well-audited, ten-year-old library.

Also: deadlines. The 36-hour hackathon version of this philosophy is "understand the library enough to know what it's actually doing, then use it." CrewSpace was built with a lot of libraries. But I understood what each one was doing and why.

The real reason

Building from scratch is slower upfront and faster forever after. Once you understand how requestAnimationFrame + translate3d works, you never need a scroll animation library again. Once you understand how JWT works, auth libraries become obvious to you instead of magical.

The goal isn't to avoid libraries. The goal is to never be trapped by one.