Когда ковид ещё не стукнул, и мы все работали из офиса, жизнь была проста и безмятежна. Все были на виду, сидели рядом, всегда могли быстро переговорить, узнать прогресс или что-то напомнить друг другу. Командные активности были офлайн, легко было собраться у доски или пойти вместе в переговорку, никого не забыв. На командном телевизоре крутилась статистика спринта, метрики продукта, результаты OKR-ов. С приходом ковида мы перешли на постоянную удалёнку, и жизнь стала другой. Она стала сложнее. Причём не только для менеджера, которому надо было перестроить всю свою работу с командой, но и для самих ребят. Появилось очень много разной рутины: Постоянно собирать прогресс по разным доскам. Напоминать о стендапах, задачах и PR-ах. Собирать всех в Зуме на разные встречи. Процессы и работа в целом начали терять прозрачность. Стало понятно, что надо с этим что-то делать. С приходом удалёнки, Slack стал чуть ли не единственным местом помимо Зума, где мы постоянно общались. Нам пришла идея написать бота, который будет регулярно собирать различную статистику и выкладывать её в общий чат команды. Сказано — сделано. За выходные был состряпан простенький бот, который был гордо назван Sheldon в честь персонажа «Теории большого взрыва» и награждён соответствующей аватаркой. На тот момент Шелдон умел лишь ежедневно присылать уведомление в чат с сообщением, содержащим список того: какие задачи подвисли; какие PR-ы сейчас открыты и под какие задачи; какие critical-баги присутствуют в бэклоге — у нас есть регламент исправления подобных задач. Прелесть была также в том, что каждое утро в таком сообщении был тег автора или того, кому надо обратить на него внимание. Так нужные люди получали нотификации, а я избавился от рутинной необходимости напоминать самому. Позже в сообщение Шелдона мы добавили информацию о тех, кто в ближайшее время уходит в отпуск и с какого числа, или тех, кто уже отдыхает и когда вернётся. На этот момент его пост в чате выглядел так: Шелдон берёт информацию из Jira, Stash и нашего внутреннего портала Avito People. Эксперимент удался, и мы начали развивать Шелдона. Дальше он начал присылать раз в итерацию общий прогресс целям и статистику по задачам. Для этого пришлось научить его генерировать прогресс-бар и графики. Прогресс по OKR. К сожалению, Slack не умеет отображать много графики. Надо было найти хоть какой-то вариант, который бы помог отобразить прогресс по OKR. Идея пришла отсюда: отображать прогресс-бар в виде 10 символов ⬜ и 🟦, где первый означает сам прогресс-бар, а второй — его выполнение.  Таким образом, если у нас эпик на OKR, в котором 100 задач, и 20 из них выполнено, рисуем последовательность 🟦 🟦 ⬜ ⬜ ⬜ ⬜ ⬜ ⬜ ⬜ ⬜ (20/100). Подправленные под наш юзкейс исходники можно найти тут. Зная, какие эпики у нас в квартал отвечают за OKR, можно легко узнать и вывести прогресс по ним в процентах выполненных работ. Знаю, это не то, как считается прогресс по целям в реальном мире, но таким был единственный автоматизированный вариант, который получилось сделать на тот момент. Статистика по задачам. Смотреть постоянно в кумулятивную диаграмму, высчитывая статистику, — довольно муторная штука. К тому же хотелось дать доступ к таким данным всей команде. Поэтому было решено добавить графики по новым/выполненным задачам и багам в сообщение бота. С этим было сложнее: это уже графика, а единственный более-менее рабочий вариант прикрепить картинку к сообщению бота — ссылка на файл, доступный по http. Нормального варианта складывать картинку на персистентный сторадж на тот момент у нас не было, и пришлось выкручиваться. По итогу был сделан http-хендлер, который генерирует график в png по массиву точек, полученных в get-запросе. Саму ссылку генерируем прямо в момент отправки сообщения после сбора этих самых точек из статистики. Таким образом мы избавляемся от стораджа и можем генерировать разные виды графиков в рантайме. Единственное ограничение — количеством точек, которые мы можем передать, ведь get лимитирован 2048 символами. Исходники можно найти здесь. По итогу получилось сообщение, которое приходило каждый понедельник: Просто показывать статус и отправлять напоминалки о зависших задачах — это хорошо, но что если добавить сразу кнопку на то, чтобы их закрыть? Сказано — сделано. Шелдон научился сам закрывать PR, в которых прошли тесты и есть апрув, а также таски, в которых все PR смерджены. Постепенно Шелдон стал выходить наружу. Его добавили в общий чат поддержки продуктов команды, чтобы систематизировать запросы. Бот научился менять дежурных и звать всех заинтересованных на наши демо. А ещё Шелдон: Автоматизирует процесс дежурств. Он назначает дежурного, напоминает, что нужно ответить на вопрос в канале и напоминает, когда ты дежуришь. Напоминает закрыть дела перед отпуском. Напоминает команде о демо, чтобы не забыть подготовиться. Постепенно о боте узнали в других командах, и из pet-project он стал массовым. Пришлось его рефакторить. Код был разделен на модули, модули на блоки, был добавлен простой механизм сетапа. В итоге, после массированной рекламы в общих каналах, его подключили себе ещё 10 команд. И Шелдон стал полноценным членом семьи. А какие боты используются у вас?