Все, кто занимается разработкой программного обеспечения, так или иначе слышали про Kanban или применяли его в работе. Это — инструмент методологии Agile, который подходит для своего круга задач. Но Kanban придумали совсем не разработчики: еще 60 лет назад его внедрила компания Toyota на своем производстве. И он стал частью общей философии компании, которая получила название Lean Manufacturing — «бережливое производство». Успехи Toyota и ее подхода очевидны: на 2022 год компания занимает первое место в мире по числу проданных автомобилей — 10,48 млн, опережая Volkswagen AG на 2,22 млн штук. И между производством автомобилей и разработкой ПО напрашивается параллель. Давайте попробуем разобраться, в чем же особенности TPS (Toyota Production System), откуда все это появилось и как применяется в современной разработке. В 1867 году в семье фермера и плотника Икичи Тойоды и его жены Эй в японской провинции Ямагути (сейчас — город Косаи) родился сын Сакити. Рождение и раннее воспитание Сакити совпало с тем периодом в истории Японии, когда сёгунат сменился новым правительством во главе с императором Мэйдзи. Этот период обычно считается началом современной Японии. В разгар социальных потрясений вся деревня, где жил Сакити, страдала от нищеты. Жизнь была тяжелой, и парень с детства активно трудился и помогал отцу в плотницком деле. Но как и все великие люди, мечтал о большем. Он обратил внимание на ручные ткацкие станки, которые использовали многие фермеры в деревне. Сакити увидел, что их работу можно улучшить. В 1885 году он изучил патентное законодательство Японии и приступил к работе. В 1891 году он изготовил первый оригинальный станок и запатентовал его конструкцию. В отличие от предыдущих решений, для работы станка нужно было использовать только одну руку вместо двух. Это увеличило эффективность работы, а конструкция устранила неровности тканого полотна и улучшила его качество. Однако ткацкий станок был далек от совершенства, и Сакичи задумался об автоматизации — так в 1905 году появился первый частично автоматизированный ткацкий станок: он прекращал работу в случае обрыва нити и потому намного облегчал труд фабричных рабочих, которым теперь не приходилось неотрывно следить за машиной. В 1907 году на средства инвесторов из Токио Сакити основал компанию Toyoda Loom Works и взял на себя обязанности управляющего директора и главного инженера, параллельно путешествуя по миру и изучая опыт в других странах. К 1918 году у Тойоды с компаньонами было 34 тысячи прялок и более тысячи ткацких станков, а в 1920 году Сакичи открыл вторую мануфактуру в Шанхае — 60 тысяч прялок и 400 станков. В 1924 году, спустя 30 лет с того момента, как Тойода решил заняться изобретательством, он наконец создал полностью автоматический ткацкий станок. Устройство показало лучшую в мире производительность и качество ткани. Успех был такой, что в 1929 году британская компания Platt Brothers & Co выкупила патентные права на устройство, а в Японии Сакити до сих пор называют «вторым Томасом Эдисоном». Со временем бизнес перешел к старшему сыну — Киичиро, который пошел по стопам отца и стал инженером-механиком. Но парень грезил об автомобилях и активно инвестировал средства в одноименное подразделение компании. Так в 1935 году с конвейера сошли первый легковой автомобиль А1 и грузовик G1. Кстати, спустя всего 2 года автомобильное подразделение стало самостоятельным и получило современное название Toyota Motors. Замена буквы D из фамилии на T объяснялась тем, что теперь для написания названия бренда требовалось 8 черточек — счастливое число в Японии. После Второй Мировой войны в стране был жуткий кризис, связанный с последствиями тяжелого поражения Японии: около 40% национальных промышленной инфраструктуры были разрушены, и уровень производства упал до значений 30-х годов. Toyota под руководством Киичиро с трудом смогла преодолеть кризис, и в 1949 году он ушел с поста и передал управление Тайити Оно — главному инженеру завода. Тайити понимал, какой разрыв есть между американскими и японскими автомобилями, поэтому отправился в командировку в США, чтобы посмотреть на заводы Ford и General Motors вживую. Он впечатлился масштабами производства, однако увидел и слабые стороны: например, работникам приходилось долго ждать нужные детали, чтобы перейти к следующему этапу сборки. Но идея для решения нашлась, когда Тайити посетил американский супермаркет Piggly Wiggly. Прогуливаясь по торговому залу, он заметил, что покупатели берут с полок и кладут в тележки именно те продукты и в том количестве, какое им требуется. Это означает, что супермаркету не нужно затаривать свои склады: когда запасы конкретных продуктов опускаются ниже минимального порога, их оперативно подвозят от поставщика. Налицо оптимизация работы магазина. Почему бы не применить эту идею для производства? Вернувшись домой, Тайити Оно начал разрабатывать Toyota Production System (TPS) — философию Toyota, которая до сих пор служит основой для производства и логистики в японском автогиганте (и не только в нем). В целом Тайити Оно выделил 7 основных проблем автомобильного производства того времени: 1. Перепроизводство. Автомобиль — устройство сложное и состоит из множества узлов. Представим, что на участке А производят колесные дифференциалы, а на участке Б собирают трансмиссии. Для дифференциалов все есть — их собрали быстро и передали на следующий участок. А вот с трансмиссиями на участке Б проблема, для них не хватает деталей или сборка трудоемкая — это занимает больше времени. В результате, чтобы рабочие участка А не простаивали, они вынуждены производить еще больше дифференциалов. Все это нужно где-то складировать, транспортировать и так далее. Но готовых автомобилей больше не становится. 2. Потеря времени. Другая проблема — когда компонентов или инструментов для сборки не хватает из-за слишком длинного плеча поставки от производителей или с внутреннего склада. В этом случае рабочие простаивают, хотя могли бы заниматься чем-то полезным. 3. Лишние перемещения. Допустим, рабочий собрал трансмиссию и дальше передает ее на следующий участок. Но участок слишком далеко — внутренние перемещения не учитывают последовательность выпуска автомобиля. Либо логистика настроена так, что трансмиссию сначала передают на склад, а оттуда уже на следующий участок, хотя можно передать напрямую. Это напоминает типичную для России ситуацию, когда чтобы полететь условно из Иркутска в Красноярск, приходится делать «небольшой» крюк через Москву.   4. Лишние операции. Когда есть проблема в конструкции какого-то узла, и для его сборки нужно сделать не 100 операций, а 300. А чем больше операций, тем выше риск ошибки. Другая проблема — когда у рабочего полно времени, и чтобы занять его, он начинает доводить деталь «до ума». Тайити Оно заметил, что как ни странно, попытка сделать более качественное изделие часто оборачивается браком. 5. Избыток запасов. Допустим, завод-изготовитель шестерен для коробки передач отгружает продукцию только партиями по 10 000 штук. Но выпуск 10 000 автомобилей — процесс долгий. Поэтому на складе возникается избыток деталей, что приводит к затратам на хранение или невозможности быстро оптимизировать производство. Условно есть идея, как улучшить работу коробки передач, но для этого нужен другой тип шестерен. А что делать с теми запасами, что есть сейчас — не выбрасывать же? 6. Лишние движения. Рабочий собирает трансмиссию, и для этого ему нужны инструменты: отвертки, пневмопистолет и так далее. А если они раскиданы по рабочему месту, то каждый раз приходится тянуться или ходить за ними и тратить много времени. Лишние секунды потерь на каждой детале превращаются в часы в масштабе тысячи сборок. 7. Дефекты. Просто фактор низкой квалификации рабочих или того, что автоматизированные инструменты сборки не получается нормально настроить. Из-за этого бракованные детали приходится переделывать или заменять на новые — это прямые убытки. И хорошо, если это выявляется еще на этапе сборки, а не из-за чьей-то аварии со смертельным исходом. Чтобы решить эту проблему, Toyota в течение 50-х годов, шаг за шагом выстраивала новые принципы Toyota Production System. В основе был положен принцип «Точно в срок» (Just-in-Time), который можно описать так: все материалы и компоненты должны поступать строго в необходимом количестве, в нужное место и к назначенному сроку. Это как раз позволяет решить проблемы перепроизводства, потери времени и других. Конечно, для этого придется перестроить отношения с поставщиками и весь процесс выпуска — но куда деваться? Принцип Just-in-Time позволил реализовать так называемое «вытягивающее производство», когда один участок выпускает деталь только тогда, когда на нее есть спрос следующего участка. Это — полная противоположность распространенному до этого «выталкивающему» производству. Когда у каждого участка есть строгий план выпуска  — и детали поступают на следующий участок вне зависимости от того, готов он их принять или нет. Вот некоторые из подходов Toyota, которые она последовательно внедряла в 50-х годах на своем производстве и некоторые из которых потом взяли на вооружение разработчики ПО. SMED расшифровывается как Single-Minute Exchange of Dies (переводится как «быстрая замена пресс-форм»). Способ позволяет экономить время на перенастройке или переоснастке оборудования. Ее разработал другой японский инженер и коллега Тайити Оно — Сигео Синго. Согласно идеи, операции переналадки можно разделить на две категории: Внутренние действия по переналадке — операции, которые выполняются после остановки оборудования. Например, пресс-форму можно заменить только при остановленном прессе.  Внешние действия по переналадке — операции, которые могут быть выполнены во время работы оборудования. Например, болты крепления пресс-формы можно подобрать и отсортировать и при работающем прессе.  Чем больше во время производства будет внешних действий и меньше — внутренних, тем лучше. Вот как это выглядит схематично: Условно время переналадки — это время между выходом последней годной детали продукта «А» и получением первой годной детали продукта «В». Если время перенастройки большое, то производство вынуждено производить как можно больше деталей за один цикл, чтобы сократить издержки. Результат — то самое перепроизводство со всеми вытекающими последствиями. Внедрить SMED — задача не только техническая и связанная с модернизацией станков, но и организационная. Например, чтобы все болты с нужной резьбой для пресс-форм были в достаточно количестве под рукой и их не нужно было судорожно искать. Либо условно проводить центровку инструмента заранее, а не в процессе переналадки и тратить на это время. Сам Сигео Синго выделяет 8 методов оптимизации переналадки: Отделение внутренних операций установки от внешних.  Преобразование внутренних операций установки к внешним.  Стандартизация функций, а не форм.  Использование функциональных зажимов или ликвидации крепежа вообще.  Использование промежуточных приспособлений.  Использование параллельных операций.  Устранение корректировок.  Механизация.  В результате, концепцию SMED Toyota начала внедрять у себя еще в 1949 года — тогда среднее время перенастройки оборудования составляло 2-3 часа. К 1962 году удалось сократить это время до 15 минут, а к 1971 году — вообще до 3-х минут.   Суть канбана, думаем, всем знакома — наглядная визуализация в виде карточек с разными этапами. На производстве Toyota систему официально внедрили в 1962 году, что позволило сильно снизить как перепроизводство, так и избыток лишних деталей от поставщиков на складах. Упрощенно это выглядело так: карточки крепились к таре с деталями. На таких бирках указывалась информация о номере и количестве деталей, какой отдел их отправляет и куда они должны прибыть. Работник, который непосредственно занимается монтажом и сборкой машин, забирает детали из тары, на которой прикреплен «канбан» с запросом для склада. Карточка снимается и вместе с пустым ящиком передается на склад. Там другой работник уже подготавливает новую тару с запчастями, на которой крепится производственный «канбан» — бирка с информацией о произведенных запчастях. Производственный «канбан» заменяется на «канбан» с запросом для склада и отправляется на производственную линию запчастей. В результате производится именно то количество деталей, которое указывается в карточке. Тара с новыми запчастями передается на монтажную линию — и так по кругу. Для того, чтобы не допускать лишние движения и повысить безопасность производства в целом, Тайити Оно понимал, что важно организовать рабочее пространство всех сотрудников. По сути, нужно навести порядок в головах рабочих и не допускать захламления лишними инструментами. Для этого он выделил 5 шагов, которые начинаются на букву S для простоты запоминания: Сейри (сортировка) Чёткое разделение вещей на нужные постоянно, нужные редко и ненужные: отходы производства, брак, пустая тара и так далее.    Сейтон (соблюдение порядка) Упорядоченное и точное расположение и хранение необходимых вещей, которое позволяет быстро их найти и использовать. Оно должно отвечать четырем требованиям: легко найти, легко взять, легко использовать, легко вернуть на место;  Сейсо (содержание в чистоте) Вся линия производства разбивается на зоны и наносится на карту. После чего выделяются специальные группы, за каждой из которых закрепляется своя зона уборки. Она проводится три раза в день по 5-10 минут: до начала рабочего дня, сразу после обеда и по окончании работы;  Сейкецу (стандартизация) Буквально все процедуры документируются пошагово. Это важно, поскольку если придет новый сотрудник, то порог его входа в рабочий процесс должен быть быстрым и как можно более безболезненным для производства;  Сицуке (самодисциплина) Это более общее правило, имеющее глубокие корни в японской культуре. Оно базируется на философском подходе Кайдзен: когда каждый работник от директора до уборщицы понимает, что от его действий и саморазвития зависит успех бизнеса и что нужно соблюдать правила и нормативы. Возможно, это одна из основных причин, почему автомобильное производство в России не скоро станет на одну ступень с Toyota.   Ключевая задача правил 5S — облегчить процесс обнаружения потерь для их дальнейшего устранения. Причем важным условием является снижение аудитов рабочего процесса и внутренняя самоорганизация. Например, если рабочий видит, что какой-то процесс можно улучшить — он сам проявляет инициативу и предлагает варианты, а не ждет, когда сверху спустят директиву. Хорошим примером самоорганизации является принцип «5 почему», который на производстве Toyota стал стандартом в подходе к работе. Сам Тайити Оно говорил: Основа научного подхода Toyota — спрашивать «Почему» пять раз, когда мы обнаруживаем проблему. Задавая вопрос «Почему?» пять раз, вы определяете характер проблемы. Как правило, после этого решение становится понятным.  Этот подход применял в своих ткацких станках еще отец-основатель Сакити Тойода. Проще говоря, он придерживался закона Мерфи: «Если кто-то при использовании станка может засунуть пальцы, куда не надо — это обязательно произойдет». Подход взял на вооружение и правая рука Тайити Оно — Сигео Синго. Он верно решил, что намного проще предотвращать, а не устранять последствия. Например, рабочий в процессе сборки какой-то детали использует 5 болтов. Если он вдруг забудет прикрутить один болт, то последствия могут быть ужасными. Почему бы не поставлять ему болты в упаковке ровно по 5 штук? Если у него останется лишний, то он сразу поймет, что ошибся в сборке. Другой пример — нужно выточить определенную деталь. Для этого ее надо закрепить на оснастке правильным образом, иначе получится брак. Почему бы не сделать эту оснастку так, чтобы исключить другие варианты монтажа? Да, продумывание конструкции займет больше времени — но это в любом случае дешевле, чем отзывать потом партию автомобилей, чтобы все перепроверить. Американцы быстро оценили японский подход к автомобилестроению. В 1965 году Toyota за свое бережливое производство получила приз Эдварда Деминга, который профессионально занимался контролем качества на производствах. Да и результаты говорили за себя: к 1989 Toyota производили 3,3 млн машин в год силами 90 тысяч человек. Для сравнения концерн General Motors выпускал 5,5 млн автомобилей силами аж 775 тысяч работников. По соотношению получается, что у Toyota на одного работника приходилось 36,3 автомобиля, а в GM — 7,1, что в 5 раз меньше. В целом успех от внедрения системы был невероятным. Появился даже термин — «тойотизм», который описывает философию производства компании, противоположный распространенному раньше «фордизму». И сейчас трудно встретить автомобильную компанию, которая в той или иной степени не использует подходы, которые внедрили в 50-60-х годах 20 века Тайити Оно и Сигео Синго. Рекомендуем почитать книгу Джеффри Лайкера «ДАО Тойота» про 14 принципов управления производства на примере Toyota, ставшую настоящим бестселлером. Но разработчики взяли от японского подхода не только Kanban, о котором мы говорили ранее. В 2003 году вышла книга программистов Мэри и Тома Поппендик, которая называется Lean Software Development, в которой авторы переложили принципы Toyota на мир разработки и совместили это с Agile подходом. Конечно, производство автомобилей и программирование несколько отличаются, однако схожие черты все же есть. Попробуем разобраться: Принцип 1: устранение потерь. Как и в случае с производством автомобилей, важно понимать, где появляются узкие места — условное перепроизводство. Например, если какой-то функционал или форма в программе не принесут пользы заказчику и не сэкономят время разработчика — это нужно просто отбросить. Лучше перенести усилия на другую, более важную функцию. Принцип 2: короткие циклы разработки. Помните, как много усилий Toyota направляла на ускорение переналадки оборудования? По сути, писать код «спринтами» и регулярно контролировать процесс с заказчиком, дробя работу на мелкие этапы — это что-то из той же серии. Таким образом вы корректируете функционал сразу, используя code-review и сверяясь с требованиями. Это позволяет реализовать продукт с минимальным количеством багов, а условно не копаться в уже собранном автомобиле в поисках незатянутого болта. Принцип 3: упрощение взаимодействия. Toyota четко понимала, что если отвертка лежит далеко или детали на конвейер перемещаются из отдаленного участка производства, то это — потеря времени. Точно так же, как в современном подходе к разработке словами DevOps и кросс-платформенное взаимодействие уже никого не удивить. Все направлено на то, чтобы сократить бюрократию и облегчить взаимодействие людей. Ну, по крайней мере, так должно быть в идеальном мире :) Принцип 4: документирование. На рабочем месте сотрудника Toyota должен быть порядок и чистота, а все процессы описаны. Это верно и для разработки — ведь когда есть система контроля версий кода и нормальная документация, то всем будет намного проще внедрить новые функции. Например через год, когда у заказчика появятся новые «гениальные» идеи. Принцип 5: обучение и мотивация. Философский принцип Кайдзен звучит достаточно пафосно и неконкретно, особенно в сфере программирования. Ну какая тут философия? Вы еще помедитируйте — а ну бегом кодить! Однако представьте, что в вашей команде есть постоянный разработчик, который никак не хочет познакомиться с фреймворком или библиотекой, который нужно часто использовать. Из-за него релиз постоянно сдвигается, потому что он тратит кучу времени и всех подводит. Если же команда — профессионалы, которые понимают важность обучения и которых не нужно гнать из-под палки, то даже самые безумные задачи заказчика будут по плечу. В итоге аналогия между производством автомобилей и программированием все-таки есть, и принципы бережливой разработки действительно работают. Например, по данным исследования BBC за 2009 год, Lean подход повысил скорость разработки на 37% и снизил количество багов на 24%. Его в той или иной мере используют Intel, Microsoft, Apple и другие компании. Но на 2023 год разработка уже давно шагнула вперед и разработчики чаще не применяют какие-то отдельные подходы или инструменты: Agile и Lean, Kanban и Scrum, и так далее. И на практике все зависит от сложности и специфики задач, которые ставит перед командой заказчик и удобства совместной работы. А вы используете такой подход в работе? Поделитесь в комментариях своим опытом.