I’m Nick Babcock, a software engineer with 10+ years of fullstack and DevOps experience forged in the fires as a startup’s foundational engineer.

You might know me from my open source work, or from one of my many articles covering topics from authoring Wasm libraries to intricacies in Rust to edge compute to React component design.


Pitfalls of React Query

React Query is a staple in async state and data fetching management. In addition to saving me from reimplementing similar caching mechanisms and fine grained updates, it was also the first library that solidified the concept of client vs server state, and how they are fundamentally different. Nothing is without tradeoffs, so I wanted to shed light on some potential pitfalls, not to disparage React Query usage, but to increase awareness.

Read more...


You might not need a React animation library: transitions

While React animation libraries have seductive landing pages and can be powerful, consider whether you truly need one. These libraries can enhance user experience, but sometimes the simplest solution is the best one.

I find that my animation needs are met with just CSS, so let’s take a tour at of ways one can add effects to their web application.

Read more...


The composition king: compound components

Repeatedly adding orthogonal properties to a React component causes unwieldy bloat. Transitioning to a compound component will invert control and allow clients the flexibility they need. It comes at a cost, though. What are these costs, can we mitigate them, and what are alternative solutions?

Read more...


The WebAssembly value proposition is write once, not performance

Too many lead with performance when talking about the benefits of Wasm. This is misguided as Wasm may not even beat JS in speed, much less native code. Instead the value proposition of Wasm comes from having the same codebase be able to target web use cases without reimplementating everything.

Read more...


The dark side of inlining and monomorphization

After introducing an incremental lexer that is generic over a Read instance, compilation times quadrupled and output size tripled. What happened? And is it possible to claw back without any downsides?

Read more...


Split Next.js across hosting providers and advocate for direct S3 uploads

Direct S3 uploads have some nice properties over presigned uploads that can’t be ignored. Unfortunately, some hosting providers place strict limits on uploads and so one has to get creative in splitting up Next.js endpoints between hosting providers using rewrites.

Read more...


MySQL text ID collation: tread carefully

Using a randomly generated text ID, like Nano ID, in your MySQL table? Then you should tweak the default collation for the column, or re-run the collision probability with a reduced alphabet as by default MySQL can consider two Nano IDs equal even if they differ in casing.

Read more...


Decapitation: a migration from antd to headless story

With headless component libraries on the rise, I decided to take a look at them after I couldn’t update Antd 4 or Next.js to their next versions. This is my story.

Read more...


Advantages of opaque types over value objects

Creating an immutable object with value semantics can be tricky to get right when the Javascript world revolves around referential equality and different implementations of structural equality. And even once solved, transporting and restoring this value from JSON can be unergonomic. This is where opaque types have a chance to shine.

Read more...


Too edgy, a serverless search

Memory comes at a premium when looking to host an application, and sometimes edge provider limits prohibit an otherwise routine deployment. So if the plan is spin out memory hungry functions into separate microservices, which serverless provider provides the best local experience and least vendor lock-in?

Read more...