В последние годы все чаще говорят о Trello, как о прекрасном инструменте для организации и планирования. В нашей компании мы вот уже 3 года используем Trello для планирования многих процессов, начиная с отпусков, командировок и согласования договоров и заканчивая управлением проектами.
К сожалению, не все так прекрасно в Trello. На нем нельзя сделать кастомный workflow. То есть нам нужно занять одного сотрудника, который будет в различных досках перетаскивать карточки руками. Как же сделать так, чтобы этого сотрудника можно было перевести на другую, более интересную и творческую работу?
Конечно, скажете вы, можно написать скрипт, который будет делать все это за нас. Но тут возникает проблема. Скрипт может написать только программист или человек, который понимает, как это делать. Поддерживать скрипт придется ему же. Мы нашли более простое и логичное решение — это семантическое моделирование.
Семантическое моделирование позволяет всю логику работы доски в Trello записать на естественном языке.
Согласование командировок и отпусков
Возьмем самый простой процесс: согласование командировок и отпусков. По существующему у нас регламенту, каждый сотрудник, который планирует взять отпуск или отправиться в командировку, публикует заявку в Trello. Заявка попадает в лист «На согласование».
Как только заявка одобрена (фактически это означает, что руководитель сотрудника и/или представитель финансового отдела поставили галочку в нужный checkbox ), ее передвигают в лист «Согласованные командировки». Заявка на отпуск попадает соответственно в «Согласованные отпуска» и т.д. После этого нужно уведомить сотрудника, что его Заявка согласована.
Допустим, мы хотим автоматизировать этот процесс так, чтобы заявка после согласования перемещалась в нужный лист автоматически, а сотрудник получал уведомление об изменении статуса заявки. Рассмотрим, что нам для этого потребуется.
Необходимые инструменты
Для разработки модели мы выбрали ide от Jetbrains MPS (Meta Programming System). В качестве языка для моделирования используется язык d0SL — Delta0 semantic language, созданный на базе семантических (логических) моделей.
Весь процесс установки Jetbrains MPS и необходимых плагинов полностью описан здесь: https://d0sl.github.io/en/quick/installation/.
Установить готовую модель Trello доски можно по ссылке: https://d0sl.github.io/en/quick/trello/.
Семантическая модель. Что же получилось?
Посмотрим, как выглядит полученная семантическая модель Trello доски. В ней записаны наши правила:
- Is checkbox checked — Проверяет, отмечен ли чекбокс с именем requiredCheckBoxName в карте с id cardId. Таким образом мы сможем проверить, одобрена ли наша Заявка или нет.
- moveCard — Перемещает карту cardId в list и добавляет в Заявку комментарий для пользователя
В модели есть предикат checkBoard, который вызывается для каждой карты в доске. Ему передается идентификатор карты, имя пользователя, совершившего последнюю операцию с картой, лист, из которого карту перемещали и лист, в котором она сейчас находится. Далее в checkBoard мы можем задать правила, по которым мы планируем обрабатывать наши заявки.
Заметим, что cемантическое моделирование позволяет вынести все логические бизнес-правила в один документ и написать эти правила на языке предметной области, «родном языке» для пользователей модели.
Возможность сделать что-либо с картой предоставляет базовая модель TrelloBoard, которая выглядит следующим образом:
Если мы запустим модель, то как только заявка в листе «На согласование» пройдет процесс согласования,
Система переместит ее в соответствующий раздел и уведомит создателя карты об изменении статуса заявки.
Если же заявку, которая не была согласована, попытаться переместить вручную, система отправит ее на место и напишет гневный комментарий.
А что под капотом?
Базовая модель TrelloBoard по сути является интерфейсом, который мы имплементируем в Java (в данном случае в классе com.gav.semanticTrelloBoard.TrelloBoardDSL).
Выглядит это так:
Мы задаем имена функций с помощью декораторов и имплементируем их.
Также у нас есть класс AiTrelloBoard, который и позволяет работать с Trello. В него вынесены java-имплементации таких функций, как start:
В файле trelloBoard.properties мы держим все параметры trello api (такие, как application_key, board_id и т.д) и last_update_timestamp — timestamp последнего update’a.
Таким образом, ценой не слишком больших усилий мы можем автоматизировать необходимые бизнес процессы в Trello. Использовать и поддерживать это решение значительно удобнее, чем программный код.
Очевидно, что возможности семантического моделирования не исчерпываются решением этой задачи. Ведь, если при классическом подходе решения задач аналитик вначале создаёт спецификации, на основе которых впоследствие разработчики реализуют архитектуру и пишут код, то при использовании языка семантического моделирования d0sl аналитик может создавать спецификации задач на формальном логическом языке, которые преобразуются в исполняемый код без участия человека. Это позволяет существенно снизить затраты на разработку, развертывание и тестирование новых сервисов.
Мы сделали решение для работы с Trello открытым и выложили на гитхаб.
Нам хотелось не только предоставить инструмент для модернизации процессов в Trello, но и продемонстрировать на этом простом примере преимущества использования такого современного подхода, как семантическое моделирование. Мы будем рады, если вы сможете добавить что-то свое в этот кейс, и поделитесь опытом использования нашего решения.
Полезные ссылки
Подробнее прочитать о языке семантического моделирования d0sl можно по ссылке.
Математические основы семантического моделирования изложены здесь.
Автор: julryz