Как поиск жилья заставил менеджера вспомнить программирование и уйти из Яндекса

Привет, Хабр! Я разработал помощника по поиску жилья HomeBro, который помог десяткам тысяч людей найти новый дом. Расскажу, с чем я облажался, а с чем — нет.

В 2019ом году я работал продактом в Яндекс.Погоде и мечтал запилить что-то свое. Начал смотреть, какие есть большие рынки и в чем их боль. Перебирая варианты, вспомнил, каким изнуряющим был для меня поиск съемного жилья. 

Странно – футболка сухая и совсем не пахнет! (с)

Странно — футболка сухая и совсем не пахнет! ©

Каждый раз на это уходило в районе 50 часов чистого времени, а ведь у меня даже домашних животных нет. Мне приходилось бесконечно рефрешить сайты объявлений — классные квартиры уходят быстро, а уведомления срабатывали не всегда и не быстро. Каждый раз когда в моем запросе что-то менялось, нужно было по несколько раз вводить настройки поиска на разных сайтах. Я ловил дубли одних и тех же квартир, просматривал тысячи фотографий с убитыми интерьерами.

Но разве нельзя по-другому? Это же тупая рутина, которую можно автоматизировать — оперативно собирать данные и присылать подходящие объявления не куда-то, а в любимый телеграм. Может быть, я не догадался поискать, и это уже давно сделано?  

Стал гуглить. Нашел украинский телеграм-бот Arendom, который не пиарился и не имел большой аудитории, но собирал хорошие отзывы. Также увидел несколько западных чат-ботов в запрещенной синей сети. А в России… Нет, я нашел какие-то нерабочие остатки старых и очень примитивных попыток в этом направлении. Но ничего, что решало бы проблему. А ведь на дворе уже нейросети в полный рост, можно ну очень удобно все сделать. 

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

Название придумал быстро — HomeBro. Оставалось сделать. Как? Вспомнить, что программирование это кайф.

Недоразработчик со стажем

Я никогда не работал программистом. Да, я кодил на pascal в школе и C# в универе. Но серьезного ничего не делал, пока в 2015ом мы с друзьями не решили сделать платформу для онлайн-видеоконкурсов. Я на тот момент был проджект-менеджером, но решил разобраться в бекенде и управлении облачной инфраструктурой. Изучил Python и Djangо. Жесткость последнего неплохо структурировала архитектуру приложения в отсутствие у меня большого опыта. 

Стартап не полетел, но мы немного подзаработали и получили тонну опыта. Ну, а на сдачу я стал сертифицированным AWS Solutions Architect. 

212e8879ba794fa7553cefd09fb6c495.png

Сдуваем пыль со змеи

После первой попытки в стартапах я пошел в Яндекс качать свои продуктовые навыки. К моменту появления идеи HomeBro я уже 3 года почти не кодил, Pornhub заметно выигрывал у Github. 

Тем не менее, я с разбега ворвался в разработку. Python решал все мои потребности — и в части бота, и в части парсинга. Да и если вкручивать в проект ML, тоже далеко ходить не надо. База данных — старина Postgres. У плохой вещи слона на лого не будет. К тому же было понятно, что придется много работать с геоданными (координаты домов и других объектов, области поиска и тд), а у Postgres для этих вещей есть замечательный модуль PostGIS.

Также показалось классным использовать AWS Lambda — сервис, который позволяет выполнить код по триггеру, и платить только за время исполнения кода. Бот работает в режиме вопрос-ответ, а в остальное время спит. Зачем серверу простаивать? Парсинг объявлений тоже запускается периодически. Да и мне в целом мне нравился serverless подход, не нужно поддерживать серваки. Из минусов — с Lambda не дружили популярные библиотеки для работы с Telegram. Ну да ладно, не так страшно завелосипедить отправку сообщений. 

Для вызова Lambda-функций подключил такой же бессерверный API GateWay. Разве что для базы данных сделал обычный RDS-сервер, который уменьшает головняк с бекапированием и прочим. Хотел сначала поднять бессерверную RDS Aurora PostgreSQL, но ловил какие-то ошибки и в итоге просто забил на эту идею.

