Как декомпозируешь продуктовую задачу

«Как декомпозируешь продуктовую задачу» — вопрос из категории Софт-скиллы, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый пример ответа, который можно адаптировать под свой опыт.

Ответ

Разбиваю задачу на подзадачи по слоям приложения:

  1. UI – экраны, компоненты, анимации
  2. Навигация – переходы между экранами
  3. Бизнес-логика – UseCase/Interactor
  4. Данные – API, локальное хранилище, маппинги
  5. Инфраструктура – DI, аналитика, кэширование

Пример декомпозиции для "лайка поста":

// UI
class PostAdapter { fun bind(likeState: Boolean) }  

// Навигация
interface PostRouter { fun showLoginIfNeeded() }  

// Бизнес-логика
class LikePostUseCase(repo: PostRepository) {  
    suspend operator fun invoke(postId: String)  
}  

// Данные
interface PostRepository {  
    suspend fun likePost(postId: String): Boolean  
}  

Каждый слой тестируется изолированно. Сначала реализую core-логику, затем UI.