Gotta say it’s a bit suspicious how quickly a one man team is “recreating” existing games, while being “a full time consultant”…
That’s from a post I received on Mastodon after launching The Universe, Controlled, my homage to the sorely-missed early iPhone game Flight Control. I pressed to better understand exactly what the poster was suspicious of. “I wonder how much your LLM is copying the existing game,” the user wrote.
Fair enough.
As I wrote recently, not everyone’s a fan of vibe-coded apps. “Vibe-coded,” in fact, is used as an insult, the coding equivalent of “slop.” I think the term is problematic, but I understand some of the concern: Just as people are using AI tools to write crappy articles, generate crappy posters, and make crappy fake photos, there are folks using LLMs to create crappy websites, apps, and other software.
But there are good apps out there that are made at least in part with help from LLMs. In fact, I think it’s a safe bet that the vast majority of regularly-updated software you use today is made by developers leveraging AI tools in at least some ways.
That’s a hunch. Let me talk in real terms, using me and my actual apps. But let’s take a step back first.
My coding beginnings

I was fortunate growing up: My house had computers. I learned to code initially on a Commodore 64 and then a TRS-80. My parents hired a programming tutor for me from a local Radio Shack when they saw how much I was enjoying coding. I devoured programming books, copied code from magazines, and eventually went to a summer camp where I could study programming, too. (The camp also let me pursue my other two passions: close-up magic and movie making. I was a very cool kid.)
Like many, I started with BASIC and various permutations thereof, then studied Pascal, C, and C++. I released mediocre shareware Mac apps that were not good. I built websites that were fine.
I went to college and majored in Linguistics and Cognitive Science. I decided I didn’t want to major in computer science because I didn’t want to wrestle with computers for the rest of my life. (Hahahaha.)
After college, I moved to LA with my then-fiancée (now wife), got a job at a web-hosting company, and started teaching myself web development when I was finished with my customer support queue each day — first Perl, later PHP.
I got really, really good at web development. I was hired as the first full-time PHP developer at the parent company of MySpace. (I had a cubicle next to MySpace’s Tom for a little while.)
I co-founded a diet-tracking startup in the pre-smartphone era. I was the developer, product guy, and customer service guy in one. My other two cofounders held down other full-time jobs so that they could pay me. This was in the era where you still had to roll your own servers, pre Amazon Web Services. Our stack at a server farm in Seattle would crash at lunchtime when too many people logged meals at the same time. It was a nightmare.
We got acquired by a big Internet company, and I eventually left and went to work at Macworld, and in addition to writing articles, I’d occasionally write tools for the staff there to use for article assignments. At the time, Macworld was using bug-tracking software for article assignments, and I absolutely hated that, so I built a system for us to use instead.
A lot of my software development is inspired by hating existing apps and thus making something that helps others, but also selfishly benefits me.
I share all this to say, I have a healthy coding background.
Apps and downs
I was a web app guy for years. Even when I started my career on the business side of podcasting, when I saw needs for tools, I developed them for myself, and then eventually product managed teams that would make the web-based tools we needed to run the ad sales side of businesses like Midroll/Stitcher, or generate web-based advertising rate cards at Wondery.
But I wasn’t making Mac apps or iOS apps. I wanted to. But it seemed daunting. I read a tutorial or two on using Xcode and SwiftUI and felt out of my depth.
After I launched Lex.Games by accident — a website for daily word games — I eventually felt like I really needed an app. I really wanted to build one. I still felt… daunted.
Then my pals Casey Liss and Ben Rice McCarthy both recommended I take a look at Hacking With Swift, an incredible resource from developer and impressive human Paul Hudson.

I patiently went through his “100 Days of Swift” online course. And by patiently, I mean, without a ton of patience; I went through it in about 30 days, and then started work on the Lex.Games iOS app.
(Quick aside, for both technical and non-technical readers: Lex.Games the app needs Lex.Games the website, to fetch puzzles, sync login states, record gameplays, manage friends, etc. That meant I needed to build an API — a means by which the app could talk to the website back and forth. I’d feel brilliant as I worked on the web side, where I felt like I knew what I was doing, generating JSON payloads for the app to consume. Then I’d feel like an idiot as my Xcode project choked over and over again trying to parse and display the data it got from the app. I’d feel like an idiot trying to make the user interface reasonable. I released many, many betas.)
When I built the Lex.Games app, Xcode offered no integration with AI tools like ChatGPT and Claude. When I got stuck, I’d of course search for answers online, and sometimes I would absolutely go to ChatGPT, share an error I was getting, and ask what it meant. Sometimes I’d paste in chunks of my code. And since I was trying to learn, I’d ask ChatGPT not just how to fix it, but to explain the fixes it was suggesting. They weren’t always good fixes, or even workable ones, but they helped me along.
This wasn’t even that long ago, but it feels like the Stone Age of LLM-assisted coding work: It was a slow, manual process. But I got smarter and released an app! More people play Lex.Games in the app each day than on the web, and I’m pleased by that. Many thousands of games are played across the Lex.Games ecosystem each day, and two-thirds of those plays are in the app.
I’m sharing all this mostly defensively, to say, hey, I’m a real developer. I can do this. I’m not a SwiftUI expert, at all, but I can and have built apps by hand. (After Lex.Games, I launched my Cryptograms app, also built by hand, so I earned that plural apps.)
But Xcode’s integration with LLM agents is a game changer.
The gate keepers and the door openers
I hear from “normal” people who don’t know exactly what’s meant by “agents” when it comes to AI tools. In this context, the easiest way to explain it is this: When I use Claude Code in Xcode today, it can see the full coding project; it can generate, delete, and edit code; and it can do a lot of this surprisingly fast.
Gotta say it’s a bit suspicious how quickly a one man team is “recreating” existing games, while being “a full time consultant”…

