Моя сестра занимается выгулом собак, работая прямо из машины. Четырнадцать клиентов, общий Google Calendar, который трое человек редактируют кое-как, и привычка писать «уже иду!» тому, чья собака следующая — из-за чего она дважды забыла и ей пришлось объясняться по неловкому звонку. Она попросила меня сделать «приложение, ничего особенного» в четверг и хотела запустить его к следующему понедельнику. Я сказал, что постараюсь успеть к воскресному вечеру. Это дневник, который я вёл, потому что хотел потом понять, что действительно заняло время, а что мне только казалось таковым.
Пятница, 20:40 — промпт
Я не открывал пустой редактор. Я открыл чат и просто описал бизнес: одиночный выгульщик собак, четырнадцать постоянных клиентов, нужно, чтобы клиенты получали автоматическое напоминание по SMS утром в день прогулки, нужна простая страница, где она сможет добавить нового клиента и кличку его собаки меньше чем за тридцать секунд, потому что обычно она делает это стоя на чьей-то подъездной дорожке. Я один раз сказал «приложение для бронирования» и тут же отказался от этой формулировки — это не приложение для бронирования, это список клиентов с триггером напоминания. Оказалось, что точность в описании того, чем это НЕ является, важнее, чем описание того, чем оно является.
Пятница, 21:05 — план готов
В плане было три пункта, о которых я не просил и которые бы забыл:
- Способ отметить прогулку как выполненную, чтобы напоминание не сработало дважды
- Ссылка на отказ от SMS-рассылки для соблюдения требований
- Простой вид по дням вместо сетки календаря, потому что сетка календаря на телефоне с четырнадцатью записями — это просто стена мелкого текста
За следующие двадцать минут я переписал план три раза, в основном переформулируя то, что и не нуждалось в переформулировке. Оглядываясь назад, это была чистая нервозность — агент по планированию уже с первого раза уловил суть верно, а я редактировал формулировки вместо содержания.
Пятница, 21:40 — первый запуск
Запустил и наблюдал, как команда агентов работает над моделью клиента, страницей дневного вида и заданием на напоминания. Дизайн вернулся похожим на форму приёма в ветеринарной клинике, что на самом деле было верно для аудитории — клиенты моей сестры это владельцы собак в возрасте 40-50 лет, а не питч-дек для раунда A. Я чуть было не начал спорить по привычке насчёт визуального стиля, прежде чем понял, что он подходит реальному пользователю лучше, чем что-либо, что выбрал бы я сам.
Пятница, 22:30 — первая заминка
Для SMS-части требовался боевой ключ провайдера, прежде чем она смогла бы отправить что-то реальное — это правильное поведение, а не баг, но я забыл, что не настроил его. Всё остальное продолжало работать — приложение просто логировало, что оно бы отправило, вместо реальной отправки, а значит я мог продолжать строить, вместо того чтобы застрять на регистрации в Twilio в 22:30 в пятницу. Лёг спать.
Суббота, 8:00 — реальная заминка
Вот это стоило реального времени. Я попросил, чтобы напоминания приходили «утром в день прогулки», и первая версия интерпретировала это как фиксированную отправку в 7 утра для каждого клиента, независимо от времени прогулки. Отлично для прогулки в 9 утра, бесполезно для прогулки в 16:00. Я вернулся в чат и прямо сказал:
Напоминание должно срабатывать за фиксированное количество часов до запланированного времени каждой конкретной прогулки, а не в одно и то же время по часам.
Исправление заняло один обмен сообщениями. Урок был не про инструмент, а про мой собственный промпт: «утром в день прогулки» — это фраза, которая кажется точной тому, кто её произносит, и совершенно неоднозначна для всех остальных, включая, судя по всему, меня самого двенадцать часов спустя.
Суббота, 11:15 — чтение протокола проверки
Прежде чем трогать что-либо ещё, я открыл, на что сама сборка себя проверила:
- Корректное сохранение формы клиента
- Запуск задания на напоминания против тестового дня встреч
- Ссылка на отказ от рассылки, действительно отписывающая тестовый номер
Ничего не горело. У меня уже вошло в привычку читать это, прежде чем самому искать проблемы, потому что это подсказывает, куда действительно направить внимание, вместо того чтобы кликать наугад в надежде что-то заметить.
Суббота, 14:00 — SMS, на этот раз по-настоящему
Настроил аккаунт у провайдера, вставил ключ, отправил себе тестовое напоминание.
Мелочь, но именно в этот момент проект перестаёт быть демкой и становится чем-то реальным.
Суббота, 16:20 — ожидание домена
Направил её реальный домен на сервис и потом два часа занимался ничем полезным, пока обновлялся DNS. Использовал это время, чтобы самому внести четырнадцать реальных строк с клиентами, вместо того чтобы оставить это ей — печатать с телефона в воскресенье вечером. Задним числом это оказалось лучшим применением времени за все выходные: скучный ввод данных полезнее любого лишнего лоска, который никто не просил.
Воскресенье, 9:00 — то, что я чуть не переусложнил
Мне вдруг показалось, что ей нужна будет еженедельная сводка — выполненные прогулки, неявки, выручка — и я начал набрасывать автоматический дайджест по утрам понедельника. Остановился на середине описания. У неё четырнадцать клиентов, и учёт она ведёт в блокноте. Функция сводки — это решение проблемы, которой у неё пока нет. Убрал её из плана. Могу добавить за пять минут, когда она реально попросит, а до тех пор это просто лишняя поверхность для потенциальных сбоев.
Воскресенье, 13:10 — отправил ей ссылку
Она добавила клиента с телефона, стоя на парковке, — и это оказалось важнее любой проверки, которую я делал сам.
Воскресенье, 18:40 — что бы я пропустил в следующий раз
Что бы я пропустил в следующий раз:
- Три переписывания плана, которые ничего не изменили
- Два часа переживаний насчёт SMS-провайдера ещё до того, как я вообще попробовал его настроить
- Почти построенную сводную панель — самые быстрые полчаса за все выходные я потратил на то, чтобы сказать «нет» собственной идее, а не воплотить её
Всё, что реально заняло время, оказалось либо настоящей неопределённостью в моём собственном запросе, либо неизбежным ожиданием чужого DNS-сервера. В следующей сборке буду писать промпт один раз, перечитывать его так, как будто это сделал посторонний, и больше доверять первому плану, чем в этот раз.



