Как договориться заказчику с программистом

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

Недавно я запустил канал ТЗ Здесь с бесплатными типовыми техническими заданиями. За последнеие две недели периодически пишут как заказчики, так и программисты, рассказывая свои истории из жизни, как провалился тот или иной проект из-за недостаточной проработки или полного отсутствия ТЗ.

Откровенный развод

Разберу сначала совсем утрированные истории, где изначально у одной из сторон не было задачи договориться и довести проект до финала.

Как может кинуть программист:

  1. Берёт в работу произвольную задачу, предлагая очень вкусную цену
  2. Особо не вникает в детали и просит предоплату 30‑50%
  3. Просит не беспокоить до дедлайна — всё под контролем
  4. Делает какие-то простые вещи по проекту
  5. В момент дедлайна резко сливается, либо игнорируя, либо заявляя, что реализованный объём как раз укладывается в предоплату и далее он продолжать не может, т.к. [придумайте причину сами].

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

Как может кинуть заказчик:

  1. Даёт обтекаемое ТЗ
  2. Отправляет предоплату 30‑50%
  3. После получения результата сообщает, что имел ввиду совсем иначе
  4. Требует переделать бесплатно
  5. После двух-трёх итераций переделок сообщает, что программист не справился и остатка не будет, мол он пойдёт на оплату работы другого программиста.

Как правило, программиста дотапливают почти до конца и доработка будет стоить явно не 50‑70% от бюджета, если она вообще будет заказываться…

Проблемы недоговорённостей

Однако, чаще всего, проект заваливается и заказчик с программистом ссорятся не из-за изначального умысла, а из-за недоговорённостей.

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

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

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

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

Чтобы максимально избежать таких ситуаций и, как минимум, помочь программистам задать наводящие вопросы, мне и пришла идея канала с типовыми заготовками, на основе которых можно уже дописывать индивидуальное ТЗ. 50‑70% в схожих проектах идентично и всё внимание как раз концентрируется на принципиальных нюансах — шанс недосказанности уменьшается.

Иллюстрации

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

Доверие

Важно договариваться с программистом о том, чтобы он реализовывал на свое усмотрение, то что не описано в ТЗ.

Евгений, Программист

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

Сергей, Заказчик

Это хороший пример первичных переговоров. С одной стороны, программист хочет некоторой свободы действий — у него есть заготовки функций, у него больше опыт в запуске ИТ-проектов и некоторые идеи, которые заказчик хочет реализовать в проекте, на основе опыта программиста, бессмысленно усложняют проект и не ведут к заложенному результату.

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

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

Недавно мы проиграли тендер на приложение интернет-магазина. Заказчик выбрал подрядчика, который предложил чек в 1,5 раза больше. Даже не получив заказ я почувствовал уважение к этому выбору — у нас магазинов в портфолио не густо, у победителей — это основная специализация. Заказчик предпочёл переплатить 50%, но получить снижение риска завала проекта.

Коммуникации

Коммуникации с программистом важно свести к минимуму.

Евгений, Программист

Почему не коммуницировать? Я же хочу знать как идут дела, вдруг ты забил на проект и занимаешься чем-то ещё.

Сергей, Заказчик

Ещё один пример недопонимания. Для программиста коммуникации — это разговоры на тему как всё будет классно и прочие микро отвлечения, которые сильно выбивают из колеи. Для заказчика коммуникация — это отчётность.

Адекватно будет договориться об отчёте каждые 2 дня в формате что было сделано за 16 часов и как это проверить. Если отчёта нет или он написан в формате «сделано огого, но проверить можно будет только в конце» — это повод волноваться.

Вместе с тем, заказчику стоит избавить программиста от дерготни в стиле «как дела» в несогласованное время. Разработка — дело творческое и выдернув программиста в неправильный момент, можно на несколько часов увеличить срок реализации. Отвлекли 10 раз — вот вам и недельная задержка.

Оценки и доработки

Вдруг у меня пришла идея доработок и мне нужно оценить её? Это же выгодно для программиста — он денег больше получит.

Сергей, Заказчик

Её можно поставить после реализации текущего спринта. Отвлекая и отменяя задание можно запороть в принципе текущий спринт.

Евгений, Программист

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

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

Крайне важно идти недельными спринтами, в рамках которых задание не меняется и программист не отвлекается от текущего объёма. При правильной коммуникации — это даёт ускорение в 20‑30% и адекватного программиста в финале, который будет только рад продолжить работу с таким заказчиком.

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

Постоянная дерготня в произвольно время — это как раз один из красных флажков для программиста.

Заказчик тоже работает

Как лучше делить на спринты? Я планировал отправить 50%, уехать в отпуск проверяя раз в 2 дня отчёт и, в конце, увидеть конечный продукт.

Сергей, Заказчик

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

Евгений, Программист

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

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

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

