kcurtin (@kcurtin) on X

X (formerly Twitter) ·

2 min read Original article ↗
“I would prefer not to.” - Bartleby

I wasn’t planning on writing again. Well, not “not writing”. More like “not writing for public consumption”. Alas, the emergence of the Great Code Machines has fomented chaos and here I am, toiling away, typing with my own fingers while some GPU in some data center sits idle because i refuse to delegate my writing to a clanker. I hope it’s worth it.

The code I write by hand is fast approaching zero. This is a bummer (not just because I spent a decade+ honing my vim skills), but it’s also kind of great. I can build more. I can build faster. I’ve traded flow for throughput.

Want to know what’s not great? Reviewing code. Specifically, code written by an entity that doesn’t feel pain and whose answer to every problem is to write more code. A configuration option for a thing we might need? Sure! A column to track something we might want to report on? Why not! A fallback for a missing value? Okay. An abstraction so we can one day swap out the thing we currently use for a thing we currently don’t? I… guess? It’s a plague of plausibility. Every addition has a reasonable explanation, but together results in superlinear complexity that makes it harder and harder to build the system we need. Complexity used to be earned, not it’s the starting point.

Complexity used to be earned, damnit!

If you’re not careful, it’ll be on you (or your increasingly begrudging teammates) to untangle it all in review. To leave nasty, annoyed comments (“STOP TRYING TO MAINTAIN BACKWARDS COMPATIBILITY THIS IS A F***ING PROTOTYPE!”), trying to get the model to give you what you need and not a plausible future that you don’t.

By then, those decisions are already implemented. Instead, you need to steer the model while it works: make the scope explicit, eradicate plausible extras, and tell it when enough is enough. Revisit boundaries as you learn. Add new abstractions as the need emerges. That’s refinement, and leaving it until review means doing it with a system you first have to untangle. I have more to say about what this looks like in practice, but I’ll save that for the next post.