Как Москва превратилась в дагестанское село: детективное расследование QA-инженера Авито

Привет! Меня зовут Алёна Луцик, я QA-инженер в Авито. В 2018 году вскоре после релиза новой фичи я с командой заметила нечто странное: жители маленького дагестанского села за неделю создали на Авито 45 000 новых резюме. Мы в панике начали искать проблему — и нашли её посреди пустого поля в Иране. Вот эта история.

Как Москва превратилась в дагестанское село: детективное расследование QA-инженера Авито

Мы придумали фичу, которая упрощает отклик на вакансию и пополняет нашу базу резюме

На Авито есть категория «Работа», в которой работодатели размещают вакансии, а соискатели — резюме.

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

<p>Это необязательные поля, но их стоит заполнить, чтобы резюме привлекло больше внимания. На это нужно время</p>

Это необязательные поля, но их стоит заполнить, чтобы резюме привлекло больше внимания. На это нужно время

Чтобы база резюме на Авито пополнялась быстрее, а соискателям было проще создавать анкеты, продакты придумали новую фичу — «Лёгкое резюме». Суть такая: если человек нажал кнопку «откликнуться» в карточке вакансии, перед ним сразу откроется окошко с созданием резюме, причём заполнить его можно быстро.

В «Лёгком резюме» были только основные поля, а город и название для анкеты мы подтягивали из карточки вакансии. Например, если человек откликается на предложение работать водителем в столице, Авито создавал ему резюме на Москву с названием «Водитель». Когда человек нажимал «разместить», он автоматически возвращался в карточку вакансии и мог продолжить откликаться, а резюме создавалось в фоновом режиме:

Фича «Лёгкое резюме» в действии: если нажать «откликнуться» в карточке вакансии, Авито автоматически создаст резюме. Название и гео берутся из вакансии, но их можно поменять
Фича «Лёгкое резюме» в действии: если нажать «откликнуться» в карточке вакансии, Авито автоматически создаст резюме. Название и гео берутся из вакансии, но их можно поменять

Так соискатель быстро получал базовое резюме, которое могли найти другие работодатели, а Авито — пополнял базу. Все в выигрыше.

Идее дали зелёный свет, и она попала к нам к квартальные цели.

Решили выкатить фичу на всех платформах до конца квартала и особенно спешили с Android

Чтобы выкатить «Лёгкое резюме», нужно было дополнить бэкенд и настроить его интеграции с тремя клиентами — нативными приложениями под iOS и Android, а ещё с мобильной версией сайта.

Бэкенд, iOS и версию для мобильных браузеров закончили штатно, а Android занял больше времени, чем ожидали. Надо было спешить: по релизной политике Авито обновления выкатываются раз в две недели, и если бы мы не успели быстро закончить, не попали бы в последний релиз квартала.

Но мы успели и были довольны собой — квартальные цели были закрыты.

Через неделю заметили, что большинство новых резюме созданы в маленьком дагестанском селе

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

<p>Место, в котором особенно зашла новая фича</p>

Место, в котором особенно зашла новая фича

В Магарамкенте жило меньше 7 000 человек, но уже появилось 45 000 «Лёгких резюме», причём жалоб в техподдержку не было. Но вряд ли же каждый житель Магарамкента создал себе по шесть–семь резюме для разных вакансий:

📈 6 761 — Численность населения села Магарамкент, 2018 год

45 000 — Количество активных резюме на Авито в селе Магарамкент

🤔 0 — Количество обращений в техподдержку по поводу «Лёгких резюме»

Выяснилось, что проблема в интеграции между бэком и Android и ещё в нескольких счастливых случайностях

Я судорожно начинаю всё перепроверять, грешу на бекэнд, мучаю Postman. И вот к концу дня я нахожу причину популярности дагестанского села — вышло настоящее расследование. А дело было вот в чём:

Находка 1. Android-клиент меняет между собой значения широты и долготы. Мы делали эту платформу последней, спешили и пропустили проблему. Оказалось, что при отправке запроса бэку она меняет широту и долготу местами. Поэтому, когда пользователи Android-приложения создают «Лёгкое резюме» в Москве с координатами 55 градусов северной широты и 37 восточной долготы, на бэке создаётся резюме с зеркальными значениями — 37 градусов широты и 55 долготы.

<p>Схематическое изображение ошибки</p>

Схематическое изображение ошибки

Находка 2. Координаты Москвы наоборот — не Магарамкент, а поле в Иране. Я заподозрила, что результат в 45 000 резюме за неделю больше подходит крупному городу, чем дагестанскому селу. Проверила, где на карте находится точка с координатами как у Москвы, но наоборот, и выяснила, что это место посреди поля в Иране.

Ещё не Магарамкент, но уже ближе
Ещё не Магарамкент, но уже ближе

Находка 3. Авито не работает вне РФ, и graceful degradation нашей логики определения геолокации отработала так, что поле в Иране превращалось в Магарамкент. В Авито Работе нельзя разместить резюме не в России. Но пользователь может попытаться — тогда алгоритмы вместо того, чтобы показать ошибку, возьмут ближайшую точку к российской границе и создадут объявление там. Вероятно, эту деградацию внедрили для устранения ошибок и неточностей пользователей, но с нами она сыграла злую шутку. Так резюме из Москвы, которые по ошибке создавались в Иране, получали гео-отметку «Магарамкент».

Все задействованные места на карте
Все задействованные места на карте

Раскатили фикс на следующий день и со временем вернули резюме домой

Дело было раскрыто уже поздно вечером. К счастью, мне удалось найти Android-разработчика, который ещё был в офисе — напомню, что дело было в доковидном 2018-м. Мы экстренно сделали фикс и со спокойной душой ушли домой. Исправление ошибки раскатилось на всех пользователей на следующий день.

Часть «Лёгких резюме» из Магарамкента мы сразу вернули обратно в Москву. По некоторым было трудно понять, из города ли они или из Подмосковья. За такими мы пристально следили до тех пор, пока они были активны, но так и не получили обращений в техподдержку. По поводу «Лёгких резюме» вообще не было жалоб: видимо, соискатели не обращали внимания, что анкеты создавались не в их городах.

Фото из города Магарамкент. В апреле 2023-го там всего примерно 900 активных резюме
Фото из города Магарамкент. В апреле 2023-го там всего примерно 900 активных резюме

Чему учит эта история

Это расследование добавило мне седых волос, но стало полезным профессиональным уроком. Вот мои главные выводы:

  • Интеграцию надо тщательно проверять с каждым клиентом. Если бы мы так не спешили, то заметили бы проблему на Android.
  • В автотестах надо завязываться не только на факт создания данных, но и на их корректность. Сейчас у нас другая структура тестов и она исключает такую проблему.
  • Надо хорошо знать алгоритмы graceful degradation логики, которые мы используем в своих фичах. Если бы мы заранее изучили, как объявлениям за пределами РФ присваивается география, то, возможно, заметили бы риски.

Теперь при каждом тестировании интеграции с клиентом я ловлю «въетнамские флешбеки» про Магарамкент, но на ошибках мы учимся и растём, о них важно говорить и рассказывать. А я всё ещё лелею мысль о том, чтобы приехать в дагестанское село и поставить там памятник одной из самых нелепых ошибок в моей профессии.

2525