Как грамотно составить задание для программиста

Любому, кто запускал хотя бы пару проектов, на фрилансе знакома ситуация, когда срывается срок по причине болезни бабушки у программиста, попадания в аварию и прочих стандартных уважительных причин. Генеральный директор Bright Mobile разбирается, как снизить риски провала ещё на старте.

В закладки

В обратную сторону ситуация схожа. Многие компетентные исполнители (проблема актуальна же не только для программирования) жалуются на аналогичное поведение заказчиков: задержку постоплаты, требования выполнить не оговоренные ранее работы под предлогом «это же логично» или «сделай бесплатно, получишь второй проект» и так далее.

Само собой, причина этих проблем либо в желании откровенно кинуть партнёра, либо в недоговорённостях на старте. Про обман в этой статье писать не буду: это отдельный объёмный материал, связанный с юридической грамотностью и своевременностью подписания бумаг. Сегодня речь про второй вариант, когда «вроде договорились, но каждый понял по-своему» и о том, как избежать связанных с этим проблем.

Стандартные процессы разработки

Обычно процесс идёт по двум сценариям. Либо крупная подготовительная работа с написанием большого ТЗ и уточнением всех нюансов, либо, наоборот, прошлись по верхам, а детали обсудим в процессе. И у того и у другого способа есть плюсы и минусы. Уверен, большинству читателей они знакомы, но давайте всё-таки зафиксируем, чтобы было от чего отталкиваться.

Большое и долгое ТЗ

На картинке я показал, что ТЗ прорабатывается до КП, но некоторые студии меняют эти этапы местами. Для текущего вопроса это не принципиально, поэтому я объединил в один формат.

Плюсы:

  1. Исполнитель и заказчик достаточно плотно разобрались в проекте и согласовали хотя бы глобальные вопросы, что снижает риск недопонимания.
  2. ТЗ прикладывается к договору и в случае проблем можно будет вспомнить и разобраться, нужно ли реализовать те или иные функции.

Минусы:

  1. В ходе реализации проекта у заказчика может поменяться виденье того или иного блока, что приведёт к переписыванию ТЗ, заключению дополнительного договора и тратам.
  2. Если работает команда, то не стоит надеяться, что за огромной кучей страниц ТЗ каждый из участников проекта увидит именно ту идею, которая лежала изначально. Расфокусировка будет обязательно.
  3. Без гарантий заключения сделки мало кто из исполнителей будет помогать с грамотным составлением ТЗ.
  4. Если покупать написание ТЗ, то опять же есть шанс, что будет написан огромный, технически верный проект, не отражающий, однако, ключевых требований.

К слову, самое большое ТЗ, которое нам приходило на оценку — 136 страниц двенадцатым шрифтом. Я отказался его брать в работу даже на оценку, так как времени потратил бы столько же, сколько на семь-десять других клиентов, но с меньшей конверсией в продажу.

Не стоит забывать, что как заказчику важно быстро оценить проект, чтобы понимать, подходит студия по бюджету или нет, так и исполнителю важно усвоить только важные данные по проекту, чтобы грамотно дать предварительную оценку. Да, если предварительная оценка устраивает, то можно уточнять и корректировать её, но обеим сторонам важно видеть, совпадает ли порядок цен на требуемый объём работ и бюджет, который готов вложить заказчик.

Хоп-хоп и в продакшн

Немного изменил распространённое выражение, чтобы редакция не забанила, но общая суть второго подхода иллюстрируется им лучше всего. Это происходит, когда заказчик считает работы достаточно простыми и не требующими обсуждения. Шутки в стиле «там всего лишь лендинг с функцией магазина и социальной сети» и «что там делать этот Google, там же одна строка поиска» из той же оперы.

Привожу эти примеры не для издёвки, а как иллюстрацию задачи с точки зрения пользовательского интерфейса, его сложности, многогранности реализации. При такой подаче процесс исполнения выглядит так:

