Всем привет! Меня зовут Иван, я больше десяти лет работаю в IT, и за это время у меня появился любимый жанр историй.
Это истории о том, как большая успешная компания годами вручную выполняет работу, которую можно автоматизировать. А сотрудники настолько к этому привыкли, что уже не считают это проблемой: «У нас же так принято».
Недавно я разбирал кейс, который в этот жанр вписывается идеально.
Hays — одно из крупнейших рекрутинговых агентств в мире: десятки офисов и тысячи закрытых вакансий.
И вот в этой огромной машине более двухсот рекрутёров тратили до двух часов на оформление одного резюме. Не на поиск кандидата и не на интервью, а на банальный копипаст из одного документа в другой.
Кейс публичный, команда разработки его выложила с цифрами, а я поговорил с ребятами, которые это строили, и покопался в деталях. *Спойлер: * два часа превратились в две минуты. А по дороге были грабли с интеграциями, юристы, которые приходили чаще тестировщиков, и неожиданная мутация «тулзы для форматирования» в мини-ERP. Разбираю по косточкам.
С чего всё началось
Как выглядит день рекрутёра в крупном агентстве. Кандидаты присылают резюме кто во что горазд: PDF на трёх страницах, DOC с фотографией на пол-листа, ссылка на LinkedIn, профиль на HeadHunter. А клиент — компания, которая платит агентству за подбор, — хочет получить кандидатов в едином фирменном формате: одинаковая структура, брендинг агентства, иногда без имени и контактов, чтобы клиент не ушёл к кандидату напрямую.
И вот рекрутёр открывает Word. Копирует опыт работы. Переформатирует даты. Выравнивает таблицу. Вычищает контакты. Подгоняет под шаблон. Два часа — и одно резюме готово.
Теперь математика. 200+ рекрутёров. Даже если каждый оформляет всего два резюме в день — это восемьсот человеко-часов ежедневно. Сто рабочих дней. На копипаст. Люди, которых наняли разговаривать с кандидатами и закрывать вакансии, половину времени работали живым конвертером форматов.
Самое интересное — никто не бил тревогу. Это классика: боль, растянутая тонким слоем по всей компании, не ощущается как боль. Она ощущается как «работа».
Почему нельзя было просто написать макрос в Word
Первый вопрос, который задаёт любой инженер: а что, шаблона недостаточно? Недостаточно. Вот короткий список наивных решений и почему они не взлетают:
|
Решение |
Почему ломается |
|---|---|
|
Фирменный шаблон Word |
Данные в шаблон всё равно переносит человек. Руками. Те же два часа |
|
Макросы / VBA |
Работают ровно до первого нестандартного резюме. То есть примерно никогда |
|
Отдать форматирование на аутсорс |
Дорого, медленно, и персональные данные кандидатов уезжают третьей стороне |
Корень проблемы в том, что резюме — это неструктурированные данные в худшем их проявлении. Каждое резюме — уникальная снежинка. Один и тот же период работы люди пишут как «март 2019 — н.в.», «03.2019 — now», «Mar 2019 — Present» и ещё сорока способами:
«март 2019 — настоящее время»«03/2019 – now»«Mar '19 — Present»«с марта 2019»«2019 -» (и понимай как хочешь)
А ещё есть резюме, свёрстанные целиком таблицами в Word. Резюме, где заголовки лежат в текстовых полях. Резюме на двух языках вперемешку. Это отдельный вид искусства, и любое решение «в лоб» разбивается об него в первую же неделю.
Как это собирали
Команда сделала правильную вещь: не стала сразу строить систему, а начала с прототипа на проверку гипотезы. Можно ли вообще вытащить структуру из этого зоопарка с приемлемым качеством? Оказалось — можно, и только после этого началась настоящая разработка.
Стек по нынешним меркам выглядит винтажно, но для своего времени вполне здраво: Node.js + Express на бэкенде, Passport.js для аутентификации, React на фронте, MongoDB с Mongoose под данными. Документоориентированная база под документоориентированную предметную область — резюме с их произвольной вложенностью в жёсткую реляционную схему запихивать было бы больно.
Проект шёл семью итерациями:
-
Прототип и проверка гипотезы.
-
Интеграции: LinkedIn, HeadHunter, конвертер Word-документов.
-
Загрузка данных из нескольких источников.
-
Хранение и структурирование.
-
Таблицы и сегментация рекрутёров.
-
Защита персональных данных.
-
Привязка к KPI и системе мотивации.
И одна менеджерская деталь, которую я считаю самой поучительной в кейсе: по ходу проекта заказчик и команда ушли с fixed-price на выделенную команду. Потому что оценить в фикспрайс проект, в котором ключевое слово «неструктурированные», невозможно в принципе. Любая цифра в таком контракте — это либо заложенный тройной риск, либо будущий конфликт. Признать это на берегу — зрелость, а не слабость.
Засада с интеграциями
Рекрутёры хотели простого: вставил ссылку на профиль кандидата — получил готовое резюме. Значит, нужны интеграции с LinkedIn и HeadHunter.
И тут первая настоящая засада: официальный доступ к данным одной из площадок стоил как чугунный мост, и лицензирование выглядело так, что проект мог закончиться, не начавшись. Команда покрутила задачу и нашла обходной путь: работать с HTML-разметкой страницы профиля — той самой, которую рекрутёр и так открыл у себя в браузере. Страница переформатируется, из разметки достаётся структура, дальше всё как обычно. Не самое красивое решение на свете, но оно сняло блокер, не нарушая рабочий процесс рекрутёра.
Вторая засада — конвертер Word-файлов. Кто хоть раз парсил чужие DOC-и, сейчас грустно улыбнётся. Объединённые ячейки, невидимые таблицы, форматирование пробелами, кириллица в кодировке, которую не ждал никто. На вычёсывание этих кейсов ушло заметно больше времени, чем на «основную» функциональность. Это, кстати, универсальный закон: в проектах про данные 20% времени уходит на happy path и 80% — на снежинки.
Персональные данные, или почему юристы приходили чаще тестировщиков
Резюме — это концентрат персональных данных: имя, телефон, адрес, вся карьера человека. Когда через систему проходят тысячи таких документов, вопрос «а как мы это храним» перестаёт быть факультативным.
Пришлось выстраивать полноценный контур: защищённое хранение, разграничение доступа, админка с аутентификацией, протоколы работы с ПД. Скучно? Скучно. Необходимо? Абсолютно. Для международного агентства утечка базы кандидатов — это не штраф, это конец репутации.
Отдельная песня — анонимизация. Клиенту агентства часто отдают «слепое» резюме: опыт и навыки есть, а имени и контактов нет. Руками вычищать контакты из каждого документа — снова те же два часа, только в профиль. В системе это стало одной галочкой. Сейчас, к слову, анонимизация резюме — вообще стандартная функция специализированных инструментов, а тогда её собирали как отдельную фичу с нуля.
Побочный эффект: из тулзы — в мини-ERP
А дальше случилось то, что случается почти со всякой удачной внутренней автоматизацией. Когда каждое резюме проходит через одну систему, у тебя внезапно появляются данные о процессе, которых раньше не было ни у кого.
Кто сколько резюме обработал. Какие рекрутёры быстрее. Где узкие места. Команда прикрутила BI-дашборд со статистикой, сегментацию рекрутёров по продуктивности, а потом бизнес попросил привязать всё это к KPI и бонусам. Тулза для форматирования резюме тихо превратилась в мини-ERP отдела рекрутмента.
Тут я обязан сделать оговорку, потому что наступал на эти грабли сам. Как только метрика становится целью, она перестаёт быть хорошей метрикой. Если платить людям за количество оформленных резюме — получишь вал оформленных резюме, а не закрытые вакансии. Судя по тому, что систему не выкинули, а развивали, с балансом метрик там справились. Но если будете повторять — думайте об этом с первого дня, а не когда люди начнут играть в цифры.
Результаты
Цифра, ради которой всё затевалось: обработка одного резюме сократилась с 2 часов до 2 минут. В шестьдесят раз.
Восемьсот человеко-часов в день превратились примерно в тринадцать. Двести человек перестали быть конвертерами форматов и вернулись к работе, за которую им платят, — разговаривать с людьми и закрывать вакансии. А у менеджмента впервые появилась прозрачная картина процесса вместо ощущений.
Что я вынес из этого кейса
Коротко, списком — как я люблю:
-
Автоматизировать нужно самое скучное, а не самое интересное. Самый большой ROI прятался не в хитром алгоритме матчинга кандидатов, а в тупом копипасте, который все считали «просто работой».
-
Неструктурированные данные всегда дороже, чем кажется. Умножайте оценку на три. Потом ещё раз на снежинки в DOC-файлах.
-
Fixed-price и research несовместимы. Если в задаче есть исследовательская часть — честная выделенная команда сэкономит нервы обеим сторонам.
-
Метрика, привязанная к деньгам, меняет поведение людей. Проектируйте систему мотивации одновременно с дашбордом, а не после.
-
Хорошие внутренние тулзы стремятся стать продуктами. Эта история, кстати, так и закончилась: команда позже превратила направление в отдельный публичный продукт FormaCV — то, что Hays строили под себя семью итерациями, теперь доступно любому агентству из коробки.
И последнее наблюдение — про время. Этот проект делали в эпоху до LLM: парсеры писали руками, правила и эвристики вычёсывали месяцами. Сегодня извлечение структуры из резюме — задача, которую языковая модель решает за секунды, и автоматическое форматирование резюме стало то, что раньше называлось проектом, а теперь называется кнопкой. Но вот что забавно: вся инженерная обвязка — хранение персональных данных, интеграции, разграничение доступа, аналитика процесса — никуда не делась. LLM съела парсер, а систему вокруг парсера по-прежнему нужно строить.
Мораль у истории простая. В каждой компании есть свои «два часа на резюме» — рутина, которая живёт так давно, что стала невидимой. Её не найти в бэклоге, на неё никто не жалуется, она просто тихо съедает сотни человеко-часов.
А какая рутина живёт у вас — и сколько она стоит, если честно посчитать? Расскажите в комментариях: подозреваю, самые адские кейсы прячутся в самых успешных компаниях.
ссылка на оригинал статьи https://habr.com/ru/articles/1060196/