The Product Engineering Podcast

AI can get you to something that looks finished remarkably quickly. But looking finished and being production-ready are not the same thing.
In this episode of The Product Engineering Podcast, James explores the gap between an AI-built prototype and software that is actually ready to run reliably in production. A prototype might get you 80% of the visible result very quickly, while the remaining 20% — security, scalability, observability, maintainability and operational support — can require far more work than people realise. 
We cover:
  •  Why an impressive AI prototype isn't necessarily production-ready 
  •  The hidden engineering work users never see 
  •  Scalability, security, observability and maintainability 
  •  Why software needs to be designed for the right level of scale 
  •  The difference between code that demonstrates an idea and code you can support long term 
  •  Why prototypes are still incredibly valuable learning tools 
  •  When it's perfectly reasonable to build something you intend to throw away 
  •  The role engineers play when product managers prototype with AI 
  •  Why “production-ready” depends on the needs of your organisation 
  •  The danger of both under-engineering and over-engineering
  •  Why prototypes shouldn't be slowed down by unnecessary production requirements 
  •  Making the gap between prototype and production explicit 
A prototype doesn't need to answer every engineering question if its purpose is to answer a product question. If it helps you discover whether an idea is worth pursuing, it has already delivered value — even if none of its code eventually reaches production. 
The important distinction comes once you've decided to keep it. At that point, the team needs to understand exactly what still has to happen before the software can safely and sustainably become part of the product.

What is The Product Engineering Podcast?

The Product Engineering Podcast explores how software teams can move beyond shipping features and start delivering measurable outcomes. Hosted by engineering leader James Charlesworth, each episode covers practical ideas for product engineering, engineering leadership, team operating models and building products that create real impact.

Using AI to build a prototype of

something isn't the same as building

production code that will

last and stand the test of time.

Often you can get something 80% of the

way there using AI, and that extra 20%

could take you many, many times as long

than that first 80% took.

So don't fall into that trap of thinking

that just because you can build a

prototype that looks amazing, you've got

something you can ship to production.

(Music)

Hi, I'm James Charlesworth.

Welcome back to the

Product Engineering Podcast.

And today we're going to

talk about prototyping.

And this is really one for the engineers

because I know a lot of engineers have

been expressing this opinion for a while

now, ever since AI came around.

AI is really, really good at creating a

nice looking product, but the step

between getting that code like out there

and looking nice on the user interface,

and then getting it into production and

being able to support it into production

is not as simple as it first seems.

Now, software engineers absolutely know

this, but product managers and people

that aren't necessarily super, super

technical from a coding point of view

think that just because it

looks right, it is right.

Now, that doesn't necessarily mean that

having an 80% of the way

their prototype is a bad thing.

In fact, as I'll argue many times on this

podcast, being able to create a prototype

that looks good and basically functions

is an extremely valuable learning tool,

but it's not the same thing

as writing production code.

So let's break down what some of those

gaps are and some of those things that AI

still can't necessarily do.

And we'll work out where you can use

prototypes and where you can use AI and

where you should

probably do things properly.

And in fact, it's probably worth going

back in time to before AI existed because

this problem has

always basically been there.

Ever since things like React and stuff

like that came out, it's been fairly

trivial to create a nice looking user

interface, maybe with some mock data, and

then put that in front of people and say,

this is what the

product is going to look like.

And then a lot of people fall into the

trap of thinking that that really quick

prototype you made is

ready for production.

If anyone has ever been to a hackathon,

hackathons usually revolve around the

smoking mirrors effect of I've made

something that kind of

looks like it's going to work.

This is directionally where we want to

go, but we haven't

actually written production code.

It's extremely difficult even in the age

of AI to write proper hardened production

supportable code in like a small amount

of time, like a one day hackathon.

And nothing's really changed there.

AI has just turned like a one day

hackathon into a 10

minute prompt exercise.

Ultimately, it hasn't changed the fact

that the code that you've written that

might look brilliant isn't always ready

to go into production.

And so what are those gaps?

If you've built something using claw code

or you built like a user interface from

scratch, what are the gaps between what

you've built and what looks amazing and

what's actually production ready?

