Automation

Before You Let AI Build It, Know What “Done” Looks Like

Here’s a really easy way to lose an entire day building something with AI:

Start before you know exactly what you’re building.

I’ve done it.

You get an idea. It feels clear enough in your head. You open ChatGPT or Claude or whatever tool you’re using, and you type something like, “Let’s build this.”

Twenty minutes later, you’ve got something working.

That’s the amazing part.

It might not be polished. It might not be complete. But it does something. You can see the idea starting to take shape. A button works. A form saves data. A script runs. A little dashboard appears. A workflow that used to be abstract is suddenly right there in front of you.

And that’s when the trouble starts.

Because once something exists, it becomes very easy to improve it.

You look at what AI built and think, “You know what would make this even better?”

So you add that.

Then another idea shows up.

Maybe AI suggests something: “Would you like me to add filtering?” or “Should I include user authentication?” or “Would you like an admin panel for this?” or “Should we store this in a database instead of a local file?”

And because it sounds reasonable, and because the tool can do it quickly, you say, “Sure, why not?”

Then one feature affects another feature.

Now the database structure needs to change.

Then the interface needs to change.

Then the workflow needs to change.

Then something that worked an hour ago doesn’t work anymore.

Now you’re debugging a problem caused by a change that only happened because you added a feature you didn’t originally need to a project that didn’t even exist this morning.

Suddenly, you’re six hours in.

You haven’t eaten lunch. You’ve got fifteen browser tabs open. You’re copying error messages back and forth. The app is kind of better than it was, but also somehow worse. You’re not totally sure what it is anymore. You’re not sure whether you’re almost done or whether you accidentally created a much bigger project.

That is one of the strange traps of building with AI.

It’s not that AI is slow.

It’s that AI is fast.

And because it is fast, it can take you in the wrong direction faster than ever.

One of the things I love about developing with AI is how quickly you can move. I’ve been developing software for years, and the difference is real. Things that used to take hours can now take minutes. Things that might have taken weeks can sometimes happen in days. Tasks that used to feel tedious, repetitive, or just mentally draining can now be delegated, accelerated, or at least roughed out much faster.

That’s powerful.

But I’ve also discovered something else:

The faster you can build, the faster you can build the wrong thing.

That is the part that doesn’t get talked about enough.

Most of the excitement around AI development focuses on speed. How fast can we prototype? How fast can we generate a feature? How fast can we go from idea to working version? How fast can one person do what used to take a team?

Those are all valid questions.

But there is another question that matters just as much:

Are we building the right thing?

Because if we are not, speed does not save us. It just gets us to the wrong destination sooner.

Before AI, there was a natural cost to changing direction.

If I knew something was going to take me three days to build, I probably spent at least a little time thinking about whether I actually needed it. If a client asked for a feature that would add twenty hours to a project, that changed the conversation. We had to ask whether the feature was worth it. Was it part of the original scope? Would it delay launch? Would it increase the budget? Would it complicate the system? Was it essential, or just interesting?

That friction was annoying sometimes, but it served a purpose.

It forced decisions.

It made scope visible.

It created a moment where you had to pause and ask, “Should we really do this?”

AI changes that feeling.

Now AI says, “I can add that.”

And suddenly the cost feels almost zero.

Need a new field? Easy.

Need export to CSV? Easy.

Need a different layout? Easy.

Need a login system? Easy.

Need roles and permissions? Easy.

Need charts? Easy.

Need notifications? Easy.

Need a settings page? Easy.

Need integration with another API? Probably easy.

And because each individual step sounds easy, it becomes very tempting to just keep going.

That’s where scope creep becomes almost invisible.

Scope creep used to announce itself. It sounded like, “This will add another twenty hours to the project.” It sounded like, “We’ll need to revise the estimate.” It sounded like, “That’s outside the current scope.” It sounded like, “We can do that, but we need to push the launch date.”

Now scope creep can sound like, “Sure, I can implement that.”

That’s dangerous.

