Нередко я нахожу подтверждение тому, что нарушение правила “сначала думай потом делай” с целью ускорения выполнения задач приводит к обратно пропорциональному результату.
Приступив к разработке без изучения предметной области и без проведения анализа технологий и подходов, пренебрегая написанию технического дизайна, процесс выполнения задачи может превратиться в непрерывный стресс с неудовлетворительным результатом.
Поскольку ранее я довольно часто участвовал в городских спортивных мероприятиях, мне нравится приводить пример в рамках соревнований.
В рамках этой статьи мне хотелось бы поделиться своими наработанными рецептами которые я применяю при выполнении интеллектуальных задач. Используя данные рецепты я уменьшаю стресс в процессе работы делая результат более предсказуемым, а также выпускаю наиболее качественные фичи в сравнении с итогами без применения практик.
Далее мне хотелось бы провести аналогию проектирования задачи с подготовкой к спортивному мероприятию.
Совершенно недавно в одной из компаний где я работаю пришел запрос на разработку telegram-бота. Идея бота представляла из себя процесс оформления заявки для краундшипинговой платформы. Справедливости ради важно отметить тот факт, что у меня отсутствовал опыт разработки ботов и в этом случае подход к выполнению задачи довольно сильно отличался от истории с наличием знаний для реализации похожих запросов.
Изучение карты
Подготовка к забегу начинается с разбора дистанции. Первое, что я сделал когда получил задачу по разработке telegram-бота так это начал собирать информацию, чтобы взглянуть на ожидаемый результат как бы с высоты. Как правило на берегу я узнаю пользовательский сценарий и представляю себя в роли клиента.
В моем случае это был пошаговый сценарий по оформлению заявки. Данный этап мне помог понять, что взаимодействие пользователя с программой должно делиться на шаги. Таких шагов должно быть определенное количество. В ходе дальнейшего анализа стало ясно какие данные необходимо передавать на вход на каждом этапе, а какие ожидать на выходе.
Также узнав пользовательский сценарий появилось понимание, что бот должен иметь доступ к существующей персистенции которая активно пополняется. Это означало что бот должен иметь интеграцию с существующей системой.
Выяснив, что нужно работать с имеющейся системой я начал прорабатывать вопрос интеграции. В моем случае самым простым и рациональным решением было разработать бота как модуль системы.
Детализация маршрута
Возвращаясь к аналогии с подготовкой к спортивному мероприятию, следующим этапом является более детальное изучение дистанции, например наклон рельефа на том или ином отрезке маршрута, пункты с водой и т.д.
В этой фазе я начал более тщательную проработку общего сценария использования. В ходе более развернутого анализа был запрошен текст для каждого этапа и формат интерактива с ботом. Нужно было дать пользователю возможность работать с программой через кнопки в чате. После получения всех деталей я накидал эскиз для более понятного визуального представления итоговой работы.
Изучение правил при участии в марафоне
В случае если не ознакомиться с правилами участия в соревнованиях может существовать опасность быть исключенным за их несоблюдение.
Следующим этапом мне следовало изучить правила использования telegram-API, его возможные ограничения, интерфейс взаимодействия и т.д.
Анализ необходимого снаряжения
При подготовке к забегу часто требуется определить, какое снаряжение необходимо чтобы впоследствии сделать выбор в пользу того или иного бренда.
В ходе анализа готовых решений для взаимодействия с telegram-API дабы не писать свою библиотеку я наткнулся на несколько инструментов на GitHub которые по описанию удовлетворяли все требования которые были необходимы для выполнения задачи.
Чтобы определиться с готовым решением я ознакомился с возможными проблемными местами библиотек: предлагаемые возможности, community, issues. На этом этапе было принято решение в пользу наиболее подходящей библиотеке.
Изучение спецификации по эксплуатации снаряжения
Выбрав библиотеку я изучил документацию по использованию, а также наткнулся на сторонний опыт работы с этой библиотекой на habr, где я почерпнул архитектурные рецепты реализации.
Формирование плана подготовки к забегу
Когда понимание реализации стало максимально прозрачным, нужно было понять как провести этап тестирования. Поскольку в моем случае взаимодействие с системой должно было производиться через хуки, telegram требовал публичный стенд с протоколом https. Здесь я подготовил описание по настройки тестового стенда и деплоя прототипа для тестирования
На разбор всех шагов мне потребовалось чуть больше трех с половиной часов рабочего времени. Детально разобрав этапы я не написал ни единой строчки кода.
Тренировка
Сама реализация и поставка прототипа в тестовую среду заняла чуть больше 9-ти часов работы. Затем после тестирования бизнес сценария нужно было внести еще несколько промежуточных этапов в программу и исправить некоторые замечания.
День старта
Адаптация модуля прототипа в существующий проект заняла примерно 10 часов работы. На этом этапе я заменил все моки на реальные данные из персистенции, настроил конфигурацию модуля в системе и другие важные для успешной работы бота моменты.
Финиш
Достигнув финала я остался вполне доволен ожидаемым результатом и самое важное, процессом от ментального запроса до финишной черты. Во время работы я не испытывал стресс, а просто получал удовольствие от инженерного процесса построения программы.
Подведение итогов
Проведя небольшую ретроспективу я подытожил занимательный опыт через понимание того, где и как можно будет сделать лучше в следующий раз.
Послесловие
Конечно же этапов подготовки могло быть и больше если бы требования были строже, например в случае с задачами где важна отказоустойчивость потребовался бы анализ соответствующих технологических решений и т.д.
На первый взгляд может показаться, что планирование реализации займет продолжительное время, что в свою очередь увеличит сроки реализации, но практика показывает обратное, т.к. число открытых вопросов сводится к минимуму.
В итоге под простой на первый взгляд задачей “требуется telegram-бот” скрывается огромная работа и мне сложно представить как много могло потребоваться времени на выполнение задачи если бы я сразу открыл IDE не имея перед собой четкий план действий. Наверное я бы и не получил медаль финишера, так как прибежал слишком поздно или вовсе бы сошел с дистанции.