Какая была твоя роль в команде на прошлом проекте

Ответ

Ведущий Android Developer в команде из 5 человек. Отвечал за архитектуру приложения, код-ревью, менторинг джуниоров и взаимодействие с бэкендом. Участвовал в планировании спринтов, оценке задач и оптимизации производительности. Пример:

// Реализовал Clean Architecture + MVVM  
class MainViewModel(  
    private val repo: DataRepository  
) : ViewModel() {  
    private val _data = MutableLiveData<Result>()  
    val data: LiveData<Result> = _data  

    fun fetchData() {  
        viewModelScope.launch {  
            _data.value = repo.getData()  
        }  
    }  
}  

Также внедрял CI/CD, писал UI-тесты и участвовал в A/B тестировании фич.

Ответ 18+ 🔞

А, ну это же классика, ёпта! Сидишь такой, пишешь в резюме, что ты там ведущий был, а по факту — просто единственный, кто не боялся в глаза продакту сказать, что его идея — пиздец какая тупая.

Ну вот смотри, формально — да, ведущий Android-разработчик в команде из пяти человек. А по-человечески это значит, что я был тем самым мужиком, на ком всё держалось. Архитектура приложения? Это я, блядь, каждый день бился головой об стену, пытаясь объяснить джунам, что выносить всю бизнес-логику в Activity — это не архитектура, а ебаный ад, который потом аукнется.

Код-ревью? О, это отдельный вид спорта. Открываешь пул-реквест, а там такой код, что волнение ебать, и терпения ноль ебать. Типа:

fun doEverything() {
    // получаем данные
    val data = getData()
    // показываем их
    showData(data)
    // логируем
    logData(data)
    // проверяем интернет
    if (isOnline()) {
        // отправляем на сервер
        sendData(data)
    } else {
        // сохраняем в базу
        saveToDb(data)
        // и ещё раз пытаемся отправить
        retryLater(data)
    }
    // обновляем UI
    updateUI()
}

И ты такой сидишь и думаешь: «Э, бошка, думай! Чувак, ты веришь, что это будет работать?» И начинаешь писать комментарии, а по факту — переписываешь половину сам, потому что иначе «будет вам хиросима и нагасаки» в продакшене.

Менторинг джуниоров — это когда ты не просто пишешь код, а ещё и выступаешь в роли живой документации и психотерапевта. Объясняешь, почему LiveData — это не просто var, а потом ещё и успокаиваешь, когда у них после пятого запуска падает эмулятор.

Взаимодействие с бэкендом — это вообще отдельный театр. Приходишь к ним: «Мужики, а почему ваш новый эндпоинт вместо JSON возвращает, прости господи, HTML-страницу с ошибкой 500?» А они такие: «У нас всё работает, это у вас на клиенте косяк». И вот тут начинается настоящая битва.

Ну а в планировании спринтов и оценке задач — это где ты из оптимиста превращаешься в циника. Продакт говорит: «Да это же фича на два дня!» А ты смотришь на ТЗ, где написано «сделать как в ТикТоке, но лучше», и понимаешь, что это не два дня, а два месяца, и то если повезёт.

А вот пример кода, который я реально городил, чтобы хоть как-то поддерживать порядок в этом бардаке:

// Реализовал Clean Architecture + MVVM
class MainViewModel(
    private val repo: DataRepository
) : ViewModel() {
    private val _data = MutableLiveData<Result>()
    val data: LiveData<Result> = _data

    fun fetchData() {
        viewModelScope.launch {
            _data.value = repo.getData()
        }
    }
}

Выглядит просто, да? А попробуй-ка это протащить через всех, кто считает, что Activity — это бог и царь, и всё должно быть в нём. Приходилось быть, блядь, дипломатом, чтобы не взъебать всех нахуй сразу.

Ну и да, всё остальное — CI/CD, UI-тесты, A/B-тесты. Это когда ты уже не просто кодер, а этакий мастер на все руки, который ещё и должен убедить менеджмент, что писать тесты — это не трата времени, а экономия нервов в будущем. А то без них каждый релиз — как русская рулетка, только патрон в стволе не один, а овердохуища.