Как франчайзи 1С за 10 строчек кода просил 1 000 000 рублей с клиента
Старая байка про инженера
Есть древняя инженерная притча. На завод зовут дорогого специалиста починить огромный генератор, который встал. Тот ходит вокруг, слушает, потом достаёт мел, ставит крестик на одной из деталей и говорит: «Меняйте здесь». Генератор запускается. Специалист присылает счёт на 10 000 долларов. Возмущённое руководство требует детализацию: «Вы поставили одну меловую метку!» Он присылает новый акт: «Меловая метка — 1 доллар. Знание, где её поставить, — 9 999 долларов».
Притча старая, но именно она и есть корень всего спора про «десять строк за миллион». Клиент видит и оплачивает крестик. А платит он — или должен платить — за знание, где этот крестик ставить.
Вопрос только в том, что стоит за этими десятью строками на самом деле. И вот тут начинается настоящий разбор.
За что клиент платит, когда платит «за 10 строк»
Сами по себе десять строк не стоят ничего. Их и ИИ теперь напишет за секунду. Ценность — вокруг них.
Диагностика. Чтобы дописать эти строки, кто-то сначала неделю читал чужое легаси без документации, воспроизводил плавающий баг, который вылезает только при закрытии месяца и только у одного пользователя, и методом исключения дошёл до того самого места. Финальные десять строк — это верхушка айсберга, под которой часы, а иногда и дни раскопок.
Экспертиза. Знание, что нужны именно эти десять строк, а не переписывание половины подсистемы, — это спрессованные годы. Джун на этой же задаче честно проработает три дня, сломает два соседних механизма и всё равно не факт что починит. Сеньор ставит крестик за десять минут. Клиент платит не за десять минут, а за то, что этим минутам предшествовало пятнадцать лет.
Последствия. Что эти строки чинят или приносят? Если из-за бага у клиента не проводится отгрузка и встал склад — каждый день простоя стоит ему сотни тысяч. Если фикс разблокирует сделку или спасает годовую отчётность — цена привязана к масштабу проблемы, а не к количеству символов. Десять строк, которые снимают убыток в миллион в месяц, вполне могут стоить миллион. Это не наглость, это арифметика ценности.
Ответственность и гарантия. Франч отвечает за то, что фикс не развалит остальное, что через месяц он не отвалится, что будет кому позвонить. Это не разовая продажа кода, это продажа спокойствия.
И да — себестоимость. У франчайзи за спиной офис, менеджеры, лицензии, ИТС, налоги, гарантийные обязательства и «банда, которую надо кормить». Одиночка-фрилансер тут дешевле — это правда. Но и рисков клиент на себя берёт больше.
Если всё перечисленное реально есть — миллион за десять строк перестаёт быть анекдотом и становится нормальным ценообразованием по результату. Именно так, кстати, работает любой фикс-прайс: клиент платит за решённую проблему, а сколько там строк и часов ушло — это уже риск и забота исполнителя.
Пример из практики: десять строк, которые вернули складу отгрузки
Чтобы не быть голословным — вот типовая история, каких у любого франча десятки.
Симптом. Клиент, оптовая торговля, самописная надстройка над УТ. Жалоба: «в конце месяца при массовом перепроведении база висит по несколько часов и валится по тайм-ауту, склад не может отгружать». Проведение одной реализации на 300+ строк — 3–4 минуты. На пике — коллапс.
Диагностика (тот самый айсберг). Неделя чужого легаси без документации, замер производительности, технологический журнал. И вот он, виновник — в модуле проведения контроль остатков сделан запросом в цикле: на каждую строку документа отдельный запрос к виртуальной таблице остатков. 300 строк × сотни документов на закрытии — десятки тысяч обращений к регистру.
Было:
Для Каждого СтрокаТовары Из Товары Цикл
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиТоваров.КоличествоОстаток КАК Остаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&МоментВремени,
| Номенклатура = &Номенклатура
| И Склад = &Склад) КАК ОстаткиТоваров";
Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
Запрос.УстановитьПараметр("Номенклатура", СтрокаТовары.Номенклатура);
Запрос.УстановитьПараметр("Склад", Склад);
Выборка = Запрос.Выполнить().Выбрать();
Остаток = ?(Выборка.Следующий(), Выборка.Остаток, 0);
Если СтрокаТовары.Количество > Остаток Тогда
Отказ = Истина;
Сообщить("Недостаточно товара: " + СтрокаТовары.Номенклатура);
КонецЕсли;
КонецЦикла;
Стало — один запрос на весь документ до цикла, дальше чтение из соответствия:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиТоваров.Номенклатура КАК Номенклатура,
| ОстаткиТоваров.КоличествоОстаток КАК Остаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&МоментВремени,
| Склад = &Склад
| И Номенклатура В (&МассивНоменклатуры)) КАК ОстаткиТоваров";
Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
Запрос.УстановитьПараметр("Склад", Склад);
Запрос.УстановитьПараметр("МассивНоменклатуры", Товары.ВыгрузитьКолонку("Номенклатура"));
ОстаткиПоНоменклатуре = Новый Соответствие;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ОстаткиПоНоменклатуре.Вставить(Выборка.Номенклатура, Выборка.Остаток);
КонецЦикла;
Для Каждого СтрокаТовары Из Товары Цикл
Остаток = ОстаткиПоНоменклатуре[СтрокаТовары.Номенклатура];
Остаток = ?(Остаток = Неопределено, 0, Остаток);
Если СтрокаТовары.Количество > Остаток Тогда
Отказ = Истина;
Сообщить("Недостаточно товара: " + СтрокаТовары.Номенклатура);
КонецЕсли;
КонецЦикла;
Изменённой логики — буквально десяток строк: запрос вынесен из цикла, добавлено соответствие. Ни новой подсистемы, ни рефакторинга половины конфигурации.
Результат. Проведение реализации — с 3–4 минут до долей секунды. Массовое перепроведение на закрытии — с «нескольких часов и падений» до считаных минут. Склад перестал вставать, отгрузки пошли, тайм-ауты исчезли.
А теперь про счёт. В акте это выглядело как «оптимизация проведения реализации» — и да, по объёму правки там «десять строк». Но клиент платил не за строки. Он платил за неделю диагностики чужого кода, за знание, что виноват именно запрос в цикле, а не «слабый сервер» (на который уже собирались потратить бюджет вдвое больше), и за то, что склад в сезон снова отгружает. Вот тот самый крестик мелом: сама метка — ничто, знание, где её поставить, — всё.
А как это же чинил бы не-эксперт
Самое интересное — что было бы, попади эта задача не в те руки. И это не гипотеза: клиент туда уже почти пошёл.
Ход 1. «Виновато железо». Первая и самая частая версия — «база тормозит, значит слабый сервер». Клиенту уже насчитали апгрейд: новый сервер помощнее, лицензии, работы по переносу — порядка 400–600 тыс. руб. Проблема в том, что запрос в цикле не лечится процессором. Купили бы железо вдвое мощнее — получили бы те же зависания, только через полгода, когда объём документов подрастёт. Деньги в трубу, симптом вернулся.
Ход 2. «Переписать механизм». Второй типовой заход — не разбираться, где узкое место, а героически переписать всю подсистему проведения «по-нормальному». Это недели работы, регрессионное тестирование, риск сломать взаиморасчёты и партионный учёт, которые за этот же модуль цепляются. Бюджет — легко за миллион, сроки — месяц-полтора, и всё это на фоне живого продакшена.
Ход 3. «Ускорить любой ценой». Самый опасный. Не-эксперт, чтобы «просто заработало», может отключить контроль остатков в проведении — да, станет быстро. А потом склад уходит в минус, отгружают то, чего нет, и к тайм-аутам добавляется пересортица и разборки с клиентами. Лечили производительность — получили дыру в учёте.
Ход 4. Индексы и бубен. Навесить индексов наугад, покрутить настройки СУБД, посидеть в техжурнале без гипотезы. Дни оплачиваемого времени — и в лучшем случае небольшое улучшение, потому что корень (тысячи лишних запросов) никуда не делся.
А теперь сведём две сметы на одну и ту же проблему:
|
Путь эксперта |
Путь «по симптому» |
|
|
Что делаем |
Диагностика → крестик мелом (10 строк) |
Железо / переписывание / костыли |
|
Срок |
Неделя диагностики + правка |
От месяца, часто с рецидивом |
|
Прямые затраты |
Счёт по ценности |
400–600 тыс. на сервер и/или 1 млн+ на переписывание |
|
Простой склада в сезон |
Закрыт за дни |
Тянется недели → потери в отгрузках |
|
Риск |
Минимальный, точечная правка |
Сломать соседнее / уйти в минус по складу |
|
Итог |
Работает и не вернётся |
Дорого, долго, симптом рецидивирует |
Вот здесь и становится видно, что «миллион за десять строк» — это не переплата, а экономия. Клиент, который считает строки, сравнивает счёт с нулём («да там работы на десять минут!»). А сравнивать надо не с нулём, а с альтернативой — с теми самыми полумиллионом на сервер, месяцем переписывания и неделями стоящего в сезон склада. На этом фоне точный крестик за неделю раскопок — самое дешёвое, что могло случиться с этим клиентом.
Разница между экспертом и не-экспертом здесь даже не в скорости фикса. Она в том, что эксперт сначала находит настоящую причину, а уже потом чинит. Все четыре «неправильных» хода начинаются с того, что причину искать не стали — сразу побежали лечить симптом за большие деньги.
А теперь по своим: когда это всё-таки развод
Проблема в том, что тезис «вы платите за ценность, а не за строки» — идеальное прикрытие для тех, у кого никакой ценности за счётом нет. И вот тут я как франчайзи скажу прямо: наглости в нашей отрасли хватает.
Цена с потолка «потому что клиент не разбирается». Классика. Пришли к богатому заказчику, оценили не задачу, а его платёжеспособность. Тот самый случай, когда меловую метку продают за миллион не потому, что знали куда её ставить, а потому что клиент не знал, что это метка.
Нормо-часы из воздуха. «Задача — 40 нормо-часов». Почему 40, а не 8? А потому. Коэффициент сложности 2.5 — откуда? Из методики, которую никто не видел. Красивая упаковка для «мы посчитали, сколько хотим получить».
Продажа страха. «У вас тут всё на честном слове держится, если не переделать — рухнет вся база». Иногда правда. Часто — способ раздуть смету втрое.
Раздувание объёма. Когда фикс на десять строк оформляют как «комплексную доработку подсистемы взаиморасчётов» на три этапа, потому что так счёт солиднее.
Ноль прозрачности. Клиент в принципе не понимает, за что заплатил. А непонятная цена всегда воспринимается как несправедливая — даже когда она честная.
Водораздел простой: миллион за десять строк — это нормально, если клиент после этого зарабатывает или экономит кратно больше и понимает, за что платит. И это развод, если единственный актив в сделке — незнание клиента.
Разница не в сумме. Разница в том, есть ли за суммой ценность или только асимметрия информации.
Как не быть тем самым франчайзи (и как не быть тем самым клиентом)
Если вы продаёте. Говорите с клиентом на языке результата, а не строк и часов. Не «я дописал процедуру проведения», а «отгрузки снова проводятся, склад не стоит, вы не теряете N в день». Фиксируйте цену и объём до работ, а не после. Показывайте, за что деньги, — не обязательно построчно, но по смыслу. Прозрачная дорогая цена вызывает уважение, непрозрачная дешёвая — подозрение.
И держите планку сами: если за вашим счётом реально нет ценности — не подпирайте его красивыми словами про «экспертизу». Клиенты не дураки, а репутация в нашем узком мире дороже одного жирного акта.
Если вы покупаете. Не считайте строки — считайте эффект. Спросите прямо: «Что я получу и что потеряю, если не делать?» Просите зафиксировать цену заранее. Хотите проверить адекватность — возьмите второе мнение, это нормально. И помните: дёшево почасово на размытой задаче почти всегда выходит дороже, чем честный фикс-прайс на понятный результат. Экономия на экспертизе — самый дорогой вид экономии в 1С.
Вместо вывода
Так сколько же стоят десять строк кода? Правильный ответ: ноль. Или миллион. Зависит от того, что они меняют в жизни клиента и знает ли исполнитель, где ставить крестик.
Плохая новость для клиентов: отличить эксперта от наглеца по счёту невозможно — оба напишут «доработка, 1 000 000 руб.». Хорошая новость: это отлично видно по разговору. Эксперт объясняет ценность и берёт ответственность за результат. Наглец — давит на непонимание и прячется за «нормо-часами».
Вступайте в нашу телеграмм-группу Инфостарт
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.