🏗️ Development Guide
This document summarizes project-specific conventions for developers.
For full details, see:
- Architecture - modules, layering, offline-first
- Code Quality Guide - style, static analysis, security, performance
- Testing Guide - test strategy and frameworks
- Code Review Guide – review expectations
📦 Modules
- Follow Module Organization and Module Structure
- Place new code in
feature:*
,core:*
, orlibrary:*
modules - Do not add new code in
legacy:*
modules - Keep API/impl separation in all modules
🏛️ Architecture
- Follow Architecture
- Dependencies must flow in one direction only
- UI built with Jetpack Compose + MVI pattern
- Domain logic implemented in Use Cases
- Data handled via Repository pattern
⚙️ Dependency Injection
- Use Koin with constructor injection
- Avoid static singletons and service locators
🧪 Testing
- Follow the Testing Guide for frameworks and strategy.
- Project conventions:
- Name the object under test
testSubject
- Prefer fakes over mocks when possible
- Use descriptive test names and AAA (Arrange–Act–Assert) pattern
- Name the object under test
🎨 Code Style
- Follow the Code Quality Guide for formatting and tooling.
- Code style quick reminders
- Prefer immutability (
val
overvar
) - Use extension functions for utilities
- Keep functions small and focused
- Prefer immutability (
Do’s and Don’ts
- ✅ Write modular, testable code with clear boundaries
- ✅ Document non-obvious logic and decisions (link ADRs when appropriate)
- ✅ Keep module boundaries clean
- ✅ Add or update tests for new/changed code
- ✅ Run Spotless, Detekt, and Lint checks locally before committing
- ❌ Don’t commit new code to
legacy:*
modules, unless strictly necessary - ❌ Don’t bypass the architecture and layering (e.g., UI calling data sources directly)
- ❌ Don’t introduce circular dependencies between modules