В рубрике DOU Проекторвсе желающие могут презентовать свой продукт (как стартап, так и ламповый pet-проект). Если вам есть о чем рассказать — приглашаем поучаствовать. Если нет — возможно, серия вдохновит на создание собственного made in Ukraine продукта. Вопросы и заявки на участие присылайте на editors@dou.ua.
Меня зовут Шкарбалюк Александр, и я FullStack Developer (Sysadmin, DevOps, System Architect и прочие технические специальности) в проекте «Мой город». Это краудфандинговая платформа, призванная улучшить родной город средствами самих жителей, благодаря привлечению большого количества людей и запуску общественных проектов.
Идея
Как это задумывалось и работает:
- горожане предлагают идею или готовый общественный проект;
- при необходимости, размещают его на краудфандинг для сбора средств;
- при успешном сборе денег проект реализовывается.
Если проект не собрал нужной суммы, то после согласования с автором команда переводит эти средства на другой проект. Платформа стартовала в августе 2015 года для работы только в Одессе как инструмент для активных одесситов.
Я стал участником команды проекта три года назад. На тот момент она состояла из двух человек: руководителя платформы Евгения Кузьмичеваи менеджера проектов Владимира Сафонова. Теперь в ней уже 5 участников.
Цель разработки была в том, чтобы подготовить к концу первого рабочего года все, что необходимо, для дальнейшей реализации
Уже в первый рабочий год были собраны средства и реализованы несколько проектов: «Художественное оформление распределительных шкафов связи», «Макеты достопримечательностей для людей с нарушениями зрения», «Восстановление полотен мировой значимости, принадлежащих Одессе»и другие.
Впрочем, я увлёкся :)
Реализация
До моего прихода в проект платформу планировали реализовывать на WordPress. От этой идеи мы быстро отказались — стало понятно, насколько может измениться платформа и сколько придется делать уникальных вещей.
Времени для реализации было в обрез (как обычно), и прототип был написан за две недели практически на одном дыхании. На тот момент сайт, написанный на PHP, состоял из пары страниц. Он позволял подать проект на краудфандинг и собрать для него деньги через подключенный агрегатор платежей WayForPay. Плюс страница с новостями о платформе и проектах. А также несколько типичных для сайтов сервисных страниц: «О нас», «Оферта» и т. д. — в общем, MVP.
После релиза прототипа летом 2015 года начали дорабатывать и расширять функционал. Была написана админка с аналитикой на Angular 1. Части основного сайта, такие как личный кабинет пользователя, сервисные блоки и др., также начали переносить и дописывать на Angular 1.
За первые полгода работы платформа значительно прибавила в функционале: появился блог, раздел «Идеи», изменилась форма подачи проекта и т. д.
Помимо проектов одесситов, которые мы помогали реализовывать, у платформы появились и собственные отдельные проекты: ресурс CherryTeaи «доброе одесское СМИ» OdessaPub.
Отдельно хочу отметить реализацию проекта по решению проблемы бездомных животных — GladPet, который тоже попал в стек моих задач по разработке (о нем также была статья на DOU). Учитывая опыт разработки сайта платформы, я решил разделить backend и frontend. Frontend решено было писать на версии Angular 2, которая как раз тогда вышла. Это позволило бы разгрузить сервер и в дальнейшем при необходимости преобразовать сайт в PWA или даже нативное приложение при помощи NativeScript. В качестве базы данных был выбран хорошо зарекомендовавший себя PostgreSQL. Сессии и кэш хранились в Redis.
Обновление
На определенном этапе развития платформы «Мой город» количество «костылей» и монолитная архитектура стала ограничением для добавления новых возможностей сайта и его поддержки. Кроме этого, накопленный опыт команды выдвигал новые требования к необходимым функциям — в частности, акцентирование платформы именно на городских проектах и управление ими.
Начало вырисовываться техническое задание на обновленную платформу «Мой город 2.0». Основной задачей было сохранение базового функционала, добавление новых функций, упрощение дальнейшей разработки платформы и единая кодовая база с уже написанным gladpet.org.
Решением стал переход всех проектов на Angular 2 и использование микросервисной архитектуры. В отдельные сервисы мы вынесли модули работы с почтой, отправки SMS и внутриплатформенного чата на веб-сокетах. Логика запланированной геймификации была частично реализована внутри самой базы данных, посредством триггеров и замечательной функции Notify, которая асинхронно выдавала результаты вычисления отдельному сервису на NodeJS, который, в свою очередь, через API начислял пользователю очки и бейджи. Для связи между микросервисами использовалось API и очереди сообщений.
Также возникла идея интеграции всех наших социальных проектов и сайтов друг с другом на уровне пользователя. Это позволило бы хранить пользователям свои данные в одном месте и облегчить коммуникацию, а нам упростило бы разработку кабинета пользователя и облегчало аналитику.
Так появился SSO (Single Sign On) сервис MyID, позволяющий логиниться сразу на все подключенные сервисы. Все общие для сервисов данные: информация о пользователе, его точки входа, чаты, уведомления и система бейджей, — были перенесены в него.
Сервис MyID
Факапы
В таких проектах нужен дизайнер. На фултайм, на удаленку, но свой отдельный дизайнер, с которым можно планировать сроки работ, пусть в первом приближении. Мы работали с дизайнерами-волонтерами как социальный проект. Естественно, требовать не могли ничего, хотя ребята выкладывались достаточно неплохо. Финальный дизайн доделывали силами самой команды.
Мораль: отсутствие постоянного дизайнера в команде сильно замедляет разработку сложных онлайн-ресурсов.
В какой-то момент, продумывая интеграцию MyID с подключаемыми сервисами, мы слишком сильно увлеклись предоставлением возможности анонимности. Кейсы одного из сервисов показывали, что пользователи часто скрываются за непонятными никами без полной информации, при этом нарушается полноценная работа ресурса. Мы потратили месяц на разработку моделей решения, дошли до того, чтобы предоставлять возможность создавать «аватары» с привязкой к аккаунту пользователя. После проверки на фокус-группе решили делать самый простой способ регистрации, хотя «под капотом» функционал остался :)
Мораль: не нужно пытаться решить все кейсы при ограниченных ресурсах команды.
Результаты и планы
Итого, на разработку ушел год. Сейчас к MyID подключена платформа «Мой город»и сайт проекта «GladPet». В планах подключить остальные проекты платформы и независимые общественные проекты, которые хотят получить из «коробки» систему авторизации, уведомлений, чаты и геймификацию.
Обновленная платформа «Мой город 2.0» позволяет:
- Использовать отдельный сервис регистрации пользователя MyID.
- Мониторить основные показатели проекта.
- Использовать раздельное финансирование из нескольких источников (даже вне платформы).
- Назначать вознаграждения за финансовую поддержку проектов.
- Научиться азам управления проектом в «Школе».
- Собирать команду в идею/проект.
- Приглашать людей в проект.
Кроме этого, внедрили более легкий для восприятия дизайн, больше внимания уделили текстам и реализовали такую задумку: если попадаешь на сайт первый раз, то «главная» страница представляет собой лендинг с поясняющими текстами.
Для зарегистрированного пользователя «главная» отображается в виде ленты новых проектов, идей и материалов платформы.
На данный момент на сайте:
- 149 идей одесситов;
- 79 проектов на разных этапах;
- 8529 зарегистрированных пользователей.
Инфографика с результатами работы за первые три календарных года
В планах: работа с другими городами, формализация подключения сторонних общественных проектов к MyID. И постепенное внедрение требований GDPR. Они пока для нас некритичны, но это явно завтрашний день для проектов в Украине. Так что не забываем.