План на 16–23 октября
16 октября: схема базы, документ по стейджу, проверка сорсинга. 20 октября: вопросы в чате и контакты на карточке, выбрана стратегия стейджа. 23 октября: проверка переписки и оценки, человек лежит в своей базе. 26–27 октября: тест стейджа.
Орест, переписка
20 октября. Оценка составляет вопрос, чат его задаёт. Сейчас задаёт не всегда. На прогоне вопрос по Vue встал в оценку и в чат не ушёл. Результат: в таком прогоне вопрос есть в переписке, кандидат его видит.
20 октября. Приходит CV, контакты на карточке. Забираем почту, телефон, GitHub и остальное и сохраняем у кандидата. На карточке это must have. Результат: после резюме эти поля стоят на карточке, их не ищут в тексте чата.
Прогнать 23 октября
Это проверка той же работы, её делает Владимир, не второй проект. Результат: по каждому случаю видно, прошёл он или нет. Уже ловили. Файл со случаями.
Present не считается текущей работой. В профиле Backend Developer, Routely, Oct 2023 – Present. Записали «Oct 2023 – ?, даты неполные», месяцев 0, должность не засчитали. Годы неизвестны, агент спросил кандидата. В резюме написано «3 years of commercial experience».
Навык есть, а источник догадка. FastAPI, Celery, AWS есть и в навыках профиля, и в тексте резюме. В источник записали догадку модели, не цитату. Два раза.
В чате поправил годы, оценка не взяла. В резюме «7+ years». Кандидат написал, что опыта около трёх лет. В причине осталось «7+ years». Вакансия 1000111, разговор 6778.
Резюме пришло, чат этого не понял. Оценка после резюме уже другая, а переписка всё ещё идёт как до резюме.
Python из фразы про API. В резюме и в чате Python не назван. Требование стоит выполненным из-за «Built core API endpoints indicating Python usage».
Этого в файле не было, прогнать так же
Тоже 23 октября, Владимир. Четыре новых случая чиним, если к 20-му вопросы и контакты уже есть. По каждому видно, прошёл или нет.
Спросил то, на что уже ответили. Кандидат в прошлом сообщении назвал годы или навык. Следующий вопрос чата про то же самое.
Два сообщения подряд. Кандидат написал второе, пока бот не ответил на первое. Ответ ушёл только на первое, второе пропало.
Резюме не пришлёт. Кандидат прямо написал, что резюме не будет. Чат либо снова его просит, либо замолкает и не идёт дальше по тому, что уже есть.
Годы в резюме и в профиле разные. В резюме одно число лет, по датам профиля другое. Оценка не показывает, чему она поверила.
Сорсинг
Профиль уже открыт, и модель решает, брать человека или нет. Цитата должна быть из профиля. Модели не говорили, что цитата плохая, и она слала ту же самую. Три раза. Потом код писал ошибку, и человек пропадал. На вакансии 1000116 так выпало 2142. Из них у 1550 цитата не из профиля, у 447 отказ без противоречия, у 122 специализация противоречит сама себе. На карточку они не попали, и отказа им нет. Это не «не подходит». Кто правда не подошёл, тех 21. Поиск тут ни при чём: из 2962 прескрин снял 139, профили открыли у 2821. Дорогой шаг идёт после поиска.
На стейдже уже пофикшено. Следующему вызову пишут, что не так. Если последний ответ всё равно кривой, человеку ставят «мало данных». Его видно, на карточку не ставят, отказ не ставят. 16 октября это проверяет Владимир на тестовой вакансии, не Лёня. Поиск от этой правки не менялся, более точных кандидатов она сама не принесёт.
16 октября. Ресерч своей базы. Сохранять всех, кого нашли, не только тех, кто дошёл до карточки. Таблица candidates уже общая, org_candidates говорит, чья это база. Сейчас туда не пишутся те, кого проверка не добавила. Результат 16 октября: схема, что пишем, чего не пишем, и какой кусок берём до 23 октября.
20 октября. Не открывать, если роль уже не та. Поисковые запросы не трогаем. Если по карточке поиска роль не та, профиль не открываем. Сейчас открываем почти всех, и только потом зовём модель. Результат: да или нет, на одном примере с стейджа.
23 октября. Своя база, из неё открываем второй раз. Человек нам нужен. Меньшую базу собираем из тех, кого уже нашли. Когда он нужен следующей вакансии, открываем его оттуда, а не идём за ним в LinkedIn заново. Результат: поля для «мало данных» согласованы, и на стейдже один такой профиль после прогона лежит в этой базе.
Улучшение работы стейджа
Стейдж тупит. Перед тестом логи чистят руками, иначе он подыхает и джобу не прогнать. С 16 октября это задача Влада. Если его надо переключить, говорим об этом прямо, не задним числом.
Что на машине, это контекст дока. Один сервер. На нём api, worker, postgres, redis, pgbouncer, nginx, interview, и отдельно фронтенд. В конфигурации у api потолок 512 МБ, у worker 768 МБ, у interview 512 МБ. Postgres с буфером 256 МБ. Ротации логов в конфигурации нет. У прода база вынесена, на стейдже postgres в контейнере на этой же машине, и база стейджа это копия прода. Worker один на всё: очередь, переписка, исходящие, опрос LinkedIn, интервью, снимки воронки. Поиск на тысячи профилей пишет туда же.
16 октября. Документ с цифрами с сервера и с предложениями, что делать. Что съело место или память на живом прогоне: логи без лимита, память, или очередь, потому что поиск и чат сидят на одном worker. И оставляем ли на стейдже полную копию прода. В доке варианты, не одна догадка.
20 октября. Выбрана стратегия, как это улучшить. Один вариант из дока, не все сразу.
23 октября. Выбранная опция уже в работе.
26–27 октября. Эту опцию делаем и начинаем тестировать на стейдже. Перед тестом логи руками уже не чистят, если стратегия была про логи. Если стратегия другая, тест показывает, что стейдж на прогоне джобы не подыхает.
Проверка
16 октября он проверяет то, что уже починено. 23 октября он проверяет то, что Орест сдаёт 20-го. Сам ничего не чинит.
16 октября. Сорсинг на тестовой вакансии стейджа. Вакансия тестовая, не боевая. Правка уже на стейдже. Смотрим воронку после прогона. Кривая цитата не выкидывает человека: он остаётся «мало данных», на карточку не попадает, отказ ему не ставят. Кто правда не подошёл, на карточку не попадает. Поисковые запросы те же. Коннект живому человеку с этой вакансии не уходит: стейдж и прод сидят на одном LinkedIn. Результат: цифры прогона и одно слово, правка держится или нет.
23 октября. Переписка. Прогон в тестовой консоли стейджа, без письма живому человеку. К этому дню Орест уже сдал вопросы. Оценка составила вопрос, в чате этот вопрос есть. Случай с Vue не повторяется. Результат: кандидат вопрос видит, либо написано, на каком шаге он снова пропал.
23 октября. Оценка ещё раз. Сначала оценка до резюме. Резюме пришло, на карточке уже она, двух чисел рядом нет. Чат после резюме не остаётся в состоянии «до резюме». Почта, телефон и GitHub из резюме стоят на карточке. И четыре уже пойманных случая: Present не текущая работа, навык записан как догадка модели, годы из чата оценка не взяла, Python выведен из фразы про API. Результат: по каждому прошло или нет. Резюме текстом и чужое имя не трогаем, это уже поправлено.
Что эти две даты закрывают. 16 октября закрывает проверку после открытия профиля, на тестовой вакансии. 23 октября закрывает оценку, вопросы в чат и контакты, в тестовой консоли. Боевой LinkedIn и путь до приглашения на интервью сюда не входят. Их можно прогонять, когда стейдж переживает джобу. Это тест Влада 26–27 октября.
Новый визуал
Вакансия, кандидат и новая оценка. Результат недели: экраны в продукте можно положить рядом с концептом ниже и увидеть, где они уже совпали.