Agents work best in codebases that are easy for people to understand. A few architectural habits make a big difference.
Clear module boundaries
Split the project into modules with explicit public APIs, such as feature modules, a data layer, and a design-system module. An agent can then change one area without wandering into others.
Enforce boundaries mechanically
Instructions are not enough. Use lint rules, dependency checks, or build configuration that fail when a feature module imports something it should not. The agent gets immediate feedback.
Small files and focused classes
Large files consume context and invite messy edits. Smaller, single-purpose files are easier to read, change, and review.
Types as guard rails
Strong types, sealed classes for state, and well-defined interfaces catch mistakes at compile time. A compiler error is a fast, reliable signal an agent can act on.
Fast checks
Keep a quick command that runs compilation, unit tests, and lint for a single module. Short feedback loops let agents correct themselves cheaply.
Protect generated and sensitive files
Mark generated code and build configuration as off-limits, and require human review for changes to them.
Result
These practices help human developers as much as agents. A codebase that is easy to reason about is easier to automate safely.
Continue with the book
Explore the full treatment, worked examples, and exercises in Agentic Android App Development.
Adapted from Agentic Android App Development, published by Choral Software. Article text and original examples © 2026 Choral Software. All rights reserved.
