AI Development

AI Code Generation for Custom Software: Separating Signal from Noise

An honest assessment of what AI code generation actually delivers for custom business software — the genuine wins, the real limitations, and how to use it wisely.

J

Justin Hamilton

Founder & Principal Engineer

ai code generation custom software software development

I’ve been using AI code generation tools in production workflows for over a year now. Not casually — I use Cursor as my primary IDE, leverage Claude for architecture and review conversations, and have integrated AI assistance into my development process at a level where I can give you an honest assessment.

Here’s what I’ve found.

The Real Wins

Speed on boilerplate. Setting up authentication, building out standard CRUD operations, creating API serializers that follow consistent patterns — AI is dramatically faster at this than writing from scratch. On a project that’s heavy in standard patterns, I’m measurably faster.

Reducing context switching. Looking up library documentation, remembering syntax for infrequently-used methods, figuring out the right regex pattern — AI handles these inline without breaking my flow. This is underrated.

First drafts of complex queries. I describe what data I need in plain English and get a SQL or ActiveRecord query to start from. Usually needs adjustment, but starting is the hard part.

Catching things in review. AI can read code I’ve written and identify potential issues — performance problems, unhandled edge cases, security concerns. Not a replacement for human code review, but useful as a first pass.

The Genuine Limitations

It hallucinates APIs. AI tools confidently generate code using methods that don’t exist in the libraries you’re using, or that existed in an older version and were deprecated. This is dangerous because the code looks right. Always run generated code, don’t just review it.

It can’t understand your business rules. I can describe to an AI what our pricing model is, but if it’s complex enough to be custom software in the first place, the AI is probably missing nuances that only become apparent when you run it against real data.

It generates plausible-looking tests that test nothing. AI test generation is fast, but the tests often assert behavior that isn’t actually business-critical, or test the implementation rather than the behavior. “This test passes” doesn’t mean “this code is correct.”

Security-sensitive areas need human review. Authentication, authorization, input validation, data exposure in APIs — AI can generate these, but they need careful expert review. The cost of getting these wrong is too high.

Architecture is not AI’s strength. “How should I structure this system?” gets you answers that sound reasonable. Whether they’re right for your specific constraints — team size, maintenance burden, future scaling needs — requires context and judgment that AI doesn’t have.

Practical Guidelines

When I use AI code generation, I follow some rules:

  1. Write a spec before generating. I describe what the code needs to do before I ask AI to write it. This forces me to think about the requirements clearly and gives the AI better context.

  2. Treat generated code like a junior developer’s PR. Read every line. Understand it. Modify what’s wrong. Don’t merge code you don’t understand.

  3. Run the tests. Not just check that the tests pass — run the application and verify the behavior. AI tests often pass on generated code because the generated code and generated tests share the same incorrect assumptions.

  4. Write the business logic myself. Scaffolding, setup, standard patterns — AI. Business rules, domain logic, edge case handling — me. This is where the money is and where mistakes are most expensive.

  5. Use it for exploration, not authority. When I’m trying to decide between approaches, AI is a good thinking partner. But it’s not an authority, and “the AI suggested this” is not justification for an architectural decision.

The Compounding Effect

The best thing about AI assistance isn’t any single time savings — it’s the compounding. Moving faster on boilerplate means more time on the hard problems. More time on the hard problems means better software. Better software means fewer production incidents. Fewer incidents means more time building, not fixing.

Over a project, this compounds into a meaningfully better outcome. Not because AI wrote the application, but because it handled the tedious parts efficiently and left more of my capacity for the work that matters.

What This Means for Pricing and Timeline

Faster development means I can take more projects and, in some cases, pass savings along. It doesn’t mean I’m cutting quality — it means the quality work happens faster.

For clients, this is a genuine win. You get production-grade software built by someone with 20 years of experience, delivered faster than it would have been three years ago.


Reach out if you’re working on a custom software project and want to talk about what AI-assisted development looks like in practice.

Let's Build Something Together

Hamilton Development Company builds custom software for businesses ready to stop fitting themselves into someone else's box. $500/mo retainer or $125/hr — no surprises.

Schedule a Consultation