Jon Hilton

Jon Hilton

@jonhilton.net

Day Job: I build modern, clean, scalable web apps | Side Hustle: Have helped over 1K .NET Web Developers improve their craft | .NET Web Developers click here ➡️ https://www.skool.com/ai-for-software-engineers-2648/

1.1K followers587 following317 posts

Today I'm doing a lot of Iceberg development. On the surface - AI smashes out an entire, high quality feature in 20 minutes. Underneath - I spend endless hours thinking, architecting, and running small experiments to get to the point where AI can code it in 20 minutes.

AI may generate code faster than a human, but that isn't the bottleneck. A better question - how can you get clarity on what to build and whether it delivers value?

Going round in circles. Anyone else feeling it? As software developers we're very susceptible to the silver bullet, shiny new thing that's going to make building stuff easier. Queue the fail loop: see shiny thing, adopt shiny thing, run into problems, see new shiny thing.

AI doesn't feel so different. Where it gets interesting is when you work through all the noise and realise being effective with AI depends on exactly the same fundamentals as being effective without AI. Short feedback loops, small batch sizes, optimising for early user feedback etc.

The more I use AI for coding the more it becomes apparent - AI generating realms of code isn't speeding us up. If the goal is to solve problems, deliver value, meaningfully impact our users, then AI generating more code, more quickly doesn't cut it.

The bottleneck just moves somewhere else. The challenge remains where it's always been - in collaborating to identify the highest impact ideas/theories, shortening feedback loops, reducing batch sizes.

I've recently found myself pondering earlier career choices, wondering if I made a mis-step somewhere, worrying about AI I mean, I even switched from PC to Mac! But I've just realised what's going on. Mid-life crisis ain't it! Phew, for a minute I thought I was losing it.

Feeling unmoored right now? You're definitely not alone - it's not you, the world is weird and unsettling. Hang in there 👊

With AI we're coding faster than ever! Moar code! But what if the bottleneck isn't: - Understanding the requirement - Writing the tests - Writing the code - Reviewing the code What if it's getting feedback from users?

An old boss of mine loved nothing more than to come to the dev team armed with a 'mockup' for a screen they wanted building. The mockup was, in fact, an Excel sheet, where they'd used the border tool to make it look like the picture in their head.

View full thread

Where we seek to understand what's required, and why, and ask the right questions - preferably before we set AI lose and then wonder why it built the wrong thing.

An old boss of mine loved nothing more than to come to the dev team armed with a 'mockup' for a screen they wanted building. The mockup was, in fact, an Excel sheet, where they'd used the border tool to make it look like the picture in their head.

At the time we probably dismissed this as 'the boss being the boss'. But, with a bit more experience under my belt, I see it differently now. They found a way to think through what they were asking for, and bring it to us.

It wasn't a spec, or a design, but it did serve a crucial function - as a conversation starter. From which we were able to get to the heart of what was needed, and why.

Are LLMs like car engines, and harnesses like cars? A Škoda Octavia and base Porsche Macan use the same VW engine platform. Same engine, wildly different driving experience.

Team struggling to ship? Identify the bottleneck - the one part of the system where work backs up. It might be obvious (you're swamped in code reviews because... AI). Or less obvious (devs waiting for clarification on requirements from a PM or designer).

Whatever it looks like, it's the slowest part of the entire lifecycle. Figure out how to alleviate that bottleneck, see where it moves to. Rinse and repeat.

If I could magic one thing into the world it would be that more people leverage AI to help THEM think through, analyse and define the problem they're trying to solve. Before AI writes any code.

There's no great mystery to shorter feedback loops. AI or not, everything improves when you ask "how quickly can we find out?"

Imagine you're a junior developer and your boss asks you to "build a car finance calculator" You, the junior, don't know the rules, moving parts, how to calculate finance based on deposits, depreciation, interest rates etc. But, keen to impress, you give it a go.

View full thread

You know (because they kept moaning about it) that they had to make the rules up as they went, because no-one took the time to help them think through the details, the edge cases, the legal implications of mis-selling...

Would you trust your credit score to that finance calculator? AI might write the code, it may even be as competent as a junior developer. But whether it's humans or AI - building software demands details, examples, guardrails, and feedback loops to test what's being built.

Imagine you're a junior developer and your boss asks you to "build a car finance calculator" You, the junior, don't know the rules, moving parts, how to calculate finance based on deposits, depreciation, interest rates etc. But, keen to impress, you give it a go.

Now imagine you're buying a car. The nice car salesperson is walking you through your finance options. And you happen to know that your nephew, a junior developer, had built the calculator.

For the engineering team leaders out there - how are you tackling the adoption of AI within your team? Maybe you've thrown some Claude/Copilot licenses at them and are hoping they can figure it out.

Or perhaps you're trying to figure out how to make use of AI without losing control of quality, security. Are you concerned about AI eroding your team's skills? I imagine it's tough leading engineering teams with all this noise about AI right now.

How often do you find yourself asking AI to commit and push, instead of switching to your IDE to click the button? Asking for a friend.

Let's be honest, as developers we've known the value of tests for a long time, doesn't mean we've always written them. But in the last few weeks I've made sure to get AI to write tests first, before implementing, and in most cases it's been much better in two key regards.

View full thread

Give the AI examples like this, have it write them up as unit tests (ideally first, without assuming any knowledge of the implementation details) and I'm finding AI is much more dependable as a coding partner.

Let's be honest, as developers we've known the value of tests for a long time, doesn't mean we've always written them. But in the last few weeks I've made sure to get AI to write tests first, before implementing, and in most cases it's been much better in two key regards.

1) writing code that meets the requirement in the first place 2) catching regressions as the LLM later goes on to make further changes But there's a third, subtle benefit to.

To arrive at those up front tests I took time to think through what I was trying to build, and defined examples for the key logic.

Everyone knows AI can generate code, but what if that isn't even its best party trick? I've found the most useful and productive sessions I've had are those where I get AI to help me do the work.

Most recently asking it to walk me through a 'messy component' and help me figure out which parts to refactor (and why). As a learning tool, which can adapt to your specific scenario, I don't think it can be beat.

AI coding risks having us all spin around in circles doing more work than ever, while simultaneously failing to make progress towards our goals. Hell, half the time we don't even know what those goals are! Beware AI doesn't turn you into a busy fool.

There's a notable fail mode I see being amplified by AI right now. Especially for developers. We decide we want to build something, because we have a problem and feel like building something will help us fix it.

View full thread

Here's a more effective approach. Spend time reflecting on the problem, your goals, and coming up with theories on how you could address those problems to meet your goals. I've started doing this of late, and every time I've tried it, the answer wasn't to build software.

Instead I needed to use the tools I already had, and run some experiments around building better habits. Building stuff won't fix your habits, or your processes, however shiny the tools you use, or the solution you end up with.

There's a notable fail mode I see being amplified by AI right now. Especially for developers. We decide we want to build something, because we have a problem and feel like building something will help us fix it.

The cost of building is so low, thanks to AI, that we jump into that mode and start creating software. Eventually, when the software doesn't actually fix the problem, we abandon it, or decide to start again and build a better solution this time,

So, with AI, we can generate more code! MOAR CODE! Or... we can use it to help us think through what we're building, and why. And question whether we need to build anything at all, or at least hold off until we've analysed the business problem first.

The more I use AI for coding the more I realise feedback loops are vital now. (side note, they always were) Linters, compile checks, tests, extensions to test the UI in the browser, code quality reviews.

Anything that gives AI a way to check, and course-correct, just after it's made changes, seems to yield much better results. I've found that effective feedback loops go a long way to balancing out the differences between the various models too.