Аладдин Биябангерд
ТекстыРазработка ПО

Банковская среда научила меня, насколько важна точность

Автор:Аладдин БиябангердОпубликовано:6 мин чтения

Когда работаешь в банковской сфере, одна вещь становится понятна довольно быстро:

Здесь «примерно правильно» недостаточно.

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

У такой ошибки могут быть реальные последствия.

Самое важное, чему я научился в этой среде, связано не с выбором технологий.

Главный вывод для меня такой:

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

Сравнение подходов «примерно правильно» и «действительно правильно» — риск против ясных правил и доверия.

Точность начинается с правил

Когда в банке появляется новое требование, первый вопрос — не:

«Как это закодировать?»

Сначала нужно понять:

  • Что именно меняет эта операция?
  • Из какого состояния система переходит в какое?
  • Кто имеет право выполнить эту операцию?
  • Что нельзя изменить?
  • Как система должна вести себя в случае ошибки?

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

Сейчас я начинаю с этого же и в проектах за пределами банковской сферы:

Сначала проясняю процесс и его границы. Потом пишу код.

«Работает» — это слишком низкий стандарт

В tutorial или на демо система может работать.

Но в реальной среде одного этого недостаточно.

Например:

  • Что произойдёт, если одна и та же операция придёт дважды?
  • Как система поведёт себя при неполном ответе?
  • Что произойдёт, если старые данные не соответствуют новым правилам?
  • Совпадает ли цифра в отчёте с той, которая была сохранена в операции?

Эти вопросы не замедляют меня.

Наоборот, они помогают избежать гораздо более серьёзных проблем в будущем.

От demo happy path к проверкам для production: повтор запроса, partial failure, старые данные и согласованность отчёта.

Тихая ошибка — самая опасная

Некоторые ошибки сразу заметны.

Экран становится красным, возникает exception, процесс останавливается.

Но гораздо опаснее другая ситуация:

Система не показывает никакой ошибки, но записывает неправильные данные.

Неверный статус.

Неверная сумма.

Неверная связь.

А потом все начинают считать эти данные правильными.

Банковская среда особенно хорошо показывает этот риск.

Но то же самое может произойти с бронированием, платежами, складом или обработкой заказов.

Поэтому я спрашиваю не только:

«Код работает?»

Я также спрашиваю:

«После этой операции информация, которой располагает система, всё ещё соответствует действительности?»

Изменить работающий процесс — это отдельная задача

Написать новую систему — одно дело.

Изменить процесс, которому люди доверяют каждый день, — совсем другое.

В банке это особенно хорошо ощущается.

Изменение должно не только реализовать новое требование.

Оно также не должно нарушить уже существующее корректное поведение системы.

Поэтому перед изменением я смотрю на несколько вещей:

  • Как процесс работает сейчас?
  • На какие другие процессы повлияет это изменение?
  • Что произойдёт с существующими данными?
  • Есть ли возможность отката или rollback?

Это не страх.

Это ответственность.

Четыре шага перед изменением работающей системы: текущий поток, зона влияния, данные и rollback.

Этот навык нужен не только в банке

Иногда банковский опыт воспринимают как что-то очень специфичное.

Для меня же главный навык, который я оттуда вынес, относится ко всей software engineering:

  • Сначала прояснить правило.
  • Учитывать граничные случаи.
  • Особенно внимательно относиться к тихим ошибкам.
  • Осторожно менять работающие процессы.
  • Не говорить «готово», пока не убедился, что результат действительно корректен.

То же самое нужно и в бизнес-приложениях.

Потому что там, где есть клиент, деньги, статусы, история операций и отчётность, «примерно» может оказаться очень дорогим.

Что для меня означает точность?

Точность для меня не означает стремление сделать всё идеально.

Она означает, что:

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

То есть точность — это не только отсутствие багов.

Точность — это возможность доверять системе.

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

В итоге

Банковская среда закрепила во мне одну простую мысль:

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

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

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

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