Medium Android team encodes team coding conventions into Cursor agent skills to produce pattern-compliant code
Medium's small Android team had strong, opinionated coding conventions — where ViewModels get data, how analytics events flow, what a new screen looks like — but that knowledge lived in PR review comments, Slack threads, and the heads of veteran engineers. When AI coding assistants arrived, they produced generic Kotlin code that missed the team's specific conventions, component library, and testing style.
Without custom skill files, the AI consistently generated composables tightly coupled to the ViewModel — missing patterns like listener splitting and the @VisibleForTesting overload — making previews and UI tests painful, and causing the same pattern-break comments to recur in PR reviews.
Setting up a new screen now takes a prompt and a review pass instead of most of a morning, and every new screen looks structurally identical regardless of who or what wrote it, eliminating convention drift across the small team.
Show all 6 reported metrics
Frequently asked questions
What did this team achieve with this AI workflow?
Setting up a new screen now takes a prompt and a review pass instead of most of a morning, and every new screen looks structurally identical regardless of who or what wrote it, eliminating convention drift across the…
What tools did this team use?
Cursor, MockK, Turbine, Hilt, Apollo GraphQL, Detekt, Robolectric, Wire.
What results were reported?
Boilerplate setup time replaced by scaffolding skills: 30-60 minutes; New screen setup time before skills: most of a morning; Files generated per screen prompt: 6-8 files; Skills built: 13 (source-reported, not independently verified).
What failed first in this deployment?
Without custom skill files, the AI consistently generated composables tightly coupled to the ViewModel — missing patterns like listener splitting and the @VisibleForTesting overload — making previews and UI tests pain…
How is this quality assurance AI workflow structured?
Developer prompts AI agent → AGENTS.md loaded as baseline context → Skill file loaded as runbook → AI generates convention-compliant code → Engineer review pass → Skill updated from pattern breaks.