Because even if the initial implementation is quick, every addition still creates consequences.

More code.

More testing.

More dependencies.

More edge cases.

More things that can break.

More things you need to understand later.

More things future-you has to maintain.

More opportunities for one feature to interfere with another.

More chances that the project drifts away from the original problem it was supposed to solve.

And that last part is important.

The danger is not just that the project gets bigger.

The danger is that the project becomes different.

You start out trying to solve one clear problem, and a few hours later you’re building a platform. Or a dashboard. Or an automation suite. Or a mini CRM. Or a workflow engine. Or an admin system with permissions and logs and exports and notifications and settings.

And maybe all of that is impressive.

But is it what you needed?

That’s the question.

A lot of AI-assisted development feels productive because something is always happening. Code is being written. Files are being created. Features are appearing. The screen is changing. You are moving.

But movement is not the same as progress.

Progress requires direction.

If you do not define the destination, AI will happily help you wander.

That is why I’ve started thinking much more carefully about the project before I start prompting AI to build it.

Not because I want to slow everything down.

Actually, it’s the opposite.

I want the speed to matter.

I want AI to help me move quickly toward the right outcome, not quickly into a maze of half-decisions, accidental features, and unnecessary complexity.

So before I start building, I try to get much clearer about the shape of the project.

What is the actual objective?

Not the vague idea. Not the exciting version. Not the “wouldn’t it be cool if…” version.

The actual objective.

What problem is this supposed to solve?

Who is it supposed to help?

What is broken, inefficient, manual, confusing, repetitive, or painful right now?

What should be better when this is done?

That sounds simple, but it is very easy to skip. Especially when AI makes it so easy to start.

You can go from idea to code so quickly that you may never stop to define the idea properly.

But if the objective is fuzzy, everything that follows becomes fuzzy.

The prompts become fuzzy.

The architecture becomes fuzzy.

The feature list becomes fuzzy.

The definition of done becomes fuzzy.

And fuzzy projects are where time disappears.

The next question is: who is going to use it?

That matters more than people think.

A tool built for me can work very differently than a tool built for a client, an employee, a customer, a team, or the general public.

If I’m the only user, maybe I can tolerate a rough interface. Maybe I can handle a manual step. Maybe I understand what the labels mean because I created them. Maybe I don’t need an onboarding flow or instructions or polished error messages.

But if someone else is going to use it, the requirements change.

They may not know what I know.

They may not use it the way I expect.

They may make mistakes I would not make.

They may need guardrails.

They may need clearer language.

They may need permissions.

They may need support.

They may need the system to fail gracefully.

AI can build a lot very quickly, but it cannot magically know the context unless I provide it.

That means I need to know the context first.

Then I want to understand the workflow.

What does the finished workflow look like?

Not just what screens exist. Not just what features exist. The workflow.

What happens first?

What happens next?

What does the user click?

What information do they enter?

Where does that information come from?

What does the system do with it?

What decisions need to be made?

What gets saved?

What gets displayed?

What happens at the end?

If I can’t describe the workflow, I’m probably not ready to build the interface. And I’m definitely not ready to let AI start inventing one for me.

Because AI will invent one.

That’s both helpful and risky.

It will fill gaps. It will make assumptions. It will create default patterns based on what it has seen before. Sometimes those assumptions are fine. Sometimes they’re surprisingly useful. But sometimes they don’t match the real-world situation at all.

That’s why I want to think through what information goes in and what needs to come out.

Inputs and outputs are a great way to clarify a project.

What data is required?

Where does it come from?

Is it entered manually?

Uploaded?

Pulled from another system?

Generated by AI?

Imported from a spreadsheet?

Submitted by a user?

Collected from a form?

Then what comes out?

A report?

A saved record?

An email?

A task?

A recommendation?

A chart?

A document?

An updated status?

A notification?

A file?

A decision?

A lot of software projects become clearer when you reduce them to inputs, processing, and outputs.

What goes in?

What happens to it?

What comes out?

