The method

A way of working with AI, still evolving

AI has made it extremely easy to do a lot. The risk is that it also makes it increasingly difficult to understand what I am doing.

This page collects the practical habits I use to keep two things together: the speed of AI and my understanding of the work. They come from real projects. Some have held up in practice; others are still bets. When I know which is which, I say so.

What I am looking for are the conditions that make the work easier to read, verify and govern.

When a prompt is no longer enough

For a small, isolated task, a good request may be enough. Then the work stretches over time: more files, more decisions, more attempts, perhaps more agents. At that point, getting a useful answer is no longer the main problem.

The problem is remembering why I made a decision, understanding what is about to change, checking that the result matches what I actually wanted, and preventing speed from taking me off course without noticing.

The method non serve a rallentare l’AI. Serve a non perdere intenzione, perimetro e senso mentre l’AI accelera.

The sequence I am using

In the LAB, the work currently tends to follow this sequence:

01 · INTENTState clearly what I want.
02 · ASSESSMENTAsk the agent what it understood.
03 · PLANBreak the work into small, bounded tasks.
04 · EXECUTIONThe agent works within the agreed scope.
05 · VERIFICATIONCompare the result with what I had asked for.
06 · MEMORYKeep the minimum needed to resume the work.

Above all, one principle: Human in Command. This is the sequence that currently helps me see where something begins to diverge. Tomorrow it may be different.

Making what I have in mind clearer

What I most often underestimate is how much of my request remains only in my head.

I may know exactly what I want, know the project, remember previous decisions and take certain constraints for granted. AI sees none of that: it sees only what I give it at that moment.

Many answers that look “wrong” start here. The model is not necessarily incapable: I left it too much room to interpret what I had not said.

CORDA comes from this observation. It is a reminder, not a formula for the perfect prompt: five questions to check whether I have explained enough.

C
Context
What does AI need to know to understand the problem? Not everything I know about the project is useful: the context that actually changes the meaning of the request has to be selected.
O
Objective
What do I want to achieve? The more generic the objective remains, the more room I leave AI to interpret it.
R
Role
From what perspective am I asking AI to reason? A role does not magically improve the answer: it helps clarify what kind of judgement I expect.
D
Data and boundaries
Which information should it use? Which constraints must it respect? What must stay out? This is often where the real scope of the request is defined.
A
Output shape
What should the result look like? Code, analysis, table, proposal or operating plan: stating the expected form avoids unnecessary interpretation.

An example

An apparently simple request
“Add a date filter to the reports table.”
Context
PHP and MySQL web app; the reports table is already paginated.
Objective
Filter by date range.
Role
Developer following the existing code style.
Data and boundaries
Only report.php and report.js may be changed; no new dependencies; pagination must remain unchanged.
Output shape
Changes as a diff, with one line of explanation for each.

The five elements do not always need the same level of detail, and a prompt does not have to be long. The goal is to reduce the distance between what I think I asked and what AI can actually understand.

Prompt Builder also grew out of this: making these questions visible before sending the prompt.

Try Prompt Builder

One question remains open: how much should a request be structured before the structure itself starts slowing the work down?

It does not mean doing everything by hand

When I started using AI for development, I was mainly worried about wrong code. Over time I realised that the more interesting problem was something else.

AI does many things well, and that is exactly why it becomes easy to let it make decisions I never consciously chose to delegate. It can propose a solution, identify files to change, write code, prepare tests, fix an error and document what it did. All of that can be extremely useful.

But there is a difference between executing a decision and deciding that it is the right decision.

For me, Human in Command means this. The human still decides where the work is heading, which parts of the project may be touched, which trade-offs are acceptable and when a result is genuinely valid.

It does not mean checking every line produced by AI: if that were always necessary, much of the advantage would disappear. It means having enough visibility to intervene at the points that matter.

An example. Un coding agent scopre che, per chiudere un task, deve modificare due file che avevo lasciato fuori dal perimetro. Può essere giusto farlo. Ma voglio essere io a decidere che quella modifica è autorizzata. Lo stesso vale se introduce una nuova dipendenza o propone di cambiare una scelta architetturale: quella decisione deve tornare visibile prima di diventare semplicemente parte del codice.

Human in Command is about keeping control of the decisions that genuinely change the project, rather than keeping a human involved in every single step.

Understand first, then change

One of the habits that changed my work with coding agents the most is simple: before making a change, ask the agent what it thinks it has understood.

They may sound almost trivial. They help expose a divergence while correcting it is still cheap.

If the agent misunderstood the scope, I want to know before it has changed ten files.

It is not always necessary. But as the project grows, it becomes increasingly useful to have a moment when the agent’s interpretation becomes visible before execution.

Smaller, more visible, easier to verify

The speed of coding agents makes it easy to ask for very large changes. That is why I started doing the opposite.

Smaller tasks. More explicit scope. Changes that are easier to observe.

I do not want to artificially reduce what AI can do. I want to understand better what it has done.

Defining a scope means deciding which parts of the project may be touched and which stay out for that activity. It matters even more when several activities are moving forward in parallel.

Dependency and interference are not the same thing

DEPENDENCY

One activity waits for another

A task needs the result produced by another task before it can proceed.

INTERFERENCE

Two activities overlap

They may proceed independently but still touch the same files, modules or decisions.

My rule today: never have two agents writing to the same part of the project at the same time. If it stops being useful one day, I will change it.

A small task is not only easier to execute. It is easier to understand, verify and correct.

Finished does not mean accepted

An agent can declare that it has completed an activity. That does not mean the work is finished.

Verification is the moment when I compare what was done with what I actually asked for. I check:

What I want to avoid is circular verification: “are you done?” — “yes”.

Verification has to produce something observable. It does not have to be complex, but it must be enough to distinguish a plausible result from a verified one.

Remember less, but better

Working with AI produces an enormous amount of memory: chats, prompts, code, assessments, decisions, documents and failed attempts.

Saving everything does not mean remembering better. Often the opposite happens.

With VIBE APP I am exploring a question: what is actually worth keeping? For now, four elements seem most useful:

STATE

Where we are

Where the project stands today.

DECISIONS

What we chose

Choices that would be costly to lose.

RULES

What keeps recurring

Constraints or working habits that keep recurring.

LEARNINGS

What changed

Errors or checks that changed the way I proceed.

The goal is the minimum useful context needed to resume the work without rebuilding everything from scratch every time.

Not just AI errors

It is easy to blame AI. But many of the most useful mistakes I have encountered were not model errors. They came from a request that was too broad, an implicit scope, insufficient context, a task that was too large, a rule that made sense a month ago but no longer does, or a decision that remained only in my head.

To be completed with a real episode

I will add a concrete case here: what I had asked for, what happened, what the real cause was, and which rule or habit changed afterwards.

That is why I treat error as material for the experiment: something to fix, but also something that should leave a trace in the next attempt.

A rule has value as long as it solves a real problem. When it stops doing so, it must be allowed to change.

The same problem, observed from different angles

Some tools born in the LAB are starting to connect. They are not a suite yet: they are experiments looking at the same problem from different angles.

PRIMA DELL’EXECUTION

Prompt Builder

The question is: how do I make my intent more explicit before handing it to AI? CORDA starts here.

Open Prompt Builder →
DURING THE WORK

VIBE APP

The question is: how do I avoid losing context, scope, decisions and verification as the project grows?

Open the experiment →

Local AI

Un modello Local AI è un’idea affascinante: lo installo sul mio computer e gli affido alcune attività, invece di interrogare sempre un servizio cloud. Ma conoscere il linguaggio non vuol dire conoscere il mio progetto. Il modello non sa com’è fatta l’architettura, quali decisioni abbiamo già preso, quali regole sono nate dopo un errore, quali parti considero stabili.

So the question is not whether it can run on my PC, but how much work is needed to make it useful inside that project. Sometimes giving it the right context each time may be enough. In other cases it may need deeper specialisation, up to fine-tuning, which is not free: it requires data, preparation and a concrete reason to do it.

Per questo, nel mockup di VIBE APP, l’Local AI è una domanda aperta e non una funzione pronta.

Is it worth teaching a smaller model to know one part of the project very well, rather than always handing everything to a more powerful general-purpose model?

For now, I do not have an answer. It is exactly the kind of question the LAB exists for.

The method è ancora una domanda

The most interesting part of this page is not what it tries to fix in place, but what it continues to question.

How structured should a request be?
When does structure help, and when does it become bureaucracy?
How small should a task be to remain verifiable without losing the bigger picture?
How much memory is actually useful?
When does it make sense to use several agents at the same time?
Quando l’Local AI offre un vantaggio reale?
When is it worth specialising or fine-tuning a model?
How much verification can I automate without turning it into another form of blind trust?
When do we stop doing Vibe Coding and truly start doing Vibe Engineering?

This page will change if the experiments show that some of the ideas collected here do not work. That is exactly what I expect from a method that is still alive.

Did this page help you understand the approach?

Do you have a different experience to share, a mistake, an objection, or an idea to add?

Send a contribution →