{"id":14277,"url":"\/distributions\/14277\/click?bit=1&hash=17ce698c744183890278e5e72fb5473eaa8dd0a28fac1d357bd91d8537b18c22","title":"\u041e\u0446\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u0442\u0440\u044b \u0431\u0435\u043d\u0437\u0438\u043d\u0430 \u0438\u043b\u0438 \u0437\u043e\u043b\u043e\u0442\u044b\u0435 \u0443\u043a\u0440\u0430\u0448\u0435\u043d\u0438\u044f","buttonText":"\u041a\u0430\u043a?","imageUuid":"771ad34a-9f50-5b0b-bc84-204d36a20025"}

Зачем мы создали еще один агрегатор удаленных вакансий

Всем привет! На связи опять Кирилл и Варя и у нас всегда «чешется» что-то запустить. За новогодние праздники (нууу, плюс-минус) мы запилили Bergamot, агрегатор remote-вакансий. Да, мы знаем, что сейчас конец мая. По определенным причинам мы откладывали и откладывали запуск (занимались другим).

И вот, пришло его время — хочется, чтобы продукт увидел свет, ну или что-то другое — тоже ок.

Как пришла идея?

Нам показалось, что нет ни одного удобного агрегатора для поиска tech remote-вакансий. Они бесконечно появляются, но у них одни и те же проблемы, о которых расскажу ниже. Разработчики, с которыми мы пообщались, подтвердили этот тезис.

Почему это интересно?

Опять же — видны проблемы, которые можно решить (с поиском, с релевантностью, свежестью вакансий). Делать «тяп-ляп» мы не хотим, поэтому приправили все ML-алгоритмами и прочим весельем.

Определение: агрегатор вакансий - это ресурс, на котором вакансии попадают не напрямую от работодателя, а путем сбора предложений с других сайтов, где эти вакансии уже размещены. Например, HH.ru - это не агрегатор, а джоб-борд, тогда как Indeed - как раз-таки самый яркий представитель агрегаторов (хотя там сейчас уже тоже не все так очевидно).

Проблема №1: Мало вакансий на агрегаторах

Первая проблема заключается в том, что текущие агрегаторы собирают мало вакансий. Возьмем, например, один из самых больших агрегаторов CareerVault и сделаем поиск по навыку Python. В выдаче получаем всего 167 открытых позиций. Уверен, что никто из вас не поверит, что в мире всего 167 открытых удаленных вакансий для Python разработчиков.

Чтобы подтвердить тезис «агрегаторы собирают мало вакансий», я провел небольшой эксперимент. С помощью всемогущего Google искал удаленные вакансии и проверял, есть ли ли она на агрегаторе, например позицию Senior Software Engineer в Zillow. Полчаса поисков и вот: вакансии нет ни на одном агрегаторе.

В целом, причину этого я понимаю. Расскажу об этом далее.

Проблема №2: Гарантия удаленности вакансии

Агрегаторы вакансий поверхностно оценивают «удаленность» вакансии. После детального изучения всех агрегаторов remote-позиций стало ясно, что:

  • либо сайт предлагает действительно удаленные вакансии, но их очень мало;
  • либо сайт предлагает достаточно вакансий, но значительная часть из них на самом деле не удаленные. Под такими вакансиями я имею ввиду «2 days a week on remote», «partly remote», «remote until the situation gets better», «remote during Covid-19», etc. Удаленные ли это позиции? Нет.

Почему это происходит? Расскажу также чуть ниже.

Проблема №3: Актуальность вакансии

Вообще эту проблему можно разделить на две части:

  • Вакансия уже неактуальна, то есть она недоступна для отклика. При этом позиция может быть опубликована в агрегаторе, но переходим по ссылке — вакансия уже закрыта.
  • Вакансии забирают поздно. Часто бывает такой кейс: заходишь на агрегатор, видишь свежую вакансию. Переходишь по ссылке и оказывается, что вакансия только сегодня попала в агрегатор, но была опубликована месяц назад.

Проблема №4: Локализация

