Очевидное - невероятное
Застраховал квартиру в компании, работающей под брендом известного прогрессивного банка. Все по-современному онлайн, быстро и удобно, не нужно пересылать свои персональные данные каким-то неизвестным агентам. А потом в договоре, пришедшем на электронную почту, обнаружился неправильный адрес. И ни какая-то там уточняющая литера, а прямо неправильный номер дома (вместо 21, почему-то 80). Ну а дальше началось совсем интересное...
Обратился в техподдержку. Извинились, сказали, что ошибку исправили, но на e-mail опять прислали документ с 80-тым домом. Долго думали, исправили еще раз, прикрепили файл к чату, там адрес нормализовался, а на почту с завидной стабильностью опять приходит ерунда. И только с четвертого раза все наладилось. Смешного-то мало. А если вдруг действительно страховой случай, куда и кому вручать эту филькину грамоту с ошибкой в определении предмета страховки.
Мои друзья читатели, близкие к индустрии IT, давайте честно признаемся сами себе. Ведь абсолютно понятно, что произошло и в воображении сразу же рисуется ситуация, как так получилось. У меня нарисовалось такое совещание (прошу прощения за лонгрид):
Менеджер - Эффективный менеджер среднего звена (заказчик доработки). Почему-то свои хотелки называет требованием бизнеса.
Аналитик - опытный универсальный бизнес-аналитик, не являющийся специалистом в технических вопросах.
Координатор - Мотивированный исполнительный сотрудник, которого иногда назначают менеджером проекта. Гордо считает себя руководителем.
Гуру - Разработчик уровня сеньор, занимающийся парадигмами, методиками, концепциями, тенденциями и собой.
Программист - Разработчик уровня мидл, который собственно работает. Из-за нехватки опыта иногда позволяет себе мыслить инако.
Тестировщик - Грамотный специалист по тестированию. Компьютерные игры на рабочем месте называет тестами среды.
Руководитель - Мудрый руководитель разработки, глубоко разбирающийся в корпоративных ценностях, делает все возможное для развития компании.
Руководитель: Начнем наше совещание, слово заказчику, говори, чего удумал, зачем опять отрываешь нас от работы.
В зале смех, обстановка разряжена, у всех хорошее настроение.
Менеджер: Анализируя инциденты техподдержки мы заметили, что не смотря на отличный механизм определения и автоподстановки адреса, способный самообучаться, люди упорно вводят данные вручную и делают ошибки. Для исправления ситуации бизнес принял решение при формировании страхового договора исправлять адрес автоматически "на лету", используя имеющийся механизм. Это приведет к огромной экономии, сможем уволить нескольких сотрудников техподдержки.
Гуру: Согласен, заодно лучше сделать полный рефакторинг всего модуля с переходом на парадигму функционального программирования. А еще на этом простом кейсе можно попробовать новый анализатор кода, который будет в количественных метриках оценивать эффективность разработчиков.
Координатор: Ну вот и ладненько, давайте установим сроки.
Программист: Позвольте, но ведь пользователи вводят адрес вручную когда автомат ошибся, иначе зачем. И если мы после этого будем подменять, то снова будет ошибка.
Руководитель: Ну не будем обобщать, пользователи приносят нам деньги. А Что скажет по этой теме аналитик...
Аналитик: А что я? Бизнес-требования просты и понятны, интерфейс не меняется, значит, не нужно даже ТЗ. Я уже создала задачу в бэклоге, скопировала в нее требования. Ответственным очевидно будет присутствующий здесь программист, иначе бы не присутствовал, видите, я умею анализировать. Соглашусь с координатором, осталось только обсудить и определить сроки.
Программист: Но я читал в корпоративном чате, что ошибки автоматического определения адреса есть, их немало, что будем делать, если наша автоподмена сделает ошибку и у пользователя будет некорректный документ?
Аналитик: Да проще простого, исправьте ошибку, да и все. Не понимаю, чего тут обсуждать. Но только надо исправить ее автоматически, помните, что мы хотим разгрузить техподдержку.
Программист: Вы предлагаете мне написать автомат, который исправляет ошибки другого автомата, который исправляет ошибки?
Аналитик: Да, конечно. А что? Я вас не понимаю. Если ошибка есть, ее нужно исправить. В такой околобанковской компании, как наша, ошибок не должно быть в принципе. В чем проблема?
Программист: Но ведь сам механизм разрабатывала другая команда, он работает давно, там до сих пор есть ошибки, им не удалось их исправить. Логично предположить, что и нам не удастся. А вообще все зависит от задачи. Если не получается ее формализовать, если нет четких исчерпывающих правил, то точный алгоритм невозможен. Видимо система адресов кишит исключениями, которые просто нереально учесть в полном объеме, отсюда и ошибки. Невозможно автоматизировать хаос.
Аналитик: А мне в парикмахерскую.
Руководитель: Коллеги, прошу вас, сейчас же рабочее время.
Гуру: Я работаю по ночам, непрерывно думаю о новой архитектуре масштабируемого хранилища данных с гибкой моделью NoSQL и проблемах бесшовной миграции на нее.
В зале гнетущая тишина, настроение у всех испортилось.
Координатор: Ну давайте же уже установим сроки.
Аналитик: (Обращаясь к программисту и миролюбиво переходя на "ты") Ну хорошо, а что ты можешь предложить? Критикуешь - предлагай.
Программист: Страховка объекта недвижимости, очевидно серьезная и недешевая задача. Люди старательно заполняют данные, несколько раз перепроверяют, а значит, адрес скорее всего правильный, в любом случае, именно они несут за это ответственность.
Аналитик: Ну вот, молодец. Можешь же когда захочешь, давайте так и сделаем.
Координатор: Какой писать срок?
Программист: Что сделаем? Я как раз говорю, что делать ничего не нужно, какой адрес люди ввели, такой и выводить при формировании PDF. Сейчас так и работает.
Менеджер: Так не пойдет, это же требование бизнеса, мне за это новшество уже обещали пре... В общем наш банк должен быть в тренде новых технологий и искусственного интеллекта, может ЧатGBT нам поможет?
Аналитик: Кстати да, чуть не запутал, тебе лишь бы ничего не менять. А предложение менеджера считаю отличным, может действительно ЧатGBT применим?
Координатор: Это будет отдельная задача или подзадача текущей? Какие приоритеты? И давайте уже все-таки к срокам...
Программист: Подождите, наша команда занимается всего лишь формированием файла договора и отправкой его на почту. Автоопределением адреса занимались другие, если и внедрять элементы ИИ, то в их проекте, при этом менеджер в своем выступлении сказал, что у них уже реализовано самообучение.
Координатор: Мне нужно назначить совместную встречу представителей двух команд?
Руководитель: Тогда непонятно что будет с финансированием. Нет уж, все что решим делать, будем делать только сами. (Обращаясь к менеджеру) Скажите, а нельзя ли запросить дополнительное финансирование в связи с возможным применением искусственного интеллекта?
Менеджер: Нет, у нас передовой банк и любая доработка подразумевает, что ИИ так или иначе используется.
Руководитель: Ну ладно. А что это тестировщик в молчанку играет, может не все так плохо. Вы же тестировали сам механизм. Какие результаты?
Тестировщик: Мы все покрыли юнит-тестами, все работает.
Руководитель: Ну вот, а то сомневаются тут некоторые...
Программист: Что значит, все работает?
Тестировщик: Все работает, значит, ничего не падает.
Программист: Но данные то получаются неправильные.
Тестировщик: Правильно-неправильно в контексте текстовой информации - это оценочное суждение. Точными или ошибочными могут быть только цифры.
Программист: А вы делали массовый тест, например проверку всех адресов какого-нибудь района Москвы или Питера?
Тестировщик: Да делали, получили огромную таблицу, визуально все хорошо, отдали разработчикам, они проверили список своим механизмом, говорят - ошибок не выявлено.
Программист: Они проверили результаты проверки своего механизма своим механизмом?
Тестировщик: Да, а по другому как? Наш банк передовой, не может позволить себе, чтобы данные сверяли люди.
Руководитель: Так все. Мне этот цирк надоел. (Обращаясь к программисту) Делаешь ты. Доработка очень простая: соединиться с API механизма проверки, передать туда адрес хранящийся в базе данных и полученный результат вставить в сформированный договор. Делать это пол часа. Со всеми тестами, ладно день. С огромным запасом на все непредвиденное плюс внедрение - неделя.
Координатор: Срок записала. На следующий день после срока кидаю всем встречу в календарь. Наконец-то.
Руководитель: (Обращаясь к Гуру) За тобой код-ревью.
Гуру: Я сторонник применения автоматических анализаторов кода и имплементации на продуктовом контуре с помощью DevOps скриптов, а если хотите по старинке код-ревью, поручите это какому-нибудь джуну-практиканту, заодно пусть поучится. А мне некогда, у меня много работы. Все, я в бассейн.
Программист: Ну мы хотя бы первое время после внедрения будем совместно с техподдержкой отслеживать инциденты ошибочных адресов?
Аналитик: Ты как с другой планеты, существует универсальный принцип разработки: Сделал - Передал заказчику - Забыл. А если возникнут проблемы, это будет новая задача в бэклоге и на нее будет новое финансирование. Все, я опаздываю в парикмахерскую.
Руководитель: Всем спасибо, хорошего дня.
Так и живем. И только простые обыватели, далекие от информационных технологий, сталкиваясь с ошибками сервисов крупных компаний почему-то уверены, что скоро придет искусственный интеллект и исправит все ошибки. Не догадываются они, что искусственный интеллект давно уже здесь. Только поселился он вовсе не на компьютерах, а прямо в головах некоторых эффективных менеджеров некоторых передовых корпораций.