Вопросы перед стартом проекта
десять штук, полчаса, экономия вечера
Что это
Завершение главы и единственный её практический итог: список вопросов, на которые стоит ответить до первой строки кода. Не потому, что так правильно, а потому, что каждый из них стоит дорого, если ответить на него через месяц.
Полчаса с этим списком — и запрос к ИИ превращается из «сделай мне бота» в мини-ТЗ (статья 3.15), на которое можно получить предсказуемый результат.
Десять вопросов
1. Что программа делает — одним предложением? Если предложение не складывается, проект ещё не придуман, а не «ещё не написан».
2. Что хранится? Список существительных. Из него получатся таблицы и модели (статья 13.1).
3. Где это хранится? Память, файл, SQLite, сервер БД — и признак, по которому выбранного перестанет хватать (статья 13.3).
4. Кто этим пользуется и сколько их? Один ты, десять знакомых или неизвестные люди из интернета. От ответа зависит всё: авторизация, нагрузка, обработка чужого ввода, цена ошибки.
5. Что нельзя потерять? Данные делятся на две кучки: те, что можно собрать заново, и те, что нельзя. Для второй кучки нужен ответ про резервные копии — в первый день, а не после первой потери.
6. Какие внешние сервисы нужны и что делать, когда они не отвечают? Любой внешний API однажды не ответит. Варианты: показать старые данные, показать ошибку, повторить позже. Выбрать надо заранее, иначе выберет случай.
7. Что меняется чаще всего? Текст сообщений? Правила расчёта? Внешний вид? То, что меняется часто, должно лежать отдельно и меняться без правки кода.
8. Сколько окружений и где секреты? Одна машина или машина плюс сервер; как туда попадают ключи (статья 13.4).
9. Как это запускается и кто перезапустит, если упадёт? Ответ «я вручную» — нормальный для скрипта на вечер и плохой для бота, которым пользуются люди.
10. Как я пойму, что оно сломалось? Логи, уведомление, проверка живости. Без ответа на этот вопрос о поломке сообщают пользователи — или не сообщают, а просто уходят.
Как сказать ИИ
Этот список удобно прогонять вместе с ИИ — он хорошо задаёт уточняющие вопросы, когда его об этом прямо просят (статья 3.11):
Задумка: <опиши в двух-трёх предложениях>.
Задай мне по одному вопросу из списка и дождись ответа,
прежде чем переходить к следующему:
1) что делает одним предложением
2) что хранится
3) где хранится
4) кто пользуется и сколько их
5) что нельзя потерять
6) внешние сервисы и поведение при отказе
7) что меняется чаще всего
8) окружения и секреты
9) запуск и перезапуск
10) как узнаю о поломке
Код не пиши. В конце собери ответы в мини-ТЗ.Получившееся мини-ТЗ — это и есть то, с чего начинается нормальный проект. Из него же собирается архитектурная справка (статья 13.5).
Вот мои ответы на десять вопросов: <текст>.
Какие решения из них вытекают сами собой, а какие
я ещё не принял? Второе — списком, с вариантами
и одной строкой последствий на вариант.На что смотреть
Вопросы заданы, ответы не записаны. Через неделю от них останется общее впечатление.
На вопросы отвечал ИИ. Он может предложить варианты, но выбор — твой (статья 1.1): это ровно те решения, которые потом не переделываются.
Ответ «потом разберусь» на вопросы 3, 5 и 8. Хранилище, резервные копии и секреты «потом» обходятся дороже всего.
Мини-ТЗ написано, но в запросах не используется. Тогда оно не ТЗ, а дневник.
Шпаргалка
Полчаса на десять вопросов экономят вечер переписывания.
Не складывается предложение о том, что делает программа, — проект не придуман.
Для каждого выбора фиксируй признак, по которому он перестанет работать.
Половина вопросов — про отказы, и это главное отличие программы от скрипта.
Что меняется часто — выносится из кода.
Отвечает человек; ИИ задаёт вопросы и собирает ответы в мини-ТЗ.
Ответы записываются в репозиторий и превращаются в справку из статьи 13.5.