In the physical world, making things has two costs: design and fabrication. Design is drawing up the part. Fabrication is producing it. Both are expensive, so physical things are made from standard parts: bolts, beams, extrusions, brackets. You accept the overhead of fasteners and adapters because custom fabrication costs too much.
3D printing made fabrication cheap. Now a built-to-purpose bracket can be one piece instead of an assembly of catalog parts, two bolts, two nuts, two washers and a shim. But 3D printing has a quality penalty: layer lines, anisotropic strength, limited materials. So standard parts survive wherever strength and precision matter.
Software has only ever had one cost: design. Fabrication — compilation, copying — is cheap, and has been from the start. But design is labor, and labor is expensive, so software converged on the same pattern as physical manufacturing: build from standard parts. Libraries, frameworks, package managers. The node_modules folder is a junk drawer of standard components, except the drawer is the size of a room. go.mod is a curated components library with a card catalog — you still don’t make the parts yourself, but at least you know what’s in there.
This has the same consequences as in the physical world. You adapt your design to the available parts. You write glue code, configuration, and adapters. You accept someone else’s idea of an interface. You inherit someone else’s bugs and deprecation schedule. You deal with transitive dependency conflicts. You accidentally build two nuclear power plants to run a night lamp on the porch (one is a backup). The resulting system is larger, more complex, and more fragile than the ideal solution, but each individual part is (presumably) well-tested, and the alternative — writing everything from scratch — is too expensive.
Jigs
In machining, a jig holds a workpiece in place during an operation. It is a one-off tool, built for a specific task. Before 3D printing, making a jig meant machining it from metal or wood, so you’d only make one if the production run justified it. Small shops would skip the jig and do things by hand: slower, less accurate, but cheaper than the tooling.
3D printing made jigs cheap. Now every small shop can afford custom fixturing for every job.
Note that dies — the tooling for mass production, injection molds and extrusion dies — are still expensive. Nobody 3D prints an injection mold. The analogy only works for the cheap end of tooling.
Software has its own jigs: migration scripts, data format converters, one-off test harnesses, log analyzers for a specific bug, importers, exporters. Before LLMs, these were either not written at all (you’d wrangle the data in a spreadsheet by hand) or assembled from libraries that don’t quite fit. The tooling cost exceeded the benefit, so you’d skip it.
LLM-assisted coding collapsed this cost. The jig that wasn’t worth writing is now generated, used, and discarded. And unlike the physical world, the analogy doesn’t stop at jigs.
... continue reading