5 ошибок при разработке сервиса по управлению проектами Shtab: не тот софт, несистемный подход

Всем привет! Меня зовут Максим Стихарев. Я CTO и сооснователь сервиса по управлению проектами Shtab. Мы запустились почти три года назад. Хотелось бы сказать, что всё взлетело с первого же дня, все вложенные деньги окупились и не единожды, а инвесторы выстроились в ряд. Но так в реальной жизни бывает редко.

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

5 ошибок при разработке сервиса по управлению проектами Shtab: не тот софт, несистемный подход

Ошибка №1. Начали разрабатывать десктопное приложение на Electron

Electron – фреймворк с открытым исходным кодом для создания десктопных мультиплатформенных приложений с использованием языков JavaScript/HTML/CSS.

В 2018-2019 годах, когда мы начали разработку, экосистема Electron была достаточно маленькой, проект только начал обрастать комьюнити, библиотеками и Best Practice.

Столкнувшись с первыми трудностями сборки проекта в стеке Electron + Vue и победив их, мы думали, что сложнее проблем уже не будет. Но они начались при использовании нативных возможностей ОС.

Так как у нас в сервисе есть трекер времени, нам нужно снимать экран, действия пользователя, сайты, на которых он сидит, и используемые приложения. Необходимо было дописывать модуль для трекинга самостоятельно на C++ и прибиндить его к Node.JS модулю.

Гайдов и мануалов по этому ещё не было, мы решили что не будем отказываться от этой функции, так как она была нашим конкурентным преимуществом на рынке и решили переписать все на C++ в связке с Qt. К счастью, удалось найти друга, который взялся за проект и реализовал его за пару месяцев.

5 ошибок при разработке сервиса по управлению проектами Shtab: не тот софт, несистемный подход

Ошибка №2. Выбрали старые технологии

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

В прототипе мы использовали jQuery в связке с UI фреймворком Bootstrap 4. Как прототип сервис работал отлично, только показывать это миру было нельзя. Также такая тесная связка фронтенда с бэкендом сильно замедляла разработку продукта – мы тонули в багах и не успевали делать фичи.

Решили, что будем делать полноценный дизайн и искать в команду фронтендера. Жаль, конечно, эти 3 месяца работы над интерфейсом, но решение было принято.

После jQuery и Bootstrap перешли на Vue.js – он нам показался удобным, текущая команда бэкендеров знала Vue, а мы могли спокойно провести собеседование на позицию фронтендера.

Ошибка №3. Не протестировали отчёты на большом объёме данных в PostgreSQL

Таблица логирования времени работы над задачей в таск-трекере строится из даты начала трекинга, даты окончания трекинга, активности пользователя, процесса прогресса и других сервисных полей. Мы не учли отрезки — данные, которые отправляются в систему с интервалом от 30 секунд до 5 минут.

На большом объёме данных агрегационные функции PostgreSQL показали себя достаточно плохо. Мы решили обработать их в Python, но это тоже не дало результата – запросы по-прежнему обрабатывались от 1-30 секунд в зависимости от объёма данных.

Проблему решили переходом на Clickhouse от Яндекса. Принципы построения таблиц отвечали нашему формату – удалось сократить время ответа с 30 секунд до 50 миллисекунд (если честно, я не знаю, как там это работает под капотом, сколько с командой не смотрели конференции и выступления по ClickHouse, ответ так и не получили, но результатом довольны). Визуально отчёт выглядит так:

5 ошибок при разработке сервиса по управлению проектами Shtab: не тот софт, несистемный подход

А это код запроса после перехода (оказался кратно проще, если исчислять в количестве строчек кода):

5 ошибок при разработке сервиса по управлению проектами Shtab: не тот софт, несистемный подход

Ошибка №4. Подходили к дизайну несистемно

Мы прошли 4 итерации дизайна, чтобы прийти к нынешнему внешнему виду сервиса. Сразу желаемого не добились, потому что не использовали системный подход. К работе привлекали веб-дизайнеров, которые до этого работали только с лендингами, маленькими сайтами и интернет-магазинами: им просто не хватало релевантного опыта.

Набив шишки, мы начали подходить к вопросу дизайна с инженерной точки зрения: теперь у нас меньше итераций. Теперь у нас получается точнее формировать гипотезы, адаптироваться под требования фронтенда — больше времени тратить на аналитику, меньше – на дизайн.

По-прежнему не обходимся без ошибок при разработке новых интерфейсов — часто меняем и переделываем их на этапе проектирования, а при запуске отслеживаем фидбэк и оперативно исправляем недочёты. К фокус-группам и дополнительным исследованиям не обращаемся, A/B тесты не проводим.

Ошибка №5. Плохо настраивали мониторинг и слабо развивали инфраструктуру

С самого начала мы углубились в разработку и не уделили внимания инфраструктуре. Работал всего один сервер для всех сервисов: фронтенда, бэкенда, баз данных. Когда число клиентов выросло, мы столкнулись с проблемой масштабирования и поздно заметили проблемы с нехваткой мощностей сервера.

Раньше мы использовали только одну метрику — доступность сервера. Не проверяли нагрузку на него и оперативную память, поэтому время ответа доходило до 30 секунд (у нас так настроен таймаут). К тому же, 16 Гб оперативной памяти с задачей не справлялись.

Наша инфраструктура стоила приблизительно 500$ на Digital Ocean до февраля этого года, но в ближе к весне мы вынужденно переехали к другому хостеру. Долго присматривались к Selectel, который располагал SaaS-решениями для баз данных и удобного управления серверами, но дорого стоил.

Даже сделали сравнительную таблицу с ценами инфраструктуры Digital Ocean и Selectel при курсе доллара 90 на момент переезда.

5 ошибок при разработке сервиса по управлению проектами Shtab: не тот софт, несистемный подход

Предложений лучше не нашли, решили, что нужно переезжать. Но сделать это качественно за две ночи нам одним было сложно: привлекли part-time dev-ops команду наших друзей. Благодаря им получилось перевезти инфраструктуру в Россию без затруднений.

Кроме того, мы настроили различные дашборды в графане для всех наших сервисов и серверов, а также подключили публичный BetterUptime и алертинг на инциденты. Выдали доступ юзерам для просмотра статуса, если появятся проблемы с Shtab. Теперь если что-то идет не так, команда знает об этом заранее.

Мораль

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

Сейчас мы стабильно работаем и оперативно исправляем баги. Кстати, если поможете нам с поиском неточностей, будем рады: заходите к нам в Shtab.

33
Начать дискуссию