(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; m[i].l=1*new Date(); for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }} k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)}) (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); ym(93807279, "init", { defer: true, clickmap:true, trackLinks:true, accurateTrackBounce:true }); ym(93807279, 'hit', window.location.href);

Мы разработали корпоративную звонилку, но не выпустили её на рынок Статьи редакции

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

Как родилась гипотеза

То, что стало повсеместным с появлением коронавируса — дистанционная коммуникация — для нас, как и для многих других ИТ-компаний, уже давно является обыденностью. 80% коллектива распределены по России и СНГ, то есть вся работа строится виртуально: Slack, Jira, корпоративный портал (на платформе, на которой мы запускаем медиа) и звонилки. Нас устраивали все инструменты, кроме тех, в которых мы проводили голосовые совещания.

Два года назад, когда о пандемии ещё даже не шло речи и рынок не был завален большим количеством разнообразных звонилок, мы стали искать для себя удобный инструмент нетекстовой коммуникации. Zoom никому в команде не нравился по самым разным причинам, а встроенные звонки в Slack, который мы используем как мессенджер, сильно тормозили. Чаще всего мы созванивались через лаконичную веб-версию Whereby.

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

В большинстве случаев мы общаемся с одними и теми же людьми на одни и те же темы.

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

Таким образом, например, бэкенд-разработчики будут находиться на связи, как по рации. Именно они собрали себе прототип на NodeJS, назвали его Heyka («приветик» по-польски):

Прототип всем понравился

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

Всё это навело на мысль попробовать обличить его в нормальный интерфейс и раздать на тестирование нескольким командам. Мы наняли и выделили в отдельную команду троих разработчиков.

Как устроена Heyka

Взаимодействие с Heyka начинается с экрана логина. Мы задумывали его как расширение для корпоративных систем вроде Slack, MS Teams и прочих. Авторизация через них позволяет быстро пригласить коллег и даже продублировать каналы или чаты:

В уже рабочем виде компактное (это было для нас важно) приложение по своей структуре напоминает привычные, но уменьшенные в размере, инструменты коммуникации: Slack, Telegram, Discord. Слева находятся публичные и приватные каналы, список коллег для индивидуальной коммуникации:

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

После входа в канал, если активируется другое окно в системе, Heyka сворачивается до маленькой плашки с основными элементами управления:

Конечно, звонок можно быстро развернуть:

Например, чтобы посмотреть чей-то шеринг экрана.

Хотя смотреть можно и фоном, в компактном режиме. Видео переключается на того, кто говорит:

Одним из принципиальных моментов для нас было то, что входящий звонок в 2021 году не должен перекрывать никакие окна, вешать систему и насаждать длительным звуковым сигналом — это просто обычное уведомление из мессенджера. Сама Heyka быстро активируется из системной панели в правом верхнем углу на MacOS, как часы или переключение языка, и правом нижнем на Windows.

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

Конечно, никакая коммуникация невозможна без мобильных приложений.

Где начались ошибки

Начались они на стандартной и распространённой для неопытных команд развилке: выпустить продукт с минимальной функциональностью — каналы и голосовое общение — или допилить «ещё немного фишек, так ведь будет круче». Мы не успели заметить, как стали больше думать, что мы делаем, а не зачем. А видео? А шеринг экрана? А рисование? А приватные каналы? А текстовый чат?

Менеджерские ошибки повлекли за собой в том числе проблемы в коде. Мы традиционно являлись веб-разработчиками — это наша специализация. Поэтому не очень ясно, о чем мы думали, когда говорили друг другу «Heyka будет работать на всех платформах: Mac, Windows, iOS, Android, Web, Linux». Нам достаточно было сделать веб и мобильные приложения.

В итоге эксперимент превратился в сложный долгострой, каждый шаг только усложнял его, и наступила пандемия, которая в буквальном смысле взорвала рынок. Голосовой коммуникацией занялись все, в итоге их сделал и сам Slack и, наконец-то, Telegram.

В конце концов, было наивно полагать, что без опыта в архитектуре, просто на готовой технологии WebRTC, мы сможем построить глобальный продукт. Хотя представленная функциональность уже работает.

Что будет дальше