Процесс практически идентичен процессу выше за исключением того, что на первом этапе проговаривается базовая идея и сразу начинается работа

Плюсы:

  1. Все участники проекта понимают цель и причины реализации проекта.
  2. При изменении какого-либо блока он обсуждается в процессе и реализуется под требования клиента, если не сильно меняет объём работ.
  3. На этапе продажи легко оценить проект и перейти к договору, если цена устраивает.

Минусы:

  1. Большой шанс, что может появиться уточнение, которое сильно влияет на бюджет, но клиент предполагал, что она уже входит в стоимость.
  2. При конфликтных ситуациях вопрос решается только путём переговоров без документальных свидетельств, что и как точно нужно сделать.

Выводы из обоих подходов

Принципиальными я вижу следующие вопросы, которые нужно регламентировать в процессе и которые влияют на положительный итог проекта:

  • Вся команда должна чётко понимать основную идею и ключевые функции.
  • Основные, влияющие на стоимость работы должны быть прописаны в ТЗ.
  • Должна быть возможность мягкого и понятного ценообразования изменений.
  • На старте, без серьёзных временных затрат, нужно иметь возможность дать предварительную оценку, которая не сильно (не более, чем на 20%) изменится после уточнения деталей.

Очевидно, ни один из подходов не решает все перечисленные задачи. Поэтому у себя в компании мы пришли к такой схеме проектирования перед реализацией проекта.

Общая оценка. При входящем обращении, в ходе диалога на 15–30 минут или первичной переписки, выясняется идея проекта и основная бизнес-логика. На основе этих данных смотрим, что мы делали или оценивали ранее, какие были бюджеты у похожих приложений.

Как правило, есть три-четыре проекта с похожими идеями и клиенту называется средняя стоимость с индивидуальным дизайном и использованием готовых блоков на Ionic. При этом заказчик решает, что либо он хочет сразу созданный под него дизайн, либо нужно простенькое с точки зрения дизайна приложение, но с экономией до 30% бюджета.

Для примера — скриншоты формы заявки на перевозку в двух логистических приложениях. При похожей функциональности, первое на 20 экранов в базовом дизайне стоило порядка 250 тысяч рублей, второе, с индивидуальным дизайном — более 500 тысяч рублей.

Разработка проекта

Если клиента устраивает оценка, следующий этап — проектирование. Проектирование сводится к пяти основным разделам:

  • Вводная задача от клиента: та самая идея, которой должно быть пронизано всё приложение.
  • User-case: описание последовательной логики работы всеми ролями пользователей.
  • Структура: список экранов приложения с указанием на цель того или иного экрана и принципы его работы, а также дополнительные функции (интеграции с 1С и эквайрингом, авторизации через соцсети и прочее на что не требуется доп экраны).
  • Смета: рассчитывается стоимость работ на основе количества экранов и сложности дополнительных функций. Для проектов с базовым дизайном и индивидуальным, само собой, стоимость экранов разная, поскольку отличается объём работ, а дополнительные функции считаются по временным трудозатратам.
  • Рекомендации: на основе опыта работы с подобными проектами даём рекомендации по развитию сервиса после запуска.

Важно, чтобы объём проекта занимал менее восьми страниц, а в приложении было меньше 30 экранов. Если получается больше, есть шанс сильно запутаться в деталях. В таком случае нужно часть менее приоритетного функционала обязательно выносить на вторую версию. Если важно всё, то можно первую версию не публиковать, а использовать такой подход для упрощения внутренней работы и взаимодействия.

Публично показать примеры проектов не могу, так как это будет некрасиво по отношению к клиентам (я против подхода «взять чужую идею и допилить под себя»), но могу показать те проекты, сильно отличающиеся от вашей идеи в индивидуальном порядке. Для этого напишите мне во «ВКонтакте» или Facebook.

Цель этого этапа — додумать за заказчика те или иные решения и согласовать ключевой функционал.

