Lean базируется на шести принципах.
1. Исключение затратных процессов и продуктов разработки. Фокусироваться нужно на основных функциях продукта, которые необходимы большинству пользователей. Не стоит тратить время на эксклюзивные свойства/функционал, востребованные небольшим числом пользователей. Более того, если какими-либо функциями мало пользуются, то их нужно убирать из продукта. Сопровождение этих функций требует денег, а наличие в кодовой базе замедляет разработку.
Дефектов быть не должно. Зачем тратить время и нервы на устранение дефектов в готовом продукте? Лучше потратить чуть больше времени, но написать код качественно с первого раза.
Переключение с задачи на задачу отнимает время. Инженеру приходится вспоминать контекст, заново прочитывать требования, поднимать проектную переписку. Гораздо лучше работать над одной задачей в один временной отрезок.
Планирование зависимостей осуществляется таким образом, чтобы минимизировать или вообще сократить до нуля простои команд, когда одну из них блокирует другая.
Зачем работать над детальной документацией требований, если ее никто не читает и она мгновенно устаревает в процессе?
К этой же категории относится микроменеджмент и излишняя менеджерская деятельность. Команда разработки должна знать весь контекст и понимать, что нужно делать.
2. Акцент на обучении и постоянном совершенствовании. Обучение должно проходить на собственном опыте. Команда все время обогащает свои знания, пробует новые подходы и экспериментирует. Как и везде, в этом нам помогает цикл Деминга: планирование — действие — проверка — корректировка.
3. Принимать решения как можно позже. Если у нас есть возможность отложить принятие решения, то лучше это сделать. Почему? Чем больше удалось собрать информации, тем выше будет качество принятого решения. Следовательно, чем позже вы принимаете решение, тем больше у вас будет информации и тем более верным оно будет.
4. Поставлять как можно раньше. Тот же принцип, что и в Extreme Programming. Предельно быстрая доставка продукта заказчику и короткие итерации, создающие ценность. Оперативная обратная связь.
5. Уважение и доверие. Важно уважать людей, с которыми работаешь, и поручать им ту работу, которую они умеют выполнять лучше всего. Нужно обеспечить команду всем необходимым для работы и доверить ей ответственность за результат. Приветствуется уход от армейской системы управления с приказами и микроменеджментом. Вместо этого командой нужно управлять, вдохновляя и мотивируя ее. Важно отсутствие политики, то есть нужно делиться всей информацией с командой.
Если команда полностью понимает контекст, то она сама сможет принять лучшее решение. Так происходит, поскольку у членов команды есть еще и технический контекст, в который они разбираются лучше. Ответственность за результат должен нести тот, кто делает реальную работу.