If I can’t answer those questions, I don’t really understand the project yet.

Then comes one of the most important questions:

What absolutely has to be in version one?

This is where AI development can get slippery.

Because when something is easy to add, it starts to feel like it belongs in version one.

But that is not always true.

Version one should not be everything I can think of.

Version one should be the smallest useful version that solves the core problem.

That doesn’t mean it has to be ugly. It doesn’t mean it has to be bad. It doesn’t mean it has to be incomplete in a careless way.

It means version one should have discipline.

It should focus on the essential workflow.

It should prove the idea.

It should solve the main problem.

It should avoid dragging in every possible enhancement just because AI can generate the code.

Just as important, I need to ask:

What specifically does not belong in version one?

That question can save a project.

It is one thing to list what you want. It is another thing to intentionally list what you are excluding.

No user roles in version one.

No payment integration in version one.

No advanced reporting in version one.

No custom themes in version one.

No mobile app in version one.

No third-party integrations in version one.

No automated email sequences in version one.

No admin dashboard in version one unless it is absolutely required.

Drawing that line matters.

Because when AI suggests something or when I get a new idea halfway through, I can compare it to the plan. Is this part of version one? Or did we already decide this comes later?

That does not mean the plan can never change. Plans can change. Sometimes they should. Sometimes you discover something important while building. Sometimes the first version exposes a flaw in your assumptions. Sometimes a feature you thought was optional turns out to be necessary.

But there is a big difference between changing the plan intentionally and drifting away from it accidentally.

Without a plan, everything feels like a reasonable next step.

With a plan, you have something to measure against.

That is why I also want to know what systems the project connects to.

Does it need a database?

Does it need a website?

Does it need an API?

Does it connect to Stripe, Google Sheets, WordPress, Airtable, a CRM, an email platform, an internal tool, or something else?

Does it need to read data, write data, or both?

Does it need authentication?

Who has access?

What permissions matter?

What happens if the connection fails?

These questions can seem boring when you are excited to build, but they matter. Integrations are often where small projects become complicated. They introduce authentication, rate limits, data formatting, failure handling, security concerns, and maintenance issues.

AI can help with all of that, but again, it helps much better when the requirements are clear.

Security is another area where planning matters.

It is easy to build a quick prototype that works on your machine. It is another thing to build something that handles real user data, business data, customer data, financial data, or private information.

What are the security requirements?

Does the project store sensitive information?

Does it need user accounts?

Does it need password protection?

Does it need encryption?

Does it need access controls?

Does it need logs?

Does it need backups?

Who can see what?

Who can edit what?

Who can delete what?

What happens if someone enters malicious input?

What happens if an API key is exposed?

What happens if a user tries to access someone else’s data?

These are not questions to tack on after everything is built. They affect structure. They affect architecture. They affect the database. They affect the interface. They affect deployment.

And this is exactly where “just one more feature” can create real problems.

Adding user accounts after the fact is different from designing around users from the beginning. Adding permissions after the fact is different from planning roles upfront. Adding security after the fact is different from thinking through what needs protection before the first line of code is written.

Then there is failure.

What happens when something fails?

This is a question I think people skip all the time, especially in early AI-built projects.

The happy path is easy to imagine.

User enters information. System processes it. Everything works. Success message appears.

Great.

But what if the user enters bad information?

What if a required field is missing?

What if the database is unavailable?

What if the API returns an error?

What if the AI response is malformed?

What if the email does not send?

What if the file upload fails?

What if two users try to update the same thing at the same time?

What if the process only partially completes?

What should the user see?

What should the system log?

Can the action be retried?

Is there a rollback?

Does anyone get notified?

Software is not just about what happens when everything goes right. Real software has to account for what happens when things go wrong.

AI can help write error handling, but only if I tell it what failure needs to look like.

Otherwise, it may create something generic. Or incomplete. Or overly complicated. Or it may ignore important cases entirely.

Finally, I need to define what done actually means.

This may be the most important part.

What does done mean?