Well, there's many of them and they're

often things like scalability, cost.

A lot of the time in AI will just not

really care about how much something is

going to cost to support in production.

So it might give you a super expensive

solution that isn't necessarily going to

be commercially viable.

There's also things like observability

and maintainability.

So good software engineers will know that

in order to support some software into

production, you need to instrument that

software with observability and metrics

and things like that.

So that when something breaks in

production, you can very, very quickly

work out what's going to break.

Potentially, you can work out as it's

going to break before

something happens in the product.

All of that observability is hidden to

people that are using software.

If you're a user of a web application,

you probably don't realize quite how much

instrumentation and observability is

built into that on the back end.

And so if you're being shown a prototype

of something that was written with AI,

you don't know whether or not there's a

way for the person who built that to

actually monitor what's

happening on the back end.

And to predict when things are going to

fail and when it's going to crash.

But you do need all that.

In order to support something in

production, it needs to be observable.

It needs to be secure.

That's another thing

that often gets missed.

It needs to be scalable.

You can build things for

different levels of scale.

People, it's a mistake to think that

scalable is a yes or no decision.

Code can be scalable to the point where

you want it to scale to, or it can be

scalable to like a larger point.

But you very rarely get a situation where

code will scale from zero to infinity for

the same trade-offs.

Unless you've been really, really

conscious about giving the AI information

about how much you want it to scale,

which a lot of people won't do, then what

you'll end up with is a piece of software

that's designed for a certain level of

scale and you try and implement it to a

different level of scale.

Scale works both ways.

So if the AI has given you a piece of

software that works for a million users,

but you've actually only got 100 users,

that's not necessarily a good solution.

That's going to cost

you a lot of money to run.

The infrastructure is going to be

extremely complicated and expensive, and

you've only got 100 users, so you're not

getting that benefit.

Equally, if it's built you something that

will only work for 100 users and you try

and roll it out to a million users, it

will break there as well.

So you need to be able to

design for the correct scale.

And again, that's one of those hidden

pieces of architecture that isn't

apparent in something that

was just vibe-coded with AI.

So you can have a product that looks

functionally brilliant, but all of those

questions around scalability and security

and observability and maintainability,

all of those are hidden and you don't

know what those decisions were or if

those decisions were even

made in the first place.

So it's really important for everyone

that's building software rapidly with AI

to just be aware of those kinds of

decisions that need to be made in order

to make something production-ready.

So you have the user interface that

you've built and you've maybe got some

back-end functionality, then ask yourself

how are we going to make sure this

scales, how are we going to make sure

it's secure, how are we going to support

it in production, what are we going to do

when something goes wrong, where the data

have actually been stored, which the

parties are using, all the legal stuff.

All of those kinds of questions need to

be answered in order to take your

prototype into production.

Now that doesn't necessarily mean you

shouldn't do it, you absolutely should

build prototypes because sometimes you

don't need all of those other questions

to be answered in order to

get value out of a prototype.

So a prototype that's been built with AI,

if you're working on a product

engineering team and you're working in

quite an unknown environment, an AI-built

prototype can give you something that's

more valuable than anything else,

probably more valuable than the

production code and it can give you

answers, it can give you learning.

So if building a prototype allows you to

explore an idea or it allows you to

answer a really pressing question about

the correct path forward in your product,

then you should do it.

If you want to put that into production,

then you need to actually answer all of

those other questions.

So you need to make it scalable, you need

to make it secure, you need to have

observability and all

of the other things.

Even at a code level, it can be useful to

make sure that you've got the right

coding practices and the code's clean and

readable and doesn't duplicate itself and

all the kinds of things that software

engineers care about, that's what goes

into production product and that kind of

stuff is completely invisible to the

person using the prototype.

So the solution to this is just to make

it explicit what is included and what is

not included in some

software you've written.

If you've built an application very, very

quickly to test out a concept, then just

make it explicit that this might not be

100% scalable, it might not be

maintainable, that's okay, as long as

you're saying that that's why we've done

it, then you can still get the learnings

and the value out of that product.

Two pieces of product might look exactly

the same, two pieces of software could on