Прототипирование

Если проект предполагает разработку дизайна, следующий этап — линкованный прототип (пример), где можно перемещаться между экранами, кликая по кнопкам, и увидеть, как будет работать приложение. Если речь о базовом дизайне, просто показываются примеры приложений с использованием шаблонов Ionic, чтобы клиент на старте понимал, как будет выглядеть приложение.

Часто бывает: в целом шаблоны устраивают, но хочется что-то сделать под себя (поменять цвет, шрифты, подвинуть кнопки). Это оценивается как несколько дополнительных часов работы программиста, и получается, что заказчик получает в дизайне те изменения, которые для него принципиальны, но по стоимости это сильно ниже, чем при создании дизайна с нуля.

Собственно, на этом всё. При удачном стечении обстоятельств и вхождении луны в правильную фазу подписывается договор и приложение переходит к реализации.

Заключение

В качестве заключения давайте вернёмся к тем важным моментам, которые обозначены в начале статьи, и рассмотрим их решение при таком подходе к проектированию.

  • Понимание идеи всей командой. Благодаря расписанному юзер-кейсу и чёткой структуре, а также небольшому объёму информации, любой участник проекта понимает, что он делает и какая цель того или иного блока.
  • Принципиальная функциональность. Все важные функции и экраны описаны в структуре. Заказчик тоже через ценообразование понимает, что, например, добавить новое поле в экран заявки дополнительных денег стоить не будет, но если нужно сделать новый экран или подключить эквайринг, который изначально не был заложен, то это дополнительные деньги.
  • Понятное ценообразование. Ещё на этапе проекта в разделе сметы показывается, что каждый экран стоит, например, 11 тысяч рублей, значит, и при добавлении ещё одного стоимость экрана будет такая же. Если интеграция трёх соцсетей стоит 4800 рублей за каждую, четвёртая будет стоить те же 4800 рублей.
  • Предварительная оценка. На этапе пресейла не пишутся и не изучаются никакие длинные документы, а вопрос «сколько примерно стоит» решается за 15-30 минут.

Предлагаю такой подход разработчикам сайтов и приложений. Расскажите в комментариях, какие способы используете у себя и какие самые частые проблемы случаются при этих подходах. Буду рад обратной связи по изложенному материалу в том плане, что может пойти не так, если действовать моим путём.

