Ответ
Мой рабочий процесс состоит из последовательных этапов, обеспечивающих качество и предсказуемость результата:
- Анализ и уточнение: Детальное изучение задачи (тикет, ТЗ, дизайн). Уточнение непонятных моментов у PM, дизайнера или тимлида. Определение acceptance criteria.
- Проектирование решения: Выбор подходящей архитектуры (MVVM, VIPER) и паттернов. Декомпозиция на подзадачи. Оценка времени и рисков. Планирование тестирования.
- Реализация: Написание чистого, поддерживаемого кода с соблюдением SOLID, DRY и гайдлайнов команды. Активное использование модульности и протоколов.
// Пример: выделение сетевого слоя в отдельный сервис protocol NetworkServiceProtocol { func fetchUser() async throws -> User } class UserViewModel { init(service: NetworkServiceProtocol) { ... } // Dependency Injection } - Code Review и рефакторинг: Отправка Pull/Merge Request. Получение обратной связи от коллег, обсуждение решений, внесение правок. Рефакторинг кода по итогам ревью.
- Тестирование: Написание unit-тестов для бизнес-логики. UI-тестирование критических сценариев. Самостоятельное ручное тестирование. Исправление багов, выявленных QA.
- Интеграция и релиз: Мердж в основную ветку (main/develop). Мониторинг сборки в CI/CD. Отслеживание метрик после релиза (краши, аналитика).
Документация ключевых решений ведется непосредственно в коде (комментарии) и описании PR.
Ответ 18+ 🔞
Да ты послушай, какой у меня тут конвейер налажен, блядь! Не просто так пальцем в потолок, а чёткий, ебаный план, чтобы потом не орать "ой, всё сломалось, нахуй!".
Ну, первым делом — разбор полётов. Беру я эту бумажку, там тикет, ТЗ, дизайн — и начинаю вникать. Если где-то хуй пойми что нарисовано или написано — сразу врубаю дурака и лезу с вопросами к продакту, дизайнеру или к тимлиду. Пока не станет ясно, как божий день, что, блядь, должно в итоге получиться. Без этого — пиши пропало.
Дальше — проектирование, ёпта. Нельзя же просто взять и начать хуярить код, как мартышка с гранатой. Надо подумать, какую хуйню (в хорошем смысле) использовать — MVVM там, VIPER. Разбить задачу на куски, прикинуть, сколько времени на это уйдёт, и где могут быть подводные ебли. И как будем проверять, что всё не разъехалось.
Потом уже, сука, самое интересное — кодить. Но не абы как, а с умом, чтобы потом самому не хотелось глаза себе выколоть, глядя на эту кашу. SOLID, DRY, все эти умные слова — не просто для галочки. Всё по протоколам, всё модульно, зависимости наружу, как рога.
// Смотри, не надо всё в одну кучу. Вот сетевой слой — отдельно, блядь.
protocol NetworkServiceProtocol {
func fetchUser() async throws -> User
}
class UserViewModel {
init(service: NetworkServiceProtocol) { ... } // Подсунул что надо — и работает.
}
Написал — сразу на ревью. Вываливаю пул-реквест и жду, когда коллеги придут и начнут ковыряться в моём коде, как в носу. Это святое! Обсуждаем, спорим, иногда даже ругаемся, но в итоге вношу правки. После такого код становится чище, а сам — умнее, блядь.
Дальше — проверка на вшивость. Пишу unit-тесты на всю эту бизнес-логику, чтобы она не сломалась от чиха. Делаю UI-тесты на самые важные сценарии. А потом ещё сам, как обдолбанный, начинаю тыкать во все кнопки, пытаясь сломать то, что только что собрал. Что нашёл — фикшу. Потом уже отдаю QA, но к тому моменту уже почти всё чисто.
И финальный аккорд — выпустить это добро на волю. Мерджим в основную ветку, смотрим, чтобы CI/CD всё собрал без косяков. После релиза не расслабляемся — следим, не посыпалось ли что, не начали ли у пользователей вылетать приложения, как осенние листья.
А всю свою гениальную мысль я фиксирую прямо в коде, комментирую, или в описании того самого пул-реквеста. Чтобы через полгода не орать "а кто это, блядь, такое написал?!" и не понимать, что это был я сам.