Иногда компании устанавливают ограничения для граждан некоторых стран. И ни у одного известного мне агрегатора (опять же, не путать с джоб-бордами) фильтра по гражданству нет. Поэтому пользователю приходится внимательно читать текст каждой вакансии, чтобы понять, есть ли вообще смысл откликаться или вакансия точно не для него (нее).

Похожая проблема и с часовыми поясами, но, по моему опыту, она встречается реже. Да и сменить рабочие часы для разработчика часто не проблема (немало людей, к примеру, любят работать по ночам).

Проблема №5: Поиск

Очередная банальная, но от этого не менее важная проблема. Текущий поиск на агрегаторах можно сравнить разве что с поиском на классических работных сайтах в начале 2000-х:

  • Поиск только по названию вакансии. Хотите посмотреть вакансии, где нужен React? Вам выпадут только позиции, в которых React есть в названии. И их будет очень мало, ибо в 90%+ Frontend вакансий стек пишется не в названии, а в описании. Пример: Сareervault.
  • Поиск только по одному навыку. Хотите посмотреть Full Stack вакансии с Ruby и Angular? Не получится, ибо такого механизма у большинства агрегаторов просто нет.
  • Релевантность выдачи. Какие вакансии вы ожидаете увидеть при поиске по навыку Vue? Думаю, что вакансии, связанные с Frontend-ом. При этом часто выпадают QA роли или вакансии на Backend-е, где просто в тексте был упомянут навык Vue (при этом очевидно он не в приоритете).

Всё это дурацкие проблемы, которые можно попробовать решить.

Сегодня мы запустились на ProductHunt, и, если у вас есть желание нас поддержать, найдите Bergamot в списке и — вы знаете, что нужно сделать.

Решение проблемы №1 (количество)

Перед тем, как описывать решение, поясню, в чем я вижу причину того, что агрегаторы собирают относительно мало вакансий. Большинство из них агрегируют вакансии только с удаленных джоб-бордов, где компании платят за размещение. Не трудно догадаться — на таких сайтах публикуют далеко не все вакансии. Поэтому и агрегация получает неполной.

Чтобы решить эту проблему, я решил собирать вакансии ещё и напрямую с карьерных страничек компаний. Такие страницы есть у почти всех компании, которые пользуются современными Applicant Tracking Systems (например Lever или Greenhouse).

В результате нам удалось собрать самое большое количество вакансий в одном месте. Но, конечно же, есть ряд идей, как увеличивать покрытие и дальше. Например, собирать удаленные вакансии с Linkedin.

51 212
именно столько активных удаленных tech вакансий сейчас на нашем ресурсе

Решение проблемы №2 (реальная Vs мнимая удаленка)

Опять же, сначала о причинах текущих проблем. Не могу утверждать со 100%-ой вероятностью, но я почти уверен, что при сборе вакансий текущие агрегаторы используют одну из двух стратегий.

Стратегия №1. Забирать вакансии, где в качестве локации стоит слово «remote». С одной стороны, это гарантирует что это удаленная вакансия. С другой, так отсекается множество позиций, где сам факт «удаленности» так или иначе отмечен в тексте.

Стратегия №2. Забирать вакансии, где в тексте есть упоминание слова «remote». Опять таки, так можно кратно увеличить количество удаленных вакансий, но это будет сделано в ущерб качеству. В выборку будут попадать псевдо-удаленные вакансии (с формулировками, например «partly remote»).

Сначала я хотел написать простой алгоритм на регулярных выражениях. Но в процессе я нашел столько кейсов, означающих псевдо-удаленку, что решил пойти по хардкору и написал отдельный ML-классификатор.

По моим оценкам работает алгоритм корректно в 87%+ случаев. Но главное — механизм дообучения модели понятен: со временем этот показатель будет улучшаться.

Решение проблемы №3 (актуальность)

Выше я описывал две части проблемы, поэтому приведу две части решения.

  • Для того, чтобы у нас на ресурсе не было вакансий, которые уже закрыты для отклика, алгоритм проходится по каждой вакансии несколько раз в сутки. Если вакансия закрывается в первоисточнике, то мы просто её не выдаем в поисковой выдаче.
  • С датой публикации все немного сложнее. Если в первоисточнике есть дата публикации, то мы её забираем и публикуем у себя на сайте вакансию именно с этой датой. В том случае, если даты нет, то мы считаем, что вакансия появилась сегодня. Опять же — мы постоянно мониторим активность вакансии, так что проблем с «закрытием» вакансии возникать не должно.