the surface appear exactly the same, but

one of them is production ready and one

of them is not and you wouldn't

necessarily know from the

outside whether they are or not.

So that's where the skill

of engineering comes in.

So if a product manager, for example, is

prototyping something with AI, then the

role of an engineer on their team is to

help them guide them down the right

questions they need to answer before

that's ready for production.

Now I spoke on a previous episode about

context and accountability.

If somebody is making a decision to build

something inside your product, then you

do really want to empower them to be able

to make that decision.

But they don't always know the context

behind whether that's

the right decision or not.

So it's the job of the organization to

create a structure in which people that

know about security and observability and

scalability and support, those people can

provide that context to the people that

are going to make the decisions about

whether or not it should be built.

So ultimately, if you've got a product

engineering team with software engineers

that know all about the architecture and

the correct way to scale something, and

they've got product managers that maybe

know the correct thing to be building,

bringing those two together and allowing

them to share that context will allow you

to build things that are

initially not production ready.

And then once you know it's the right

thing to build, you go

make them production ready.

So it's ultimately a two stage process,

you build something that looks finished,

and then you go and make

it finished afterwards.

And those two things can be very, very

different levels of effort.

Sometimes the amount of effort that goes

into building an AI prototype is more

than you think it is.

So just because something looks like it

was vibe coded with a one shot prompt

doesn't necessarily mean that that person

hasn't spent a lot of time

exploring different ways.

So don't disregard the amount of effort

that goes into building an AI prototype

because they can sometimes involve quite

a lot of learning, quite a lot of

iteration, quite a

lot of experimentation.

There's a lot of back and forth talking

to an AI is still working.

So don't disregard the fact that

somebody's got a good prototype, just

because it's not production ready.

But at the same time, don't disregard all

of the work that you need to do to make

some software production ready.

It's really, really important not to have

this smoke and mirrors effect, where

you've built

something that looks amazing.

And then everybody just

assumes it can go into production.

Sometimes things can, but they won't

always go into production in the way that

you necessarily need them to.

There are a lot of platforms out there

that will give you a in air quotes

production ready piece of software.

But that doesn't necessarily mean that

it's the right production ready piece of

software for your organization, for the

level of scale that you're going for, for

your particular regulatory

or security requirements.

None of that sort of stuff is guaranteed

just because something looks production

ready, or just because you're using a

tool that has told you

it's production ready.

So ultimately, it comes down to a balance

between over

engineering and under engineering.

Something that looks amazing, but doesn't

have all of the scalability and the

production ready stuff

in it is under engineered.

But something that is super, super

scalable and really observable and

supportable in production, but doesn't

necessarily need to be at this point,

that will be over engineered.

If all you're trying to do is learn

something, if you're trying to learn if

this is the right feature to be building,

then you don't necessarily

want to over engineer something.

It doesn't need to be fully scalable if

you're only going to try it

out with a handful of users.

So don't over engineer stuff.

Don't allow software engineers and people

that really want everything to be super

production ready to slow you down.

Don't allow those people to stop you

trying out prototypes and things with a

subset of users with

the outcome of learning.

But equally, don't allow people that have

built a prototype to just ship it to

production without thinking about all

those other things as well.

The most important thing you can do

practically is to make the definition

explicit between production

ready code and a prototype.

So when you've got something that's been

built, really genuinely document what is

stopping this thing going into production

today, and what do we

still need to build?

You don't want every new prototype to

have a list of checked off items saying

it's ready for production because

probably that prototype took way too long

to build and it's not going

to give you effective learning.

But obviously you don't want a prototype

that has a bunch of unchecked boxes

because it's not ready for production.

So if this is something that resonates

for you, if you've seen people trying to

ship prototypes to production when

they're not ready, or you've seen people

over engineering a prototype because

they're being told it has to be

production ready when it doesn't

necessarily have to

be, then do let me know.

My email address is

james at train2code.com.

I really welcome feedback on this product

and this podcast, and I really, really

want to have other

opinions and other voices on this.

I am booking guests for the future, so if

you want to guest on this,

then reach out to me as well.

My name is James Charlesworth, and this

is the Product Engineering Podcast.