О самом эксперименте, конечно, не жалеем — было интересно, многому по ходу дела научились. Эксперименты проводить полезно, но ещё полезнее — вовремя их останавливать. Мы в этом году привлекли небольшие инвестиции, поэтому хотим сейчас сфокусироваться на развитии нашей основной платформы, а уже потом, с учётом ошибок, вернуться к теме корпоративной коммуникации, которая нам очень интересна. Пока что продолжаем пользоваться Heyka внутри компании — наши нужды она покрывает.

Для продукта сейчас видим несколько сценариев

  1. Продажа тем, кто умеет и хочет делать такие продукты.
  2. Поиск технических партнёров, с которыми мы сможем продолжить в качестве продуктовых менторов.
  3. Если ни то, ни другое не случится до нового года, то мы просто опубликуем на ProductHunt её исходный код — вдруг кому-то пригодятся наши наработки.

Какие технологии использовали

  • Фронтенд: Electron, Vue, Vuex, Stylus
  • Бэкенд: NodeJS, Hapi, Postgres, Redis
  • WebRTC: Janus (в этой части мы, похоже, с выбором ошиблись)

У невыпущенного продукта есть сайт, который мы не доделали — heyka.app. Писать письма и вопросы можно на [email protected].

0
160 комментариев
Написать комментарий...
Саня Матросов

Так а чем первоначально Discord-то не угодил? Что он звонит, а не один раз пиликает? Эт наверное решаемо

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

Дискорд - тяжелый java-монстр, еле ворочается на простых машинках, постоянно глючит и тормозит. На геймерских компиках он конечно более-менее сносно работает.

Ответить
Развернуть ветку
Евгений Мирошниченко

Да зашибись он работает, если тормозит, то просто наверное пора уже ноутбук 15-летней давности на Core 2 Duo и 2 ГБ оперативки обновить.

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

А чем плох core2duo 15 летней давности для голосовых конференций?

Ответить
Развернуть ветку
Евгений Мирошниченко

Ну мне на самом деле что ли надо объяснять очевидные вещи?
Ну хорошо.
Массовый софт делается для массового железа.
15-летний ноут (причем который изначально был уже low-end) - это не массовый сегмент, на сегодняшний момент в 2021 году. Это разве что железо каких-то унылых гос контор - но им и не нужны никакие конференции, очевидно
Впрочем, для маргиналов с 15-летними ноутами есть голосовые конференции на С++, ради бога.
Есть понятие соотношение цена/качество/продуктовые фичи/время выхода на рынок.
Есть всякие технологии/фреймворки/языки, убыстряющие и удешевляющие производство (которые кстати упомянуты в этой статье).
Почему-то в статье не стали писать такую прогу на С++, без посторонних фреймворков на голых сокетах, чтобы уж точно было максимально производительно.
А знаете почему?
Потому что у них было 3 человека, а так было бы нужно 15.
И время минимум год, скорее даже полтора.
Плюс 15 хороших плюсовиков быстро не так-то легко найти, даже в Москве, даже на хорошую зарплату.
А плюсовики нужны либо хорошие, либо никакие.
Потому что это такой язык, что там плохой член команды слишком легко может накосячить, причём так, что потом будешь месяцами плавающий SIGSEGV ловить в его коде.
А 3 Java прогеров средней паршивости во-первых и найти вообще без проблем, во вторых они и накосячить уж совсем жестко не смогут, при всём желании.
Ну и так далее.

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

Евгений, у вас устаревшие сведения. Вилка С++ зарплат сейчас ниже чем java, а уровень специалистов выше.

Ответить
Развернуть ветку
Евгений Мирошниченко
Вилка С++ зарплат сейчас ниже чем java, а уровень специалистов выше.

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

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

Вот только Дискорд на Электроне.

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

Ах ну да. Это все меняет!

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

На самом деле, почти всё.

Ответить
Развернуть ветку
Александр Ненадо

Простые машинки, это старые буки на атоме с 2 гб ОЗУ?

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

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

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

какая java, клиентское приложение на электроне написано и летает на почти любом железе последних 5-7 лет.

Ответить
Развернуть ветку
Саня Матросов

Это точно, согласен. Даже новые маки на М1 знатно с него присаживаются, UI не успевает вообще

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