Решение проблемы №4 (гражданство)

Это, наверное, самая сложная проблема, которую мне пришлось решать в ходе работы над проектом. Изначально я также, как и в случае решения проблемы №2 хотел просто написать некий алгоритм, который будет выделять ограничения по гражданству из текста. Но в ходе анализа всё оказалось гораздо сложнее. Помимо очевидных алгоритмизируемых «only for US applicants» было множество других формулировок (например «This specific role is open to remote candidates based in European Union (a must for us»). Быстро стало понятно, что просто алгоритмом это не решить. Да на самом деле, до задачи классификации ML-ем тоже ещё надо было дойти. Но об этом я, пожалуй, расскажу в отдельном материале.

Решение проблемы №5 (поиск)

Я разбил проблему на части:

  • Сделать поиск по всему тексту, а не только по названию, не составило особого труда. Но тут есть ещё один момент, который мы смогли учесть. Например, если делать обычный полнотекстовый поиск по навыку «React», то в выдаче будут как вакансии с React, так и с React Native, в то время как это далеко не одно и то же. Чтобы решить эту и схожие проблемы у нас на Backend'е используется словарь технологий. И поиск по React будет выдавать лишь вакансии с React / React.js / React js, но никак не с React Native.
  • Поиск по нескольким навыкам было сделать очевидно просто. Мы его и сделали.
  • С релевантностью всё гораздо интереснее. Как сделать так, чтобы приоритезировались вакансии, где искомый навык является основным? При этом, как мы знаем, в текстах вакансий любят указывать весь стек компаний и/или навыки, которые будут плюсом. Единственное решение, которое пришло в голову: рассматривать навыки не в изоляции (что по сути делает полнотекстовый поиск), а в комбинации. Например, в вакансии перечислено много технологий, относящихся к Python-стеку, то скорее всего это вакансия Python-разработчика (или, возможно, Data Scientist'a). Чувствую, что это все тоже заслуживает описания в отдельной статье.

Заключение

Все бы хорошо, но есть проблема - уделять развитию проекта на данный момент много времени мы не можем. При это уже есть неплохой трекшн и пачка гипотез на проверку. Так что, если вы хотите позаниматься, прости господи, growth hacking-ом и вам было бы интересно позаниматься с нам данным проектом, то можете писать мне напрямую в Telegram @kirillnikolaev.

0
26 комментариев
Написать комментарий...
Anton Viborniy

Мне кажется эра просто джоб бородов или агрегаторов проходит. Слишком трудно собрать трафик. 

Я пойду программистов искать на стекоферфлоу, а не к вам. И то что у вас куча вакансий это не конкурентное преимущество. 

Основная проблема это то, как вы будете покупать трафик ищущих работу. А это бренд и т д. Короче много денег в маркетинг нужно вбухать

Сайты выглядит красиво. 

Если бы я был инвестором то задал бы вот такие вопрос

- Вы это сделали на коленке, на ноукод инструменте. Другие тоже могу собрать точно также и кокнурировать с вами. Как вы их обноните?

- То, что вы сделали может сделать существующий агрегатор за 1 год с миллионом баксов в кармане?

- Как вы будете привлекать трафик?

Ответить
Развернуть ветку
Ware Wow

Да это проблема любого продукта, услуги.
Придумать и сделать можно что угодно, причем практически всё можно сделать за пару дней или неделю. Но что потом с этим делать?

Ответить
Развернуть ветку
stivstivsti

Фильтровать по гражданству — хорошая идея. Но не получилось найти ни одной вакансии с opencv, хотя на hh есть такие удалённые работы.

Ответить
Развернуть ветку
Sitewell Ad

Совершенно неудобный поиск только по скилам. Ввёл "frontend", уже не понимает. Хотя у вас же отображается полно вакансий со словом "frontend" в заголовке. 

Ответить
Развернуть ветку
Varvara Golubeva

В навыках лучше конкретные технологии вводить — Javascript, etc. Там нет навыка «frontend». А вот в Title можно и Frontend Developer написать :) 

Ответить
Развернуть ветку
Max A. Alexejev

Очевидно тут не только Remote. И непонятно как найти только remote

Ответить
Развернуть ветку
Varvara Golubeva

US only  — значит, вакансия удаленная, но доступна для трудоустройства ТОЛЬКО гражданам USA. Во многих вакансиях есть ограничения по гражданству. 

Ответить
Развернуть ветку
Аргумент Перигелия

Жаль, что гражданство до сих пор так сильно влияет на трудовые отношения. Хочется работать на весь мир и нанимать со всего мира без сложных юридических моментов, без грабительной комиссии сервиса 20%, банков и чертовых налогов. Хочется получать оплату в коинах и платить только за транзакцию внутри сети 🤔 вот была бы некст биг финь! 🧐

Ответить
Развернуть ветку
Max A. Alexejev

Насчет налогов и банков не соглашусь полностью, но то что офферы до сих пор не глобальные и сильно зависят от того где ты живешь - это не дело, на мой лично взгляд. Гражданство влияет по большому счету только на налоги и возможностью заключить контракт как FTE.

Ответить
Развернуть ветку
юзер

Ну елки иголки!

Ответить
Развернуть ветку
Varvara Golubeva

Уже добавили, спасибо, что написали :)