Финалом такого подхода является осознание, что в какой-то момент программиста настолько задёргали, что ему становится «не надо» запускать проект заказчика и появляется обида — почему я делал версии, присылал, мне согласовывали продолжение работ, а в итоге сказали, что всё не так.

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

Резюме по всем иллюстрациям можно свести к нескольким тезисам:

  • Все ключевые вещи, не важно, считаете ли вы их входящими в работу «по умолчанию» или нет, нужно оговаривать и прописывать в ТЗ. Если что-то не написано, значит вы доверяете программисту и готовы доплатить, если что-то не понравится.
  • Нужно минимально отвлекать программиста на произвольные разговоры о будущем и максимально контролировать текущую работу, как можно быстрее давая обратную связь, что что-то пошло не так, если видите несоответствие своим изначальным идеям.
  • В случае возникших проблем, важно уметь слушать и слышать вторую сторону. Желание продавить силой часто приводит к неожиданным последствиям как для одной, так и для другой стороны.
3333
32 комментария

Толковый материал. Но еще есть проблема гарантийной поддержки продукта. Часто заказчик думает, что проект после запуска будет дорабатываться бесплатно. Это же поддержка, типа, а не новые фичи. Ну и собственно, сама поддержка и багфикс должен быть осуществлен бесплатно и через пару лет, даже если это проблема изменений АПИ операционной системы, а приложение до того работало стабильно.

7

Мы в договоре учитываем.
Может кому пригодится, а может кто посоветует, как улучшить:

2.5. Гарантийное обслуживание 

2.5.1. Гарантийное обслуживание начинается с момента размещения сайта в сети Интернет на рабочей площадке и доменном имени. Срок гарантийного обслуживания составляет 6 (шесть) месяцев. 

2.5.2. Гарантийное обслуживание включает исключительно устранение ошибок в разработанном Подрядчиком сайте, а также консультирование Заказчика по работе с сайтом в пределах 20 (двадцати) часов, суммарно, в течение гарантийного периода. Фактически затраченное на консультирование время устанавливает Подрядчик на основании табельного учета часов, отработанных каждым специалистом Подрядчика по данным работам. 

 2.5.3. При обнаружении ошибок в работе Сайта в течение гарантийного срока, Заказчик информирует об этом Подрядчика. Предварительно Заказчик обязан убедиться, что выявленная им ошибка действительно является качественной или количественной недоработкой и сослаться на соответствующие пункты Технического задания. После чего Подрядчик в течение трех рабочих дней производит их диагностику и/или устранение. В случае, если устранение ошибки потребует дополнительное время, срок гарантийного обслуживания продлевается на время, необходимое для ее устранения. 

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

2.5.5. В случае признания требований Заказчика правомерными, Подрядчик своими силами и за свой счет устраняет допущенные по его вине недоработки в результатах работ, в сроки, установленные дополнительным соглашением Сторон. 

2.5.6. В случае, если в ходе диагностики выявлено, что ошибка в работе сайта не является качественной или количественной недоработкой, Подрядчик выставляет Заказчику счет за ее диагностику и устранение по фактически затраченному времени по действующим тарифам Подрядчика на техническую поддержку – ___ рублей за 1 час работы специалиста. Фактически затраченное на диагностику и устранение время устанавливает Подрядчик на основании табельного учета часов, отработанных каждым специалистом Подрядчика по данным работам. 

7

А меня вот ужасно бесят анкеты IT контор, которые собирают информацию о бизнесе под предлогом того, что мол мы так лучше поймем задачу. Вас сайт просят сделать, а вы пытаетесь скомуниздить всю подноготную. 

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

5

Все эти проблемы вам приходится решать в силу отсутствия конкуренции. На самом деле этих проблем нет, когда есть рынок. А когда его нет - нет и пилюли волшебной. 
Что такое программист вообще? Примеры кейсов из статьи очень забавны. 
И вот пример реальной задачи для программирования:
"Имеется 20 больших файлов (по гигабайту). В каждом файле записаны 32-битные числа в неубывающем порядке. Нужно найти медиану множества всех этих чисел. В распоряжении имеется только компьютер с 4 килобайтами свободной оперативной памяти".

И задача есть, верно? И четко сформулирована. И не имеет она ничего общего с головной болью статьи. Чтобы ее решить, нужно сначала знать, что такое медиана, потом множество и после этого запихнуть решение внутрь ограничений о 4 кб. Вот о чем программрование.

У Вас в ТЗ нет требований к вводу данных и как вывести результат, вот о чем статья)

4

Только человек, которого несколько раз обманывали программисты (первый раз - в 1994 году, последний - в 2013 году) может понять некоторые пункты статьи господина Гордиенко. Я понимаю.
Сам господин Гордиенко сейчас борется на форумах с одним из "обманутых заказчиков", так что многое из его статьи "написано кровью проваленных проектов". (в смысле "не стреляйте в пианиста, он так играет").
Открыть проект готовых технических заданий - отличная идея, которая сэкономит миллионы рублей заказчиков и миллиарды нервных клеток программистов.