Decisions & frameworks

Give the build a clear destination

A useful specification exposes disagreement before implementation. Concrete awkward examples reveal hidden decisions more effectively than pages of general requirements.

Pattern Engine · Practical field notes

A specification is valuable when it exposes a disagreement before code makes the disagreement expensive. Two people can agree that customers should see “order status” while meaning different things by “ready,” “shipped” or “complete.”

AI can turn either interpretation into working software quickly. It cannot resolve the business choice simply by producing more detail. A useful specification makes the consequential assumptions visible and gives the finished work something independent to be checked against.

Use an example that forces a decision

“Customers can view their order status” sounds clear until an order ships in two parts. What should the customer see? Which system knows? Can staff correct the status? The awkward example reveals more than another paragraph of general requirements.

A specification earns its length by settling questions like these. It can remain short where the behavior is ordinary or easy to reverse. It needs more care where an assumption affects access, money, records or a promise to someone else.

This is also the limit of generated specifications. A polished document can make unresolved choices look resolved. Marking an uncertainty explicitly is more useful than allowing an agent to fill it with a plausible answer. The purpose is shared understanding, including an honest account of what is not yet known.

Describe behavior you can observe

For an order-status feature, useful acceptance examples might say:

  • A signed-in customer can see their own orders and cannot retrieve another customer’s order by changing a link.

  • An order without a confirmed status shows a clear message and a route to contact the team.

  • A status update becomes visible within an agreed interval, without requiring staff to enter it twice.

  • Staff can correct an erroneous status, and the system records the change.

These examples create something to test. They also expose design questions about identity, synchronization and responsibility. Agree the interval and the source of truth rather than asking the builder to invent them.

Keep requirements separate from preferences about implementation. The business needs accurate, timely status; a particular database or framework is a design choice that should earn its place.

Keep the specification proportionate

A small disposable tool may need a page of notes and a handful of examples. A system spanning teams, sensitive records or substantial migration needs more detail. Capture the important constraints, exclusions, dependencies, failure behavior and ownership in either case.

Write down unresolved questions explicitly. AI can help identify omissions, compare approaches and draft the document, but someone familiar with the business must answer the questions that determine scope. A polished specification can still contain an untested assumption.

Break delivery into small, testable slices. For the portal, first prove one complete path from a real status source to an authorized customer. Add the wider feature set after that path works. This gives the business useful evidence before the whole budget is committed.

Choose a workflow that fits your team

Several maintained approaches make this process easier to repeat. They are alternatives to evaluate, not a stack you need to install in full.

  • Matt Pocock’s to-spec skill turns an existing discussion and codebase understanding into a specification. It covers the problem, user stories, implementation and testing decisions, and exclusions. It expects the discovery conversation to have happened and uses the project’s configured issue tracker.

  • Kiro’s specs workflow keeps requirements, design and tasks in related files. It suits a team that wants that process integrated into its development environment. Review the requirements and design before letting generated tasks set the direction.

  • GitHub Spec Kit provides an open-source toolkit for specification-driven development. It is worth evaluating when you want a repository-based process that can work with different coding agents. Start with a representative feature before adopting its conventions across a team.

Review a skill or plugin’s instructions, scripts, permissions and update history before giving it access to a project. A useful template supports judgment; it cannot make the business decisions for you.

Keep the agreement connected to the result

Reference acceptance examples in the implementation tasks and review. When a requirement changes, update the specification and the relevant tests together. Record why an important decision changed so the next person does not have to reconstruct it from a chat history.

At handover, show which behaviors were verified, which limitations remain and who owns the next step. Keep the specification short enough that a maintainer will actually read it.

The specification should become more accurate as the team learns. Its authority comes from the agreed problem and observed evidence, not from being the first document written. Scope and sequencing helps keep that agreement focused on a useful first commitment.

Keep exploring