I've been messing around with AI tools for a while now. Like a lot of teachers, I started with an LLM (Large Language Model), ChatGPT. Amazing stuff, you ask a question and it gives you a very plausible answer. Often it's wrong, but then more recently, it's pretty right. It does some strange methods to solve problems. You ask it to write some code, it spits out a block of code, recently generally pretty good code. It makes mistakes but more recently a lot less mistakes and a lot more just good code. Sometimes it doesn't know of the latest features, sometimes it hallucinates libraries that don't exist. Useful, but limited, a lot of copy and pasting and then copy and pasting with the errors that sometimes pop up. Back and forth between the chatbot and the coding environment.

A few months ago I started using a different kind of AI tool, an agentic programming tool, specifically Google's Antigravity. The difference between a chatbot and an agent is hard to describe until you see it in action, so let me just tell you what happened when I asked it to build me a native Apple TV app from scratch.

The app is called Barn Burner and it's live on the App Store. I didn't write a single line of code of Swift (the language most commonly used now for Apple apps).

The Problem

I do some CrossFit adjacent workouts at home in my barn. When I'm doing AMRAP (As Many Reps As Possible) or Tabata intervals, I play music over the Apple TV and it'd be nice to have a timer on there too.

The problem is that every CrossFit timer app I could find on the Apple TV App Store had this annoying behavior: they'd duck the audio or pause the audio to beep. For a couple of years I've wanted an app that just layered its beeps over whatever I was already listening to. I'm pretty sure that I have the programming ability to do this task but it would take hours and hours to learn Swift and the libraries needed to code this kind of app, and I just didn't care enough about the problem to dedicate that much time to it.

So I decided to have AI build it.

What "Agentic" Actually Means

A chatbot gives you an answer and leaves the rest to you. But an agentic programming tool melds the chatbot with the ability to write and read files. So you can ask the agent to complete a task, it'll think for a bit, write up a Python script, run that script, fix errors from that script, complete the task, and then report back on how it all went. Instead of copy and pasting python code, running it yourself, reporting back with errors, re-copy and paste, see if that second version worked...

When I asked Antigravity to build me a tvOS app, on its own it made an Xcode project. It filled in the Swift files. It configured the build settings. I never touched the keyboard, I didn't open a terminal window. It gave me instructions (pretty close to correct but it clearly has been trained on an older version of Xcode) on how to build and test the app.

The "aha" moment for me was when I hit run in Xcode after the first five minutes and the app was basically functional. Not perfect, but pretty much working. I was looking at a real tvOS app and I hadn't written anything.

That's the difference between a chatbot and an agent.

Fixing Bugs and Designing the Thing

It wasn't all done after five minutes, to be clear. The first draft looked like an AI-generated website. They all sort of look the same: clean, glassy, platform agnostic, a bit generic. Getting it to feel like an "app of my own" took a lot of back-and-forth.

Here's how that worked:

Compiler errors. When Xcode threw an error, I'd copy the whole thing and paste it back into the agent. It would read it, fix the underlying Swift file, and I'd try again. I didn't have to understand the error, just shuttle it over. This was rare.

Layout bugs. If something looked off in the simulator, I'd take a screenshot and describe what I wanted changed. "The round count is too close to the timer, push it down. The background is too bright." It would "look" at the image and fix the error. Quite impressive if you think about what's happening on the back end of it all.

Picking fonts. This one was fun. I wanted to try a few different font options to see what looked best in the app, but re-compiling the whole app to check fonts would have taken a long time. Instead, I asked the agent to spin up a local web server on my computer with a browser-based playground where I could toggle different fonts and weights and see roughly what they'd look like. I picked the one I liked and it wrote it back into the Swift code.

The font and UI playground web server the agent built locally on my machine

That's an agent. It doesn't just answer the question, it builds a tool to answer the question better.

Bringing in Old Work

I'd already worked my hockey background into the title (a barn burner is hockey slang for an exciting, back-and-forth, high-scoring game). Next up was bringing in my weird math-art side. I found an old sketch I'd written in Java with Processing, it draws random circular geometric patterns, and I figured it'd make a good background.

I gave the agent the old Java code and said, can you translate this to Swift and make it the dynamic background of the app? It did. I had to have one revision to its first go, but otherwise I think I was detailed enough that its first guesses were good.

<insert CS Teacher thought> Does this mean that a programmer doesn't really have to learn more than a language or two? LLMs seem to be quite good at translating between CS languages. </insert CS Teacher thought>

What I Actually Did

By the time I submitted the build to App Store Connect, here's what my job had been:

  • Come up with the idea.
  • Describe what I wanted and iterate back and forth.
  • Make design decisions (fonts, layout, colors, background art).
  • Run the simulator.
  • Fill out the App Store listing.
  • Upload builds and deal with App Store Connect.

I was the product manager and the designer. I wasn't the programmer.

That's interesting to me as a CS teacher. In the next post, I want to get into what CS background I think I needed to make this work, because I don't think it would have gone as smoothly if I'd walked in without any programming knowledge at all.

Previous Post