← Олег Никешин Ульяновск · 2026 Архив · 18 записей RU / EN
08.08.26 Лаба 6 мин

Сделал бота в октябре. Сдал в июле

Пиксельная инфографика: таймлайн от октября 2025 к июлю 2026, стек Python, FastAPI, aiogram, Redis, httpx и отметка о приёмке 24 июля
Открыть в полном размере →

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

В конце октября я довольно случайно взялся за Telegram-бота для одного проекта. Задача не выглядела большой.

Нужно было связать Telegram с существующим backend: авторизовать пользователя, сохранить его настройки, получить подходящие данные и показать результат обратно в боте.

Уже 30 октября работал тестовый экземпляр с авторизацией, а backend-команда параллельно открывала недостающие методы API. Webhook я временно принимал на своём сервере.

По ощущениям, оставалось просто довести сценарий до конца.

Бота приняли только 24 июля следующего года.

Бот был несложный

Это важная часть истории. Технически проект никогда не казался мне чем-то особенно страшным.

К марту, когда пришлось очередной раз восстанавливать контекст разработки, я написал примерно то же самое: если собрать централизованное API и понять актуальную задачу, бот закрывается нормально.

Но к тому моменту я уже помнил трёх менеджеров и четырёх backend-разработчиков, которые успели пройти через проект.

И здесь постепенно стала видна настоящая проблема. Она была не в коде.

Требования существовали сразу в нескольких местах

Часть сценария жила в Miro.
Что-то обсуждалось в Telegram.
Что-то находилось в Swagger.
Какие-то документы существовали, но относились уже не совсем к той версии проекта.

В марте команда буквально искала старое ТЗ и доступ к схеме, чтобы восстановить, по какой именно логике вообще собирался бот. Сценарий при этом за время разработки успел измениться.

К концу мая ситуация выглядела почти комично. Меня попросили передать бота и финальный документ требований.

Документа не было.

Я ответил примерно так: вот бот, вот схема, задачи в основном фиксировались в переписке, в принципе всё должно работать.

Фраза, которую в production желательно произносить только при наличии хорошей страховки.

Что к тому моменту вообще получилось

Несмотря на весь окружающий туман, сам бот постепенно превратился во вполне нормальный отдельный сервис.

Стек в финальной версии был примерно таким:

  • Python 3.12
  • FastAPI
  • aiogram
  • Redis
  • httpx
  • Telegram Webhooks

В production предполагались reverse proxy, HTTPS и отдельный systemd-процесс. Сам сервис хранил пользовательское состояние в Redis и ходил в backend через HTTP API.

Через backend бот умел работать с авторизацией и SMS, настройками пользователя, подборками, созданием и обновлением данных профиля и получением результатов по выбранным параметрам.

То есть к этому моменту это уже был не /start → две кнопки → спасибо.

Но архитектура всё ещё была самой предсказуемой частью проекта.

Самые неприятные баги находились между системами

Одна из типичных проблем выглядела так:

  • бот говорил, что нашёл подходящие результаты;
  • показывал их;
  • кнопка «посмотреть всё» открывала сайт;
  • на сайте оказывался другой набор или вообще ничего.

На стороне Telegram всё могло выглядеть корректно. На стороне API тоже можно было получить 200.

Проблема находилась в том, что разные методы backend и страница сайта применяли фильтры немного по-разному.

Это хороший пример того, как менялось само содержание моей работы. Я всё реже «чинил бота». Вместо этого приходилось прослеживать путь данных:

Telegram → bot service → API → состояние пользователя → фильтрация → frontend

И искать точку, где две части системы переставали соглашаться друг с другом.

Потом проект почти закончился

Первого июля пришли ещё небольшие замечания. Одну проблему с формированием ссылки я поправил довольно быстро.

Через несколько минут менеджер написал: клиенту всё нравится. На следующий день уже заговорили об оплате.

В переписке появилась довольно точная формулировка всей истории:

Мы по сути с тобой бота всего переделали.

В какой-то степени так и было. Только переделывался он не потому, что первая версия была полностью неправильной. Менялась система вокруг него.

«Финальные правки»

Разумеется, первое июля не оказалось финалом.

Потом заказчик захотел вычитать все тексты и кнопки. Я выгрузил их отдельным файлом. Получилось больше двадцати килобайт текста, на что менеджер ответил: «целый реферат».

Продолжались проверки авторизации.
Менялись ссылки.
Уточнялась логика SMS.
Переставлялись пункты меню.

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

В этот момент в переписке появилась ещё одна прекрасная характеристика проекта: «у нас нет вообще никакой проектной документации по боту».

Так что продолжили разбираться по фактическому поведению системы.

24 июля

В 14:30 пришло сообщение: заказчик бота принял. Дальше только гарантийные исправления, если они понадобятся.

Проект, начатый в октябре как довольно небольшой Telegram-бот, наконец закончился. Почти через девять месяцев.

Что я из этого вынес

Можно посмотреть на эту историю и решить, что бот разрабатывался девять месяцев. Это будет не совсем так. Основной код можно было написать значительно быстрее.

Девять месяцев существовал проект. А проект состоял не только из кода.

Он состоял из меняющегося backend, новых требований, нескольких поколений участников, потерянного контекста, разных представлений о фильтрации, клиентских правок, старых схем и новых релизов.

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

Наверное, поэтому сейчас я гораздо меньше верю в фразу «там простой бот».

Простой бот может быть простым. Система, в которую его нужно встроить, почти никогда.

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

И почему-то именно это в итоге оказалось основной работой.

← лаба
Написать мне →
Связаться
olegnickeshin@gmail.com t.me/bettertextletters github.com/OlegNickeshin