У каждой команды есть проект, которым она гордится, и тот, воспоминания о котором вызывают дрожь. Что ж, кейс, о котором мы расскажем в этой статье, собрал удивительное комбо — стал значимой вехой в истории нашей компании, но до сих пор является в ночных кошмарах команде разработки. Мы расскажем вам историю проекта, начавшегося с полного управленческого фиаско и завершившегося уверенным внедрением продукта. Давайте начнём!
Предпроектная подготовка
На тот момент (ноябрь 2018 года) мы только начинали вести свою деятельность и к нам с проектом обратилась компания, занимающаяся обслуживанием рентгеновских аппаратов на объектах критической инфраструктуры. Подобные аппараты используются в аэропортах, метро, и каждый из вас хотя бы раз встречал их. Когда вы кладете багаж на ленту рентгена, этот аппарат должен работать стабильно, а операторы надежно внимательно рассматривать всю подноготную вашей сумочки во избежание возникновения угроз.
Направленный к нам запрос содержал общие и очень лаконичные требования со стороны заказчика, которые они подготовили самостоятельно. Изучив ТЗ, мы назначили за проект кругленькую (как нам казалось в тот момент) сумму и предложили выгодные сроки разработки, чтобы заполучить этого клиента — всего 5 месяцев. И да — этот кейс много расскажет вам о самонадеянности.
Суть проекта была следующей — система должна была использовать веб-камеру, которая ставилась напротив лица оператора рентгена и фиксировала его состояния — уровень внимательности и вовлеченности в процесс, — в моменты нахождения багажа на ленте рентгена. в разных ситуациях, если человека нет на месте или вдруг он уснул, система должна следовать определенному алгоритму, а именно остановить ленту и заново провести сканирование. Помимо этого все данные нужно фиксировать в журнал событий с возможностью выгрузки, вести учет карты взглядов, а также уведомлять о нарушениях со стороны оператора, с интеграцией в совершенно незнакомое оборудование — и всё это за 5 месяцев (ага, именно об этом мы и говорили)!
Тут собственно случилась первая ошибка — отсутствие должной предпроектной подготовки. Никогда не игнорируйте аналитику! Аналитика и еще раз аналитика… На первый взгляд техническое задание было абсолютно понятно — во всяком случае заказчику. А вот наша команда, ознакомившись с основными положениями, опрометчиво упустила глубинный смысл, который скрывался за прочитанными буквами и знаками препинания. Такие очевидные на первый взгляд пункты:
1. Закрытый перечень оборудования для интеграции;
2. Способ интеграции и в целом наличие подобной возможности у оборудования;
3. Подход к метрикам точности и способам замера качества работы системы;
4. Места для тестирования и отладки разработанной системы;
5. Способ и место проведения ПСИ.
на деле оказались техническими ловушками, которые увеличили риски и затраты нашей команды в несколько раз.
На всё это мы находили ответы только по мере набивания шишек, но увернуться от собственных же граблей уже возможности не было — контракт подписан.
Отличный старт!
По плану Проект был разбит на несколько этапов для получения промежуточных траншей в рамках одного контракта и частичной сдачи работ с демонстрацией результатов заказчику. И снова мы очень слишком уверенно взялись за работу, порадовав самих себя легким завершением первого этапа, и пребывали в эйфории, что «вот как всё здорово получается, сдача проекта близко» (спойлер: нет).
Мы не видели никакого подвоха. Этап сдан — команда обучила нейросеть на веб-камере в тепличных условиях офиса определять состояния: закрытых глаз, поворота головы, взгляда за экран, отсутствия человека, залипания в одну точку экрана.
Для удобства добавили отображение световой индикации, написали простенький документ для проведения испытаний с заказчиком: по 10 раз проверять каждое состояние с реквизитом в виде разных очков и без них, на разном расстоянии от экрана, на разных людях (многообразие было не так велико, как хотелось бы).
По протоколу сдачи испытаний тест прошёл, все остались довольны, а мы и не подумали, что:
1. В реальных условиях эксплуатации не будет такого камерного стабильного освещения;
2. За оператором будут ходить другие люди, мелькать лица в кадре и их глаза тоже могут быть видны;
3. В целом стоило съездить в аэропорт и провести аналитику поведения операторов на рабочем месте, понаблюдать за механизмом работы и за разнообразием лиц, взгляды которых нужно уметь правильно определять.
Вот мы и купаемся, сидя в луже...
Следующий этап мы начали делать на опережение, понимая уже, что остаётся не так много времени до сдачи проекта — всего 3 месяца. Команда начала проработку логики пользовательских интерфейсов и способов интеграции с аппаратом.
Тут мы подключили дизайнера, описали логику экранов и оперативно согласовали план с заказчиком. В целом серьёзных проблем не было, но в процессе всё чаще стали появляться уточнения и требования к более гибкой логике в настройках системы, которую не затрагивали исходном плане (привет этапу №1).
Но еще большей ошибкой была гипотеза лёгкости интеграции с РТУ через NetPing — это устройство для удаленного мониторинга, слежения за микроклиматом и управления реле в коммутационном ящике с оборудованием. Оно нам собственно и не пригодилось, хотя мы его купили для теста.
И вот мы столкнулись с тем, что пришлось проектировать и выпаивать собственные схемы в качестве интеграционного модуля, спрятав весь ужас первых версий. Выглядело ЭТО вот так:
Плату сделали, а где же будем тестировать? Тут мы и узнали, что в аэропорт до проведения опытно-промышленной эксплуатации нас на пустят, а есть лишь холодный склад за мкадом на пятницком шоссе, куда не получается оперативно выписывать пропуски, но «очень нужно, чтобы вы туда приезжали для отладки системы». Вот тут и начинаются приключения.
В сроки мы исходно эти риски не заложили, не проговорили, где будет тестироваться система и оказались заложниками того, под чем сами с восторгом и подписались. Позже склад переехал в Лобню и вот мы уже вынуждены кататься туда — блеск.
До сдачи остается месяц, у нас отладка в Лобне, пропущен этап проектирования архитектуры для удобной поддержки решения в будущем, модель работает идеально только в тепличных условиях и появился, собранный как Франкенштейн, интеграционный модуль.
Для решения стопки проблем мы начали:
1. Согласовывать сдвиги сроков, так как локация для теста и ее доступность оставляют желать лучшего;
2. Собирать муляж имитации поведения РТУ в офисе для полноценной отладки;
3. Собирать видео со всех знакомых с различным освещением для повышения разнообразия лиц в обучающей выборке и в освещении;
4. Написали тулзу, которая в случайных местах на экране рисует точки и записывает координаты взгляда для улучшения работы нейронки в пограничных состояниях.
До сдачи 1 день и вот мы проводим тестирование мы готовимся к проведению тестирования всей системы в связке.
Но погруженная в работу команда не учла одну важную деталь: большая часть населения планеты не стремится работать 24/7, особенно в праздничные дни. А запланированная дата тестов выпала как раз на это время. В связи с этим, в офис с оборудованием попасть не было возможности и нам с командой пришлось снимать квартиры на несколько суток для того, чтобы развлекаться с отладкой багов и повышением стабильности нашего продукта. было весело. После бессонных ночей и бесконечных правок мы вваливались в такси до Лобни с ПК на руках, принимали бой ПМИ и сокрушенно возвращались обратно — опять баг!
Итераций было так много, что вспоминать это до сих пор очень больно. Все верили, что осталось вот-вот совсем чуть-чуть и мы уже сдадим. Однако был уже июнь 2019 года, сроки съехали на месяц, а мы только перевели проект на этап опытно-промышленной эксплуатации.
Провели официальное демо в транспортной ассоциации для всей команды заказчика + фото с объекта сдачи.
Добро пожаловать во Внуково!
Система запущена, однако точность оставляет желать лучшего и интеграция периодически отваливается. Так провели еще пару месяцев за РТУ в одном из аэропортов для проверки стабильности работы системы, обновлению весов нейронной сети после очередной итерации дообучения. И шаг за шагом убирали косяки с пройденного пути, чистили логи, добавляли механизмы очистки и начинали снова и снова путь к финальной сдачи системы. Итоговой договоренностью была стабильная работа системы в аэропорту сроком в один месяц. А между делом заказчик уже начал кататься по аэропортам России для демонстрации продукта и предпродаж. Так мы попали еще и на организацию техподдержки в связи с рядом проблем, которые возникали у коллег на объектах из за старого оборудования, не самых правильных подключений. Нам пришлось выступать консультантами почти в любое время дня и ночи, помочь было святым делом. Мы верили в успех проекта и хотели помочь интегрировать его всем пользователям.
Выводы и результаты проекта
Для нашей команды это по факту был первый настолько комплексный проект, требующий не только создания программно-аппаратной системы, но и предполагающий нестандартные условия внедрения.
Несомненно проблемы были и внутри самой команды. Настоящему испытанию подверглись не только наши технические навыки, но и выносливость в целом. Не будем отрицать, что техническая команда была весьма самоуверенна, и когда со стороны управленцев приходили предложения о помощи, это принималось в штыки — как сомнения в компетенции основных участников процесса разработки.
Дополнительным фактором, снижающим работоспособность и мотивацию команды, конечно, стали постоянные переработки. Это был один из главных провалов руководства — компания взялась за сложный проект с крайне сжатыми сроками разработки и сдачи. Кончено, команда понимала важность проекта и выкладывалась по полной. В один момент разработчик приносил с собой пакет из 5 энергетиков в офис, чтобы хоть как-то проснуться и выпустить уже наконец стабильный релиз. Поездки на склады, постоянная гонка - что вот-вот завтра заработает - сильно вымотали команду. Именно из-за такой обстановки один из наших технических партнёров не выдержал и был вынужден покинуть этот пиратский корабль, не доплыв до причала, что в моменте дополнительно усложнило жизнь команде. Поиск усилений, замены, погружение в код - это очень вымотало.
А теперь к жизненно важным выводам:
1. Театр начинается с вешалки, а новый проект с детальной аналитики требований и прояснения всех мельчайших подробностей.
2. Поспешишь — не спроектируешь гибкую архитектуру для бюджетной поддержки и модернизации продукта + потратишь море денег на съем хаты посуточно.
3. Любишь кататься, люби и узнавать локации точек тестирования и отладки системы для закладывания этого в сроки и дополнительные риски.
4. Сделал дело — проверь основные точки отказа системы и сверь условия эксплуатации для задач видеоаналитики.
5. Команду по осени считают — многие выгорели в процессе проекта, но мы стали сильнее и опытнее.
Несмотря на проваленные сроки и потери среди команды, проект был сдан. Пока мы делали стабильную версию, у него уже был прототип, который активно катался по всем аэропортам страны. Мы оказывали клиентам поддержку, хотя в целом это не входило в контракт, так что мы проявили на тот момент максимум лояльности к клиенту, шли на встречу ему, также как и он шел в части увеличения сроков. Заказчик еще не один раз обращался за развитием этого продукта, и в целом мы до сих пор поддерживаем отношения с данной компанией. Проект даже получил награду, как лучший инновационный продукт в области обеспечения транспортной безопасности.
Следует отметить, что согласно Руководству по авиационной безопасности 8973/9, условия и режимы посменной работы у таких специалистов, как сотрудники службы безопасности, оказывают значительное влияние на выполнение обязанностей и являются ключевым фактором, определяющим качество досмотра. «ОКО» — уникальный продукт российской разработки компании по автоматизации контроля состояния и работоспособности операторов рентгеновских установок и повышения качества выполняемых должностных функций.
P.S. Кто-то скажет, что мы рассматриваем в этой статье совершенно банальные ошибки. Но в целом она не об этом. Это история нашего старта, и напоминание всем новичкам — начинать всегда сложно. Не бывает опыта без ошибок, и мы прочувствовали это на своей шкуре. Казалось бы банальные вещи для уже опытных специалистов и команд могут стать огромным препятствием для тех, кто только врывается в IT. Поэтому мы надеемся, что хотя бы для новичков материал окажется полезным или как минимум вдохновит на будущие победы, и поможет не опускать руки, а двигаться только вперед, достигая новых вершин.
Посмотреть, в разработке каких проектов мы принимали участие, можно на нашем сайте.
А чтобы следить за нашими статьями и не пропустить новый кейс, подписывайся на наш Телеграмм-канал и сообщество VK.