Ответ
Да, мне было бы полезно понять, как организован рабочий процесс. В моем опыте эффективные процессы значительно влияют на продуктивность команды.
Мой текущий/предыдущий workflow выглядел так:
// 1. Создание feature-ветки от main
// git checkout -b feature/implement-payment-webhook
// 2. Разработка с TDD подходом
[Fact]
public async Task ProcessPaymentWebhook_ValidRequest_UpdatesOrderStatus()
{
// Arrange
var webhookService = new PaymentWebhookService(_mockPaymentGateway.Object);
var validPayload = CreateValidWebhookPayload();
// Act
var result = await webhookService.ProcessAsync(validPayload);
// Assert
Assert.True(result.IsSuccess);
Assert.Equal(OrderStatus.Paid, result.Order.Status);
}
// 3. Реализация после написания теста
public class PaymentWebhookService : IPaymentWebhookService
{
public async Task<WebhookResult> ProcessAsync(WebhookPayload payload)
{
// Валидация, бизнес-логика, обновление статуса
var validationResult = await _validator.ValidateAsync(payload);
if (!validationResult.IsValid)
return WebhookResult.Failure(validationResult.Errors);
// Основная логика обработки
await _orderService.UpdateStatusAsync(payload.OrderId, OrderStatus.Paid);
await _notificationService.SendPaymentConfirmationAsync(payload.OrderId);
return WebhookResult.Success();
}
}
// 4. Code Review через Pull Request
// 5. CI/CD pipeline: тесты → сборка → деплой в staging
// 6. После approval — мерж в main и деплой в production
Конкретные вопросы по процессу:
- Как организован CI/CD pipeline? Какие этапы включает (линтеры, тесты, security scans)?
- Какие практики code review приняты в команде (обязательные ревьюверы, критерии approval)?
- Как происходит планирование спринта и приоритизация задач?
- Есть ли практика pair programming или mob programming для сложных задач?
- Как команда работает с инцидентами в production (on-call, постмортемы)?
Ответ 18+ 🔞
Э, слушай, а ты не так уж и плох, раз спрашиваешь про процессы. Это ж святое, без них — пиздец и бардак, а не разработка. Ну, расскажу, как у нас тут обычно крутятся шестерёнки, а то вижу, у тебя в голове уже порядок, но хочется сравнить, да?
Насчёт твоего workflow: Да, всё верно, классика жанра. Feature-ветка, тесты вперёд, код потом — это пизда рулю, а не подход. У нас так же, только иногда, когда дедлайн жмёт как удав, этот красивый TDD превращается в «написать хоть что-то, а потом, бля, допилю». Но в идеале — да, как у тебя.
А теперь по нашим конкретикам, раз спрашиваешь:
-
CI/CD наш, родной. Конвейер — это наше всё. Выглядит примерно как ёперный театр, но работает.
- Стартует от пуша в ветку. Сразу линтер (у нас SonarQube + свои правила) начинает орать, если код похож на то, что писал мартышлюшка после трёх бутылок пива. Волнение ебать, когда он красным горит.
- Потом сборка. Если упала — всё, приехали, сиди и фикси, пока не заработает. Терпения ноль ебать, но дисциплинирует.
- Дальше прогон всех тестов — юнит, интеграционные. Если хоть один сдох — pipeline красный, и ты, чувак, идешь разбираться. Никакого «ой, да это ерунда, проигнорим».
- Потом, если всё зелёное, деплой в staging. Туда же выкатывается автосгенерированная дока по API (Swagger), чтобы фронтендеры не орали «а где ваши ебучие эндпоинты?».
- Security scans — да, есть. Триггерится на мерж в
main. Находит какую-нибудь уязвимость — все в ужасе, пока не пофиксят.
-
Code Review — это святое, но с человеческим лицом.
- Обязательно минимум один апрув, а для критических штук (платёжные шлюзы, миграции БД) — два.
- Критерии простые, но жёсткие: код решает задачу? Тесты есть и они адекватные? Никакого велосипедостроения, где можно взять готовое? Стиль кода не вызывает желания вилкой в глаз? Если что-то не так — просто пишешь комментарий «чувак, тут хуй с винтом, переделай».
- Главное правило ревью: не быть пидарасом шерстяным. Не придираться к пробелам, а смотреть на суть. Если видишь архитектурную лажу — так и сказать: «Слушай, тут подозрение ебать чувствую, это потом может накрыться медным тазом».
-
Планирование спринта — это всегда драма.
- Собираемся, смотрим бэклог. Продукт-оунер орёт, что всё нужно «ещё вчера». Техлид пытается объяснить, что люди — не роботы.
- Приоритизация — по бизнес-ценности и по рискам. Что клиенту срочно надо и что может впиздюрить нам по инфраструктуре, если сломается, — делаем в первую очередь.
- Задачи дробим так, чтобы влезали в спринт. Если задача — овердохуища и непонятная, её или ещё ломают, или выносят в отдельное исследование («спайк»).
-
Pair/Mob programming — по желанию и необходимости.
- Парное программирование — когда задача хитрая, как хитрая жопа, или нужно быстро ввести нового человека в контекст. Садимся за одну машину, один пишет, второй думает. Эффективно, но терпения нужно, блядь, море.
- Mob programming (вся команда за одной задачей) — редко, только для какой-нибудь ебейшей проблемы, где доверия ебать ноль к одному решению. Чаще просто собираемся на быстрый дизайн-сешн, набрасываем варианты на доске и разбегаемся.
-
Инциденты в продакшене — вот тут начинается настоящий ад.
- On-call ротация есть. Дежурный получает алерт — у него удивление пиздец, потом паника, а потом он бежит по чек-листу: остановить кровь (откатить/забанить фичу), найти причину, пофиксить.
- Постмортем — обязателен для любого инцидента выше «плюнул и забыл». Собираемся, без поиска виноватых (это важно, иначе все начнут бздеть и перекладывать ответственность). Разбираем: что сломалось, почему наши тесты/мониторинг этого не увидели, и что делаем, чтобы эта манда с ушами больше не повторилась. Пишем документ, кладём в общую базу знаний. Чтобы в следующий раз не изобретать велосипед.
Короче, процесс — это когда все немного недовольны, но всё работает. Без него — анархия, а с ним — предсказуемый и управляемый результат. Сам от себя охуел, как подробно расписал, но раз спрашиваешь по делу — значит, тебе надо.