I’ve started experimenting with using LLMs to help me build software. One of the first things I did was to watch the video of Llewellyn Falco’s talk about using process files as blueprints for Agentic AI, from Craft Conference 2025. I learnt a lot from this, and it was a great starting point to get me going with LLMs. In that video, Llewellyn does over an hour of live augmented coding on stage. And one of the first things I noticed was that he uses the LLM for almost everything. I was about to list the things he uses it for, but then I thought instead, I’d take you through one of my first LLM coding sessions, and how I deliberately tried to be more Llewellyn. Do LLMs save you time?One of the things I’ve noticed is how much people argue over whether LLMs can genuinely save them time and effort when coding. My goal is to have the machine do the boring fiddly stuff for me, so I can focus on the more interesting stuff. “Time and effort when coding” are notoriously difficult to measure, but one of the things I do consistently already (because I’m me) is time everything I do (spreadsheets ftw). So one of the things I’ve been doing is deliberately experimenting with different approaches and timing the results. Time is one metric I’m using to track any benefit I’m getting from the LLMs. In one of those first coding sessions, I was experimenting with different approaches to a coding task. I chose the Fizzbuzz kata. Using LLMs for katas is kind of pointless (I agree with Emily Bache on this), but my goal was not to practice the kata. My goal was to use the LLM in different ways and measure the results, to see whether and how it could make coding easier and more fun. ## Be More Llewellyn So. As well as using a standard Test Driven Development (TDD) approach (which I’ll write about separately), I also asked it to write the code first and then write the tests. I’m not generally a fan of writing code first and tests second, but I was deliberately comparing and measuring different approaches. And here’s where I had to keep reminding myself to be more Llewellyn, in the following ways: 1. I asked the LLM to write code to implement FizzBuzz. That is, I asked it to write code that would output the numbers from 1 to 100, but substituting “Fizz” for multiples of three, “Buzz” for multiple of five, and “FizzBuzz” for multiples of fifteen (ie both five and three). Temptation: To describe the FizzBuzz challenge to the LLM, manually, myself. Temptation: To look at the code Claude generated for me. 3. The code worked. But did it really? Had I missed anything? Temptation: To look at the code. 4. Claude wrote some tests for me, again very quickly. I saw it chuntering away in the output, describing a raft of tests which clearly contained redundancy and duplication. Temptation: To look at the test code. I’m already pretty confident I won’t like it. 5. I ran the tests. They failed! I started to look at the test code, and saw a lot of comments, stream of consciousness type stuff. I was getting a hint of why they might be failing… Temptation: Surely now it’s time to dig into the code? Work out exactly why these tests are failing? 6. The thing is, to Claude, code is just a series of text-based tokens. It's not something that can be logically reasoned about like I would. So Claude completely misses the actual problem. Two contradictory tests, one of which had been commented on but not removed: Temptation: Ask Claude to try again to spot the problem. Danger: Claude will continue to miss it, because Claude is not clever in the way you might think. Note that in other LLM coding sessions, this has been a real flashpoint for me. Getting sucked down a rabbit-hole is always a danger when building software, but it’s particularly easy to get pulled into the death-loop of “we’re almost there, let’s try one more thing” when working with LLMs. Even though the cost is small, the sunk cost fallacy still applies. Kent Beck has interesting things to say about it in this podcast conversation with Jessica Kerr (which I’ll write more about another time). Solution: Finally, now it’s time for me to read and understand the code. The Jagged FrontierEthan Mollick, author of Co-Intelligence (which I recommend) talks about the jagged frontier. LLMs are great at some things and terrible at others, and the line between the two is jagged and constantly changing. You have to keep pushing and experimenting and working out what they’re good at and what they’re really not good at. As well as how to give them what they need to exploit their strengths and mitigate their weaknesses (process files are great for this - more on this in another post). In Llewellyn Falco’s coding demo, there are several other examples of asking the AI to do something rather than do it himself - most notably in the creation and refinement of process files. There are many things we’re used to doing ourselves, but when we’re working with LLMs it can be unnecessary and slow us down. At this point in the Fizzbuzz example, I’m not done. The code isn’t great and the tests are problematic. Getting the LLM to do as much as possible is only one useful principle when working with these tools. There are many others. But it’s a useful example of a broader principle, which is: Don’t take anything for granted
Speed isn’t everything in software development. Far from it. Often you want to deliberately slow down and take your time. But if the LLM can do things fast and you don’t need - at this point - to do those things yourself, don’t. Let the LLM do its thing. Come on this journey with meI plan to keep writing about this. I’ve already got a raft of draft posts in pocket. I love to learn, and I love to teach (and I’m really bloody good at it). I use teaching as a way of deepening my own knowledge and pushing me to learn things more effectively. If you want to know more, you can do the following:
|
Don't miss my next post! Subscribe to my Technical Leadership newsletter and learn a bunch of useful stuff about effective technical leadership.
Clare (me) with Emily Bache and some coding workshop participants So, you’re thinking about using LLMs to help you code? Maybe you’re unsure about the negative impacts - on the planet, on the industry, on education, on your ability to actually code. Honestly, apart from a little fence-sitting handwringing I can’t help you much with that, but recently I decided to sell my soul to the devil and start experimenting with using LLMs to help me build software. And you know what? It’s fascinating,...
On stage at Lead Dev London Never apologise, never explain Right? But argh, it’s so hard when there are so many articles out there like this one, and so many people I know really HATE AI, and sometimes it feels like I’m joining forces with the devil… So I’m going to try and keep all the apologising and explaining limited to this one post, which I’ll link back to from everything else, and then I can move on. I’ve started to explore the use of agentic generative AI* to build software. I was...
Would you like to attend a talk about how to counter the fear of not being technical enough, or how we can stop making each other feel stupid, or how to make the most of diversity in the workplace? Or maybe you'd like to immerse yourself in one of my hands-on workshops... about refactoring skills, or about using TDD to wrangle AI coding, or facilitating mob / ensemble programming, or on how to handle the technical in technical leadership? Fancy spending time in Spain, or Berlin, or Paris, or...