Автор статьи: Дмитрий Курдюмов
Участвовал в Аджайл-трансформациях в крупнейших компаниях в России (Альфа банк, МТС, Х5 retail group), с международным опытом в стартапе зарубежом.
Каждый, кто работал в команде, которая сталкивается с большим количеством требований заказчиков и стейкхолдеров, наверняка испытывал ощущение нарастающего хаоса и постоянного аврала. Как следствие — постоянные конфликты между разработчиками и бизнес-подразделениями, измотанность команды. Со стороны заказчиков — постоянно появляющиеся новые требования, отсутствие доверия из-за сформированных ложных ожиданий в отношении сроков выполнения работы.
Почему так происходит и почему недовольство заказчиков со стороны бизнеса можно понять?
Первая причина — вы принимаете абсолютно все задачи и обещаете их выполнить, называя неоправданные сроки. То есть любую задачу, которую приносит клиент, вы принимаете и начинаете строить план и прогноз по ее выполнению. И, таким образом, создаете ложные ожидания. Это все равно, что пообещать спустутиться на лифте через 3 минуты, при том, что перед лифтом очередь из 100 человек, постоянно приходят новые люди и проходят без очереди. Разве при таком раскладе можно гарантированно сказать, когда вы спуститесь? То же самое обычно происходит и в бэклоге задач — приоритеты меняются, очередь растет. Только с бэклогом задач еще сложнее — больше неопределенностей в ходе выполнения (техническая сложность, трудоемкость, риски и прочее).
Вторая причина — вы часто бросаете задачу незавершенной и приступаете к новой. Как правило, такое происходит, когда заказчик или менеджер и просит «срочно» сделать еще одну задачу. Я нередко наблюдал, как в процессе выполнения команда переключается на другую задачу, которая внезапно становится «более» срочной. Потом появляются задачи еще более срочные, и количество недоделанной работы растет. Также когда отсутствует сквозной поток создания ценности, задачи попросту простаивают в очередях. Например, разработчик сделал задачу, она ждет тестирования, а тестировщики в это время занимаются другими задачами, и когда дойдет до этой — неизвестно. В этот момент задача просто ждет, а это потеря времени.
Третья причина — не вы управляете работой, а она вами. Действительно ли по всем задачам в данный момент времени выполняется «полезная работа»? Сколько задач в «статусе ожидания», сколько заброшенных? Кто ответственен за разблокировку таких задач? Я в своей практике находил у команд задачи, остающиеся в ожидании от нескольких месяцев до года. Поставили на hold, ждали ответа, и поскольку никто не отвечал за разблокировку, то про задачу забывали, так как ушли в другие задачи.
Четвертая причина — отсутствие у команды фокуса. Вы уверены, что знаете, над чем именно работает команда в данный момент времени? Наверняка вы неоднократно обнаруживали, что разработчик параллельно делает еще какие-то «важные задачи» или «задачи в фоне». Нередко распространена ситуация, когда к разработчикам прибегает кто-то из соседней команды и напрямую «впихивает» задачу.
Пятая причина — отсутствие фокуса на ценности. Вы уверены, что то, что вы делаете внутри команды, соотносится с тем, что хочет получить в итоге клиент? Например, заказчик вам приносит новую бизнес-задачу, вы ее внутри команды декомпозируете на технические подзадачи и начинаете делать. Однако, конечная ценность пропадает из виду. Нередко никто не задается вопросом внутри команды — а как это вместе должно работать? А что в принципе мы делаем? Фокусируясь на деревьях, мы не видим за ними лес. Фокусируясь на деревьях, мы делаем много лишней работы.
Как с этим бороться?
Отличным инструментом по улучшению процессов служит Kanban метод. С одной стороны, он делает все процессы и всю работу явной, прозрачной, а с другой — вносит ограничения в процесс (в виде одновременно выполняемой работы), которые контролируют количество задач в работе и фокусируют команду на завершении. То есть, условно, если две из трех задач подвисли в колонке «тестирование», то пока мы их не доделаем, следующую задачу из разработки мы не берем. Также Kanban метод дает отличные инструменты для прогнозирования на основе объективных данных.
Какие ключевые мысли несет метод?
1. Перестать давать ложные обещания. Вместо этого проанализируйте пропускную способность. Давайте обещания только в момент, когда берете задачи в работу, на основе статистики о времени выполнения. Например, вы точно сможете сказать, когда вы спуститесь, только в тот момент, когда вы вошли в лифт, на основании знания статистики о среднем времени спуска. Но пока вы стоите в очереди, при том, что очередь постоянно меняется, вы не сможете давать объективных прогнозов. Либо вам придется эти проогнозы постоянно переделывать и тратить на это уйму времени.
2. Выстраивайте заказчиков в очередь. Невозможно все задачи принять и пообещать сделать и выполнить это обещание. Если заказчики внутренние, дайте им возможность договориться, какие задачи следующими пойдут в работу на основе вашей пропускной способности и бизнес-ценности каждой задачи. Дайте им инструмент приоритизации — например: «влияние на бизнес-результат х уверенность в том, что вы достигните его с помощью этой задачи / трудоемкость».
Если заказчики внешние, оцените, от каких задач вы можете сейчас отказаться. Примите как данность, что вы все равно не сделаете абсолютно все. Договоритесь, что, например, раз в неделю вы готовы выбрать по 3 новые задачи, а заказчики должны договориться, какие именно.
3. Запомните, что чем больше задач в работе, тем больше занимает время их выполнения. Поэтому не стремитесь взять больше (это объясняет Закон Литтла). Для этого в Kanban методе зашиты WIP лимиты (ограничение одновременно-выполняемой работы), которые выставляются на основе пропускной способности этапов и всей системы в целом. Также важно учитывать, что пропускная способность системы равна ее самому узкому месту в системе. То есть лимиты выставляйте исходя из пропускной способности ее самого узкого места, иначе задачи будут простаивать в очередях и их количество будет расти, увеличивая общее время выполнения целиковый задачи.
4. Начните управлять работой. Чтобы управлять, нужно понимать, что в работе, поэтому стоит всю работу визуализировать (например, с помощью доски) и далее каждый день собираться и смотреть: «Что подвисло?» «Что выполняется?», «Где нужна помощь?» и так далее.
5. Начните считать метрики поставки. Достаточно будет считать время выполения каждой задачи и пропускную способность, чтобы получить распределение и дать объективные прогнозы по времени выполнения новых задач. По распределению времени выполнения вы сможете увидеть, за какое количество времени завершалось 90% задач, и это вам даст данные для прогнозирования. То есть вы сможете дать объективную оценку заказчику, сказав, что задача будет выполнена до Х дней с 90% вероятностью. Точность такого прогнозирования будет зависеть от того, какое количество данных вы успели накопить, поэтому дайте этому время.
6. Договоритесь о том, что запустите процесс регулярных улучшений, изменений, на основе ретроспектив и объективных метрик. Увидели проблему — собрались, подумали, как ее решить, как минимизировать простои, как расширить узкое горлышко. Не стоит улучшать все подряд. Сфокусируйтесь на самом узком месте в системе и начинайте планировать шаги по его расширению.
А если вам понравилась статья, жду в своем телеграмм-канале и на сайте.
Также скоро в OTUS пройдет открытое занятие «Управление удаленной командой в текущих реалиях», на котором мы обсудим, как настроить процессы и правила, чтобы работать на удалёнке с максимальной отдачей. Регистрация для всех желающих доступна по ссылке.
OlegZH
Почему при всех разговорах про эффективную организацию работы всегда выпускается из вида, что работа (сама по себе) вполне может быть хорошо обозначена и формализована? Заказчик не может предложить ничего такого, что никогда не предлагалось. Все всё уже проходили. Всё делали. В других конторах. Опыт всегда можно обобщить, а найденное когда-либо решение — тиражировать. Да, такой подход оставит многих разработчиков без работы.
Может быть, надо, сначала, определиться с тем, какие, вообще, могут быть системы, какие у них могут быть модули, как эти модули должны взаимодействовать и т.д. и т.п.? Провести системный анализ и получить совокупность шаблонов для формирования типовых систем. Приходит заказчик, ему даётся опросник (типа конфигуратора), он определяет требуемую функциональность и... всё?
А, вообще, довольно грустно из раза в раз обнаруживать, как игнорируется база системного проектирования. Есть чёткое представление о нисходящем проектировании и восходящем проектировании. Как только Вы что-то выбираете на верхнем уровне иерархии проектирования, вы задаёте контекст для всех нижестоящих уровней. Здесь не может быть никакой отсебятины. И заказчику не находится места для манёвра. Ну и, конечно, довольно трудно рассчитывать на что-то, когда люди торопятся писать код, бегут создавать те самые узкие горлышки, которые, затем, придётся доблестно "расширять".
Самое показательное, что никто даже не пытается начать с самого начала. Взять пару-тройку реальных проблем, реальных систем, нуждающихся в проектировании, обрисовать архитектуру каждой системы (желательно из разных областей, чтобы иметь возможность увидеть ещё и общие элементы, присущие всем таким системам). Неужели никто не понимает, что архитектура системы — это и есть достаточно полная спецификация для её реализации? Если есть архитектура, то объём работ, сроки их выполнения и оценка качества выполнения становятся достаточно простыми и достижимыми. А "узкие горлышки" говорят о том, что никакой архитектуры никто не предоставляет. Архитектура — это список ответов на множество вопросов. Если возникают новые вопросы, то никакой архитектуры не было. Архитектура — это жёсткая иерархия задач. Если поступают новые задачи, то никакой архитектурой и не пахнет. Архитектура — это еще и аналитические модели для анализа хода разработок. Если таких моделей нет, то все приводимые оценки оказываются повисающими в воздухе. Нет архитектуры — нет инструмента ни для проектирования, ни для оценки качества проектирования.
И ещё.
Вот и хочется посмотреть на реальные системы и увидеть эти самые проблемы в динамике. А потом сесть и задать себе вопрос, а как должна на самом деле выглядеть каждая из этих систем. Начинать надо с конкретной задачи из предметной области: "прошерстить" такую постановку и выработать некую архитектуру. Вот что нужно сделать.
funca
На самом деле одно другому не мешает. Команда может прорабатывать технические вопросы в которых она лучше разбирается, а менеджер - направлять.
Ерунда получается, когда с через менеджера команда пытается закрывать вообще любые вопросы. Это может происходить по разным причинам - отсутствие соответствующих компетенций, неорганизованность, боязнь брать на себя ответственность, недостаточное пространство для самостоятельного манёвра. В любом случае это не нормально, и с такого рода проблемами надо разбираться в частностном порядке.
iggr63
Наличие архитектуры конечно существенно облегчает разработку но менеджеры зачастую не мыслят в этих категориях.
Manguss
Хуже когда встречаешь разработчиков которые не мыслят в этой категории)))). По моему опыту не хотят систематизировать работу именно разработчики. Рассказываю пространное что не могут оценить сколько им нужно времени, не готовы делать декомпозицию глубже "Взять в работу-завершить работу". Постоянно вижу что именно разработчики указывают менеджерам что они не в праве требовать проработку архитектуры решения, это все ответственность ИТ не мешайте ИТ работать, а по итогу результат который не отвечает бизнес-требованиям и особо не полезен для бизнеса.