https://habr.com/ru/company/moikrug/blog/449542/- Блог компании Мой круг
- Python
- Здоровье гика
- Карьера в IT-индустрии
- Управление персоналом
Есть странное слово «телемедицина», и у меня оно ассоциируется только с сеансами Кашпировского по телевизору и заряжанием воды от экрана. На самом деле это просто термин для технологий, которые могут сделать медицину удаленной.
Это огромное поле, в котором ИТ будет развиваться очень серьезно, когда утрясутся всякие формальности вроде юридических проволочек, сфер ответственности и споров за персональные данные. Ну и когда мы согласимся доверить технологическим стартапам и корпорациям анализировать наши организмы и предлагать программы лечения так же, как сейчас доверяем обычным больницам.
А пока медтех стартапы занимаются вещами относительно попроще. Например, делают сервисы для консультаций и записей в клиники. BestDoctor — наши сегодняшние собеседники — предлагает такой сервис компаниям взамен классического ДМС. О том, что это такое, насколько трудно разрабатывать медицинский продукт и нанимать на него людей, нам рассказали CTO Филипп Кузнецов и HR Полина Русакова.
Традиционно расскажем об оценке компании на «Моём круге»: BestDoctor попал в наш рейтинг лучших работодателей в IT (в категории small-компаний) со средней оценкой 4,6. Сотрудники ценят его за отличные отношения в коллективе, простор для профессионального роста и за современность используемых технологий, но выше всего — за то, что BestDoctor делает мир лучше.
Как работает альтернатива ДМС
— Чем ваша система отличается от обычного ДМС?
—
Филипп Кузнецов: Когда ты берешь классический ДМС, то отдаешь сразу всю сумму за полис. Страховая заработает на том, что останется между стоимостью страхового полиса и выплатами клиникам за лечение. Получается, что страховая заинтересована платить как можно меньше, чтобы больше заработать. И если ты потратил на медицину меньше, чем заплатил за полис, то эти деньги уже не вернешь.
В нашей системе ты платишь за услуги, которые были оказаны по факту. Например, у тебя работает тысяча человек. Кто-то из них находил на тысячу рублей, кто-то на десять тысяч, кто-то вообще ни разу не обратился к врачу. Тебе не нужно оплачивать одинаковые полисы для всех. Есть спрогнозированный общий медицинский бюджет, из которого деньги списываются по мере того, как сотрудники обращаются за помощью.
При этом ты не должен сразу выкладывать сумму на год вперед, а вносишь депозит за квартал. Непотраченные деньги возвращаются обратно или переносятся на следующий период обслуживания. Например, мы спрогнозировали, что на коллектив понадобится 20 миллионов. Но год был хороший, и сотрудники мало болели. Сэкономленные деньги ты можешь забрать обратно или потратить их на расширение программы. А для тех, кто боится перетрат, у нас предусмотрен рисковый договор.
Мы зарабатываем за счет фиксированной комиссии за каждого прикрепленного сотрудника. Это плата за сервис — мобильное приложение, личный кабинет, сопровождение, за базу клиник и документооборот, который мы предоставляем. Рассказываем, куда лучше пойти, консультируем, когда люди не знают, что делать. Например, получил пачку анализов, а куда их нести — непонятно.
То есть мы делаем уклон на сервисность. Нам пациент может позвонить в три утра, потому что у ребенка выскочил прыщ на носу, и мы расскажем, стоит ли переживать. Даже если ребенок не является застрахованным у нас, все равно консультируем. Поэтому нам не интересно, что сотрудникам окажут как можно меньше услуг и как можно дешевле. У нас от этого будет только головная боль.
— И почему все до сих пор не уходят от обычного ДМС?
—
ФК: Такого в России еще никто не делает. Когда мы — три основателя никому неизвестного стартапа — приходили в компанию и говорили, что сейчас сделаем дешевую, классную систему, которая точно работает, и никакого подвоха в ней нет, компания задумывалась: выбрать надежную известную страховую или молодой ноунейм проект. Это одна из главных проблем, с которой мы столкнулись — очень сложно получить кредит доверия.
— С клиниками таких проблем не было?
—
ФК: Нет, для клиник мы работаем так же, как страховая, почти по таким же договорам. Мы направляем списки пациентов, гарантийные письма. Они нам выставляют счета, мы их оплачиваем.
—
Полина Русакова: У нас один из ключевых отделов, постоянно общается с клиниками, чтобы сохранять качество и оптовые цены. Если популярные клиники будут давать большие цены, нам будет труднее. Клиникам интересен поток. Если ты даешь им поток — все хорошо. Если просишь заключить контракт и говоришь, что будет один пациент в месяц, конечно им это не выгодно.
— Кто помогает с консультациями? Клиники или ваши специалисты?
—
ФК: У нас в штате свои врачи, люди с медицинским образованием.
—
ПР: Наши основатели изначально были врачами. Поэтому относимся к подбору очень серьезно. BestDoctor для наших врачей — не основное место работы. Мы берем на работу только тех, у кого есть постоянная врачебная практика. Это позволяет им постоянно быть в фокусе, в курсе изменений и лучших практик.
Как продукт объединяет врачей, пациентов и ML-модели
— А что вы делаете с продуктовой точки зрения?
—
ФК: Раньше это был просто личный кабинет для пациентов в вебе. Там можно было оставить заявку на запись в клинику и посмотреть программу лечения. Был бэк-офис, который обрабатывал заявки на запись и колл-центр. Еще у нас был статистический алгоритм, который позволял рассчитывать бюджет. Это был наш внутренний инструмент для скоринга, подбора клиник и программ для клиентов.
Потом добавилась функциональность HR-кабинета. Это система, где эйчары могут менеджить сотрудников, подключенных к системе, прикреплять новых, смотреть сколько в каком месяце было потрачено денег на медицину, проверять отчетные документы и так далее (личные медицинские данные сотрудников, естественно, скрыты). Сейчас еще есть мобильное приложение, которое дублирует функции личного кабинета в плане программы и записи, но там еще есть чат с нашими врачами и колл-центром.
Также есть соплатеж, который еще называют франшизой. Это примерно как в страховых компаниях, но не совсем. У нас соплатеж — это процент от услуги, который сотрудник оплачивает самостоятельно. Например, прием у терапевта стоит 1000 рублей. Если соплатеж 10%, то 100 рублей он платит сам, 900 рублей — работодатель.
Платеж мы снимаем прямо с банковской карты пациента, чтобы снижать нагрузку на бухгалтерию клиента. Плюс делаем соплатеж в зависимости от типа услуги, например, только на стоматологию или вызов врача на дом. Либо по каждой конкретной клинике.
— Я читал, что где-то среди этого всего есть машинное обучение. Где?
—
ФК: Да, в модели скоринга, которая позволяет прогнозировать бюджеты клиента. Когда мы только начинали, у нас были статистические данные за десятки лет. На них мы построили первоначальную модель. Сейчас обогащаем ее своими данными.
Нам приходится самим изобретать модели, потому что такие никто не использует.
И еще, чтобы правильно снимать соплатеж, надо понимать к чему относится услуга — стоматологии, поликлинике. Для этого мы сопоставляем прейскуранты разных клиник. Тут возникает проблема: например в одном прейскуранте написано «первичный прием терапевта», в другом «прием терапевта амбулаторный первичный». А надо чтобы автоматически было понятно, что это одно и то же.
То есть услуги везде одинаковые, но называются по-разному, и мы умеем переводить их названия на наш внутренний язык. Для этого у нас написана модель, которая умеет сопоставлять прейскуранты разных клиник и классифицировать их услуги по нашему внутреннему прейскуранту. Можем сопоставлять и узнавать, где какая услуга оказывается, где нет. Можем ранжировать клиники по цене, чтобы оптимизировать ценовую политику.
Делать это вручную будет дорого. Сейчас работу модели проверяет один человек, а на ручную разметку нам бы их потребовалось не меньше десятка, потому что каждый месяц приходит новый реестр услуг.
— Много ошибок выдает модель?
—
ФК: Когда мы используем ее на прейскуранте, точность около 80%. А когда на целых реестрах, там почти 100%.
— Все это — собственные разработки?
—
ФК: Да. Из сторонних мы используем только платформу для чата. Но будем или разрабатывать свою, или использовать другой, более гибкий фреймворк. У нас не своя телефония, зато мы допилили под нее собственную аналитику, немного покопавшись в структуре базы данных.
Как учить Python и строить бизнес одновременно
— Кто над всем этим работает?
—
ПР: Вся команда сидит в одном офисе в Москве, нас сейчас 74 человека. Часть ребят работает удаленно. Продуктом сейчас занимаются три продакт-менеджера, каждый отвечает за свое направление. Дизайн-команда состоит из двух человек: один отвечает за графический дизайн и иллюстрации, второй занимается продуктовым дизайном. В отделе разработки 12 человек, но сейчас мы расширяемся. Там все стандартно. Бэкенд, фронтенд, тестировщики и девопс на удаленке.
— Такая маленькая команда справляется?
—
ФК: Разработчиков всегда не хватает. Какие бы большие ни были команды, всегда найдутся задачи, на которое можно посадить еще разработчиков. Естественно, некоторые вещи хотелось бы делать быстрее. Но со своими задачами команда справляется.
— Я читал в Ведомостях вашу историю с точки зрения бизнеса. Расскажете так же про историю разработки?
—
ФК: В августе 2015 года у нас был один разработчик, который не умел разрабатывать. За год мы сделали MVP, как раз тот личный кабинет с программой лечения. Мы выбрали самый легкий для входа стек — Python. Взяли самый популярный фреймворк Django, и на нем стали пилить продукт.
Весь первый год у нас так и был один разработчик. На второй год работы мы начали расширять команду. Сначала пришел еще один бэкендер, потом появился фронтенд. Потом пришли продакты. Мы начали понемногу переходить на другие технологии.
Из обычного приложения на шаблонах мы начали переделывать в SaaS с REST-API (на самом деле мы сразу перешли GraphQL). У нас появился человек, который отвечает за Data Science, появился девопс. Мы перетрясли свою архитектуру, сделали все как у людей. Нормальные CI и деплой, потому что до этого деплоили через git push-git pull. Потом у нас появился мобильный разработчик. Мы стали писать на React Native сразу под две платформы.
Сейчас имеем что имеем — команду из 12 человек, и каждый занимается своим кусочком.
— Я только не очень понял: как разработчик, который ничего не умел, два года работал над продуктом?
—
ФК: Все очень просто, этим разработчиком был я. По образованию я биофизик.
— Получается, ты учил Python и на ходу писал?
—
ФК: Да, пришлось.
—
А когда начали набирать команду, вы дорабатывали твое или все выкинули и стали писать с нуля?
—
ФК: Дорабатывали. Я не помню, чтобы мы прямо что-то выкидывали. Разве что куски, которые совсем не использовались. Стек тоже не меняли. Как с тех пор начали использовать Django и Python, так и используем. И на фронтенде TypeScript и React. Взяли Тайпскрипт, потому что я приверженец статической типизации.
На Python мы тоже перешли на версию, которая поддерживает аннотацию типов, чтобы пользоваться преимуществами статической типизации — пусть и не в таком явном виде, как в по-настоящему статически типизированных языках.
— А не лучше было отказаться от Python и все-таки взять по-настоящему типизированный?
—
ФК: Иногда я думал, что стоит переписать на чем-то другом. Я смотрел на C# и иногда даже на Java (с людьми бывает такое, что смотришь непонятно куда, непонятно зачем). Потенциально возможно, что мы перейдем на другой стек. Но это связано с тем, что нам потребуются специализированные вещи. Например, если мы поймем, что Python по производительности не вытягивает какие-то части нашей апишки, мы просто возьмем и напишем ее на Go. Или если вдруг понадобится асинхронщина, и мы поймем, что не хотим делать ее на Питоне — возьмем в крайнем случае «Ноду» или какой-нибудь Elixir.
Но все проблемы, с которыми я сталкивался в Python, не были нерешаемыми. У нас просто сервисный продукт, а не rocket science. У нас нет задач с диким хайлоадом и сложными алгоритмами. Нам не нужен специализированный язык, как «Плюсы» или тот же Elixir. Нам нужен язык общего назначения.
На этом языке можно быстро находить хороших специалистов за небольшие деньги. Питон сейчас очень популярный, и мне кажется, его популярность будет только расти, потому что там ML, Data Science, Web. Кто-то на нем даже мобильные игрушки делает.
— Мне кажется, что Python популярен у не-разработчиков. Они изучают его в дополнение к своим основном занятиям. Например, ты биофизик…
—
ФК: Да, я согласен, многие специалисты изучают его, чтобы самостоятельно автоматизировать свои основные задачи. Те же самые тестировщики изучают Python, чтобы писать автотесты.
Но если человек хорошо может в Python и веб-разработку, то мне все равно по каким причинам он начал его изучать. Главное, чтобы он мог на собеседовании ответить на вопрос, который я ему задам, а потом — показать результат. Предыстория не важна, у меня перед глазами и свой пример стоит, поэтому я отношусь к таким людям нормально. Есть люди, которые изучают Python серьезно — именно как разработчики. Таких тоже довольно много.
— А модели для машинного обучения тоже писал ты, изучая на ходу?
—
ФК: Когда у нас была только статистика, и там не было машинного обучения, то алгоритм мы составляли втроем — с другими основателями. А программную реализацию делал я. Когда появились модели для машинного обучения, у нас уже был дата-саентист.
Как набирать людей в рискованный стартап
— Как вы набирали команду?
—
ПР: Это был, наверное, самый тяжелый период. Когда я сюда пришла, в компании было 23 человека. Про BestDoctor вообще мало кто знал на ИТ-рынке, но это проблема всех маленьких компаний.
Наша проблема была в том, что мало кто верил в проект. Сначала люди приходили, потому что хотели работать в социально значимом проекте, но потом шли работать в банк. От наших офферов часто отказывались. У нас горели сроки, но в итоге мы собрали действительно крутую команду. Сейчас у нас нет текучки. За последние полгода ушли 1-2 человека.
Стартапам надо быстро расти, а расти можно, только если приходят новые люди. Большинство технарей пришли через «Мой круг» или Telegram, плюс мы очень много общались по рекомендациям. Я на тот момент подняла на уши всех разработчиков, каких знала.
— Звучит, как будто готовы были брать любых людей, но ведь их же надо как-то фильтровать по скиллам?
—
ПР: Безусловно, мы фильтровали, и не только по техническим скиллам. Брать человека, который не очень тебе подходит — это огромный риск. Рано или поздно либо он от тебя откажется, либо ты от него. Поэтому взять себя в руки и сказать «нет, мы будем искать дальше» — это достаточно сложное решение. Когда мы понимали, что человек не наш, искали дальше.
— Почему человек может оказаться не ваш?
—
ПР: Либо нам технически не подходили люди, либо мы им. На старте проект был не так интересен и глобален, как сейчас. Теперь он развивается, а год назад была совершенно другая история.
А бывает, что просто не подходили по корпоративной культуре.
— В чем она заключается?
—
ПР: В стартапе не каждый готов работать, тут своя атмосфера и энергетика. Стартап — это такое место, куда многие думают, что хотят пойти. Но когда на интервью ты откровенно говоришь о минусах и плюсах, люди действительно задумываются, а хотят ли они такого.
Стартапы и компании, где идет активное взаимодействие с пользователем, всегда живут в формате «сделать как можно быстрее». В районе двух часов ночи может что-то произойти, и ты должен быть готов включиться.
Ну и если просто человек хочет работать над проектами, которые приносят деньги и ничего больше — наверное мы не сойдемся. Наша цель — делать людей здоровыми и продлевать жизнь. Большинство людей в команде реально зажглись идеей изменить систему, которая далека от идеала. Многие сами сталкивались с несовершенствами и теперь хотят работать на улучшение.
— Но как вы понимали, что человек — хороший разработчик?
—
ПР: Мы сразу искали мидлов и сеньоров, потому что в наших условиях работать с джуниорами сложно. В проверке компетенций все достаточно стандартно. Как и любая компания, мы смотрим на самообучаемость. Здесь не будет выстроенных курсов, нужно постоянно изучать новое самому.
Нужна гибкость, чтобы работать в команде. Стартап — это такое место, где через сложные времена можно пройти только бок о бок. Если кто-то один отворачивается, стресс испытывает вся команда. Важно находиться в тесном контакте, следить за изменениями.
—
ФК: По технической части я спрашивал самые базовые вещи, которые показывают, что человек реально мидл или сеньор, и реально не один год занимался «Питоном». Стандартные вопросы: «что такое контекст-менеджер», «чем отличается итератор от генератора», «какие знаешь магические методы» и так далее. Базовые вопросы по синтаксису, с которыми я сам по столкнулся за три года работы. И уж если я знаю, то человек точно должен знать. Это отсеивало большую часть кандидатов: человек говорит, что он мидл-питонист, но не может ответить на базовые простые вопросы.
Когда «проверка на вшивость» заканчивалась, мы переходили к задачам. Одна была на проверку алгоритмов, но там не стояло задачи решить самым оптимальным образом. Стояла цель сделать рабочее решение, а потом пообщаться на тему того, как его оптимизировать.
Вторая задача — на работу с памятью. Тут важно было посмотреть, как широко человек может мыслить, обходить ограничения. Вспомнит ли он, что можно использовать запись на диск или какую-то вещь, связанную с работой с сетью.
Так как мы работали с Django, дальше шли задачки посложнее: сделать внутреннюю вьюху для админки, переопределить методы или написать функцию, которая использует PostgreSQL.
—
ПР: От тестовых заданий мы давно отказались специально. Когда стартап без имени, дает объемное тестовое, и без того небольшие шансы получить человека, становятся почти нулевыми. Определенные риски были, и мы на них осознанно шли.
— Ты не сталкивался с тем, что проверки на вшивость могут отсеять и хороших людей?
—
ФК: Да, я знаю такую мысль. Но я и не требовал четких определений из книжек. Я ждал ответа на вопросы, с которыми человек точно должен был столкнуться, если он разрабатывает несколько лет. Если ты питонист, ты точно должен знать, что такое генератор. По крайней мере, как он работает и чем отличается от списка. Ты точно должен знать, что такое контекст-менеджер и что такое декоратор.
Если ты с этим не сталкивался и не погружался, у тебя либо совсем не релевантный опыт, либо ты занимался сильно специфическими вещами. Это тоже хорошо, тоже опыт, но нам не подходит.
— Реально были люди, которые на этом заваливались?
—
ФК: Да, очень много. Честно, я сам очень удивился. Я спрашивал у знакомых питонистов, как они вообще собеседуют людей, и они сказали, что большое количество людей отваливается именно на этих вопросах. Я тогда отнесся со скептицизмом. Но потом сам начал собеседовать и офигел, сколько людей валятся на простых вопросах.
— У тебя не было такого, что самому не хватало скилла для собеседований?
—
ФК: Было пару раз, когда приходили люди более скилловые, чем я. Если человек говорит мне вещи, которых я не знаю, то я благодарю его. Все знать невозможно. Какой бы ты ни был СТО, всегда найдется человек, который знает больше.
— Собеседования — это одно. А в работе ты не сталкивался с тем, что нужно еще очень много знаний, чтобы работать СТО.
—
ФК: Бывают периоды, когда чувствуешь, что тебе надо что-то подтянуть. Ок — почитаем, пообщаемся и решим проблему. У меня есть знакомый СТО из дружественной компании, я с ним всегда консультируюсь по непонятным вопросам. Важно, когда есть у кого спросить совета.
— Не было желания нанять на место технического директора очень-очень мощного разраба, а самому уйти в менеджемент?
—
ФК: Было, да. Мы даже попробовали так сделать. Но на тот момент у нас не было времени, чтобы человек включился во все процессы и тонкости. И мы решили, что для команды будет лучше, если я сам выйду на необходимый уровень. Потому что я как основатель — самый мотивированный человек.
Мы ищем новых участников нашей рубрики! Если вы хотите сделать свою компанию героем такого выпуска — пишите нам на hr@tmtm.ru с пометкой «Где работать в ИТ».