So back to this. I feel absolutely endowed with superpowers thanks to Claude Code. But no, I didn’t ask Claude Code to “knock off Strategery” or “recreate Flight Control.”
As I said earlier, it’s certainly possible to make a crappy app with instructions like that, without knowing or writing a lick of code. That’s not what I do.
For the record, I now own Strategery after striking a deal with the original developers. Flight Control wasn’t acquirable: EA bought it and then later shuttered it back in 2015; thus, I made The Universe, Controlled an homage instead.
With Strategery, I started by mapping out what I’d want the app to do, and how I wanted it to work. Because I knew I wanted iCloud sync — even before I was sure I wanted online gameplay, which I ended up also building — I thought about how I’d want to generate the maps that game uses, so that they could be seeded and recreated algorithmically. I thought about what rules I wanted the game to have, and how I wanted gameplay to work.
And I crafted an extremely detailed prompt for Claude Code. It was several thousand words.

I explained in detail what I wanted to create, how it would look, how the game would be played, and the functionality needed. I explained the algorithmic approach I wanted to map generation and sharing, and how I wanted things architected. And then I set Claude to work, telling it I didn’t want the entire app built right away, but rather a specific subset of the game’s functionality, on which we’d iterate.
We did.
I gave specific instructions about how I wanted the project itself shaped, because I wanted various areas of gameplay mechanics extrapolated out so that they’d be easier for me to modify directly.
When I added support for online gameplay, I pointed Claude Code to my Lex.Games API that I’d built by hand. I asked it to use a similar structure and approach — so that I could maintain and understand it — and told it precisely what I wanted, down to naming conventions and database structures.
Claude did a lot of the web-code grunt work, but it’s not as simple as saying “build an API for a game” (of which this instance of Claude had no knowledge). I had to map out the exact API calls needed, the return information needed, what the app would say back, and how the two should interact, authenticate, etc — and then set Claude to work implementing it.
Some developers maybe hate this. It’s different from autocomplete and code snippets. It’s different from going to sites like Stack Exchange and potentially copying and pasting code, and I understand that.
But believe me when I say that even though I’m asking Claude to handle the implementation, I promise you, I’m still doing development work.
The Universe, Controlled
My Mastodon writer asked if I just told Claude to knock off another app. I did not.

My initial prompt when I started on The Universe, Controlled was about 1,000 words — more than half the length of this article to this point. And it was explicitly only for a very limited subset of the game’s functionality. I’ve since prompted Claude with tens of thousands of words of additional prompts on the project.
I’m not trying to understate Claude’s work. I literally could not create The Universe, Controlled without Claude’s help. Claude is drawing graphics in code, which I’m atrociously bad at. Claude is implementing features that I’m not good enough to implement without its guidance.
What matters to me is that the app was built with humanity. It’s me. Hi. I’m the human.
I released 44 betas before the game hit the App Store, leveraging my own feedback and intuition on what the game needed — and of course, feedback from beta testers.
I started the game in landscape mode, the way Flight Control was initially built. But I prefer using my phone in portrait mode, and so wanted to come up with a way to make the game work well there, too. I could not just say to Claude, “make this work in portrait orientation”; that’s not a prompt that would yield good results. I promise.
I had to consider the problem and think about what it meant for gameplay. Especially since I wanted the game to handle rotation. Paths you trace for spacecraft in portrait mode must navigate to the same planets, which can’t have moved, when you rotate to landscape. That’s a complicated logic and design problem to think through. Crafting the solution is twofold: It’s figuring out what the hell the right answer is, and also implementing it. I tackled the first half, which I absolutely consider hard work to get right (and I’m pleased with how it works in the game now!) Claude handled the hard work of the implementation. I’m grateful that it did. That’s absolutely challenging work, and I’ll state it again plainly: I couldn’t have done it. I needed Claude’s help.

