June 8, 2011

Элияху М. Голдрат, Джефф Кокс: Цель. Процесс непрерывного совершенствования


Замечательная книга "Цель. Процесс непрерывного совершенствования" написана в форме новеллы, что само по себе является необычным для подобного рода литературы. Однако, это делает ее более увлекательной и быстро читаемой.
Главный герой - Алекс Рого - руководитель убыточного завода, которому руководство дает 3 месяца на изменение ситуации, после чего, в случае недостаточных изменений, обещает закрыть завод. Книга описывает трехмесячный период непрерывной работы над улучшением процесса производства. В итоге Алекс и его помощники-коллеги приходят к выводу, что цель компании - зарабатывать деньги, а также определяют алгоритм работы на заводах объединения:
Шаг 1. Найти узкие звенья системы.
Узкое звено в реалиях завода - это это все то, что не позволяет компании производить столько продукции, сколько ей требуется. Это может быть не только материалы, оборудование или люди, это также может быть продажи, например.
Шаг 2. Решить, как использовать узкое звено.
Узкое звено должно задавать ритм работы всей системы.Оно используется для контроля, чтобы избежать перегрузки системы или создания нежелательных запасов (например, горы материалов перед узким звеном или большое количество материалов\готовое продукции на складе, которые никому не нужны).
Шаг 3. Согласовать все остальные действия с этим решением.
Нет смысла производить много больше,чем может обработать узкое звено - продукция либо будет создавать завалы перед узким звеном в ожидании обработки, либо будет пылиться на складе.
Шаг 4. Повысить пропускную способность узкого звена.
Создание "буфера" перед узким звеном для обеспечения его непрерывной работы (при этом в буфере должно храниться разумное количество материала, чтобы буфер не превратился в склад). Также можно "разгрузить" звено и выдавать ему на обработку только качественные детали, тем самым экономя время работы звена.
Шаг 5. Если на предыдущем этапе узкое звено было устранено, то перейти к шагу 1.

Итого, что полезного можно вынести для управления разработкой ПО:

1. Цель компании - зарабатывать деньги.
Качество продукта само по себе не может быть целью. Как и выпуск продукта. Целью должна быть именно прибыль. Если наш продукт никто не покупает - зачем его писать? И уж тем более зачем тщательно тестировать, заставляя исправлять сценарии "с подвыподвертом", тем самым увеличивая конечную стоимость продукта. Тестирование ни в коем случае нельзя рассматривать отдельно от процесса производства продукта.

2. Алгоритм не меняется!

Шаг 1. Найти узкими звенья - почему нет? Например, на стадии жестокого багфикса с ежедневными билдами программисты исправляют по 100 багов в день, а отдел тестирования в день проверяет только 60.
Шаг 2. Тогда тестировщики будут узким звеном, под которое и нужно будет подстраивать всю работу.
Шаг 3. Голдрат на заводе в таких случаях рекомендует позволять людям ничего не делать, чтобы не собирать тонны работы перед узкими звеньями. В разработке ПО же все будет проще - достаточно занять людей, производящих "на склад" другой работой - например, переключить на другой проект или другую задачку, которая пока не будет проходить через тестировщиков. Это не требует перехода в другой цех и не требует знаний другого производственного оборудования, поэтому мы более везучие, чем рабочие завода :)
Шаг 4. Временно снимем с тестировщиков другие задачи, отложим их или передадим другому отделу. Сделаем небольшой буфер в определенное разумное количество тикетов для любителей поработать ночью и на случай задержки утреннего билда. Введем обязательную проверку разработчиками своих исправлений. Ну и автоматизированное тестирование сборки программистами.
Шаг 5. Ищем новое узкое звено.

3. Производство ПО практически ничем не отличается от любого другого производства.

4. Другие более мелкие выводы.

Рекомендую книгу к прочтению всеми работниками, вовлеченными в разработку ПО.