Как я запилил Branzy — легкий и быстрый таск-трекер на WebSocket

от автора

Привет, Хабр! Меня зовут Максим Пухальский, я главный по маркетингу и развитию экосистемы МТС. Особенность моей работы — большое количество задач, которые надо постоянно мониторить. Иногда нужно быстро найти и погрузиться в какую-то из них. Как инструмент мне всегда безумно нравился Trello. Еще до эпопеи с блокировками у него был только один недостаток: если в проекте более 500 задач, он умирает и грузится целую вечность. В Jira хорошее распределение ролей, но она отнимает много времени на ведение и не подходит для динамичных задач.

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

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

Branzy — это воплощение идеи активного менеджмента в коде

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

  • Давать овервью проекта и возможность быстро в него вникнуть. Большинство современных таск-трекеров отлично с этим справляется: jira, Trello.

  • Обеспечивать оперативный доступ к любым задачам, чтобы быстро погружаться в вопросы, совершать в них deep dive и понимать, что там вообще происходит. Trello хорош всем, кроме скорости. Он сразу вываливает и начинает показывать пользователю все карточки. На нашем проекте, где было 300 задач, я порой по 20 секунд ждал, когда просто доска загрузится. Все от того, что разработчики Trello считают правильным вываливать весь объем задач и сразу его визуализировать, с чем браузер справляется плохо.

  • Давать возможность быстро отвечать. Если у тебя есть какой-то вопрос и необходимо его решить, то незачем ждать встречи. Надо написать и быть уверенным, что собеседник получил сообщение и сможет ответить быстро. Для этого отлично подходят разные мессенджеры, например тот же Telegram, но они не предназначены для трекинга задач.

  • Помогать чувствовать, что происходит в команде. Есть два направления: куда ты ведешь команду и куда она движется сама. Разные инструменты для совместной работы позволяют видеть в онлайне, на чем люди сфокусированы, и делать из этого выводы. Правильное и эффективное решение может идти и от руководителя, и от команды, поэтому надо быстро оценивать действия и уметь между ними переключаться.

Мне нужен был инструмент, который реализует все эти принципы. Внезапно оказалось, что сделать свой проще — так и появился Branzy.

Дух Branzy — в его реактивности

Я хочу решать задачи быстро, поэтому Branzy — это про легкое рабочее общение. Jira и Trello работают на стандартном REST API: сообщения будут отображаться только после обновления страницы. В Branzy я использовал WebSocket, чтобы сразу видеть, что человек делает в карточке. По умолчанию грузится только форма, затем устанавливается соединение, и карточки последовательно загружаются при скролле.

От Jira я взял менеджмент: базовый трекинг, статус, подключение людей в команду и назначение им ролей. И дополнил его мгновенным статусом сообщений, как при общении в группах Telegram. По сути, каждая карточка в Branzy — это маленькая группа, в которой ты сразу создаешь задачку, подключаешь людей и начинаешь с ними работать.

В результате мне удалось объединить те функции, которые были в разных инструментах по отдельности:

  • Моментальную скорость загрузки доски. Я очень не люблю ждать, поэтому в Branzy используется оптимизированная система реактивной загрузки данных:

На сервере хранятся не просто связи между доской и задачами, но и последовательности задач в виде tuples. Это самая быстрая форма хранения таких вещей. Таким образом, у каждой задачи есть индекс, где она находится сейчас.

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

  • Поиск по названию. Сейчас реализован простой поиск: по вхождению слова со стандартными исправлениями ошибок Левенштейна. Я размышлял на тему, нужен ли поиск по описанию, но пока руки до этого не дошли.

  • Поиск дублирующих задач. При заведении новых задач Branzy сразу проверяет наличие схожих в рамках проекта, чтобы избежать дублирования

  • Базовая ролевая модель. В Branzy есть две роли: «можно все» и «только смотреть и комментировать». Это позволяет настраивать рабочий процесс так, чтобы те, кому не требуется редактировать задачи, могли ограничиваться комментариями — советчиков много, но ответственными должны быть конкретные люди.

  • Автосохранение в описании задачи. Нет ничего хуже, чем напечатать развернутый текст, а потом понять, что он удалился. В Branzy — сохранение каждые десять секунд.

  • Версионирование. Была ли у вас ситуация, когда вы делали описание, а потом видели вместо него чужой текст? У меня — постоянно. Поэтому в Branzy, когда меняется «рука поэта», у описания создается новая версия, и вы можете легко откатить на прошлую или сравнить, что добавил второй автор.

  • Настройка колонок. Визуально колонки можно настроить исходя из фокусов проекта: показывать или нет аватары участников, время до окончания срока, время с момента переноса задачи в колонку.

  • Быстрая аналитика. Тут сделаю лирическое отступление. Скажите, откуда у всего менеджмента страсть к графикам на канбан-доске? Вот какой диалог у меня часто случается:

