Orium Studios

Заметка из продакшна

Четыре сметы, которые не сходились, и чему каждая нас научила

В некоторых бизнесах смета не документ о продукте, а сам продукт. Четыре раза за этот год в трёх построенных нами системах она была неверной, и каждый раз арифметика была в порядке.

Автор ·Опубликовано

Коротко

Там, где цену считают из замеров, смета и есть продукт, и ломается она особым образом: арифметика верна, а число неверно. Четыре дефекта из трёх систем, которые мы построили для бизнесов в США, показывают общий узор: выключенная комната всё равно в счёте, итоги округлены порознь, одна комиссия посчитана по двум правилам, условия оплаты есть в ссылке и пропали из PDF.

SHT-02Заметка из продакшна

01

Когда смета и есть продукт

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

02

1. Комната выключена, а в счёте осталась

В WallFlow, нашем собственном продукте для смет монтажников стеновых покрытий, смета состоит из комнат, и комнату можно выключить, не удаляя. Калькулятор фильтровал стены по их собственному флагу и не проверял флаг комнаты, поэтому площадь, панели, рулоны и деньги выключенной комнаты шли в итог. Печатный документ делал хуже: показывал только включённые комнаты, а суммировал все. Каждая строка арифметики была верной. Она отвечала не на тот вопрос, который задал клиент. Исправлено в 24c8fff, 19 августа.

03

2. «Итого», «Оплачено» и «Остаток» не сходились

В системе автоброкера страница покупателя округляла «Итого», «Оплачено» и «Остаток» каждое по отдельности. Каждое число было округлено правильно, а все три вместе на глазах у покупателя машины не сходились. На той же неделе мы насчитали в продукте четырнадцать разных способов напечатать доллар и нашли сумму, которая на одном экране была 612.5, а на соседнем 613. Мы показали расхождение на тестовой сделке, созданной нами же, исправили его в 32ef950 и b9b5a4e и после этого сделку удалили.

04

3. Одна комиссия, два правила

В той же системе панель считала процентную комиссию от валовой суммы, а все остальные экраны от базы за вычетом расходов. Два соседних экрана показывали по одной сделке два разных числа, и оба честно следовали своему правилу. Теперь правило живёт в одном месте, в базе данных, и каждый экран получает готовые доллары вместе со строкой, а не считает их заново (62de441).

05

4. Условия в ссылке, но не в PDF

В системе строителя саун смета существует дважды: ссылкой, которую открывает клиент, и документом, который он скачивает. Условия оплаты были в ссылке и пропали из документа. Один факт, отрисованный дважды и разошедшийся сам с собой (438ad72). Когда закрыли лазейку, через которую это прошло, нашлось ещё пять мест, где деньги печатались плохо, включая итог, отправленный на телефон без центов (17b4ae8).

06

Общий узор

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

07

Что мы теперь делаем иначе

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

08

Проверка, которую можно сделать на своих сметах

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

SHT-04Вопросы

Вопросы, на которые отвечает эта заметка.

N01У готовой CRM та же проблема?
Может быть, только в другом месте. Обычная CRM чаще оставляет расчёт таблице или человеку, который набирает смету, и вторая копия правила живёт у кого-то в голове. Дефект тот же: один факт, два места. Система, построенная под один вид бизнеса, может держать правило в одном месте, потому что знает, какое оно.
N02Откуда известно, что это правда?
Каждый случай записан строкой в публичном журнале сборки на этом сайте, с датой и коммитом исправления, из трёх работающих систем. Цифры и имена самих клиентов в журналы не попадают по правилу, записанному до того, как выбрали первую строку.
N03Какое самое маленькое изменение это предотвращает?
Выберите одно число, за которое платит клиент, найдите все места, где оно считается или печатается, и заставьте их все брать его из одного места. Обычно это меньше работы, чем кажется, и убирает весь класс дефектов, а не только замеченный случай.