There's a version of moving fast that means never stopping to tidy up. The canvas file was where that caught up with me. It had grown to 3,782 lines and it worked — the scene rendered, the car drove, every feature lived in there together. By the ship-fast instinct, that was fine.
It wasn't. Every new feature meant scrolling three thousand lines to find the seam to cut into, and any two changes in flight at once stepped on each other. So I stopped and spent most of a week tearing it apart. It's about 490 lines now, and each supporting module owns one job: the camera rig, the LOD ladder, the driving step, the HUD writes. Boring work, four days of it. But after that I could add things without the file fighting me, and the split had paid for itself before the week was out.
A couple of other habits earned their keep the same way. I watch for stray any types in the shared code; an audit pass found none, but it did surface a dozen as unknown as X casts. Most were unavoidable (browser-API typing gaps, library internals missing from the published types) but one was a duplicate that collapsed into a four-line helper. Next time the library ships better types, finding the casts to delete is one search instead of a code review.
Telemetry is the one that's easiest to skip and most expensive to skip. Every feature ships with at least one analytics event. I'd have happily skipped it, except the data told me last week that people on integrated GPUs spend 40% of their session in the top-down camera — which is why the cinematic camera changed in the next release. The event cost a line. The insight cost nothing.
None of this is virtue. It's the dull stuff that quietly makes the interesting stuff faster, and I keep relearning that I should do it sooner than I want to.