☕ Java Champion🏢 Microsoft / GitHub⭐ JHipster 22k+🤖 AI × code
Principal Manager, Developer Relations @ Microsoft / GitHub
Creator of JHipster · 22,000+ ⭐
200+ international talks (Devoxx, SpringOne, MS Build…)
Today: shipping real projects by managing fleets of 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.
Part 01 · The proof
01
Does it really count?
11 days of agents vs. the honest by-hand estimate.
✅ 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.
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.
Part 02 · The recipe
02
How to run it yourself
Six ingredients and one daily loop.
🗓️ 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.
1
Ingredient
Write the specifications
📜 The house rules · AGENTS.md
Set the conventions once: stack, build, test, style
A copilot-instructions.md every agent reads first
Per-panel conventions so 40 panels come out consistent
🎯 A spec per task
What to build, where, what "done" looks like
The acceptance test the agent must make pass
Small, self-contained, no hidden dependencies
The spec is the product now. The better the brief, the less you babysit.
2
Ingredient
Build the test harness
✅ A build + test they can run
One command runs compile, unit and e2e: green or red
Agents verify their own work 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.
3
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.
4
Ingredient
Let a few deep plans run overnight
The day is the engine. The night is a bonus shift: before you log off, hand a few deep, long-running plans to autonomous agents. These are the big jobs you don't want to babysit, and they land by morning while you're away.
🔌 Deep integration
Security filter chains: 37 rules, wired & tested
long run · 3 PRs
🧪 Test generation
Push coverage across the 116 suites
long run · 2 PRs
♻️ Big refactor
Reshape the Actuator data layer
long run · 2 PRs
A few deep plans, finished by morning. A bonus on top of your day, not a replacement for the driving.
5
Ingredient
Merge the results over coffee
☕ First thing, over coffee
Triage the few deep overnight PRs
Merge the green ones fast
Drop or re-task what didn't land
Cherry-pick the good parts of the rest
Then start driving the day's fleet
🔎 Review is the real bottleneck
It's not the typing anymore. It's the merging. Make review a fast, trusted ritual you run all day, not a line-by-line slog.
Drive all day, merge as you go, hand off a few deep plans at night. ~11 days to a tagged 1.0.0.
6
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
🧨 Why the multiplier was so large
This codebase is unusually well-suited to AI, for three reasons. Not every project gets 15×.
🔁 Massive repetition
~40 structurally similar panels an agent clones cheaply. By hand, that's the most expensive part.
🔌 Broad-but-shallow
Many Spring subsystems, each shallow. By hand, the cost is mostly looking things up, exactly what the agent absorbs.
🛡️ Strong guardrails
Multi-module CI, CodeQL, e2e and explicit instructions let the human safely accept high throughput.
🚀 Net effect: a ~6.5–8.5 month solo effort, compressed into ~11 days and ~2 weeks of human attention. The biggest leverage is on large-surface, pattern-heavy, well-tested code, not hard algorithms.
⚠️ Watch out for
Scope creep
"Build the whole thing" makes an agent wander. Fix: one tight goal per task.
No tests, no trust
You can't read every line of 223 PRs. Fix: harness first, green build before merge.
Giant PRs & review fatigue
A 2,000-line PR is impossible to review well. Fix: small, reviewable chunks; pace yourself.
Wrong model
A weak model fails the hard tasks; a strong one is slow and costly. Fix: match the model to the job.
Most failed runs aren't the agent's fault. They're a briefing problem.
📋 The one-page recipe
1Write the specifications (AGENTS.md + a spec per task) before you start a single agent.
2No agent without a test harness: a build + test it can run and pass itself.
3One task per agent. Small scope, clear goal, its own branch.
4Run them in parallel and drive a fleet you steer all day, not one chat window.
5Let a few deep plans run overnight. The bonus shift, not the engine.
6Merge as you go: triage fast, merge wins, drop or re-task the rest.
7Pick the right model per task; save what works as reusable instructions.
If there's one slide to screenshot, this is it.
🎁 And the bonus: a new Spring Boot console
The recipe was the point, but it left behind a real, open-source product: BootUI.
❤️ Health & metrics live Actuator, memory, threads