Привет, Хабр! Это третья статья из серии. В первой я разобрал 5 техник тест-дизайна, во второй - API и Security Testing на собеседованиях. Сегодня тема другая - не техническая. Хочу поговорить про роли в команде.
Недавно я попал на концерт симфонического оркестра. Сижу в зале, 80 музыкантов на сцене, всё серьёзно - скрипки, виолончели, духовые. И тут дирижёр поднимает палочку, зал затихает, и у меня в голове:
«Подожди... а зачем он вообще нужен? Они же все профессионалы. Ноты перед глазами. Каждый знает свою партию. Ну начните играть, чего ждать-то?»
И тут меня накрыло. Я же слышу такое каждый месяц на работе:
«Зачем нам QA? Разработчики сами протестируют.»
«Зачем менеджер? Мы сами разберёмся, мы же взрослые.»
Одна и та же логика. И там, и тут. Давайте разберу, почему она не работает.
Что будет, если убрать дирижёра
Уже пробовали
Вообще, оркестры без дирижёра - это не фантазия. В Москве в 1922 году скрипач Лев Цейтлин создал Персимфанс (Первый симфони��еский ансамбль) - оркестр без дирижёра. Идея красивая: равенство, никаких иерархий, все решают вместе.
И знаете что? Они реально играли хорошо. Получили звание «Заслуженный коллектив Республики», давали 70+ концертов в сезон. Дирижёр Отто Клемперер назвал их исполнение «Патетической» Чайковского «самым совершенным». По их примеру создавали оркестры в США и Германии.
Но была цена:
Репетиции отнимали в разы больше времени - камерно-ансамблевые методы, бесконечные дискуссии по интерпретации.
Роль дирижёра всё равно частично выполнял концертмейстер - сидел на возвышении лицом к оркестру.
В 1932 году ансамбль закрыли (по политическим причинам, но это отдельная история).
То есть даже успешный пример «команды без руководителя» работал с оговорками: больше времени на синхронизацию и неформальный лидер всё равно появился.
Оркестр = команда разработки
Я для себя тогда в зале нарисовал такую табличку (мысленно, конечно):
Оркестр | IT-команда |
|---|---|
Музыканты | Разработчики |
Ноты | ТЗ / спецификация |
Дирижёр | Менеджер (PM / Team Lead) |
Слушатель | Пользователь |
Репетиция | Спринт |
Концерт | Релиз |
Фальшивая нота | Баг |
Музыкальный критик | QA |
Аналогия кривоватая, конечно, но суть ловит. Скрипач видит только свою партию. Гобоист - свою. Каждый играет хорошо. Но кто слышит, как всё звучит вместе? Дирижёр.
В IT то же самое. Фронтендер написал красивый компонент. Бэкендер - чистый API. А вместе оно не работает, потому что формат данных не совпадает. И кто это заметит? Точно не тот, кто писал свой кусок.
«Разработчики сами могут тестировать» - и другие дорогие заблуждения
Я такое лышу постоянно. И каждый раз хочется спросить: «А вы когда-нибудь свой текст вычитывали сразу после написания? Много опечаток нашли?»
Слепота автора
Мозг дочитывает за вас. Написали «привте» - глаз видит «привет». Это не лень, так мозг работает.
С кодом всё один в один. Разработчик знает, как функция должна работать, и тестирует именно этот сценарий:
// Разработчик написал: function divide(a, b) { return a / b; } // Разработчик проверяет: divide(10, 2) // 5. Работает, ок // А QA проверяет: divide(10, 0) // Infinity. Упс divide("abc", 2) // NaN. А валидация где? divide(10) // NaN. Забыли аргумент
Разработчик проверил то, что задумал. QA проверил то, что может пойти не так. Разные задачи, разный взгляд.
Эффект IKEA
Есть такой психологический баг (да, у людей тоже баги): вам нравится то, что вы сделали сами. Собрали шкаф из IKEA - он для вас шикарный, хотя дверца не закрывается и одна полка кривая.
С кодом то же. Разработчик подсознательно ищет подтверждение, что всё работает. QA ищет подтверждение, что что-то сломано. Разный настрой, если хотите. Кто-то должен быть тем самым занудой, который говорит: «А если вот так?»
Стоимость бага
Когда нашли | Цена исправления | В терминах оркестра |
|---|---|---|
При написании кода | x1 | Музыкант сам заметил на репетиции |
На code review | x3 | Коллега поправил |
QA нашёл | x10 | Дирижёр остановил генеральную репетицию |
На стейджинге | x30 | Заметили на пресс-показе |
В проде | x100 | Фальшивая нота при 2000 зрителях |
Точные множители зависят от проекта, но порядок подтверждается исследованиями IBM Systems Sciences Institute и NIST. Баг в проде - это не просто «пофиксим». Это откат, хотфикс, ночная смена, злые пользователи и пост в Twitter.
Из практики: на e-commerce проекте я нашёл баг в расчёте скидок. При определённой комбинации товаров скидка удваивалась. Разработчик тестировал с одним товаром - у него всё ок. Я добавил три товара с разными акциями - и привет, бесплатная доставка + двойная скидка. Если бы это ушло в прод, компания теряла бы деньги каждый день, и никто бы не понял почему.
«Зачем менеджер? Мы сами разберёмся»
Ага. Давайте посмотрим, что дирижёр делает на самом деле (спойлер: не просто машет палочкой).
Дирижёр | Менеджер |
|---|---|
Выбирает, как интерпретировать произведение | Расставляет приоритеты - что делаем, что нет |
Задаёт темп | Контролирует скорость спринта |
Синхронизирует 80 человек | Синхронизирует фронт, бэк, QA, дизайн |
Слышит общую картину - баланс звука | Видит общую картину - как фичи связаны |
Разруливает конфликты между секциями | Разруливает конфликты между людьми |
Общается с организаторами | Общается с бизнесом и заказчиком |
Ничего из этого - не «перетащить таск в Jira». Но почему-то именно так многие представляют работу менеджера.
Три сценария без менеджера (все реальные)
«У нас нет блокеров»
Дейли. Все говорят «всё ок». Через неделю оказывается, что бэкенд сделал API с одним форматом дат, а фронт ожидал другой. Две недели работы коту под хвост. Менеджер бы это увидел на уровне задач ещё в понедельник.
«Мы же договорились»
Обсудили на кухне. «Давай сделаем так.» Через месяц: «Мы такого не обсуждали.» Нет менеджера - нет фиксации решений. В оркестре это как если бы музыканты договорились «играть побыстрее», но один ускорился на 10%, а другой на 30%.
«Мы сами расставим приоритеты»
Один разработчик хочет рефакторить. Второй - попробовать новый фреймворк. Третий - закрыть техдолг. Все по-своему правы. Но бизнесу нужна конкретная фича к пятнице. Без менеджера команда делает то, что интересно, а не то, что нужно.
А как же самоорганизация?
Да, работает. Но с нюансами.
Камерный квартет - 4 музыканта - прекрасно обходится без дирижёра. Они видят друг друга, слышат друг друга, реагируют мгновенно. Играют вместе годами.
Что нужно | Камерный ансамбль | IT-команда |
|---|---|---|
Размер | 3-5 человек | 3-5 разработчиков |
Опыт | Виртуозы, играют вместе годами | Сеньоры, работают вместе давно |
Понимание целого | Все знают произведение целиком | Все понимают продукт и бизнес |
Коммуникация | Зрительный контакт | Сидят рядом, постоянно общаются |
Сложность | Небольшой репертуар | Стабильный, понятный проект |
Но когда квартет вырастает до оркестра - всё ломается.
Есть формула Брукса: число каналов коммуникации = n(n-1)/2. При 3 людях это 3 канала. При 12 - уже 66. При 20 - 190. Попробуйте синхронизировать 190 каналов без координатора. Удачи.
QA - не «тот, кто кликает кнопки»
Знаете, кто в зале самый внимательный слушатель? Музыкальный критик. Он сам не играет. Но он слышит то, чего не слышат музыканты: тромбон чуть опоздал, баланс между секциями поплыл, в третьей части темп уехал.
Музыканты этого не замечают - они внутри процесса. Критик слушает со стороны.
QA делает то же самое. Разработчик внутри кода. QA смотрит снаружи, как пользователь. И видит то, что изнутри не видно.
Случай из практики
На проекте перед релизом все были уверены: готово. Unit-тесты зелёные, code review пройден, каждый разработчик свой модуль проверил.
Я сел проходить E2E-сценарий. Зарегистрировался, выбрал курс, начал урок, дошёл до теста... и приложение легло. Причём падало только при определённой последовательности: именно этот курс, именно после этого урока, именно при первой попытке теста.
Ни один разработчик это бы не нашёл, потому что каждый тестировал только свой кусок. А пользователь проходит весь путь целиком.
Антипаттерны, которые я видел лично
«QA подключим в конце»
Дирижёр приходит на каждую репетицию, а не за час до концерта. В IT почему-то нормально подключить QA в последний день спринта: «Мы всё сделали, проверь до пятницы.» И потом удивляются, что релиз уезжает.
QA нужен с самого начала. Подход называется Shift Left:
Плохо:Требования → Разработка → [в конце] QA → Релиз
Нормально:
Требования [+ QA] → Разработка [+ QA ревью] → Тестирование → Релиз
Когда QA читает требования на старте, он ловит противоречия до того, как написана первая строчка кода. Я так однажды нашёл, что два пункта в ТЗ друг другу противоречили - разработчики обнаружили бы противоречие только при мерже.
«Менеджер = надзиратель»
Плохой менеджер: «Почему задача не закрыта? Где отчёт? Обновите статус.»
Нормальный менеджер: «Вижу, что задача залипла - я поговорил с соседней командой, они разблокировали. Делайте спокойно, я разберусь с бизнесом.»
Разница - как между дирижёром, который тычет палочкой в каждую ошибку, и дирижёром, который ведёт за собой.
«Каждый сам себе QA»
Когда разработчик тестирует свой код, он:
Пропускает edge cases (слепота автора, помните?)
Торопится - «да я и так знаю, что работает»
Проверяет реализацию, а не поведение
Unit-тесты отлично. Но это не замена QA. Как разминка не заменяет саму тренировку.
Когда QA и менеджер реально не нужны
Я не фанатик. Бывают ситуации, когда можно обойтись:
Без QA:
MVP, хакатон, прототип
2-3 сеньора с хорошей культурой тестирования
95%+ покрытие автотестами и зрелый CI/CD
Внутренний тул, который видят 5 человек
Без менеджера:
Команда из 3-4 человек, которые давно вместе
Понятный, стабильный скоуп
Нет внешних заказчиков
Все в курсе, зачем делают то, что делают
Но таких команд мало. Как камерных квартетов в мире музыки - единицы. Большинство проектов - это оркестр.
Как это выглядит, когда всё работает
На том концерте был один момент, который я запомнил. Переход между частями симфонии. Тишина. Пауза секунд пять. Потом дирижёр медленно поднял руки - и 80 человек вступили одновременно. Вот прям в одну долю секунды. Мурашки по коже.
Никакой магии. За всем стоят координация , доверие и понимание, кто за что отвечает.
В IT я видел такие моменты тоже. Когда перед дедлайном все синхронизированы: бэкенд готов, фронт подключился, QA проверил, менеджер согласовал с бизнесом. И фича уходит в прод без единого бага. Редко, но бывает. И бывает только когда каждый делает своё дело.
В оркестре | В IT | Что делает |
|---|---|---|
Дирижёр | PM / Team Lead | Синхронизирует, расставляет приоритеты, разговаривает с бизнесом |
Музыканты | Разработчики | Создают продукт, знают своё дело |
Критик | QA | Оценивает качество, ищет проблемы до релиза |
Зритель | Пользователь | Ему всё равно на ваши процессы. Ему нужен работающий продукт |
Вместо итогов
Команда без QA - это как оркестр, где никто не слушает общее звучание. Каждый играет свою партию хорошо, но вместе звучит так себе.
Команда без менеджера - это как оркестр без дирижёра. Можно, если вас четверо и вы вместе 10 лет. Но если вас 15 и проект сложный - будет каша.
Не потому что музыканты плохие. А потому что музыка - больше, чем набор правильных нот.
Если было полезно - плюсуйте. Расскажите в комментах, как у вас: есть выделенный QA и менеджер, или «сами справляе��ся»? Интересно послушать разный опыт. Следующая статья будет про System Design для QA.
