• AI sped up technical design, implementation, and testing • Faster stages make review lead time stand out • Human review determines throughput, becoming the bottleneck Design Implement Test Faster with AI ──────────────────────────────▶ Review Things pile up here 4
• Why not have AI do the code review too? • Humans just define the spec and the intended UX • AI generates the code, AI flags issues, AI fixes them Loop until there are no more findings! Design Implement Test Review Faster with AI ────────────────────────────▶ 5
• Why not have AI do the code review too? 🤔 • Humans just define the spec and the intended UX • AI generates the code, AI flags issues, AI fixes them Loop until there are no more findings! Design Implement Test Review Faster with AI ────────────────────────────▶ 5
Over 10 years of history • Migrating to a multi-module structure • Most legacy code still lives in the app module • Migrating to Compose • ViewBinding / DataBinding still remain • MVVM 9
202,727 2 58 GitLab Modules Lines of code Committers MRs per Version app 1 / library 1 incl. tests 45,758 kobaken and one month control core 14 feature 26 build/CI 3,396 more average / max 95 Self-hosted in- 2025/7‒2026/7 house 10
review wait grows, lead time doesn't improve ▲ Cause Large-diff MRs mean heavy review load AI coding increased large-diff MRs Each review is heavy; MRs pile up faster than they can be handled 13
30 lines in total • Sets out the agent's behavior guidelines • We create and reference the following md files: • architecture.md • junit5_unit_tests.md 33
Skills • adapting-edge-to-edge (our own skill) • A skill for making screens support edge-to-edge • Supports both Android View / Compose • The official skill covers Compose only 36
Skills • multi-perspective-code-review (our own skill) • Has subagents review from multiple perspectives "Behavior" or "structure" Data / Infra Design UI / Compose Testing Security 37
of multi-perspective-code-review Severity Target layer Why it's bad Alternative Must-fix or UI / domain / data Convention, bug, or Concrete fix informational — which one design principle proposal 38
of multi-perspective-code-review Example finding (sample) [High / UI layer] A ViewModel Flow is collected directly inside a LazyColumn. The subscription is re-established on every recomposition (rule: subscribe via UiState). Alternative: subscribe with collectAsStateWithLifecycle() and consolidate into UiState. Fixed output format → better decisions on adopting findings 39
review_guideline.md • References architecture.md, junit5_unit_tests.md, etc. • "Review against the standards in ~.md" • Also check the MR description against the implementation • "Does the description make the purpose clear?" • "Does it diverge from the implementation?" 40
verification with JUnit / Robolectric Domain logic and UI state changes verified automatically in code Relation to AI review Makes AI findings "verifiable" Findings are fact-checked automatically; refactoring proposals accepted with confidence 42
Overview Screenshot comparison with Roborazzi and similar tools Automatically verifies "the UI hasn't changed" via image diffs Relation to AI review Automatically proves "the appearance hasn't changed" Reduces the burden of humans visually checking screens for refactorings 43
become "verifiable" AI findings Verified by Accept / tests reject • Unit tests raise confidence in logic and make refactoring safer • VRT automatically proves "the UI hasn't changed" 44
Konsist • Write architecture rules as test code • Auto-check forbidden dependencies / layer reference directions in CI • Rules that tools can check go to Konsist; judgment criteria go to AGENTS.md Wherever possible, catch rule violations with tests, not AI findings 45
as a "build error" What happened AI couldn't reference the generated ViewBinding / DataBinding classes and wrongly flagged "this will be a build error" 47
AI can't see" with context • Document the existence and handling of auto-generated code in the review md file • Ignore findings like "undefined" or "build error" 49
Maintainability Security Bugs & regressions Readability Vulnerabilities & data leaks Requirements Consensus Accountability Works to spec? Align on design Who is accountable 54
humans own Perspective AI Human Quality ◎ ◯ AI detects rule violations & routine bugs; humans confirm Maintainability ◎ ◯ Naming & consistency: AI. Structure & design: humans Security ◯ ◎ AI detects patterns; risk judgment & responsibility: humans Requirements △ ◎ AI can assist if given the spec; humans check against it Consensus — ◎ Sharing design decisions & building buy-in is human-only Accountability — ◎ "Who approved it" can't be shifted to AI ◎ Primary ◦ Support △ Conditional Notes — Not covered 55
design before coding What we did Added spec & design review before implementation Pre-code decisions aren't automated ̶ humans review them ▼ Framework we adopted Design Docs Before implementing, summarize background, goals, design & trade-offs in a short doc, and build consensus on design decisions through stakeholder review 56
Split MRs into "behavior" and "structure" Behavioral changes Structural changes Spec/behavior changes, bug Refactoring that doesn't fixes, etc. affect behavior A category with high user impact No user impact Mixed MRs slow review down → split them for faster turnaround Reference: Kent Beck, "Tidy First?" ̶ structural / behavioral changes 58
Review operations by category Behavioral changes Structural changes AI code review × human review AI code review + VRT is enough The MR author must present the change Often fixable after the fact intent Note: for mobile apps, a "fix it later" doesn't reach users instantly Draw the line by whether you can tolerate the fix lead time 59
we classify them? • multi-perspective-code-review, built during foundation work • Classifies changes as "behavior", "structure", or "mixed" • If "mixed", instruct the AI to separate them • Splitting into separate MRs reduces cognitive load 60
change risk Risk High Example changes Review policy Billing / auth / personal data / targetSdk updates Spec link required + human review required Medium Feature additions / logic changes AI review + human review Low Minor UI tweaks / copy changes Mainly AI + self-review (human review optional) Allocate human time according to risk 61
̶ AI self-review • The MR author owns and is responsible for the code • The reviewer functions as a supporter • Loop AI review & fixes before creating the MR • Leverage multi-perspective-code-review Per-perspective self review Style findings already fixed by MR time Reviewers focus on intent & design 63
AI never got the spec What happened The code was valid, but AI review missed the gap between implementation and spec Superficial reviews without clear requirement context 69
AI never got the spec • Fix: add spec writing to the development flow • Pass the Spec to AI agents during implementation • Consolidate spec info into Design Docs for human review 70
LGTMs weaken human review What happened When the AI says "no issues," the rigor drains out of human review MRs that look already approved get less attention (varies by person) 71
LGTMs weaken human review • Fix: make explicit what AI checks vs. what humans check • Humans look at specs, intent, and risk • Shift from pointing out issues to confirming intent and asking questions 72
Docs ≈ Plan • Fix: adopt them for high-uncertainty, large-scale work & refactoring • Use mini Design Docs for everyday feature development • A minimal version with reduced granularity and fewer sections 74
AI review accuracy = "context quality" Grow AGENTS.md, Skills & tests to make findings verifiable Redesign the review process Redefine the responsibilities of AI and humans Run pre-implementation review, MR splitting & AI self-review 76