Does it mean the prototype works locally?

Does it mean the core workflow is functional?

Does it mean it is deployed?

Does it mean it has been tested?

Does it mean another person can use it without my help?

Does it mean the code is cleaned up?

Does it mean documentation exists?

Does it mean security has been reviewed?

Does it mean the database is backed up?

Does it mean the client has approved it?

Does it mean version one is live?

If I do not define done, I can keep “improving” forever.

And AI makes that very easy.

There is always another improvement available. Always another refactor. Always another feature. Always another edge case. Always another design enhancement. Always another optimization. Always another “while we’re here…”

But “while we’re here” is where projects go to balloon.

That does not mean improvement is bad. It means improvement needs to be managed.

Because once AI starts building, it is incredibly tempting to let the project evolve through conversation.

And conversation is great for exploration.

I use AI for exploration all the time. It is incredibly useful for brainstorming, challenging assumptions, comparing approaches, outlining workflows, identifying potential problems, and helping turn a vague idea into something more structured.

That is one of the best uses of AI.

You can say, “Here’s what I’m thinking. What am I missing?”

You can ask, “What are three different ways to approach this?”

You can ask, “What would make this simpler?”

You can ask, “What could go wrong with this plan?”

You can ask, “What should be in version one versus version two?”

You can ask, “What data model would support this workflow?”

You can ask, “What security concerns should I think about?”

That kind of conversation is valuable.

But exploration and execution are not the same thing.

Exploration is where you wander on purpose.

Execution is where you follow a plan.

The problem happens when we confuse the two.

If I am still exploring, I should not pretend I am building the final version. I should be asking questions, sketching possibilities, creating requirements, and testing assumptions.

If I am building, I should know what I am building.

That distinction matters even more with AI because the transition from “let’s think about this” to “here’s the code” can happen in seconds.

Imagine hiring a contractor to build your house.

You would not want to walk onto an empty lot and say, “Let’s start pouring concrete and figure out the bedrooms later.”

That would be ridiculous.

You would want a plan.

You would want to know how many bedrooms there are. Where the kitchen goes. How the plumbing works. Where the electrical runs. What the foundation needs to support. Where the doors and windows are. What materials are being used. What the budget is. What the timeline is.

Not because the plan can never change.

It probably will change.

Maybe you discover something about the land. Maybe you choose different finishes. Maybe you adjust a room. Maybe you make a better decision along the way.

But now, when somebody has a great idea halfway through construction, you can compare it to something.

Does this improve the plan?

Does it change the plan?

Or is this an entirely different project trying to sneak its way in?

That is the discipline AI development needs.

In fact, I think AI development may need more discipline than traditional development because changing direction is so easy.

When change was expensive, the cost forced us to think.

Now the cost is hidden.

AI can generate the code quickly, but that does not mean the decision is free.

Every decision still has weight.

Even if AI writes the function, I still own the system.

I still have to understand it.

I still have to test it.

I still have to maintain it.

I still have to explain it.

I still have to fix it when something breaks.

I still have to live with the complexity.

That is why I think the planning phase matters more than ever.

Not less.

More.

The better AI gets at execution, the more important it becomes to know what you are executing.

A vague prompt can produce a surprisingly convincing result. That is part of the magic, but it is also part of the risk. AI is good at making things look structured even when the underlying direction is not. It can produce code, interfaces, schemas, and workflows that feel official because they exist.

But existence is not validation.

Just because something has been built does not mean it should have been built.

Just because a feature works does not mean it belongs.

Just because AI can add it does not mean I should ask for it.

So here is the question I think you should be able to answer before you let AI write the first line of code:

Could I describe what done looks like before we begin?

If the answer is no, maybe you are not ready to build yet.

That does not mean stop.

It means switch modes.

Explore.

Brainstorm.

Ask AI questions.

Have it challenge your assumptions.

Have it help you write the specification.

Have it identify missing pieces.

Have it turn your idea into a clear project brief.

Have it ask you questions one at a time.