В целом за эти стартовые решения мне до сих пор не стыдно. Но вот что выглядит как деменция — то, что я начисто забыл про существование ORM. Начал писать все SQL-запросы к базе данных тупо текстом. Просто рукалицо. Забегая вперед, через пару месяцев я опомнился, вкрутил SQLAlchemy (популярная ORM на Python) и зажил как нормальный человек. А вскоре появился первый персонаж, который попытался дропнуть нашу таблицу с пользователями SQL-инъекцией =D

Первая версия сервиса появилась за месяц плотной работы. Бот присылал новые объявления только с ЦИАНа, было всего несколько фильтров — цена, кол-во комнат, метро. 

В качестве стартового полигона была выбрана небезызвестная группа Flats for friends. Откровенно говоря, я не думал, что 74% пользователей запустят поиск. Для этого нужно было ответить на 4 вопроса бота, включая ручной ввод станций метро — это не пару кнопок нажать. Какая мотивация!

Но самое главное — люди начали советовать Бро друзьям и присылать донаты. Я постарался сделать бота «живым» и это дало эффект.

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

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

Доработки

Я начал докручивать функциональность. Добавил еще несколько сайтов — Авито, Яндекс.Недвижимость и Домофонд. Последнее было лишним — не сразу понял, что Домофонд принадлежит Авито, и туда просто дублируются все объявления =/

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

Также я быстренько запилил второго бота, который присылал объявления с продажей жилья.

Вот так выглядел бот после первой серии доработок:

Если достали ковры на стенах, пора натравить на них нейросеть

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

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

Для определения типа ремонта я скормил сети тысячи фотографий как очень симпатичных, так и откровенно печальных квартир.

Чтобы не покупать дорогущие сервера, надо было найти решение, которое при обработке сотен тысяч изображений в день будет одновременно быстрым, качественным и экономным по железу. Поэтому взял за основу сеть MobileNetV2, которая изначально задумана для применения на мобильных устройствах с ограниченными ресурсами.

Так в боте появился фильтр «не бабушкин ремонт». А через месяц после запуска фильтра хайпанула статья Петра Бондаренко про похожую нейросеть для просмотра ЦИАНа. Было обидно, что в фокус внимания попал не мой проект, но это стало лишним доказательством того, как у людей наболело. Ну и вывод:

Если сделал хороший продукт, не тормози с пиаром.

И проверяй спрос, проверяй спрос

Когда дневная аудитория бота приблизилась к 1000, я решил добавить в игру владельцев жилья. Арендаторам предлагалось прислать небольшой рассказ о себе со ссылкой на соцсети в обмен на спецпредложения от собственников. А хозяева получили возможность еще до знакомства узнать о заинтересованных жильцах и выбрать подходящих.

До начала работ я проверил интерес со стороны хозяев, но не опросил арендаторов. Для них это казалось очевидно полезной функцией (стоит вообще забыть слово «очевидно»). В итоге уже после запуска стало понятно, что откликнувшихся квартиросъемщиков недостаточно.

Несколько недель напряженной работы насмарку.

В качестве бонуса получил мини-исследование аудитории Бро — за время эксперимента сотни пользователей бота рассказали мне о себе. Да и сервис для владельцев жилья еще получит второй шанс в будущем.

Второе рождение проекта

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

За первые 9 месяцев я привлек 8000 пользователей бота, потратив на это 42 тысячи рублей. 30 тысяч вернулись в виде донатов, а рекламу в HomeBro я еще не продавал. Да и запросов, честно говоря, на нее тогда еще не было.

Решил рассказать про Бро на vc.ru. Долго не решался, т.к. считал, что бот еще недостаточно хорош и его захейтят. Но в итоге случился настоящий взрыв — материал завирусился и стал одним их самых популярных в истории площадки. В комментариях люди активно делились впечатлениями от работы с плохими риелторами. 

Стоит отметить, что отчасти успех статьи был обеспечен друзьями Бро. Я разослал ссылку пользователям бота и попросил поделиться обратной связью, они откликнулись и помогли статье выйти в популярное.

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

Для удобства еще раз ссылочка на бота. Поделитесь, как вам?  

© Habrahabr.ru