Как сделать заказной веб- или mobile-проект с нуля: процессы, правила и немного крови
В интернете и книгах полным-полно best practices, которые освещают те или иные моменты в работе над ИТ-проектом. Однако best practices не позволяют увидеть всю картинку, на которой был бы виден весь путь реализации проекта с нуля. Мне не удалось найти такой «мануал», который бы разложил четко и по полочкам весь объем и порядок работ в заказном проекте. Поэтому идея поделиться своим опытом в разработке «внешних проектов» показалась мне неплохой — быть может, вы узнаете здесь себя.
Кому будет полезна данная статья
Статья будет полезна:
- Для начинающих и опытных руководителей ИТ-проектов (aka Project Manager).
- Заказчиков внешних (аутсорс) команд разработки под ключ и не под ключ.
- Существующих компаний и команд, которым интересны процессы у других.
- Тех, кто хочет собрать команду для аутсорс разработки.
- Всех, интересующихся процессами в разработке на заказ.
Intro
Йо! Меня зовут Андрей Пономаренко. Я и моя команда занимаемся заказной разработкой, а именно созданием веб- и mobile-приложений с нуля.
Тезис, который я хочу высказать в самом начале: на практике в основе построения процессов лежат не академические знания, а опыт и здравый смысл. Проектный менеджмент — это своего рода искусство.
Нельзя придумать один «универсальный» flow для всех проектов с их внешними и внутренними условиями. Написанное ниже — то, к чему мы пришли путем проб и ошибок. Отдаю это на вашу критику, буду рад ответить на вопросы и выслушать любые идеи.
Сразу оговорюсь: речь пойдет не о лендингах на два дня работы и не об интернет-магазинах на Tilda, Wordpress или Wix.
Речь пойдет о кастомных решениях со сроками разработки от трех месяцев до пары лет. Пример такого проекта — platform.goldfixing.ru. GoldFixing — одна из наших работ — платформа, посвященная рынку сбережений и накоплений в драгметаллах, и новый канал продаж для одного нишевого банка.
О процессах: я расскажу про выработанный нами базовый flow. В слово flow я вкладываю порядок работ и сопутствующие практики, которые мы берем за основу в наших проектах. Другими словами, это скелет процессов и регламентов, легко адаптируемый под каждый конкретный проект. Этот flow предполагает, что заказчик в целом понимает, что за продукт или продукты он хочет создать, как он планирует их продвигать и как на них зарабатывать. Мы не занимаемся маркетингом (к слову, в комментариях я смогу вам посоветовать кое-кого с пушечным опытом в этих вопросах).
Начнем с введения основной терминологии, дабы мы находились в едином инфополе и избежали неприятных недоразумений.
А затем я поэтапно все-все расскажу.
Терминология
- Проект — деятельность, в рамках которой создаются продукты.
- Продукт — нечто (услуга, приложение, anything), решающее пользовательскую проблему.
- Инфраструктура проекта — среда, где оживают продукты. Серверы, виртуалки, системы сбора ошибок, логов, мониторинг.
- Project Manager — руководитель проекта.
- Frontend или Mobile Developer = разработчик клиентской части приложения.
- Backend Developer — разработчик серверной части приложения.
- QA Engineer — специалист по обеспечению качества.
- devOps — разработчик проектной инфраструктуры.
- UX/UI Designer — дизайнер;
UX означает ответственность за удобство, доступность и функциональность интерфейса;
UI означает ответственность за графическую составляющую интерфейса. - Estimate — временная оценка трудозатрат.
- User Story — пользовательское требование.
- Wireframes — образ дизайна низкой точности. Он должен отвечать на вопросы: что, где и как будет расположено в интерфейсе. То есть обозначать основную группу контента (что), структуру информации (где) и взаимодействие между интерфейсом и пользователем (как).
- «Сырье» для разработчиков — всевозможные требования + макеты + wireframes.
Из каких этапов состоит заказной проект
Я делю работу над первым релизом внешнего проекта на пять этапов:
- Ознакомительный этап.
- Подготовительный этап.
- Этап разработки.
- Этап сдачи проекта или модуля.
- Этап поддержки.
Для всех последующих релизов остаются актуальны пункты со второго по пятый.
1. Ознакомительный этап
Результат этапа:
- Подписанный рамочный договор с заказчиком
- Синхронизированное понимание целей и задач
- Сформированная основа для единой команды с заказчиком на весь горизонт сотрудничества
Шаг 1: Узнать что хочет заказчик
Нужно получить от заказчика ответы на следующие вопросы:
- Что он хочет сделать?
- Зачем он хочет это сделать?
- Для кого он хочет это сделать?
- На каких технологиях он хочет это делать?
- Сколько времени у него есть на создание этого?
- В каких границах живет бюджет на создание?
- Какие у заказчика есть переживания?
- Что заказчик относит к узким местам?
- Какие есть требования к железу/производительности/пользовательским устройствам?
- Как заказчик видит сдачу проекта?
- Как заказчик видит сопровождение проекта по его окончании?
- В каких границах живет бюджет на сопровождение?
- Можно ли положить проект в наше портфолио?
Шаг 2: Согласовать с заказчиком flow, по которому вы с ним будете работать
Нужно рассказать заказчику весь путь работы над проектом.
Лично я пересказываю то, о чем пишу в данной статье.
Это можно сделать по-разному: устно, текстом, презентацией, еще как-то. Постарайтесь определить, кем является заказчик — визуалом, аудиалом, кинестетиком или дискретом, и, в зависимости от этого, выбирайте способ изложения своего flow.
Дальше этот flow нужно вместе с заказчиком скорректировать так, чтобы обеим сторонам было комфортно.
Как формируется стоимость проекта?
У каждого члена команды есть стоимость часа.
Заказчику дается прайс-лист, в котором указана стоимость часа для каждого специалиста. Стоимость часа на практике определяется рынком, ибо управление маржой идет через управление себестоимостью.
Таким образом стоимость проекта/этапа/задачи определяется стоимостью часа работы конкретного специалиста и estimate на его работу.
Как вычислять себестоимость и стоимость часа — повод для отдельной статьи.
Ниже будет представлена используемая мной боевая таблица для расчета стоимости проекта.
Шаг 3: Познакомить заказчика с командой
Можно очно или онлайн. На встрече присутствуют наша команда и команда заказчика.
Я сам рассказываю о том, кто у нас за что будет отвечать, а затем даю возможность команде заказчика задавать вопросы членам моей команды напрямую.
Шаг 4: Подписать рамочный договор
Коротко о том, что это за договор такой:
Рамочный договор
- Фиксирует намерение сторон продолжать сотрудничество в условиях, когда, допустим, нет возможности определить объем и стоимость работ.
- Регулирует вопросы распространения информации о проекте
- Определяет систему сдержек и противовесов для плодотворной работы сторон
- Регламентирует вопрос расставания сторон
В конце статьи можно подробнее прочитать, что такое рамочный договор и посмотреть пример.
В этом договоре отражаются основные права и обязанности сторон.
То есть в этот договор вшивается вся «бюрократия».
При этом все, что касается содержательной части, то есть конкретных задач/сроков/стоимостей, пакуется в отдельные мини-договора, называющиеся заданиями (приложениями), которые «приклеиваются» к рамочному договору.
Таким образом с точки зрения бюрократии появляется гибкость в декомпозиции проекта на задачи/сроки/стоимости.
Hint:
Я сторонник того, чтобы в задании к договору задач было не больше, чем на месяц. Скажем, если есть этап на 3 месяца — мы бьем его на 3 подэтапа, каждый длительностью в месяц.
Таким образом, в случае проблемного заказчика мы не рискуем потерять денег больше, чем за 1 месяц работы.
Заказчик тоже остается в плюсе — он не рискует сразу всеми деньгами -> чаще видит промежуточные результаты работ -> спит спокойней.
Шаг 5: Засетапить проект
На старте каждого проекта есть определенный набор действий, которые нужно совершить, чтобы поставить проект на «рельсы».
Этот набор действий можно представить как чек-лист:
- Завести каналы в Slack
- Подготовить Jira/Confluence
- Ввести в курс дела команду
- Проанализировать контрагентов на стороне заказчика
- Настроить GitLab
- Составить перечень документации
- И так далее
Этот список может быть очень большим. У каждого он свой.
Свой выложу в отдельной статье.
Написанные кровью правила:
- Письменно фиксируйте все договоренности с заказчиком. Ведите протоколы встреч, получайте от заказчика ОК на каждый протокол
- Письменно зафиксируйте зоны ответственности ваши и заказчика
- Роли и зоны ответственности в команде тоже должны быть четко и письменно зафиксированы на старте
- С самого начала введите команду в курс дела. Принимайте решения вместе с ней, а не за нее
- Четко пропишите порядок сдачи проекта или его модулей
- Обозначьте заказчику, что он может делать, взаимодействуя с членами вашей команды, а что нет. Остерегайтесь особо ретивых заказчиков, которые могут попробовать схантить кого-нибудь у вас
2. Подготовительный этап
Результат этапа:
- Сформированное сырье для разработчиков
- Таймлайн(план-график)
- Стоимость каждого продукта с разбивкой по модулям
- Подписанное задание к рамочному договору на разработку модуля/задачи/этапа
Данный этап выступает в роли фундамента для всех последующих этапов. Это делает его самым важным.
Подготовка — самый творческий и непредсказуемый процесс в силу того, что здесь происходит притирка с заказчиком и много взаимодействия с ним. А заказчики все разные.
Шаг 1: Подготовиться к творческому процессу
Аналитик, UX/UI дизайнер и QA, держась за руки, общаются с заказчиком, собирают всю критическую для них информацию.
Аналитик и UX/UI дизайнер на выходе дают свои estimate.
Project Manager курирует процесс.
Зачем тут QA?
QA — это человек, который отвечает за качество. Качество не только системы, но и качество требований, wireframes и макетов. Эти три сущности нужно тестировать на понятность, полноту, непротиворечивость и адекватность. Это значит, что ему нужно с самого начала приглядывать за тем, что, как минимум, аналитик и дизайнер ничего не упускают при общении с заказчиком. А как максимум — валидировать и дополнять заказчика, «тестировать» те вводные, что он дает.
Project Manager берет эти estimates, проверяет, что команда ничего не забыла, не перепутала, что estimates обоснованы, на основе опыта работы с командой закладывает буфер и получает итоговый estimate.
На основе estimates Project Manager формирует таймлайн и стоимость.
Затем идет коммуникация с заказчиком, торги за estimates/сроки/стоимость, корректировки в вводных для аналитика и дизайнера.
Если все окей — для данного этапа создается задание к рамочному договору.
Пример задания для данного этапа можно глянуть внизу статьи.
Шаг 2: Подготовить сырье
Аналитик, UX/UI дизайнер и QA все так же держатся за руки.
Project Manager все так же курирует процесс.
В зависимости от проекта, форвардом в рамках коммуникации с заказчиком может являться как аналитик, так и дизайнер.
В ходе общения с заказчиком продукты бьются на модули.
И дальше, итеративно для каждого модуля, есть следующие активности:
- Аналитик и дизайнер вместе вынимают информацию из заказчика.
Дизайнер переваривает ее и выдает wireframes с драфтами макетов - Аналитик структурирует мысли заказчика и дизайнера, а затем излагает их в виде пользовательских, функциональных и прочих требований. Пример в конце статьи.
- QA впитывает всю информацию и следит, чтобы вводные данные и результаты (требования/wireframes/макеты) были адекватны, полны и непротиворечивы
- Project Manager по необходимости привлекает разработчиков/девопса для обсуждения технических требований, ограничений и т.д.
- Project Manager следит за тем, чтобы не придумали чего-то такого, что неоправданно повысило бы риски/сложность проекта
- Происходит согласование с заказчиком требований/wireframes/драфтов макетов
- Дизайнер делает финальные макеты и согласовывает их
Шаг 3: Завести задачи
- Каждый модуль (Epic) Project Manager декомпозирует на User Story, которые сформулировал аналитик + заводит всякие «служебные» задачи, например, «Реализовать библиотеку компонентов приложения (UI Kit)»
- Каждую User Story/Task разработчик декомпозирует на технические задачи
- QA валидирует декомпозицию — следит за тем, чтобы задачи были понятно сформулированы, и чтобы с данной декомпозицией было удобно проводить тестирование
Шаг 4: Провести оценку трудозатрат, сроков и стоимости, и сформировать задание на разработку
В большинстве случаев, имея сырье для модуля или пары модулей — можно начинать их оценку.
То есть, не нужно ждать готовности сырья для всех модулей.
В рамках направленностей (frontend/backend) оценивать работы по модулю должны лиды или в случае их отсутствия — конкретные исполнители.
- Разработчики дают estimates заведенным им задачам
- Project Manager проверяет, что команда ничего не забыла, не перепутала, что декомпозиция полна, а estimates обоснованы
- Project Manager на основе опыта работы с командой закладывает буферы и получает итоговый estimate, сроки и стоимость модуля. Если опыта работы с командой нет — следует закладывать буферы, исходя из сложности задач, степени обоснованности estimate исполнителем и собственного опыта
В итоге получается таблица с расчетом стоимости проекта. Ее пример в конце статьи.
Там же пример задания на разработку.
Написанные кровью правила:
- Не делайте оценку сами. У вас есть команда. Пусть она оценивает. А вы держите в уме, кто в вашей команде насколько точно оценивает. Для того, чтобы вести статистику в Jira, есть инструменты для построения отчетов схождения estimates. Закладывайте свой буфер на оценку каждого по отдельности
- Если вы сами собирали команду, то доверяйте ей. И при любых раскладах слушайте ее и слышьте ее. Как устанавливать доверительные отношения с новой командой — повод для отдельной статьи
- Далеко не всегда можно позволить себе начать писать первые строчки кода, имея все-все сырье. В такой ситуации четко определите с командой необходимый минимум для того, чтобы начать разработку, не переживая о том, что вы сходу начали создавать «монстра», и потом непонятно, сколько всего придется перепиливать
- Далеко не всегда условия позволяют провести обстоятельную оценку. В таком случае команде нужно понять наиболее опасные места и оценить трудозатраты хотя бы для них. Четко держите в голове те места, где «уступать нельзя», и отстаивайте у заказчика/руководства необходимость в детализации сырья
- Если заказчик хочет сроки, которые невозможны с вашими оценками, не подписывайтесь на эти сроки. Сроки делятся на желаемые и реальные: ) Нельзя в 5-литровую банку влить 7 литров воды. И даже 6 литров. И даже 5.5 литров. Если заказчик хочет привязаться к дате — нужно менять требования так, чтобы оценка (с буфером) сошлась с ожидаемой заказчиком датой. Аналогично с бюджетом.
- Если заказчик говорит: «а давайте вот эти требования потом додумаем, по ходу дела разберемся» — обозначайте, что вы не сторонник нездорового авантюризма, что эти доделки выйдут в отдельное задание в рамках договора. То есть Project Manager не должен подписываться на абстрактные и непродуманные задачи. Это допустимо только при предоставлении аутстафф-услуг
- Если заказчик говорит: «мы предоставим вам дизайн, сейчас есть драфты, давайте на основе них сделаем оценку и подпишемся» — обозначайте, что вы напрямую зависите от дизайна и что, не имея четкого дизайна, вы будете вынуждены закладывать внушительный буфер
- Составьте критический путь и матрицу рисков. Держите в уме все места, где вас может заблокировать заказчик. О том что такое критический путь и матрица рисков можно будет прочитать в конце статьи.
Этап 3. Этап разработки
Про этот этап можно написать отдельную книгу.
Или, по крайней мере, отдельную статью.
Обозначу ключевые моменты.
Организуйте команде условия
- Организуйте четкие каналы и процессы коммуникации
- Сформулируйте зоны ответственности каждой роли (frontend/backend/devOps/design и т.д.)
- Сформулируйте зоны ответственности каждого члена команды
- Выберите удобные инструменты. Например:
- GSuite — почта. Расскажите ребятам, как пользоваться фильтрами и лейблами в Gmail
- MIRO — wireframes/схемы и т.д.
- Figma — макеты
- Slack — мессенджер
- LambdaTest — парк девайсов
- GitLab — VCS
- JIRA/Confluence (да, их есть, за что хейтить, но я лично альтернативу лучше не подобрал) Настройте Workflows в вашем менеджере задач
Организуйте devOps-магию в виде CI/CD в связке с уведомлениями в Slack
- Организуйте в Slack поток уведомлений о происходящем в Figma/Miro/Jira/Confluence/Sentry
- Убедитесь, что у вас есть согласованный внутри команды git-flow
Дефолтный порядок
Story за story
- Разработчики взяли несколько задач и ушли их пилить
- Разработчики сделали задачи, отправили их на валидацию QA
- QA провалидировали, часть пустили в Done, часть вернули в Rework
- За пару итераций победили story
- Команда провела внутренний demo — QA продемонстрировал сделанную User Story Project Manager’у, дизайнерам и аналитику
- Команда получила фидбек
- Команда что-нибудь доделала
- Project Manager провел demo разрабатываемой story перед заказчиком
- Project Manager получил фидбек
- Команда что-нибудь доделала
Примечания:
Идеально story за story удается двигаться только в мечтах. Это нормально. Важно отдавать себе отчет, сколько сторей параллельно комфортно держать в оперативной памяти вам и вашей команде.
С точки зрения бюрократии в задание в рамках договора скорее всего будет зашит модуль = группа сторей. Однако ничто не мешает сдавать их story за story.
Раньше получите фидбек от заказчика — меньше возни будет при закрытии задания.
Инфрастуктура
Помните: то, что приложение открывается и хорошо работает в браузере — не значит, что оно готово к production.
В продакшне нужно уметь следить за состоянием своего приложения. А в случае проблем — иметь инструменты, чтобы лечить эти проблемы.
В проде приложение должно быть контролируемо, отказоустойчиво и защищено.
Для этого нужны (основное):
- правильно организованные доступы
- система сбора ошибок
- система мониторинга, health checks, алерты
- система сбора логов
- бекапы
И вся эта жуть в организации порой дается сложнее разработки самих продуктов.
Написанные кровью правила:
- В первую очередь занимайтесь интеграциями. Никогда не знаешь, на каком шаге в интеграции случится затык
- Проводите ретроспективы. Не нужно часто. Нужно не редко. И не забывайте устранять проблемы, найденные в ходе ретроспектив. А не просто их записывать в meeting notes.
- Следите за багажом из недоделок/багов и мелочей. Прям story за story никогда не удается двигаться. Всегда будет несколько в работе. Важно следить за тем, чтобы технический долг, недоделанные фичи и баги не перевалили за критическую линию. Если перевалят — быть беде. Слушайте команду. Следите за ее эффективностью
Этап 4: Сдача проекта (или его части)
Если на этапах 2 и 3 все было сделано по красоте, то при адекватности заказчика этап 4 будет проходить просто.
- Устраиваете demo day. Показываете заказчику все сделанное
- Получаете фидбек
- Вносите в продукты правки на основе фидбека
- Передаете заказчику
- Код
- Документацию и инструкции
- Требования, макеты, wireframes
- Прочие исходники
- Доступы к серверам/хостингам/доменам - Даете заказчику согласно договору N дней на проведение внутренних проверок. В грустных случаях — на основе ПМИ/ПСИ
- Получаете список доделок
- Устраняете доделки
- Закрываете задание к договору
- Получаете рассчет
Написанные кровью правила:
- Не кладите все яйца в одну корзину. Не стоит в рамках договора делать задания объемом на несколько месяцев. Делая задания небольшими, вы рискуете меньшими суммами в случае недобросовестного заказчика
Этап 5: Поддержка и сопровождение
После сдачи проекта в течение M дней справедливо устранять возникающие на стороне заказчика проблемы, относясь к ним как к «гарантийному случаю».
Срок гарантийного периода прописывается в договоре.
В том случае, если заказчик захотел, чтобы вы по истечению этого срока сопровождали сделанные вами продукты — я вижу две модели взаимоотношений с заказчиком:
- Почасовой биллинг, оплата раз в месяц
- Подписка — X рублей в месяц
С точки зрения бюрократии оба формата нормально ложатся в формат заданий в рамках договора.
ИМХО, почасовая выглядит справедливее по отношению к обеим сторонам.
Так не придется ничего выдумывать. Ибо подписка всегда будет не выгодна как минимум одной стороне.
Написанные кровью правила:
- Крупные проекты — как живые организмы. Никогда не знаешь, что у них заболит. Подготовьте инфраструктуру к тому, чтобы можно было эффективно проводить диагностику и лечение
Полезные ссылки:
Подробнее о том, что такое рамочный договор можно прочитать тут.
Пример рамочного договора и заданий к нему — тут.
Пример пользовательских и функциональных требований — тут.
Пример таблицы с подсчетом стоимости проекта — тут.
Вопросы к аудитории
- Какие места вы хотели бы, чтобы я раскрыл поподробнее?
- Какие эпизоды из своего опыта вы бы отнесли к «Правилам, написанным кровью»?
Хорошая статья. Без воды и по делу!
Хотелось бы чуть больше раскрыть информацию про то, как происходит estimate проекта. Как действовать, если неопределенность в ТЗ или, скажем, используемом API может создать доп. расходы/время?
ТЗ штука составная. Нужно разбить его на четко определенные смысловые куски и на неопределенные. Дальше нужно понять, сильно ли зависят четко определенные смысловые куски от неопределенных.
Если особо НЕ зависят - то можно проэстимировать эти куски и начать работу над ними, параллельно прорабатывая требования в неопределенных кусках ТЗ. Как раз здесь и проявляется удобство рамочного договора, где одно ТЗ можно разбить на несколько смысловых кусков и паковать их в отдельные приложения к договору.
Если зависят - то НЕ нужно начинать эстимирование до тех пор пока не появится первый четко определенный независимый кусок.
Неопределенность - один из самых серьезных врагов заказной разработки.
Тот враг, которого щадить нельзя.
Поэтому все что с точки зрения вашей команды плохо определено - не эстимируйте, или эстимируйте без обязательств. И добивайтесь такой детализации, с которой вам и вашей команде было бы комфортно взять ответственность за свои estimates.
К неопределенности в API(и чем либо еще) относимся так же как и к неопределенности в каком-то куске ТЗ. Устраняем неопределенность до тех пор, пока не станет комфортно брать ответственность за свои оценки.
Смог обьяснить?
Статья очень хорошая. Все правильно, завишу в закладки. По идее можно целую книгу написать по всем этим особенностям.
Но постарался посмотреть на нее со стороны того кто всё это видит впервые или со стороны клиента. Скорее всего 90% звучит как непонятная грамота и набор тарабарщины из совершенно непонятных слов. Для клиентов можно было бы отдельную выдержку.
Но как мануал для специалистов можно в учебники записать.
о! Со стороны клиентов на какие вопросы хотелось бы получить ответы?
А со стороны тех кто видит это дело впервые?
Отличная статья👍🏻
Хороший регламент для сложных и длительных проектов - с соломкой на все случаи ).
Ох как хорошо. Респект