AI agents are great at producing code, but without structure they tend to improvise. AIUP gives the AI a predefined chain of artifacts to produce, each one narrowing the design space for the next.
By the time you reach /implement, the AI already has a vision, a use case spec, an entity model, and a database schema to anchor its output — so the code it writes is grounded in your domain, not in a generic template.
What you need before running the chain:
Each step corresponds to one slash command you run inside Claude Code. Run them in order — every step builds on the artifacts of the previous one.
The vision is the only artifact you write by hand. Everything else is generated from it.
For this tutorial the vision is already prepared at docs/vision.md — open it and read it before continuing. It is the source of truth for every step that follows. Keep it short — one page is plenty: the problem, the solution, the target users, the goals, and the non-goals.
This skill reads docs/vision.md and produces a structured requirements catalog in docs/requirements.md, including:
Review the catalog before continuing — this is your last chance to course-correct cheaply. Every later step compounds on this list.
From the requirements the skill identifies the domain entities and produces a Mermaid ER diagram in docs/architecture/entity-model.md, including entities and attributes with types, relationships and cardinalities, and validation rules (required fields, lengths, uniqueness).
For the Book Library you should expect roughly:
The AppUser entity (id, username, password_hash, role) is part of the starter and does not need to appear in the entity model — treat it as an external boundary.
The skill renders a PlantUML use case diagram from the requirements at docs/architecture/use-case-diagram.puml. It shows the two actors (Member, Librarian) and the use cases they participate in:
UC-001Search catalogUC-002Borrow bookUC-003Return bookUC-004View active loans (Librarian)UC-005Manage catalog (Librarian)Use the diagram to confirm coverage: every requirement should land on at least one use case, and every use case should trace back to a requirement.
Pick the use case that unblocks the others to go first. For the Book Library that is UC-001 Search catalog — it has no preconditions, gives the member something to do the moment they land on the page, and produces the data structures that UC-002 needs.
The skill writes docs/use_cases/UC-001-search-catalog.md with actors and stakeholders, preconditions and postconditions, the main success flow as numbered steps, alternative flows, and acceptance criteria.
The skill reads the entity model and the use case spec and emits a versioned Flyway script under src/main/resources/db/migration/. The starter already contains V001__create_app_user.sql, so the skill produces a new version (e.g. V002__create_member_book_loan.sql) for the missing tables, including:
Run ./mvnw compile once after this step — it will start a Testcontainers Postgres, apply the migration, and regenerate the jOOQ metamodel so the next step has typed references to your new tables.
This is where the chain pays off. The skill reads the use case spec, the entity model, and the generated jOOQ classes, and produces:
BookRepository) in the domain packageSearchCatalogView) in the ui package, wired to MainLayoutRun the app via TestApplication from your IDE and click through the flow. You should be able to type a query, see the Grid filter, and see the results sorted as the spec requires.
The skill creates a UI unit test under src/test/java/.../SearchCatalogViewTest.java that extends AbstractBrowserlessTest. It exercises the view without a browser by driving the Vaadin component tree directly: navigate to the view, look up the search field and the grid, type a query, assert the grid shows the expected rows, and cover the alternative flows from the spec.
Run it with ./mvnw test. These tests are fast — under a second per test — so they form the inner feedback loop while you iterate on the view.
The final skill produces a Playwright + Mopo E2E test under src/test/java/.../SearchCatalogIT.java extending PlaywrightIT. It boots the full Spring Boot app on a random port and drives a real browser through the use case: start the app with a fresh database, open the catalog page, type a search query, and assert the visible rows match what the spec requires.
Run with ./mvnw verify to execute the integration tests. This is your outer feedback loop — slower than the browserless tests, but it proves that the JavaScript, CSS, routing, and database layers all line up.
After running the full chain for UC-001 you have a documented vision and requirements catalog, an entity model and use case diagram covering the whole app, plus a spec, migration, implementation, and two layers of tests for the first use case.
To add a new use case, you only need steps 5, 7, 8, 9 — the requirements, entity model, and diagram cover the whole app, so they do not need to be regenerated. Use cases that need new tables or columns will also re-trigger step 6 with a new V003__... migration.
Workshops and tailored rollouts of the AI Unified Process for your team and stack. Book a call to talk through how AIUP fits your project.