Ошибки
March 2

Очевидное - невероятное

Застраховал квартиру в компании, работающей под брендом известного прогрессивного банка. Все по-современному онлайн, быстро и удобно, не нужно пересылать свои персональные данные каким-то неизвестным агентам. А потом в договоре, пришедшем на электронную почту, обнаружился неправильный адрес. И ни какая-то там уточняющая литера, а прямо неправильный номер дома (вместо 21, почему-то 80). Ну а дальше началось совсем интересное...

Обратился в техподдержку. Извинились, сказали, что ошибку исправили, но на e-mail опять прислали документ с 80-тым домом. Долго думали, исправили еще раз, прикрепили файл к чату, там адрес нормализовался, а на почту с завидной стабильностью опять приходит ерунда. И только с четвертого раза все наладилось. Смешного-то мало. А если вдруг действительно страховой случай, куда и кому вручать эту филькину грамоту с ошибкой в определении предмета страховки.

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

Действующие лица:

Менеджер - Эффективный менеджер среднего звена (заказчик доработки). Почему-то свои хотелки называет требованием бизнеса.

Аналитик - опытный универсальный бизнес-аналитик, не являющийся специалистом в технических вопросах.

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

Гуру - Разработчик уровня сеньор, занимающийся парадигмами, методиками, концепциями, тенденциями и собой.

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

Тестировщик - Грамотный специалист по тестированию. Компьютерные игры на рабочем месте называет тестами среды.

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

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

В зале смех, обстановка разряжена, у всех хорошее настроение.

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

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

Координатор: Ну вот и ладненько, давайте установим сроки.

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

Гуру: Пользователи - дураки.

Руководитель: Ну не будем обобщать, пользователи приносят нам деньги. А Что скажет по этой теме аналитик...

Аналитик: А что я? Бизнес-требования просты и понятны, интерфейс не меняется, значит, не нужно даже ТЗ. Я уже создала задачу в бэклоге, скопировала в нее требования. Ответственным очевидно будет присутствующий здесь программист, иначе бы не присутствовал, видите, я умею анализировать. Соглашусь с координатором, осталось только обсудить и определить сроки.

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

Аналитик: Да проще простого, исправьте ошибку, да и все. Не понимаю, чего тут обсуждать. Но только надо исправить ее автоматически, помните, что мы хотим разгрузить техподдержку.

Программист: Вы предлагаете мне написать автомат, который исправляет ошибки другого автомата, который исправляет ошибки?

Аналитик: Да, конечно. А что? Я вас не понимаю. Если ошибка есть, ее нужно исправить. В такой околобанковской компании, как наша, ошибок не должно быть в принципе. В чем проблема?

Программист: Но ведь сам механизм разрабатывала другая команда, он работает давно, там до сих пор есть ошибки, им не удалось их исправить. Логично предположить, что и нам не удастся. А вообще все зависит от задачи. Если не получается ее формализовать, если нет четких исчерпывающих правил, то точный алгоритм невозможен. Видимо система адресов кишит исключениями, которые просто нереально учесть в полном объеме, отсюда и ошибки. Невозможно автоматизировать хаос.

Гуру: Мне пора в бассейн.

Аналитик: А мне в парикмахерскую.

Руководитель: Коллеги, прошу вас, сейчас же рабочее время.

Гуру: Я работаю по ночам, непрерывно думаю о новой архитектуре масштабируемого хранилища данных с гибкой моделью NoSQL и проблемах бесшовной миграции на нее.

В зале гнетущая тишина, настроение у всех испортилось.

Координатор: Ну давайте же уже установим сроки.

Аналитик: Ну хорошо, а что ты можешь предложить? Критикуешь - предлагай.

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

Аналитик: Ну вот, молодец. Можешь же когда захочешь, давайте так и сделаем.

Координатор: Какой писать срок?

Программист: Что сделаем? Я как раз говорю, что делать ничего не нужно, какой адрес люди ввели, такой и выводить при формировании PDF. Сейчас так и работает.

Менеджер: Так не пойдет, это же требование бизнеса, мне за это новшество уже обещали пре... В общем наш банк должен быть в тренде новых технологий и искусственного интеллекта, может ЧатGBT нам поможет?

Аналитик: Кстати да, чуть не запутал, тебе лишь бы ничего не менять. А предложение менеджера считаю отличным, может действительно ЧатGBT применим?

Координатор: Это будет отдельная задача или подзадача текущей? Какие приоритеты? И давайте уже все-таки к срокам...

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

Координатор: Мне нужно назначить совместную встречу представителей двух команд?

Руководитель: Тогда непонятно что будет с финансированием. Нет уж, все что решим делать, будем делать только сами. (Обращаясь к менеджеру) Скажите, а нельзя ли запросить дополнительное финансирование в связи с возможным применением искусственного интеллекта?

Менеджер: Нет, у нас передовой банк и любая доработка подразумевает, что ИИ так или иначе используется.

Руководитель: Ну ладно. А что это тестировщик в молчанку играет, может не все так плохо. Вы же тестировали сам механизм. Какие результаты?

Тестировщик: Мы все покрыли юнит-тестами, все работает.

Руководитель: Ну вот, а то сомневаются тут некоторые...

Программист: Что значит, все работает?

Тестировщик: Все работает, значит, ничего не падает.

Программист: Но данные то получаются неправильные.

Тестировщик: Правильно-неправильно в контексте текстовой информации - это оценочное суждение. Точными или ошибочными могут быть только цифры.

Программист: А вы делали массовый тест, например проверку всех адресов какого-нибудь района Москвы или Питера?

Тестировщик: Да делали, получили огромную таблицу, визуально все хорошо, отдали разработчикам, они проверили список своим механизмом, говорят - ошибок не выявлено.

Программист: Они проверили результаты проверки своего механизма своим механизмом?

Тестировщик: Да, а по другому как? Наш банк передовой, не может позволить себе, чтобы данные сверяли люди.

Руководитель: Так все. Мне этот цирк надоел. (Обращаясь к программисту) Делаешь ты. Доработка очень простая: соединиться с API механизма проверки, передать туда адрес хранящийся в базе данных и полученный результат вставить в сформированный договор. Делать это пол часа. Со всеми тестами, ладно день. С огромным запасом на все непредвиденное плюс внедрение - неделя.

Координатор: Срок записала. На следующий день после срока кидаю всем встречу в календарь. Наконец-то.

Руководитель: (Обращаясь к Гуру) За тобой код-ревью.

Гуру: Я сторонник применения автоматических анализаторов кода и имплементации на продуктовом контуре с помощью DevOps скриптов, а если хотите по старинке код-ревью, поручите это какому-нибудь джуну-практиканту, заодно пусть поучится. А мне некогда, у меня много работы. Все, я в бассейн.

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

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

Руководитель: Всем спасибо, хорошего дня.

Занавес.

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

←257 | заметка 258 | 259→