МояДоска: как один разработчик написал, переписал и запустил онлайн-доску
Привет! Меня зовут Владимир и я создатель МояДоска. Сегодня я поделюсь историей о том почему я решил создать доску, как я ее написал... и переписал, а потом выпустил ее в свет, взял первое место на ProductRadar, набрал тысячи пользователей, и вошел в реестр Российского ПО, а потом...
Содержание, погнали!
- Как все началось
- Разработка: написал и переписал
- Выход в свет
- Что сейчас есть и что дальше?
- Какие выводы я сделал
- Благодарности
Как началось
15 августа 2024 года замечательная преподаватель английского языка Евгения с которой я много общался, и которая стала одной из первых (если не первой) пользователей МояДоска, рассказала мне про то что внезапно какое-то (неизвестное мне) "Миро" уходит с Российского рынка.
А вот и окно возможностей!
Я посмотрел что это такое и пришел к умозаключению к которому приходит большинство людей впервые слышащие про онлайн-доски: "Какая ерунда - можно ж на листочке писать". Однако мне очень красочно рассказали про то насколько доска miro значима (повторю: я на тот момент не знал что вообще такое онлайн-доски) и как можно применять этот инструмент. Я сел изучать информацию и очень быстро понял что:
- Онлайн-доски это не про "просто порисовать", а действительно мощный командный и персональный инструмент
- Это окно возможностей (рынок очистился и сделать замену Miro самое вермя)
- Ниша мне интересна - я давно занимаюсь вебом и чем сложнее / новее задача - тем лучше
- Я могу это сделать!
Разработка
Изначально я принял решение сделать все свое: движок, используя только обертки над браузерными API и написать с нуля серверную инфраструктуру. Я не стал использовать готовое open source - решение (многие просто берут опенсорсный Excalidraw и лепят сверху другой логтип), свой движок дает больше свободы и контроля над внутрянкой проекта: да, это дольше и сложнее, но в долгосрок явный выигрыш.
И вот я приступил:
Фаза 1 (август-октябрь)
Изначальный стек был довольно смузи-хипстерским: MERN (MongoDB, Expressjs, React, Node) + замечательная библиотека Konvajs как обертка над канвасом. В целом, объективно говоря, этого вполне хватало для небольших досок, но очень скоро я понял что если я хочу делать действительно большие и сложные доски, а также "играть в долгую", то смотреть надо в сторону WebGL/WebGPU (такая рекомендация даже есть в документации Konvajs). Также я принял решение отказаться от Mongo (это и их переход на SSPL который сразу не был взят в расчет, и разрастание документов больше 16мб размером у больших досок, а это лимит BSON у монги, да, вы можете очень резонно возразить что это решаемо, но уж тогда придется идти на определенные компромиссы и костыли в рамках моей архитектуры и структуры доски) в сторону перехода на PostgreSQL, который в итоге себя оправдал.
Ну и самое главное - это то что вопреки ряду оптимизаций доска реально тормозила после ~1000 элементов, в то время как многие пользователи собирают по 3-5-10 и более тысяч элементов, а WebGL действительно гораздо производительнее в том ключе которого требуют онлайн-доски.
Стоит заметить что за это время уже был собран MVP (15 августа - 15 октября), который был обкатан на тесте и вполне хорошо работал при условии что доски невелики.
Фаза 2 (октябрь-январь)
Как писатель, скомкавший свои рукописи и бросивший их в урну, я переписал практически все: взял PixiJS как "обертку" над WebGL и для решения еще ряда задач, бэкенд был значительно переработан и заменена база данных на PostgreSQL, а также разработал свой протокол синхронизации - какой-то условный полугибрид CRDT/OT, ну и много мене масштабных изменений.
Как итог: скорость значительно возросла, данные стали более структурированными, а архитектура проекта - чище.
В итоге за неполных 5 месяцев доска фактически была написана дважды. Итак, состоялся релиз...
Выход в свет
После релиза доски на нее пришло немало пользователей, что уже успело появиться собственное сообщество в телеграме где я буду рад вам и обратной связи.
Куда податься с новым проектом? Разумеется на Product Radar! Во время моего участия произошла весьма эпичная и комедийная история, но я хочу отдать должное Диме Беговатому, Александру Шевцову и большей части охотников за то что они увидели истину в ситуации.
Я получил несколько сотен регистраций и десятки отзывов что для проекта на старте это оооой как ценно. Короче радоваться этому я могу долго и, возможно, напишу про это отдельную статью.
В итоге в "Продукте недели" на ProductRadar и занял там 1ое место, а в "Продукте месяца" забрал серебро
Аудитория сервиса постепенно растет органически поскольку спрос на доски весьма велик, а качественных альтернатив ушедшим сервисам еще не так много.
Что сейчас и что дальше дальше?
На выходе инструментарий был крайне базовый, но я постепенно его расширяю:
- Работа с фото: обрезка с разными форматами масок
- Воспроизведение аудио
- Работа с PDF-файлами
- Фигуры
- Фреймы
- Карандаш, ластик и полупрозрачный маркер
- Соединительные стрелочки
- Текст
И так далее. На подходе шаблоны, таблицы и многое другое.
Ну и конечно МояДоска прошла регистрацию в Реестре Российского ПО!
На момент написания статьи сервис функционирует бесплатно! - мне важно получить от вас обратную связь чтобы сделать сервис максимально комфортным и удобным!
Какие выводы я сделал
Я реализую уже далеко не первый IT-проект, но наверное из того что я делал единолично, а не в команде - этот один из самых обширных, вещи которые я напишу ниже будут в духе "если лед и огонь встретятся - то будет вода", но эти прописные истины никогда не будет лишним услышать вновь:
1. Я наткнулся на грабли о которых сам всегда знал, но находясь в позиции смотрящего со стороны всегда оценивать легче нежели чем когда лично прыгнул в "пучину морскую" - я работал быстро, но очень переоценил сложность продукта (ну классика жанра же!). Позади - вспаханное поле и впереди - еще два.
2. Вопреки п.1 если все оценивать здраво и реалистично - вы никогда не возьметесь за сложный проект (тем более сами: весь код доски я написал один) ибо с точки зрения здравого смысла это нерационально. Но только так можно сделать что-то стоящее!
3. Знайте свою аудиторию: ключевое это общение с пользователями и необходимо делать это в большом объеме. Даже сейчас я призываю вас к обсуждению дабы сделать проект лучше.
4. Трафик - новая нефть: необходимо собирать аудиторию еще ДО выхода сервиса - так будет больше обратной связи на старте, а у вас меньше соблазнов сделать ненужный функционал в время разработке, главное общаться с потенциальными пользователями (п. 3)
5. Никакого "волшебства" тут нет - ежедневный труд.
Благодарности
- Семье и близким за помощь и что терпят меня не выходящего год из подвала
- Евгения - за то что рассказала о Миро и их уходе, что дало толчок к старту проекта
- Никите - крутой дизайнер доски за то что вписался рисовать дизайн не за бесконечные бюджеты
- Админам Телеграм-каналов кто поддержали информационно
- Пользователям что пользуются и мотивируют на развитие
- Всем причастным!
Сайт доски: moyadoska.com
Телеграм-канал: @moyadoska
Почта для связи: admin@moyadoska.com Телеграм для связи: