What you will learn What "you produce intent, not deliverables" actually means, and the two things you own (unambiguous intent and deterministic verification criteria). This applies equally across software and business workflows.
Until now a practitioner's output was manual craftsmanship (hand-written code, drafting documents, stitching spreadsheets). Under IntentOps:
| Output | What is reviewed & managed | |
|---|---|---|
| Before | Code, manual document drafts | Code review, manual line edits |
| IntentOps | Intent + Acceptance Criteria | Is intent unambiguous, are criteria rigorous |
AI handles drafting and execution. The human defines what to achieve and how to objectively verify it is done.
graph TD
subgraph "Traditional Work (Craft-Centric)"
C1["Vague Requirements"] --> C2["Human Manually Crafts Output (Asset)"]
C2 --> C3["Review Delays & Late Revisions"]
end
subgraph "IntentOps (Intent-Centric)"
I1["Unambiguous Intent Spec"] --> I2["Deterministic Criteria Defined First"]
I2 --> I3["AI Agents Generate Deliverables (Artifacts)"]
end
C3 -.->|"Shift in Primary Focus"| I1Write it in plain language, but leave no room for interpretation.
Room for interpretation is a defect. In the marketing example above, omitting the specific dates or CTA leaves AI guessing — and that guess may derail the campaign goals.
This is the four parts of a good instruction applied to knowledge work.
The specification turned into objective, judgeable gates.
Criteria are the only definition of "done." All conditions pass, it is finished; any condition fails, it is not. There is no "almost there."
This is where the well-known phrase comes from — "code is ephemeral."
When you need to optimise or move to a different stack, you do not edit the code; you regenerate it from the same intent.
graph TD
I["Intent + tests<br/>the original"] --> C1["Code v1"]
I --> C2["Code v2<br/>performance pass"]
I --> C3["Code v3<br/>different language"]
C1 -.->|"all pass the same tests"| T["Pass criterion"]
C2 -.-> T
C3 -.-> TIntent and tests are the original; code is derived. The old way inverted this — code was the original and documentation was derived, which is why the documentation was always behind.
Honestly, some things get harder.
| Before | IntentOps | |
|---|---|---|
| Starting vaguely | possible (figure it out while building) | impossible |
| Understanding by building | a common approach | you must understand up front |
| Partial completion | "we're 80% there" | pass or not pass |
"Build it and understand the requirements as you go" stops working. That was a genuinely common approach, so it takes adjustment.
But splitting small mitigates it. One micro-sprint is small enough to understand from the outset. The difficulty comes from trying to specify a large feature in one go.
Before adopting it wholesale, practise like this:
Getting stuck at step 3 is the important experience. Most people first discover "these cannot judge completion." That shows how vaguely they had been starting all along.
Similar but different.
| TDD | IntentOps | |
|---|---|---|
| Tests first | yes | yes |
| A person writes the code | yes | no |
| Status of code | an asset | derived |
| Purpose | better design | automating the judgement of done |
If you have TDD habits, moving to IntentOps is easy.
It might, once. But the specification gets reused — when regenerating, when building something similar, and when checking later why it was built this way.
Code, once written, is the end of that code. Intent stays alive.
1. What two things does a developer own under IntentOps?
The specification (unambiguous) and the tests (an executable pass criterion). AI handles implementation.
2. What has to be true for "code is ephemeral" to hold?
The tests must be dense enough. Tests are the only thing guaranteeing that regenerated code preserves the old behaviour, so with weak tests regeneration is a gamble rather than an improvement.
3. What gets harder under IntentOps?
Starting vaguely becomes impossible. "Build it and understand the requirements as you go" stops working. Splitting work small mitigates it.
When code becomes derived, the definition of legacy changes too → Fluid software
✗ "Let people apply coupons in the cart"✓ "Enter a coupon code in the cart to apply a discount. - Only one coupon applies (no stacking) - Expired coupons show 'This coupon has expired' - Below the minimum order value, show 'Valid on orders over $30' - The total updates immediately after applying"✗ "Write a great Instagram post for our spring sale"✓ "Draft 3 variations of an Instagram promo post targeting college students for our Spring Semester 20% discount. - Target: 20-something college students starting classes - Tone: Friendly, casual, conversational ('Ready for classes?', 'Check this out!') - Mandatory: 20% discount rate, promotion dates (March 1–15), 'Link in bio' call to action - Prohibitions: No complex jargon, maximum 1 emoji per sentence"[Engineering Pass Criteria] 1. Apply a valid coupon → discounted price shown 2. Try to apply a second coupon → rejected + message 3. Expired coupon → 'This coupon has expired' 4. $30 coupon on a $20 order → 'Valid on orders over $30' 5. After applying, total = original − discount[Marketing Pass Criteria] 1. Contains exact 20% discount rate and dates (March 1–15) 2. Character count under 250 characters for mobile readability 3. Complies with designated tone and emoji restriction (max 1 per sentence) 4. Explicitly includes 'Link in bio' call to action1. Pick one task (a small one)2. Write the tests before writing any code3. Check whether those tests can judge "done"4. If not, the specification is incomplete → rewrite it