Материал опубликован пользователем. Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Денис Гордиенко", "author_type": "self", "tags": [], "comments": 21, "likes": 14, "favorites": 155, "is_advertisement": false, "subsite_label": "life", "id": 64460, "is_wide": false, "is_ugc": true, "date": "Sun, 14 Apr 2019 18:47:49 +0300" }
Акции банка «Тинькофф»
19,20$
0,04$
{ "id": 64460, "author_id": 127886, "diff_limit": 1000, "urls": {"diff":"\/comments\/64460\/get","add":"\/comments\/64460\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/64460"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 199123, "last_count_and_date": null }

21 комментарий 21 комм.

Популярные

По порядку

Написать комментарий...
23

в ходе диалога на 15-30 мин или первичной переписки, выясняется идея проекта и основная бизнес-логика.

Ответить
1

Первым этапом идет обсуждение цены от и примерный диапазон до.
А после подписание договора и написание ТЗ.
Иначе можно впустую тратить деньги на клиентов, которые просто интересуются. Исполнитель потратит свое время, а клиент сделает "там где дешевле".

"К слову, самое большое ТЗ, которое нам приходило на оценку - это 136 страниц 12-м шрифтом. Я отказался его брать в работу даже на оценку"
ТЗ на простые модули для сайтов начинаются от 40-50 страниц A4.

Аналитики, которые работали с принципиальными разработчиками, понимают важность подробного и четко сформированного ТЗ.
Читая ТЗ разработчик должен уже с первых слов понимать, о чем проект, для чего и как его примерно реализовать.

Ответить
2

И, главное, не абстрактный результат: ещё один сайт, а описанием функциональных возможностей. Про деньги перед ТЗ - правильно. Это тоже работа и этап.

Ответить
7

В что с бабушкой? Тема статьи не раскрыта...

Ответить
0

Просто громкий заголовок и потом шум, сорян чо не ту статью читаем.

Ответить
3

знакома ситуация, когда срывается срок по причине болезни бабушки у программиста, попадания в аварию ну и прочих стандартных "уважительных причин"

Встречается исключительно у новичков (то есть БУДУЮЩИХ или ЖЕЛАЮЩИХ БЫТЬ) специалистов.
Довольно даже средний уровень программиста достигается сложной и долгой работой, там уже хорошие зарплаты и потому в нем работают в большей части довольно матерые ребята.

Не просто так зп мидла даже на таком "дешевом" языке как PHP по Москве идет в интервале 100-140К

Ответить
1

Вы так говорите, как-будто крупные компании не факапят сроки

Ответить
1

Проблема сроков в компаниях - очень редко проблема рук исполнителей(хотя бывает и такое). Чаще всего это проблема менеджмента. Неправильно поставленный срок в начале - самая популярная проблема. Всем хочется ворваться в бой с криком "мы сделаем это за месяц", а потом дособираются требования и проект затягивается еще на 3.
Бывает, что заказчик сам затягивает в виду нехватвки данных(не прислал фотографии, доступы), а потом спрашивает "почему так долго". Спасает прозрачность, регулярная отчетность, опыт и осторожность. Оценка не всегда зависит от опыта. Часто люди храбро идут делать то, что никогда не делали, но представляют как делать. В этом случае любой поставленный срок будет очень примерным, если декомпозиция и риск-менеджмент не применены.

Ответить
0

под исполнителем или программистом в статье я понимаю не конкретного человека, который пилит проект, а целиком команду или фрилансера. Нежелание разобраться в огромном документе или разночтение маленького - это проблема не зависящая от формата работы.

В статье я как раз предложил золотую середину, чтобы не было расфокусировки и ключевые данные были зафиксированы.

Ответить
0

Факапят. Еще как факапят.

Ответить
3

Название статьи не совсем соответствует содержанию.
Вы же просто пишете, как работаете с клиентами и делаете проекты, не более. Причем здесь "болезнь бабушки"?

Ответить
0

Такой подход позволяет договориться на берегу о том, что входит в стоимость, а что нет и о том, какой примерно будет стоимость доработок, если они появятся в процессе не потратив кучу времени на написание ТЗ. Прозрачность и для заказчика, и для исполнителя позволяет снизить риск недопонимания и неадекватного поведения.

Ответить
1

Парировать мне теперь нечем, кажется название статьи изменилось, спасибо :)

Ответить
1

На этапе пресейла не пишутся и не изучаются никакие длинные документы, а вопрос "сколько примерно стоит" решается за 15-30 минут.

:))) Простой ленд... на пару часов... вышел уже вместе с админкой приёма заказов, асинхронными запросами и прочим, и почти в неделю работы )) Крайне сложно работать от идеи, не переводя её в ТЗ. Самому потом будет трудно понять на этапе тестирования правильно ли это или нет

Ответить
–1

Это описывается в проектировании. Например, в структуре:
1. Ленд с описанием работы
2. Авторизация админа
3. Список заказов
4. Детали заказа

Если асинхрон реально нужен - выносим в блок доп. Функций

Ответить
1

TL;DR

Ответить
0

4800 руб запилить ссылки на соцсети?

Ответить
–1

Нативная авторизация

Ответить
0

А бабушка здорова...

Ответить
0

Пресвятая богородица. Заголовок поменяли?

Ответить
0

Да, теперь не так эпично, но больше к теме

Ответить
0
{ "page_type": "article" }

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ]
Компания отказалась от email
в пользу общения при помощи мемов
Подписаться на push-уведомления
{ "page_type": "default" }