Have it create a version-one scope.

Have it separate must-haves from nice-to-haves.

Have it map the workflow.

Have it outline the data model.

Have it point out security concerns.

Have it help define what done means.

That is all incredibly valuable.

AI is not just a coding tool. It can be a planning tool, and in many cases, that may be the more important use.

But do not confuse planning the project with building the project.

They are different phases.

During planning, changing direction is cheap. That is when you want to discover that a feature is unnecessary. That is when you want to realize the workflow does not make sense. That is when you want to decide the first version should be smaller. That is when you want to identify the hidden complexity.

During building, changes are still possible, but they have consequences.

Code has to change.

Tests have to change.

The database may have to change.

The interface may have to change.

Documentation may have to change.

Other features may break.

That is not a reason to avoid change. It is a reason to be intentional about it.

Once I know what the top looks like, and I’ve thought through everything underneath it, AI becomes incredibly good at helping me get there.

That is when the speed becomes an advantage instead of a liability.

If I can give AI a clear objective, a defined workflow, a version-one scope, constraints, inputs, outputs, and a definition of done, then the entire process improves.

The prompts get better.

The code gets closer to what I actually need.

The suggestions are easier to evaluate.

The project is easier to test.

The decisions are easier to make.

The final result is more likely to solve the real problem.

And when AI suggests an extra feature, I have a filter.

Is this part of the plan?

Does it support the core objective?

Does it belong in version one?

Does it create complexity we do not need yet?

Should it go into a future version list instead?

That last option is important.

You do not have to throw away every good idea just because it does not belong right now.

Make a version-two list.

Make a backlog.

Capture the idea.

Then keep building the thing you actually set out to build.

That simple habit can save a huge amount of time.

Because one of the hardest parts of building with AI is resisting momentum.

When the tool says yes to almost everything, I have to be the one who says, “Not yet.”

Not never.

Just not yet.

Version one has a job.

Let it do that job.

There is also a psychological side to this. AI makes it fun to build. That is part of why it is so easy to get pulled in. There is a dopamine hit when something works quickly. There is another one when a new feature appears. There is another one when the interface improves. It feels like progress because the project is constantly changing.

But sometimes the most productive thing I can do is stop adding and start clarifying.

What is this for?

What needs to happen before it is useful?

What can wait?

What will make this harder to maintain?

What am I avoiding by adding more features?

That last question can sting a little.

Sometimes feature-building becomes a way to avoid the harder work of finishing.

It is easier to add a settings page than to test the core workflow.

It is easier to redesign the dashboard than to deploy the project.

It is easier to add exports than to ask whether anyone needs them.

It is easier to keep building than to define done and ship.

AI can amplify that tendency because it removes so much friction from adding more.

That is why discipline matters.

Not because AI is bad.

Because AI is powerful.

A powerful tool without a clear target can create a lot of motion and a lot of mess.

A powerful tool with a clear target can create incredible leverage.

So before I start building with AI, I want to slow down just enough to answer the important questions.

What is the objective?

Who is using it?

What is the workflow?

What information goes in?

What needs to come out?

What has to be in version one?

What does not belong in version one?

What systems does it connect to?

What are the security requirements?

What happens when something fails?

What does done actually mean?

If I can answer those questions, I am in a much better position.

If I cannot, then I should use AI to help me answer them before I use AI to build.

That is the shift.

Don’t start by saying, “Build this.”

Start by saying, “Help me define this.”

Then, when the definition is clear, build.

AI makes execution incredibly fast.

That is exactly why planning what you are going to execute matters more than ever.

Without that plan, AI will happily follow you wherever your next prompt happens to lead. And you may eventually build something impressive, only to realize it is not what you originally needed.

With a plan, AI becomes something much better than a fast coder.

It becomes leverage.

It becomes a way to move quickly with intention.

It becomes a way to turn a clear idea into a working system without losing the thread halfway through.

And that is the real opportunity.

Not just building faster.

Building faster in the right direction.