
This course is designed to be interactive
You can find the sample code on Github in the resources for this module, along with instructions on how to get started
How branches work: Each hands-on section has two branches — a start branch (where you begin) and a solution branch (the completed code). Follow along with the videos using the start branch, then compare your work against the solution when you're done.
Section 4 — AI-driven requirements discovery with /discover
Section 5 — Configuring Claude Code with CLAUDE.md
Section 6 — Path-scoped architecture rules
Section 7 — TDD workflow with /accept, /tdd, and /review
Section 8 — API contracts and contract-driven development
Section 9 — Refactoring existing code and adding a persistence layer with PostgreSQL and Flyway
If you get stuck, check out the solution branch for your section to see the completed code. You can always start fresh by checking out the start branch again.
Prerequisites: Java 25, Git, and an IDE (IntelliJ IDEA recommended). Claude Code is needed from Section 4 onwards. Docker is only needed for Section 9.
You can find a sample CLAUDE.md file in the resources to get you started for this module.
Follow along by cloning the section-9-start branch of the sample project (https://github.com/serenity-dojo/cashback-rewards/tree/section-9-start)
Use the /discover command to explore the following requirement:
Merchant Categories & Eligibility
As the card rewards product manager, I want cashback rates to vary by merchant category and only apply to eligible transactions, so that we can offer competitive rates on high-value categories while controlling exposure.
Merchant Categories (by MCC)
MCC 5411 Groceries: 2% cashback
MCC 5541 Fuel: 1% cashback
All other MCCs: 0.5% default
Eligibility Rules:
Only posted transactions (not pending)
Only active cards (not frozen/cancelled)
Purchases only (not refunds or fees)
Use the /accept command to create acceptance criteria for the rules, e.g.
$ /accept Should award cashback at the rate configured for the merchant's category @doc/specs/merchant-categories-and-eligibility.md - Make sure you refactor any relevant tests in the other specification files as
well.
Add the following hook file to your project:
// .claude/settings.json
{
"hooks": {
"PostToolUse": [{
"matcher": "write|edit",
"hooks": [{
"type": "command",
"command": "mvn verify -q 2>&1 | tail -20"
}]
}
}
In this video we start a new TDD cycle, and we see what to do when Claude doesn't follow our instructions.
To follow along, use the following prompt:
/tdd
Cashback rates are now determined by the Merchant Category Code (MCC) on the transaction, not by the merchant. A single retailer can have different MCCs for different purchase types (e.g. groceries vs fuel).
The rate belongs to the category, not the merchant. CashbackRateSchedule is no longer needed.
Only eligible transactions earn cashback: must be posted, on an active card, and a purchase.
_________________________________________________________________________________________________
EARLY ACCESS — This course is actively being extended. You currently get 62 lectures covering the complete AI+TDD workflow end-to-end on a real feature. New sections are being added over the coming weeks — enrol now and get everything at the early access price.
_________________________________________________________________________________________________
Most AI coding courses teach you to generate code. This one teaches you to engineer it.
AI can write code quickly. Trusting that code is a different problem. In real projects, it often misses edge cases, introduces subtle bugs, and produces logic that looks correct but isn't. You end up checking everything yourself, fixing issues manually, and the speed advantage disappears.
The issue isn’t speed. It’s control.
Without a clear way to define and verify behaviour, fast code generation just creates more work. This is where a structured, spec-driven workflow becomes useful.
In practice, this means starting from behaviour, not implementation. You need to define what the system should do using concrete examples, turn those into acceptance tests, then use TDD to build the code in small, verified steps. AI helps at every stage — exploring requirements, suggesting tests, generating code — but the specifications and tests define what "correct" means. You make AI work within that structure, not around it.
WHAT YOU WILL BUILD
You'll build a production-ready cashback rewards API in Spring Boot from start to finish. But Spring Boot is the vehicle, not the destination. What you're really building is a repeatable, spec-driven workflow for AI-assisted development that you can take to any Java project.
Each section adds a new feature on top of the last. The course currently covers requirements discovery, Claude Code configuration, hexagonal architecture, acceptance testing, TDD with AI, and the complete implementation of the first feature. Upcoming sections apply the same workflow to progressively harder features — category-based cashback rates, monthly caps, refund handling, and redemption — where the real complexity emerges.
The course uses Claude Code, which supports this style of workflow particularly well. You'll learn to use custom commands, hooks, and agents to create a development environment where AI works within your architectural and testing constraints, not around them.
The domain is intentionally realistic. It includes rules around transaction eligibility, category-based cashback rates, monthly caps, refunds, and redemption. As these rules interact, they introduce the kind of edge cases and subtle behaviour you'd expect in a real system. The focus isn't just implementing features — it's managing that complexity in a controlled way, using specifications and tests to keep the behaviour clear while AI helps you move quickly.
WHAT YOU WILL LEARN
By the end of the course, you’ll have a practical way to use AI in day-to-day development without losing control of the code.
You’ll learn how to:
Structure features as executable specifications before writing any code
Follow a repeatable cycle for each feature: clarify the behaviour, specify it as tests, build the implementation with AI, then verify the result
Use AI to explore requirements, generate tests, and implement code, keeping it aligned with the specifications
Set up Claude Code with custom commands, hooks, and project conventions so it produces code that meets your standards
Catch the subtle mistakes AI makes before they reach production
A bonus section covers integrating BDD with Cucumber and Gherkin into the AI workflow, including how to guide Claude to produce good-quality Gherkin and avoid common anti-patterns.
You’ll also develop a better sense of where AI is reliable, where it isn’t, and how to catch issues early.
WHAT'S COMING NEXT
The following sections are in production and will be added over the coming weeks:
Implementing features with more complex business rules
Handling edge cases that AI commonly gets wrong
Refund reversals and cross-feature interactions
The complete cashback redemption lifecycle Enrol now and you'll get every new section automatically at no additional cost.
WHO IS THIS FOR?
This course is aimed at Java developers who use AI coding tools — or are about to — and want a disciplined, reliable approach to AI-assisted development. Some familiarity with Spring Boot will help since it's used as the example project, but the workflow and principles apply to any Java project. The key requirement is an interest in writing clean, well-tested code.
WHO IS THIS NOT FOR?
If you want AI to generate an entire application while you watch, this isn't the course for you. This course is for developers who want to stay in control of what they build. It's also not designed for complete beginners to Java or Spring Boot.
OUTCOME
You'll leave with a repeatable workflow you can apply to your next feature, your next project, and every AI interaction after that — along with a clearer sense of where AI is reliable, where it isn't, and how to catch issues early.