Задача бытовая: в компании двое должны каждый день отчитываться — что сделано утром, что закрыто вечером, какие проблемы. Не сдавали месяцами. Не потому что забывали: «напиши в чат текстом» не работает — непонятно что писать, непонятно кто прочитает, и ничего не будет, если не написать. Руководителю остаётся либо каждый день лично напоминать каждому, либо не знать, что происходит.
Что делает бот: В назначенное время сам пишет человеку в Telegram — туда, куда тот и так смотрит сто раз в день — и ведёт по анкете вопрос за вопросом. Это не форма со списком полей, а диалог: ответил «все пришли вовремя» — раздел про опоздания пропускается целиком; ответил «опоздали трое» — бот трижды спросит имя, время и причину. Молчит человек — напомнит по расписанию, но не ночью и не в праздник. Не ответил до конца — пометит отчёт брошенным. Состояние диалога живёт в базе, а не в памяти: сервер перезапустился на середине — человек продолжит с того же вопроса.
Что получает руководитель. Экран «Сегодня»: кто сдал, кто ещё заполняет, кто не начал. Экран «Неделя»: сетка пропусков. Выгрузка в Excel. Вечером — сводка дня от Claude: не пересказ ответов, а что требует внимания. Анкеты и расписание правятся мышкой в вебе, без программиста. И ни одного личного «ну где отчёт?» — этим занимается бот, а не живой человек.
Главная ценность оказалась не в том, что людей опрашивают, а в том, что данные стали структурными. Раньше отчёт был текстом в чате, из которого ничего не посчитать. Теперь каждый ответ — строка в базе со своим типом, и через месяц видно то, что никто не собирался мерить: опоздания копятся к понедельнику, жалобы дают всплеск на третьей неделе. Это появилось само, побочным эффектом того, что отчёт перестал быть текстом.
Началось всё с отказа. Я расписал эксперимент: пять дней вручную пинговать двоих в Telegram и смотреть, сдадут ли. Расписание, шаблоны, таблица на 20 ячеек — и на этом остановился, потому что честно признал, что не буду десять раз за неделю копировать шаблоны. То есть не стал делать ровно ту работу, ради автоматизации которой всё затевалось. Это и было доказательством, что продукт нужен.
Дальше выкинул половину плана: вместо админки на готовой CMS, отдельной SPA и очереди на Redis остались бот, Postgres и команды прямо в Telegram. Восемь недель превратились в три-четыре. Движок анкет с ветвлениями и повторами закрылся за день — не потому что «AI быстрый», а потому что стек перестал сопротивляться.
Три вещи, на которых я сел, — все три про одно: зелёные тесты не значат работающий продукт.
Первая: бот пришёл бы не в то время. Клиент не в моём часовом поясе, а крон стоял по Москве — люди получили бы вопросы на два часа позже. Тесты бы прошли: крон сработал, сообщение ушло. Сломан был бы только смысл — «отчёт утром» превращается в «отчёт посреди дня». Поймал ревьюер с задачей «найди, что упустил автор», ещё на этапе плана.
Вторая: анкеты клиента не запускались вообще. В планировщике сидело сравнение кода анкеты точным равенством со словом morning, а реальные коды были с префиксом компании. Восемь дней код был зелёным и не работал на реальных данных. Нашёл не случайно — сверкой фактических кодов с кодом планировщика перед постройкой редактора расписания.
Третья: «идемпотентность» без уточнения, чего именно. Вечерняя сводка проверяла «есть ли запись за сегодня» — и если сводку запрашивали утром вручную, вечерняя рассылка отменялась навсегда, а данные замерзали на утреннем состоянии. Формально по плану всё верно. Запустил трёх ревьюеров параллельно с чистым контекстом — двое независимо принесли одно и то же; тот, кто писал код, этого не видел.
Вывод: свежий взгляд с минимальным контекстом находит то, чего не видит автор. Не потому что умнее — потому что не знает, как задумывалось.