Срыв сроков и выход за оценки — довольно частая и болезненная проблема бизнеса при взаимодействии с IT-специалистами. Иногда срывы сроков и выходы за оценки начинают приобретать хронический характер и встаёт острый вопрос: «Что же с этим делать?». Давайте рассмотрим, какие действия могут предпринять «неайтишники», чтобы выйти из ситуации. Сразу скажу, что слова: «Просто напишите нормальное ТЗ» — не прозвучат.
Меня зовут Константин Митин. 15 лет занимаюсь коммерческой IT-разработкой, прошёл путь от простого программиста до сооснователя и руководителя группы IT-компаний. Успел побыть тим-лидом, руководителем филиала разработки крупной федеральной IT-компании. Я являюсь одиним из идеологов концепции IT~BP (партнёрство между IT и бизнесом).
Что обычно происходит, когда срываются сроки и превышаются бюджеты? Исполнители начинают говорить о неверной либо неполной постановке задачи, о невозможности произвести точную оценку либо о внезапно вскрывшихся факторах, которые было невозможно учесть заранее. Иногда могут прозвучать слова про частые изменения в постановке задачи и доработки, о которых не было известно на момент оценки.
Несомненно, хорошая постановка задачи очень важна. Если конечному исполнителю не описать, что вы хотите получить в результате, если сделать неправильную либо неполную постановку задачи, то результат получится неудовлетворительным.
Конечно, если исполнитель обладает не дюжей интуицией, которая позволяет угадывать, что хочет заказчик, который сам не знает, чего хочет, то может быть и получится. Либо если у разработчика есть большой опыт в своей прикладной области, из-за чего он лучше заказчика знает, что ему нужно, то тоже может получится.
Однако строить свою работу в надежде на то, что исполнитель — это не только IT-специалист, но он ещё разбирается в вашей бизнес-области лучше, чем вы, неправильно. Надеяться, что исполнитель как-то сам там на месте разберётся, тоже неправильно.
С другой стороны, бизнес-заказчик не является техническим специалистом, поэтому он может сделать лишь бизнес-постановку задачи. Сомнительно требовать от представителя бизнеса «написать нормально ТЗ» (ТЗ — техническое задание). Обычно написать «нормально ТЗ» заказчику помогают бизнес-аналитики, системные-аналитики, руководители проектов. Если бизнес-заказчику предлагается сделать всё собственноручно, то явно что-то идёт не так.
То есть процесс управления требованиями и изменениями, который существует в области информационных технологий, может ломаться как в самом начале, на уровне бизнес-заказчика, так и в конце, на уровне конечных исполнителей. В середине он тоже может сломаться, например, из-за неверно произведённого системного анализа.
Поэтому имеет смысл пройти всю цепочку от начала до конца. При этом стоит воспользоваться тем, что первые звенья цепи задают условия работы для последующих звеньев. На самом деле, находясь в начале цепочки, не так уж сложно управлять всем процессом целиком.
Прежде давайте всё же посмотрим, а что такое ТЗ на самом деле и зачем оно вообще нужно?
Техническое задание
Это документ или несколько документов, определяющих цель, структуру, свойства и методы какого-либо проекта, и исключающих двусмысленное толкование различными исполнителями. Иными словами, документ определяет не только что нужно получить, но и как это сделать.
Для интереса берём ГОСТ 19.201-78 «Техническое задание. Требование к содержанию и оформлению», там написано, что техническое задание должно содержать разделы:
-
введение (краткую характеристику области и реализуемого программного обеспечения);
-
основания для разработки (ссылка на документы основания для разработки, нужно для крупных организаций);
-
назначение разработки (для решения каких задач мы это делаем);
-
требования к программе или программному изделию (выполняемые функции, временные характеристики, надёжность, инфраструктура и совместимость);
-
требования к программной документации;
-
технико-экономические показатели (должна быть экономическая целесообразность);
-
стадии и этапы разработки;
-
порядок контроля и приёмки;
-
в техническое задание допускается включать приложения.
В целом, видим, что с 1980-го года ничего кардинально не поменялось. Для описания структуры и формы ТЗ хватает 4-х листов. Различные формы для написания спецификации на программное обеспечение на сегодня общедоступны. Ценность представляет не какая-то стандартная форма, а умение наполнять её содержанием.
При реализации программного обеспечения проблемы возникают в местах, где кому-то что-то приходится додумывать либо возможны разные трактовки написанного. Если человеку дать возможность ошибиться, то он ей непременно воспользуется. Однако не стоит пытаться написать максимально подробное ТЗ. Если вы уже пишите в ТЗ алгоритмы и мета-код, наверное, программисты вам не нужны и вы уже можете всё сами. В этом случае, пора задуматься о замене программистов на низкоквалифицированных кодеров за минимальные деньги.
Разница между кодером и программистом заключается в том, что кодер умеет хорошо набирать код и может в совершенстве знать язык программирования, на котором работает, а программист умеет думать и эффективно решать задачи. Кодеру бывает нужен мета-код, программисту вряд ли.
Наша задача — управлять границами неопределённости при постановке задачи. То есть мы даём исполнителю возможность что-то додумать, где-то срезать углы, но не даём ему отклониться от плана реализации слишком далеко. Сильно погружаться в технологии и детали для этого не нужно. Для управления неопределённостью у нас есть два инструмента.
Первое, мы как представители бизнеса рассказываем, для чего будет использоваться программное обеспечение и как оно будет использоваться. То есть какой набор действий должен быть доступен пользователю в системе. Кроме этого мы рассказываем, какую бизнес-цель мы при этом себе ставим.
Второе, чем дольше что-то происходит, тем больше неустойчивости и неопределённости приобретает. Поэтому процесс реализации мы должны разбить на этапы, рассказать, что и на каком этапе мы ожидаем, а потом сказать, как мы это будем проверять. Чем короче интервалы разработки, тем меньше риск, что исполнители свернут куда-то не туда.
Самое интересное, что для управления процессом реализации погружаться в технические вопросы реализации зачастую нет необходимости.
В своей практике мы в качестве «технического задания» и «спецификации» используем последовательность документов:
-
Бизнес-требования. Изложение на бумаге от заказчика того, что он хочет получить от системы и особые требования к системе, которые у него есть.
-
Вижн (видение, представление). Изложение на бумаге того, как мы услышали заказчика и как мы представили себе систему. Обычно это текст на 1-2 листа.
-
Функциональные требования. Перечисление основных функций в системе на несколько листов. Обычно именно функциональные требования включаются в договор.
-
Разбивка по этапам реализации. Тоже может включаться в договор.
-
Макеты приложения и описание пользовательских сценариев.
-
Если нужно, то архитектурная схема и схема потоков данных между интегрируемыми системами, иногда описание API (Application Programming Interface — формат общения с информационной системой для другой информационной системы).
Всё, кроме 6-го пункта, который обычно состоит из нескольких схем, может понять простой человек, не обладающий технической экспертизой. Примерно такой же логикой действий мы воспользуемся, чтобы восстановить контроль над ситуацией.
Ставим бизнес-цель
Прежде всего, вам необходимо описать ту бизнес-цель, которую вы преследуете, либо бизнес-задачу, которую вы хотите решить. Сильно утрируя, у вас не может быть бизнес-задачи типа «создать интернет-магазин», у вас может быть задача по организации новых каналов сбыта, увеличения продаж либо повышения выручки.
Та бизнес-цель либо бизнес-задача, что вы себе представите, будет маяком, на который будет ориентироваться вся команда разработки, включая вас, принимая решения: «А вот то, что мы сейчас делаем, оно вообще нужно?».
Например, в самом начале нашей деятельности к нам пришел заказчик и запросил оценить интернет-магазин. Причём им уже кто-то до этого пытался сделать какой-то интернет-магазин. В процессе разговора выяснилось, что это завод элитной мебели, которая распространяется через дилерские центры. И отбирать кусок хлеба у своих дилеров — плохая идея. Интернет-магазин нанёс бы вред бизнесу.
Однако, с какой-то периодичностью для дилеров печатались высококачественные бумажные каталоги, и это стоило больших денег. Решением стала разработка сайта-каталога, на котором сотрудник дилера мог оформить заказ. То есть человек приходил в дилерский центр, просматривал каталог на планшете (либо просто присылал дилеру свой виш-лист), выбирал понравившуюся мебель, сотрудник дилера делал заказ и продолжал сопровождение клиента.
После реализации сайта-каталога продажи клиента выросли в несколько раз, то есть его бизнес-цель была достигнута. Не смотря на то, что форма достижения в процессе общения полностью изменилась.
Бизнес-цель либо бизнес-задача должны быть критерием сдачи «проекта» самому себе, как заказчику . После того как будет закончена разработка, проведено внедрение и получен опыт эксплуатации, вы должны будете себе честно ответить достигнута ли цель. А так же стоило ли достижение этой цели затраченных усилий.
Шаг кажется очевидным, но очень часто пропускается, что может иметь печальные последствия. Просто бесцельная реализация чего-то вряд ли будет успешной, не смотря на весь профессионализм технической команды.
Представляем себе систему
Как говорил Стивен Кови, мысленное творение предшествует физическому творению. Чтобы что-то создать в мире объективной реальности, вы должны это создать в своём воображении. Кроме шуток — нужно. А потом быть способным словами описать тот образ, который вы представили. Желательно письменно, на бумаге, чтобы не возникало ложного впечатления, что вы себе всё представили и уже можете это описывать.
При постановке задачи для IT-специалистов всё работает ровно так же. Если вы попробуете заказать произвести что-то, чего даже представить себе не можете, то результат вас поразит, но вряд ли это будет приятной неожиданностью.
Это тоже очевидный шаг, которым зря пренебрегают. Из-за этого часто бывает разочарование у заказчика, ведь если не знать, чего ты хочешь, то всегда будешь получать что-то не то.
Понятное дело, что бизнес-заказчик — не технический специалист, он не может представить, как система устроена внутри. Зато он может представить себе, как с нужной ему системой будут работать пользователи. Это позволит ему описать базовые пользовательские сценарии в системе.
Избыточно подробное описание образа системы в бизнес требованиях большого смысла не имеет. Надо передать понимание задачи, которую решает система, и основного сценария работы пользователей в системе. Остальное будет сделано при дальнейшей проработке задачи.
Нужно быть готовым к тому, что сформированный образ системы — это не что-то незыблемое и неизменное. Нет, в процессе обсуждения и разработки системы (по мере получения реального пользовательского опыта) образ будет меняться — это нормально. Попытка сразу сделать (представить систему) идеально — это плохой и вредный путь. Вы управляете неопределённостью, а не воюете с ней. Как это не странно, неопределённость может быть хорошим другом, а не только мешать.
Передаём образ системы
Вам нужно как-то передать сформированный образ системы команде разработки. Процесс передачи очень важен, в нём есть свои риски, часто первый говорит одно, а второй слышит (и даже читает) другое.
Ещё момент. Обратите внимание на того, кому вы пытаетесь передать образ. Если это программист, то надо напрячься. Скорее всего, что-то идёт не так. Есть разработчики, которые хорошо коммуницируют с заказчиками, понимают предметную область и могут подсказать правильные решения. Однако, чаще всего это не так. А даже если это и так, такие разработчики обычно быстро растут и покидают компанию.
Если у вас прямая связь с разработчиком и у вас всё работает, задачи делаются быстро, в срок и сразу то, что нужно, значит вам крупно повезло. Если нет, значит пора менять подход к процессу разработки. Всё же специализации бизнес-аналитиков, системных аналитиков, архитекторов, руководителей проектов и прочих появились не на пустом месте.
Конечно, можно переложить на программиста ответственность за решение бизнес-задач, в чём он не компетентен. В ответ он потом вас пошлёт писать правильное ТЗ, в чём будете некомпетентны уже вы. Так и будете ходить по кругу, пока кто-нибудь не сообразит, что дело не в вас двоих, а процесс разработки пора чинить на уровне отдела/департамента/дирекции, а не конкретного программиста.
Допустим, у нас всё работает правильно, и мы общаемся не с программистом, а с бизнес-аналитиком либо руководителем проекта. После рассказа о системе (либо чтения вашего письменного запроса) потребуйте вижн в ответ. То есть принимающая сторона садится и на один лист пишет то, как им представилась система, которую вы описали.
Вижн — важный инструмент проверки, что коммуникация произошла без сбоев и вы себе представляете что-то похожее.
По сформированному вижну запросите предварительную оценку. Вилку оценки можно давать навскидку. Помогает упражнение: «Сколько стоят женские сапоги?». На удивление, люди с ходу могут выдавать оценку стоимости женских сапог, не являясь профессиональными «сапожниками» и не являясь сотрудниками магазина женской обуви.
Но если вы вдруг работаете на предприятии по пошиву обуви, то себестоимость производства сапог (в общем, в среднем) вы назовёте ещё и очень точно. Оценка стоимости разработки программного обеспечения не сильно отличается от оценки разработки новой модели обуви, одежды и т. д.
Предварительная оценка — это второй инструмент проверки переданного образа. Если оценка сильно выше рыночной, то либо вы просмотрели какие-то подводные камни и вам должны о них рассказать, либо команда разработки в своём воображении переусложнила систему. Слишком низкая стоимость — аналогично, возможно команда разработки не учла какой-то подводный камень, теперь о нём должны рассказать уже вы.
Мы же, как бизнес-заказчик, достаточно умны, чтобы узнать, что и сколько стоит на рынке? И понимаем, что компания аутсорсер в цену заложит не только свою маржу, но и все риски и накладные? Даже наша компания, которая специализируется на заказной разработке, так иногда делает.
Если у вас появились вопросы к предварительной оценке, то попросите исполнителей рассказать последовательность действий, которые они будут выполнять при разработке и почему они так уверены в своей оценке. В процессе разговора вы произведёте детализацию образа системы и обменяетесь информацией о системе. После чего должна поменяться либо оценка либо ваше представление о системе.
Если оценка не меняется и не меняется ваше представление о системе, пройдитесь по рынку, пообщайтесь с людьми, которые специализируются на заказной разработке. Они ведь тоже могут рассказать что и как будут делать. В какой-то момент вы сможете понять в чём дело.
Проработка требования и разбивка на этапы
Допустим, что вы работаете над проектом, разработка которого занимает несколько календарных месяцев. Значит, вам необходимо проработать требования. Если написать вижн (видение системы) занимает 1-2 часа, предварительная оценка — 0.5-1 часа (это же простая рыночная статистика), то проработка требований — это целый длительный процесс. Точную оценку на проработку требований вы должны получить в момент формирования предварительной оценки системы в целом.
Как уже отмечалось, форм описаний спецификации программного обеспечения (технических заданий) множество. Но крайне желательно, чтобы они включали в себя описание пользовательских сценариев. То есть тех действий, которые должны будут сделать пользователи в системе, чтобы получить требуемый результат.
Вы же должны будете согласовать проработанную постановку задачи? Значит и вы, как нетехнический специалист, должны её понимать. Вряд ли вы до конца поймёте архитектурную схему, схему потоков данных, описание API и прочее. А пользовательские сценарии — поймёте.
Иногда при проработке требований создаются макеты приложений. То есть отрисовывается часть экранов, которые будут у приложения. И уже по ним либо вместе с ними пишутся пользовательские сценарии. Когда человек видит перед собой иллюстрации, ему гораздо проще детализировать образ системы, которую нужно разработать.
В любом случае, написание и согласование пользовательских сценариев, разработка макетов и прочих поясняющих схем и диаграмм — это часть работы по проектированию системы.
В ходе проектирования образ системы может меняться — это нормально. При проектировании может меняться и стоимость разработки системы — это тоже нормально. Поэтому всегда следите за бюджетом. Новые требования и вводные — новые строчки в итоговой смете.
На самом деле, хорошая команда проектирования умеет проектировать в бюджет. Вы им говорите, что есть столько-то денег, они вам предлагают какое-то решение, которое укладывается в бюджет и как-то приближает нас к бизнес-цели.
При проектировании необходимо представить себе поэтапную разработку приложения. Каждый этап должен включать в себя реализацию каких-то пользовательских сценариев целиком. Это важно.
К каждому этапу необходимо прописать критерии сдачи и сценарии, проверяя которые вы, как заказчик, убедитесь, что работа выполнена в полном (оптимистично, конечно) объёме.
По итогу реализации этапа команда разработки должна будет вам показать демонстрацию продукта, как раз по тем сценариям сдачи, что вы пропишете при проработке требований. Желательно, чтобы у вас потом была ещё возможность самому «потыкать» систему.
Длительность этапа не должна превышать нескольких месяцев. Чем длительней срок разработки, тем выше риски, что что-то пойдёт не так. Риски растут не линейно, а по параболе (для простоты).
Вовремя проверяя ход работ, вы сохраняете себе возможность вернуть процесс разработки на корректный путь и минимизировать потери от того, что кто-то заблудился в процессе разработки.
Итогом проработки требований будет не только спецификация (техническое задание), разбивка на этапы и критерии сдачи к ним, но ещё и смета. Вы должны знать, сколько стоит каждый этап.
Управляем рисками и собираем статистику
Хорошей идеей будет заложить бюджет по деньгам, ресурсам и срокам больше, чем в смете. Это на случай если что-то пойдёт не так. Просто заложите между этапами буфер в сколько-то процентов от стоимости этапа. Но никому и никогда не сообщайте о размере этого буфера и его существовании вообще.
Иногда делаются ошибки, сроки срываются. Бывает, что выясняется, что при проработке требований что-то было упущено и нужны дополнительные работы. Это изменения сметы, которые должны согласовываться с вами. Не согласованно — не оплачивается. Но если согласованно, то должен быть бюджет, из которого это можно оплатить.
Кроме того, вы сами, когда получите возможность «потестировать» сданные этапы, после приобретения пользовательского опыта, можете решить, что системе нужны доработки. И у вас будет бюджет на реализацию ваших доработок.
Важным показателем является отклонение фактических затрат от запланированных. Чем более часто и масштабней такое отклонение происходит, тем более тревожный это сигнал. Когда у вас на руках есть зафиксированные требования, разбивка по этапам и смета, проводить переговоры с отделом/департаментом/дирекцией разработки куда проще.
В крайнем случае вы можете получить рыночную оценку и ставить вопрос о замене исполнителей. Когда люди понимают, что и их можно заменить, вопрос лишь в стоимости замены, диалог начинает налаживаться.
Подводя итоги
Мы с вами рассмотрели последовательность действий, которую может выполнить нетехнический специалист. При её выполнении не нужно особых знаний технологий либо навыков управления людей. В чём-то последовательность этих действий напоминает то, что делает хороший руководитель проекта.
Конечно, чтобы быть хорошим руководителем проектов в IT, нужно разбираться в технологиях, координировать работу специалистов и управлять коммуникацией. Но суть работы всё равно будет заключаться в управлении образом системы в головах всех участников проекта и управлении поэтапной реализации образа.
Помним, что бизнес-заказчик — это тоже участник проекта. Он тоже выполняет работу над проектом, важную работу. А не только приходит за готовым результатом.
Кто-то может написать, что всё же и так понятно и очевидно. Зачем переливать из пустого в порожнее? На что можно ответить, что раз всё так понятно и очевидно, то почему так много людей пропускают эти этапы и делают ошибки?
Даже более того. На самом деле ровно те же проекты, что в разработке IT-проектов, возникают при постройке частного дома либо работе отделочной бригады. Проблемы возникают одни и те же. Часто возникают.
Ну а ещё, мы наконец-то узнали, что такое на самом деле «ТЗ» и почему просить написать «нормальное ТЗ» бизнес-заказчика — это плохая идея.
Если вы дочитали до конца и написанное было для вас полезным, то спасибо вам.
Полезные материалы по теме:
-
IT для неайтишников: Куда исчезают программисты после 40 лет?
-
Как писать код, чтобы тебя не уволили? (про JSDD — Job Safety Driven Development)
ссылка на оригинал статьи https://habr.com/ru/post/697442/
Добавить комментарий