I found my peace with AI aided coding during the last three months. I started development of an environment for programming games and agent simulations that has its own S-expression based DSL, as a private project. Think somewhere between Processing and StarLogo, with a functional style and a unique programming model.
I am having long design sessions with Claude Code and let it implement the resulting features and changes in version controlled increments.
But I am the one who writes the example games and simulations in the DSL to get a feel for where its design needs to change to improve the user experience. This way I can work on the fun and creative parts and let Claude do the footwork.
I let Claude simultaneously write code, tests and documentation for each increment, and I read it and suggest changes or ask for clarification. I find it a lot easier to dismiss an earlier design for a better idea than when I would have implemented every detail of the system myself, and I think so far the resulting product has largely benefited from this.
To me, now more than ever it is important to keep the love for programming alive by having a side project as a creative outlet, with no time pressure and my own acceptance criteria (like beautiful code or clever solutions) that would not be acceptable in a commercial environment.
Maybe this could work for some as a general recipe for how to collaborate with AI:
- Split up the work so that you write the high-level client code, and have AI write the library/framework code.
- Write some parts of your (client) code first.
- Write a first iteration of the library/framework so that your code runs, along with tests and documentation. This gives the AI information on the desired implementation style.
- Spend time designing/defining the interface (API, DSL or some other module boundary). Discuss the design with the AI and iterate until it feels good.
- For each design increment, let AI implement, test and document its part, then adapt your client code. Or, change your code first and have AI change its interface/implementation to make it work.
- Between iterations, study at least the generated tests, and discuss the implementation.
- Keep iterations small and commit completed features before you advance to the next change.
- Keep a TODO list and don't be afraid to dismiss an earlier design if it is no longer consistent with newer decisions. (This is a variation of the one-off program, but as a design tool.)
That way, there is a clear separation of the client code and the libraries/framework layer, and you own the former and the interface to the latter, just not the low-level implementation (which is true for all 3rd party code, or all code you did not write).
Of course this will not work for you if what you prefer is writing low-level code. But in a business context, where you have the detailed domain knowledge and communicate with the product department, it is a sensible division of labour. (And you keep designing the interface to the low-level code.)
At least for me this workflow works, as I like spending time on getting the design and the boundaries right, as it results in readable and intentional (sometimes even beautiful) client code. It also keeps the creative element in the process and does not reduce the engineer to a mere manager of AI coding agents.
I realize it's not your app, but damn I have never seen a landing page with so little information about the featured product. "200 additional features"
This is actually all built in nextjs/react, though the initial sketches of the sim had no visualization and were just running in my terminal using bunjs
The Apple logo is on the wrong side of the screen to be concerned about. Apple's OS and user experience is miles ahead of the competition and so are the displays they use.
I disagree about Apple's OS and UI, I prefer the user experience of Linux :)
With a distro like Linux Mint or Ubuntu everything basically "just works", and you have much more freedom with how you setup your computer. Plus, while Apple is generally better about not bloaring their OS with bothersome corporate BS ("log into your Windows account! Sign up for OneDrive! AI in your email!") then Microsoft, they're not exactly perfect.
The Mac OS is the thing that keeps me away from those computers. I really don't like when a piece of software tries to treat me like I have some kind of brain injury and needs to "help" me at every point.
The post that I commented on was arguing that what sets the Mac apart from other options with 8 GB RAM, and what makes them more expensive, is that they are seen as a status symbol. I made a point against that mentioning two areas in which Macs are truly superior.
To each their own. The OS is easily one of the most frustrating I’ve ever been required to use. It does some things very well, but many things absolutely infuriatingly.
Now, yes, almost everything about Apple’s hardware UX is a light year ahead of most competitors. That’s been true for ages.
For me it's simple. I did my research, settled on Anthropic and Claude and got the Pro plan at ~$20/month. That way I only have to keep track of what Anthropic are offering, and that isn't even necessary as the tools I use for AI-supported development (Claude Code for VS Code extension, Xcode Intelligence and Claude Desktop) offer me to use the newsest models as soon as they are released.
> Quality of code has never had anything to do with which products are successful.
It may look like that, but many of the products with bad code didn't even make it into your vibe statistics because they weren't around for long enough.
I am having long design sessions with Claude Code and let it implement the resulting features and changes in version controlled increments.
But I am the one who writes the example games and simulations in the DSL to get a feel for where its design needs to change to improve the user experience. This way I can work on the fun and creative parts and let Claude do the footwork.
I let Claude simultaneously write code, tests and documentation for each increment, and I read it and suggest changes or ask for clarification. I find it a lot easier to dismiss an earlier design for a better idea than when I would have implemented every detail of the system myself, and I think so far the resulting product has largely benefited from this.
To me, now more than ever it is important to keep the love for programming alive by having a side project as a creative outlet, with no time pressure and my own acceptance criteria (like beautiful code or clever solutions) that would not be acceptable in a commercial environment.
reply