— А можно отслеживать, сколько в среднем выполняются задачи?

— Можно, а ты будешь этим пользоваться?

— Конечно, — отвечают мне все как один.

А потом никто, вот просто НИКТО и НИКОГДА не смотрит на эти графики, потому что не в них вообще дело. Если тайминг проекта слетает, ты об этом и так знаешь. В нормальных командах ищут не виноватых, а пути решения и ускорения процесса. Ретроспектива — это великолепный инструмент, но ей не стоит злоупотреблять. Осознали ошибки — и двигаемся дальше.

Возвращаемся к Branzy: у каждой карточки есть быстрый статус, сколько времени она провела в какой колонке. Мой опыт подсказывает, что детальный разбор пары задач в разы продуктивнее, чем анализ доски целиком. Чтобы люди не перебрасывали карточки между колонками, лишь бы не крутился их счетчик, есть кнопка «Готово», которая показывает, что на этом этапе работы закончены, но новый пока не наступил.

  • Наблюдаемость. Правильный проектный менеджмент подразумевает общекомандные синки, где вся команда пробегается по задачам. Использование websocket позволяет видеть, в какой задаче сидят твои коллеги. Например, идет планерка онлайн, ты что-то спрашиваешь и видишь, как люди начинают переключаться на новую задачу. Это может быть подсказка о зависимости, которую ты изначально и не заметил.

    Кажется, игрушка, но это круто подсвечивает то, куда люди фокусируют свое внимание. Особенно, когда в момент разборки по профакапленным срокам задача резко обрастает заинтересованными.

  • Няшки. Напоследок: в Branzy есть темная тема, прикольные иконки передвижения карточек вперед-назад по колонкам, уведомления на почту о новых сообщениях и просроченных задачах и возможность быстро приглашать в проект по открытой ссылке, чтобы не накликивать всех по отдельности. Я мог что-то забыть или добавить новое, пока вы это читаете.

Что у Branzy под капотом

Я начинал делать Branzy на React c Python. В качестве БД использовал Postgres, обмен информации типовой — SocketIO и rest api. Есть один большой сервис API, большой сервис фронта и 11 микросервисов.

В основу архитектуры я заложил идею максимально быстрого ответа пользователю и создание задачи на исполнение. Все, что исполняется дольше, чем 500 мс, выносится в отдельный сервис, который отрабатывает в офлайне. Например, отдельно выполняется рассылка сообщений по команде: в моменте нужно отправить от 2 до 20 писем, а это может занять больше секунды, так как SMTP сам по себе медленный протокол.

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

А теперь Branzy выходит в открытое плавание

У меня у самого в Branzy 42 проекта, в которые я время от времени погружаюсь. Еще есть несколько личных досок, вроде той же BranzyEngine, которую я показал на скриншотах.

Branzy — это результат поиска оптимальной формы управления большими и малыми проектами. У него домен первого уровня .club, потому что это не про инструмент, а про процесс, дружбу и совместные победы. Мне кажется, такой стиль работы подойдет для разных команд и широкого спектра задач.

Облачный Branzy.club полностью бесплатный — я считаю, что эффективное управление должно быть доступно всем. Возможно, какие-то новые фишки могут в будущем попасть в подписку, но текущие функции будут доступны всем пользователям. Если вы решите, что вам нужна инсталляция on-premise, свяжитесь со мной — обсудим. На этом у меня все, готов ответить на ваши вопросы и узнать мнение о продукте. Не зря же я потратил на него столько времени и сил!


ссылка на оригинал статьи https://habr.com/ru/articles/866922/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *