Как Москва превратилась в дагестанское село: детективное расследование QA-инженера Авито
Привет! Меня зовут Алёна Луцик, я QA-инженер в Авито. В 2018 году вскоре после релиза новой фичи я с командой заметила нечто странное: жители маленького дагестанского села за неделю создали на Авито 45 000 новых резюме. Мы в панике начали искать проблему — и нашли её посреди пустого поля в Иране. Вот эта история.
Мы придумали фичу, которая упрощает отклик на вакансию и пополняет нашу базу резюме
На Авито есть категория «Работа», в которой работодатели размещают вакансии, а соискатели — резюме.
В 2018 году откликаться на вакансии можно было без активного резюме. Многие так и делали, потому что заполнять его долго — надо писать про предыдущий опыт, образование, знание языков и другие свои сильные стороны.
Это необязательные поля, но их стоит заполнить, чтобы резюме привлекло больше внимания. На это нужно время
Чтобы база резюме на Авито пополнялась быстрее, а соискателям было проще создавать анкеты, продакты придумали новую фичу — «Лёгкое резюме». Суть такая: если человек нажал кнопку «откликнуться» в карточке вакансии, перед ним сразу откроется окошко с созданием резюме, причём заполнить его можно быстро.
В «Лёгком резюме» были только основные поля, а город и название для анкеты мы подтягивали из карточки вакансии. Например, если человек откликается на предложение работать водителем в столице, Авито создавал ему резюме на Москву с названием «Водитель». Когда человек нажимал «разместить», он автоматически возвращался в карточку вакансии и мог продолжить откликаться, а резюме создавалось в фоновом режиме:
Так соискатель быстро получал базовое резюме, которое могли найти другие работодатели, а Авито — пополнял базу. Все в выигрыше.
Идее дали зелёный свет, и она попала к нам к квартальные цели.
Решили выкатить фичу на всех платформах до конца квартала и особенно спешили с Android
Чтобы выкатить «Лёгкое резюме», нужно было дополнить бэкенд и настроить его интеграции с тремя клиентами — нативными приложениями под iOS и Android, а ещё с мобильной версией сайта.
Бэкенд, iOS и версию для мобильных браузеров закончили штатно, а Android занял больше времени, чем ожидали. Надо было спешить: по релизной политике Авито обновления выкатываются раз в две недели, и если бы мы не успели быстро закончить, не попали бы в последний релиз квартала.
Но мы успели и были довольны собой — квартальные цели были закрыты.
Через неделю заметили, что большинство новых резюме созданы в маленьком дагестанском селе
Метрики росли, а мы радовались, но длилось это недолго. Примерно через неделю я заметила странность в статистике: большинство пользователей размещали резюме в загадочном городе Магарамкенте. Это село в Дагестане, административный центр одноименного района совсем близко к границе с Азербайджаном.
Место, в котором особенно зашла новая фича
В Магарамкенте жило меньше 7 000 человек, но уже появилось 45 000 «Лёгких резюме», причём жалоб в техподдержку не было. Но вряд ли же каждый житель Магарамкента создал себе по шесть–семь резюме для разных вакансий:
📈 6 761 — Численность населения села Магарамкент, 2018 год
❗ 45 000 — Количество активных резюме на Авито в селе Магарамкент
🤔 0 — Количество обращений в техподдержку по поводу «Лёгких резюме»
Выяснилось, что проблема в интеграции между бэком и Android и ещё в нескольких счастливых случайностях
Я судорожно начинаю всё перепроверять, грешу на бекэнд, мучаю Postman. И вот к концу дня я нахожу причину популярности дагестанского села — вышло настоящее расследование. А дело было вот в чём:
Находка 1. Android-клиент меняет между собой значения широты и долготы. Мы делали эту платформу последней, спешили и пропустили проблему. Оказалось, что при отправке запроса бэку она меняет широту и долготу местами. Поэтому, когда пользователи Android-приложения создают «Лёгкое резюме» в Москве с координатами 55 градусов северной широты и 37 восточной долготы, на бэке создаётся резюме с зеркальными значениями — 37 градусов широты и 55 долготы.
Схематическое изображение ошибки
Находка 2. Координаты Москвы наоборот — не Магарамкент, а поле в Иране. Я заподозрила, что результат в 45 000 резюме за неделю больше подходит крупному городу, чем дагестанскому селу. Проверила, где на карте находится точка с координатами как у Москвы, но наоборот, и выяснила, что это место посреди поля в Иране.
Находка 3. Авито не работает вне РФ, и graceful degradation нашей логики определения геолокации отработала так, что поле в Иране превращалось в Магарамкент. В Авито Работе нельзя разместить резюме не в России. Но пользователь может попытаться — тогда алгоритмы вместо того, чтобы показать ошибку, возьмут ближайшую точку к российской границе и создадут объявление там. Вероятно, эту деградацию внедрили для устранения ошибок и неточностей пользователей, но с нами она сыграла злую шутку. Так резюме из Москвы, которые по ошибке создавались в Иране, получали гео-отметку «Магарамкент».
Раскатили фикс на следующий день и со временем вернули резюме домой
Дело было раскрыто уже поздно вечером. К счастью, мне удалось найти Android-разработчика, который ещё был в офисе — напомню, что дело было в доковидном 2018-м. Мы экстренно сделали фикс и со спокойной душой ушли домой. Исправление ошибки раскатилось на всех пользователей на следующий день.
Часть «Лёгких резюме» из Магарамкента мы сразу вернули обратно в Москву. По некоторым было трудно понять, из города ли они или из Подмосковья. За такими мы пристально следили до тех пор, пока они были активны, но так и не получили обращений в техподдержку. По поводу «Лёгких резюме» вообще не было жалоб: видимо, соискатели не обращали внимания, что анкеты создавались не в их городах.
Чему учит эта история
Это расследование добавило мне седых волос, но стало полезным профессиональным уроком. Вот мои главные выводы:
- Интеграцию надо тщательно проверять с каждым клиентом. Если бы мы так не спешили, то заметили бы проблему на Android.
- В автотестах надо завязываться не только на факт создания данных, но и на их корректность. Сейчас у нас другая структура тестов и она исключает такую проблему.
- Надо хорошо знать алгоритмы graceful degradation логики, которые мы используем в своих фичах. Если бы мы заранее изучили, как объявлениям за пределами РФ присваивается география, то, возможно, заметили бы риски.
Теперь при каждом тестировании интеграции с клиентом я ловлю «въетнамские флешбеки» про Магарамкент, но на ошибках мы учимся и растём, о них важно говорить и рассказывать. А я всё ещё лелею мысль о том, чтобы приехать в дагестанское село и поставить там памятник одной из самых нелепых ошибок в моей профессии.