Ограничение рулит. История из жизни
В прошлых постах я рассказывал, что такое теория ограничений, и как она работает. Этот посту будет про применение теории в реальной жизни.
Первый раз ТОС получилось применить в команде по разработке стриминг-сервиса. Это та, где мы чинили прод с помощью палок и изоленты. Я участвовал в разработке в качестве бэкендера.
Разработка была разделена на две группы: бэк и фронт, и у каждой группы был свой собственный тестировщик. Бэкендеров было четверо, а тестировщик один. Его зовут Саша. Саша проверял фичи сначала руками, а потом сам писал автотесты на питоне.
Первое, что нужно сделать для применение ТОС — найти ограничение. В данном случае сделать это было легко: открыл джиру и посмотрел на самую забитую колонку. Это была колонка "To Test". Ещё одни маркер — Саша уходил из офиса последний, когда все бэки уже давно были дома, но даже с такими переработками колонка не успевала рассасываться.
Как я писал в посте про канбан-доску, "Сашу было жалко, хотелось ему как-то помочь". Кажется, у меня в карьере была какая-то нездоровая тенденция к помощи Сашам. Хорошо, что сейчас в команде нет никаких Александров.
После разговора с Сашей выяснилось, что бэки хреначили фичи с бешенной скоростью и сразу отдавали их в тест. Зачастую разрабы даже не проверяли локально основной сценарий, не говоря уже о корнер-кейсах. Автотесты тоже никто не писал. В общем, херак-херак и в тестирование.
Чтобы решить проблему, нужно было направить работу всех элементов системы на помощь ограничению. То есть, сделать как-то так, чтобы разрабы перестали кидать в Сашу сырыми фичами. Так как я был обычным разработчиком без какой-либо власти, то начал показывать пример и проповедовать качество.
Ещё один оффтоп. Проповедовать у меня, в целом, получается неплохо. Когда я ходил в детский сад, мне в руки попалась брошюра с изображением Иисуса, держащего Землю в руках. Бурное детское воображение почему-то решило, что трава на Земле есть волосы на теле Иисуса. С этим утверждением я подбегал к одногруппникам и призывал их не вырывать траву из земли. Получилось собрать паству где-то из пяти ребят, которым я показывал брошюру и на серьёзных щах транслировал своё мировоззрение. Никто со мной не спорил. Траву рвать перестали. Конец оффтопа.
Когда ребятам на ревью начали приходить мои таски с уже написанными автотестами, они заинтересовались. Через какое-то время мы вместе с Сашей уже помогали и обучали бэков писать тесты.
Буквально через два-три месяца все разработчики умели писать автотесты. Саше оставалось только сделать ревью и описать несколько сложных корнер-кейсов. Очередь задач "To Test" рассосалась, и разработка поменялась местами с тестированием: теперь ограничение было на стороне разработки.
Это нормально, так происходит всегда. Процесс оптимизации — это движение от одного ограничения к другом. В системе всегда будет что-то, что её ограничивает.
Когда ограничением стала разработка, Саша смог сконцентрироваться на тестовой инфраструктуре и на написании удобного тестового фреймворка. Эти активности ускоряли написание тестов разработчиками. Более того, мы делегировали Саше часть простых фич, багов и задач, связанных с инфраструктурой: логирование и сквозной трейсинг через все микросервисы.
Всё это время лид нашей бэкенд-группы занимался поиском второго тестировщика в помощь Саше. Так он хотел решить проблему слишком медленного тестирования классическим способом. Поиск длился больше полугода, а когда тестировщик всё-таки вышел на работу, то делать ему было нечего. Ещё через пару месяцев проект закрыли, а Саша ушёл в другую компанию на позицию бэкенд-разработчика.
В этой истории выиграли все. Команда ускорила средний time-to-market по фичам с нескольких недель до нескольких дней, разработчики получили опыт написания тестов, тестировщик получил опыт разработки фичей. Всё это без привлечения дополнительных ресурсов. Достаточно было приложить усилие в нужное место. Как говорил Архимед: "Дайте мне точку опоры, и я переверну Землю".