Указывайте входы, выходы и граничные случаи
Задача не определена, пока не определены её границы. Старшие инженеры мыслят в категориях «что входит, что выходит и что происходит, когда что-то идёт не так». Заложите это в промпт.
Write a function to parse a date string.
Write a function parseDate(input: string): Date | null.
Inputs: ISO 8601 strings ("2026-06-14", "2026-06-14T10:30:00Z").
Output: a Date object, or null if the string is invalid.
Edge cases to handle:
- empty string or whitespace -> null
- valid format but impossible date (2026-02-30) -> null
- trailing garbage ("2026-06-14xyz") -> null
Do not throw. Return null for all invalid input.
Когда вы называете граничные случаи, AI их обрабатывает. Когда не называете, он пишет счастливый путь, а вы обнаруживаете пробелы в проде. Та же дисциплина применима и за пределами чистых функций: для эндпоинта укажите успешный ответ и ответы с ошибками (какой статус-код на дублирующийся email? на некорректное тело?). Для UI-компонента укажите пустое состояние и состояние загрузки, а не только заполненное. Интересное поведение большинства программ живёт на их краях, так что именно там ваш промпт и должен тратить слова.
Если вы не уверены, какие тут граничные случаи, сперва спросите AI: «Какие граничные случаи должен обрабатывать парсер дат?» — а затем подайте ответ обратно как ограничения. Это превращает модель из генератора кода в генератор чек-листа, а ревью чек-листа быстрее, чем отладка случаев, которые вы забыли.