200+ international talks (Devoxx, SpringOne, Microsoft Build…)
Today: shipping real projects by managing AI agents
💭 The project I never had time to build
I always wanted a real developer UI for Spring Boot.
🔭 The itch
Every Spring app is a black box in development
Actuator gives you raw JSON, not a console
I wanted health, metrics, security and tracing in one embedded UI
🧱 The catch: it's massive
~40 panels, each = backend + frontend + tests
Deep integration across a dozen JVM subsystems
By hand, one experienced dev: 6.5–8.5 months
I'd shipped a slice of this in JHipster years ago, but only for generated apps. A real console for any Spring Boot app sat on my wishlist for years. Too big to justify, until I stopped writing the code myself.
⚡ Then I did it in 11 days
223
pull requests merged
11
calendar days · v1 in < 2 weeks
~20
PRs merged per day
83k
lines of code shipped
Not by typing faster. I didn't even open my IDE. I managed a fleet of AI agents while I architected, reviewed and steered.
The agents did the scaffolding, the panels and the tests. I did the judgement.
🖥️ What I built: BootUI
A production-grade Spring Boot 4 starter that adds an embedded, local-only developer console to your app.
🧩 Multi-module & deeply integrated
5-module Maven build · Spring Boot 4 / Java 17
Actuator, Spring Security, Flyway/Liquibase, Hibernate
📦 Open source at github.com/jdubois/boot-ui · docs at julien-dubois.com/boot-ui
📐 The measured facts · v1.0.0
Derived from git history, PR metadata and code metrics, not time-tracking logs.
~264
commits on main
~223
squash-merged PRs (to #239)
~50k
Java lines · ~461 files · ~81 test classes
~52
Vue components · ~40 panels · ~35 e2e specs
~83k
total tracked source lines
~116
test suites (~81 Java + ~35 Playwright)
~5,800
doc lines + a VuePress site
5
Maven modules · 1.0.0 released
👥 One human driver + the Copilot agent (~44 commits), with dependabot, github-actions & one collaborator.
01
Calculating the performance gains
11 days of agents vs. the honest by-hand estimate.
Part 01 · The proof
✅ With AI: the bottom line
Built through a tagged 1.0.0 release by one developer driving the GitHub Copilot coding agent.
~11 days
calendar time, to 1.0.0
~80–110 h
actual human hands-on effort · ≈ 2 intense solo weeks
~20 / day
merged PRs · ~223 in ~11 days
A cadence of ~20 PRs/day with an AI agent co-authoring commits is impossible to achieve by hand. The agent did the typing; the human dispatched many asynchronous tasks in parallel.
🔍 With AI: the evidence
📈 Velocity
~223 merged PRs / ~10.8 days (~264 commits)
Commit clock runs ~05:00 → midnight most days
Consistent with parallel async tasks, not continuous typing
🤖 Authorship pattern
"Copilot" is a named commit / PR author (~44 commits)
Token charts, a proxied-Hikari fix, a docs refactor
Polish that is itself several days of solo work
🧭 Where the human time went
Writing prompts, reviewing & merging ~223 PRs
Resolving CI failures (Spring Boot 4, Flyway 11, OTLP)
Review-and-orchestrate, not write-every-line
🛠️ Without AI: the honest estimate
One experienced Spring Boot + Vue developer, no AI codegen, through the same polished 1.0.0.
6.5–8.5
months of full-time work · ~28–36 weeks
~1,100–1,450
hours of hands-on effort
~40
feature panels = the dominant cost
🧮 Cross-check: a COCOMO "organic" estimate on ~50 KLOC yields 100+ person-months, which is too high because much of the code is repetitive scaffolding. A domain-expert solo figure of ~7.5 months is the defensible middle ground.
🗂️ Without AI: where ~7 months goes
Estimated weeks per phase · one senior developer, no AI codegen.
Lighter bar ends show the ranges.
Overall estimate~28–36 wk ≈ 6.5–8.5 mo
⚖️ The verdict: with vs. without AI
With AI: project figures. Without AI: a solo-work estimate for the same 1.0.0 release.
Calendar timeHuman effort
Lighter bar ends show the ranges. Calendar scale uses 30-day months.
Throughput
~20 PRs/day, parallel vs. a few features/week, serial
Human's role
Architect + reviewer vs. author of every line
40 panels
Near-free to replicate vs. repetition as the biggest cost
From months of solo work to 11 days of agent-assisted delivery.
02
How to run it yourself
Six ingredients for agentic engineering.
Part 02 · The recipe
Agentic engineering, not vibe coding
~$2,000 of tokens across the sprint — about $9 per merged PR. That's the cheap part. The real question is when you pay for the code.
🎲 Vibe coding — low up front
No specs, no harness: you start shipping immediately
You pay in retry loops, and again six months later reverse-engineering code nobody understands
That's the maintenance tax — invisible on day one
🏗️ Agentic engineering — pay first
Specs, tests and CI cost you real days before the first agent runs
They keep your agent iterating toward a solid solution, rather than rushing out an incorrect answer
The harness takes real investment up front, but skipping it costs more later
12 weeks and 552 more merged PRs later, the maintenance tax still hasn't come due. That's the harness paying back its up-front cost.
1
Ingredient
Pick the right model for the task
🧠 Workhorse
GPT-5.5 Extra-High reasoning handles most of the work, ~90% of tokens served from cache.
🎯 The tricky parts
Claude Opus 4.8 and Gemini 3.1 Pro. Three strong models, cross-checking each other to find the best fix.
⚡ The easy stuff
A smaller model or "Auto" mode for simple, mechanical tasks. Fast and cheap.
💰 The whole bill
~2.7B
total tokens
~95%
served from cache
120M
fresh input · 15M output
~$2,000
total cost
2
Ingredient
Write the specifications
📜 Technical standards · AGENTS.md
Set the conventions once: stack, build, test, style
Repository instructions define the rules, not every task's procedure
Per-panel conventions so 40 panels come out consistent
🎯 Complete, clear business specifications
What to build, where, what "done" looks like
Acceptance tests the implementation must pass, even when using a skill
Small, self-contained, no hidden dependencies
The spec is the product now. The better the brief, the less you babysit.
3
Ingredient
Build the test harness
✅ A build + test they can run
One command runs compile, unit and e2e: green or red
Agents run the checks after using skills and tools, before opening a PR
No tests = you can't trust the output
🛡️ CI is the trust layer
~116 test suites · ~81 Java + ~35 Playwright
CodeQL + e2e gate every PR to main
This is what lets you merge ~20 PRs/day safely
You can't read every line of 223 PRs. A green build you trust is what makes the volume reviewable.
4
Ingredient
Equip your agents
From my recent BootUI sessions: reusable skills for the workflow, Java code intelligence when needed.
📚 Skills: reusable workflows
Impeccable — craft beautiful Web designs, fix accessibility issues
orchestrate — coordinate advisor audits across sessions
agent-merge — PR review, CI and conflict follow-ups
bootui-release — a custom skill written specifically to guide a BootUI release
🔎 Java LSP: occasional code intelligence
Ask the language server about symbols, not just matching text
Used to explore advanced Java modules and inspect code during review
The project needs to be indexed by the language server first
Skills, MCP servers and tools connect agents to documentation, data and external systems.
Recorded examples, 9 August–8 September 2026, plus the custom release skill; not a claim about the original sprint.
5
Ingredient
Split the work, run agents in parallel
🧩 Make it parallel-ready
~40 near-identical panels = perfect to fan out
One task per agent: small scope, clear goal
One branch / worktree each, no collisions
🚀 A fleet, not one chat
GitHub Copilot App: many agents live on one machine
Mobile app: agents in Docker containers, on the go
Your throughput isn't your keyboard. It's your briefs.
The whole point is parallelism. Don't babysit one agent. Run ten.
🧑✈️ The mindset shift
I didn't open my IDE. I wasn't the developer. I was the manager.
🧑✈️ You · the manager
🎛️ Panels
clone the ~40 feature panels
🔌 Integrations
the deep JVM subsystems
🎨 Frontend
the embedded Vue SPA
🏗️ CI & docs
release, tests, VuePress
Many agents in parallel. You brief, review, merge.
You don't type faster. You ship what used to take months.
6
Ingredient · The daily loop
Drive the daily loop
⚡ most of the work: you, driving the fleet
9am11am2pm5pm7pm↻
☕ MergeLand last night's deep plans
Spec & launchBrief tasks, fan out the fleet
DriveReview, merge, re-task, live
DriveMost PRs land by evening
🌙 QueueA few deep plans for the night
↻ Repeat×~11 days → v1.0.0
Day: the engine
Hands-on all day: spec, launch, review, merge, re-task. Most of the ~20 PRs a day land right here.
Evening: hand off
Queue a few deep, long-running plans before you step away.
Night: the bonus
A handful of deep autonomous runs finish by morning. The minority, not the engine.
📋 The six ingredients of agentic engineering
1Pick the right model for the task — balance capability, speed and cost.
2Write the specifications — repository rules, scoped tasks and acceptance criteria.
3Build the test harness — runnable tests and CI checks before merge.
4Equip your agents — skills for workflows, tools for code intelligence and execution.
5Split the work, run agents in parallel — one task and branch each; you brief, review and steer.
6Drive the daily loop — drive by day, let a few deep plans run overnight, merge the results over coffee.
If there's one slide to screenshot, this is it.
🖥️ Build with GitHub Copilot App
The app we've been using throughout the BootUI project.
Your workspace for AI coding agents
Plan tasks and run agents in parallel, in isolated worktrees
Let agents edit code and run tests; inspect their diffs and review PRs
Keep planning, implementation and maintenance in one place
New bootui CLI: query the same diagnostics from scripts or a terminal
🩺 Advisors that tell you what's wrong
Security, memory, databases, Hibernate, REST, architecture and native-image readiness
Live CVE checks against the OSV feed for your actual dependency tree
🤖 And it makes your agents smarter
Opt-in MCP server: agents read runtime diagnostics and run advisors
Pairs with Coffilot in the Copilot App to build, run and scan your app
<!-- Spring Boot MVC starter · use only in development --><dependency><groupId>com.julien-dubois.bootui</groupId><artifactId>bootui-spring-boot-starter</artifactId><version>1.16.0</version></dependency>