Ответить
Развернуть ветку
Аргумент Перигелия

5️⃣7️⃣2️⃣ вакансии для Rust разрабов, крутяк! 👍😎

Ловите 🆙 на Producthunt!!!

Желаю удачи в развитии проекта 😉

Ответить
Развернуть ветку
Varvara Golubeva

Спасибо! :) Ура!

Ответить
Развернуть ветку
Bob Sinclar

Нету Scala, что удивило, так как есть Haskell, Clojure. И нету стран центральной Азии, но есть Танзания 

Ответить
Развернуть ветку
Andy Tsar

Хорошая идея! Чёт я туплю, но ссылку на бота так и не нашел. Можно попробовать и протестировать уже?

Ответить
Развернуть ветку
Алексис Второй
Ответить
Развернуть ветку
Elena

Поиск по скилам не выдает частично подходящие результаты. Ввела 3 скила, вакансии, в которых 2 совпадают не попадают в результат. Второй момент - что значит релевантность? Почему вакансии с бОльшим количеством отсутствующих в поиске скилов выводятся выше, чем с меньшим? Сразу все не так, как надо))

Ответить
Развернуть ветку
Emily Manvelyan

как круто и удобно написана статья!

Ответить
Развернуть ветку
Alexander Belousov

Сделано хорошо, вакансий действительно много. А продвигаться вам надо конечно через seo, адаптировать сайт к требованиям поисковиков.

Составлять семантическое ядро, создавать посадочные под нужные запросы, так чтобы на странице сразу отображалось 100-200 вакансий, внести некоторые изменения в карточки товаров, получать ссылки.

Ответить
Развернуть ветку

Комментарий удален модератором

Развернуть ветку
Sergey Matveev

Все таки это забавно, когда на UGC-агрегаторах создают вакансии для тех, кто и должен проектировать, реализовывать или продвигать такие же агрегаторы.

Ответить
Развернуть ветку
Максим Лунин

Ради интереса - ввел в поиске UX и все вакансии, что нашел - недельной давности. Где же тут актуальность и свежесть вакансий?

Ответить
Развернуть ветку
Максим Федоров

Это идея больше, а не готовый продукт, который фигачит прям вот сейчас на углях

Ну как я понял

Ответить
Развернуть ветку
Вадим Арданов

Выглядит круто! При случае буду пользоваться, что бы так сказать поддержать отечественного производителя. Успехов :)

Ответить
Развернуть ветку
Профориентация Трудоустройство

!

Ответить
Развернуть ветку
Наталья Игнатова

Гражданство России не предусмотрено или? 

Ответить
Развернуть ветку
Dreamway

Развиваете сейчас продукт? Очень хочется побеседовать с вами))

Ответить
Развернуть ветку

Комментарий удален модератором

Развернуть ветку
23 комментария
Раскрывать всегда