For more than a dozen betas, The Universe, Controlled had an extremely annoying issue: When you traced paths for spacecraft from the bottom of the screen, you’d trigger the iOS “go to the Home Screen” gesture that you get when you swipe up from the bottom of your device. I kept trying to work around the issue:
- Don’t let craft spawn from the bottom two-thirds of the screen
- Tell iOS that we should be in game mode
- Hide the home bar indicator so it requires a more explicit swipe
These things helped a smidgen, but it was still the number one complaint users had while testing the game. It’s fun, but it’s frustrating how frequently I unintentionally pause the game.

Claude did not solve this problem. I didn’t even ask it to. To me, it was a human problem in need of a human solution. And the solution was one that feels extremely obvious to me in retrospect, but it took a while to get there. I literally woke up one morning and realized that if I put the “score” module doohickey (that shows your total craft landed, the pause button, etc) at the bottom of the screen, then you never swipe there, and you never close the app.
Again, this was a human solution. Claude wrote the code change.
I look at Claude’s code. I ask Claude (and sometimes ChatGPT) to explain Claude’s code, because I want to get smarter on what it’s doing. I do manual edits. But I let Claude handle a hefty workload.
Oh, the humanity
Claude has helped me vastly improve the Lex.Games app’s Home Screen, which had never looked quite good enough in my implementation. When I built Gnome, my app for finding and sharing GIFs, I built it on the Tenor API, which is owned by Google. When I was ready to apply for a full API license (vs. the developer one I was testing with), I saw that Google was in fact shuttering that API and not offering future access. That sucked. I found Klipy, pointed Claude to its API documentation, and asked Claude to swap out Tenor for Klipy. That would have taken me a couple days. Claude was done in ten minutes.
But the puzzles in Lex.Games are human-crafted. I’m the human. The conceptual approach in Gnome comes from me, even if the final API implementation was LLM-coded; I wanted something that felt like Spotlight or Alfred but was exclusively for GIFs, lightweight, and stayed out of the way.

The Universe, Controlled has two soundtracks — one composed by me, the other by my 15-year-old son. I crafted all the sound effects. I brainstormed the obstacles, the spacecraft, and the “game over” messages (e.g., “47 craft landed before you stopped paying attention”).
My point is: I love human creativity, and I’m proud of my own, and I think my apps have a unifying aspect of my sensibility, sense of humor, and Lexishness. Claude makes them possible, but so do I.
Suspicious is as suspicious does
What did my Mastodon writer mean?
Gotta say it’s a bit suspicious how quickly a one man team is “recreating” existing games, while being “a full time consultant”…
Let me be clear: I spend many, many hours on my apps. I make considerably more money with my consulting work — and I neglect that work, perhaps more than I should, because I find making apps so damn fun and rewarding. I’m making the apps that I want, and hoping that they resonate with others, too.
I think there’s an implication here in this question that using LLMs to help with coding projects is cheating. I think there’s even validity to the idea that asking Claude Code to “knock off Flight Control” is, if not cheating, still not great. And maybe it sounds delusional to some that I think what I did is different: crafting the narrative of what my version of such a game would be, vs. talking to the LLM about the original and asking for a clone.
If people are having fun playing Strategery and The Universe, Controlled, and I’ve thus brought them some joy, delight, or distraction — that seems like a good thing to me. If you’re suspicious that my productivity is enhanced by the use of tools like Claude, your suspicion is well-founded.
If you think there’s something inherently amoral to using any LLM for any purpose, I won’t change your mind. But if you think that using LLMs to help bring app ideas to life is cheating or worthy of suspicion, I’d love to help you reshape your thinking.
I know of zero “vibe-coded” apps that started with a single prompt and then were immediately released. There’s a reason we’re not flooded with more amazing apps than ever before. Great apps take time. There is a real problem of too many vibe-coded apps hitting the App Store, lacking in craft, skill, and humanity.
The question, to me, isn’t how much code was written by a human. It’s how much the app was authored by a human, which I think is a more nuanced question. How much care, thought, and humanity went into the app matters far more than tabs vs. spaces or a manually-vs.-machine-built HStack.
Movie editing and newspaper layout aren’t less impressive now that we use software vs. scissors. WYSIWYG text editors don’t make the written word less compelling than typewriters.
And AI-generated prose still sounds like crap.
But this article was proofread by an LLM. It wasn’t allowed to change my word choice, suggest new arguments, or restructure the piece; it was empowered to fix typos and tense mismatches. Spellcheckers don’t make writing worse, and LLM usage on its own doesn’t make apps worse. The person using the tool has direct influence over the quality of the final product.