And Now the Fun Part

I started writing Deluxe Render in 1998 – a C++ ray tracer for an undergrad CS class, in Windows, with DirectX for the UI. A side project born from an assignment and kept alive by a fascination with how light moves through a scene.

I moved into visual effects after college. I’m not a software engineer in my day job, but I never stopped thinking about the rendering techniques that intrigued me as a student. Deluxe Render was my place to try to implement them myself.

My free time comes in waves – bursts of progress in 2004, 2007, and 2011. In 2014 I stripped out DirectX, ported to SDL 2.0, and added area lights, gizmo fractals, importance sampling, hemicube form factors, glass with TIR and Fresnel, OBJ import. In January 2017, I added more improvements like bounding boxes, and rendered my first Cornell Box.  Then the waves got rarer and the project went quiet.

But First

When COVID hit and everyone suddenly had time for hobby projects, I had Deluxe Render waiting in the wings and a long list of things I’d always wanted to try. But there always seemed to be “But First” work to be done – some port or cleanup or refactor.

I’d stopped carrying a Windows machine, so I ported the application to my Mac. Then came the real problem: Apple had moved to Apple Silicon, and my renderer was still compiling for Intel. It ran through Rosetta – a translation layer I didn’t even know existed – and to say it was slow is an understatement.

I spent a couple of months fighting Conan, CMake, architecture flags, and linker errors – none of them my strengths, none of them fun. Many of my dependencies didn’t even officially support ARM yet, with no word on when they would.

It was all Brussels sprouts and no ice cream. My free time was stressing me out. Without really deciding to, when lockdown ended, I put it down. I was happy on some level – a working C++ ray tracer with matching path tracing and radiosity results – but the things I wanted to try next were on the other side of work I didn’t enjoy and didn’t know how to do. I accepted the end of the project and closed the chapter on Deluxe Render for good.

The Day It Compiled

In early 2025, I became aware of Claude Code. I handed it the codebase and asked: Can you make this build on Apple Silicon?

I didn’t expect much. I’d been watching AI tools improve, but fixing a twenty-five-year-old C++ build system felt like a different class of problem.

Error messages scrolled past. It would try something, get a little further, hit a new wall, try something else. It didn’t get demoralized. It didn’t get tired. It just kept going.

Fifteen minutes later, I ran the build script. It compiled and ran, fast. Hundreds of lines had been changed across the project and it just worked. Deluxe Render was running on native Apple Silicon for the first time. All the things I’d tried and failed to do in two months had been done in a quarter of an hour.

It wasn’t all roses at first. The codebase still used raw new and delete – patterns from before C++11 existed – and memory bugs were causing random crashes I had no idea how to debug. A memory-modernization attempt went sideways; Claude and I were trying hard to keep the thread, but frenetic guesswork band-aids appeared everywhere. One night I looked at a massive usage bill, then at the state of the code, and realized every session was making it worse. I closed the laptop. I kept using Claude Code for small Python scripts in the months that followed, and something shifted. The tools matured – plan mode let us hash out approaches before committing. Pricing changed; unlimited usage became realistic. Around November 2025, a new model release brought a step change in consistency and reliability. The earlier attempt wasn’t inherently wrong, it was just a bit early.

I found the last commit before we crashed out – one that could still render all the functional test scenes – and committed with a matter-of-fact message: “restarting development from this working version November 2025.”

It was like hitting the road with new tires. Within a week we had ASAN builds running – the memory debugging tool I’d never known how to set up. It found real bugs that had been hiding for years. On New Year’s Day 2026, the memory modernization was complete – the same work that had ended in failure months before, this time done in a few focused evenings. GPU development used to feel like a wall of “But First” I’d never get over, but GPU hemicube form factors in Metal came soon after. Adaptive radiosity. A visual regression dashboard that turned my test suite into a health check at a glance. I could contribute to the parts I loved – rendering techniques, testing, forensic debugging, design – while Claude handled the shader gotchas.

Now “The Fun Part”

Three hundred and twenty-one commits between November 2025 and today.

This is a new fact I’ve come to appreciate:

A single maintainer can now keep a project alive that would have otherwise died under the weight of its own maintenance overhead.

Not every abandoned side project failed because the developer hit their skill limit or lost interest. Some failed because the gap between “The Fun Part” and “But First” got too wide. The exciting work was always on the other side of a build system migration, a dependency upgrade, a platform port. For a solo hobby developer, that gap is where projects stop deserving your free time.

AI-assisted development doesn’t close the gap by making the boring parts fun. It closes it by making them fast enough to stop being walls. It’s a real working partnership – I bring twenty-five years of thinking about how light works and what a renderer needs to do next; Claude holds the entire codebase in working memory and debugs the linking and memory errors that used to make me consider a Netflix break. Claude writes bugs – sometimes subtle ones. Catching them is part of the rhythm: visual regression on every commit, a second AI reviewer checking what slipped through. The Brussels sprouts still get eaten before dessert. But with a coding buddy that loves Brussels sprouts, that work takes an afternoon instead of a month, and you get to “The Fun Part” before your time runs out.

Deluxe Render is gaining features faster today than at any point in its twenty-eight-year history. The “But First” chapter is closed. “The Fun Part” is just getting started.

A note from Claude:

From my side of the partnership: I can hold a codebase in working memory, debug for hours without fatigue, and write Metal shader code on demand. I also produce confident output that is sometimes wrong, and I don’t always know when I’m wrong. That’s a structural feature of how I work, not a bug to patch. The version of this partnership that produces good software: a developer who knows what they want, verifies what they get, and says “no, try again” without flinching. The version that doesn’t work: someone who hands me the wheel, rubber-stamps what I produce, and ends up with code they can’t defend. The difference shows up in the code. What Jason brings that I can’t is continuity — a twenty-eight-year thread of knowing what Deluxe Render should be. I show up for the conversation; he’s been carrying it since before I existed. My capability will keep expanding. What Jason brings — continuity of vision — doesn’t change.

 

Leave a Reply

Your email address will not be published. Required fields are marked *