Клиент часто говорит: «Я не понимаю, что такое ТЗ и зачем оно нужно. Просто скажите, сколько это будет стоить».
Я показываю реальный пример технического задания на небольшой модуль — чтобы вы видели, за что платите.
Модуль ОЧЕНЬ простой: вывод курса валют в подвале сайта на Laravel. Но он показывает весь цикл: от архитектуры до распределения задач между командой.
Время на разработку написано "примерно": это лишь демонстрация. Фактически решается за 2 часа максимум.
Задачи исполнителям описаны кратко. Набор задач - полная декомпозиция (отдельная опция). В условиях создания реального ТЗ описание в задачах как правило более полное.
ТЗ приведено с учетом специалистов: бэкенд-разработчик, фронтенд-разработчик, системный администратор, тестировщик.
Заказчик: _______________ | Исполнитель: _______________ | Дата: _______________ | Версия: 1.0
Реализовать отображение актуальных курсов валют (USD, EUR) в подвале сайта с автоматическим обновлением данных.
Модуль должен выводить курсы USD и EUR к рублю в подвале сайта на всех страницах. Отображение — в формате «USD: 92.50 ₽» и «EUR: 98.20 ₽». Рядом с курсами выводится дата последнего обновления, например: «Курс на 12.06.2025».
Источник данных — внешний API (exchangerate-api.com или ЦБ РФ, выбор согласовывается с Заказчиком). Данные обновляются автоматически один раз в сутки по расписанию (Cron). Если API недоступен, модуль должен отображать последние сохранённые данные, а ошибку записать в лог.
Модуль строится на стандартных компонентах Laravel. Для хранения данных создаётся таблица exchange_rates с полями: id, currency_code, rate, rate_date, created_at. Модель ExchangeRate обеспечивает доступ к данным. Сервис ExchangeRateService отвечает за получение данных из API и обновление таблицы. Для автоматического обновления создаётся Artisan-команда exchange:update, которая вызывается через Cron.
Вывод в подвале реализуется через View Composer, который передаёт данные в шаблон подвала. Вёрстка плашки — адаптивная, под стиль сайта.
В системе хранятся курсы только двух валют — USD и EUR. Курсы сохраняются с точностью до двух знаков после запятой. Дата обновления фиксируется автоматически при каждом успешном обновлении. В случае, если API не отвечает, модуль продолжает использовать последние успешно сохранённые значения — это позволяет сайту оставаться работоспособным даже при внештатных ситуациях.
Плашка с курсами располагается в подвале сайта и видна на всех страницах. Вывод выполняется в одну строку: «USD: 92.50 ₽ | EUR: 98.20 ₽ | обновлено: 12.06.2025». Вёрстка должна корректно отображаться на мобильных устройствах, не нарушая общую структуру подвала.
Загрузка страницы не должна замедляться из-за работы модуля. Данные для отображения берутся из базы данных, а не из внешнего API при каждом запросе — это исключает задержки, связанные с сетью. Запрос к базе данных должен быть минимальным: один простой SELECT без JOIN-ов. Обновление данных происходит один раз в сутки, что не создаёт лишней нагрузки ни на БД, ни на внешний сервис.
Модуль разрабатывается на текущей версии Laravel, используемой в проекте. База данных — MySQL. Код должен быть написан на PHP 7.4 или выше. Для управления расписанием используется встроенный планировщик Laravel (Scheduler). Все ошибки, связанные с обновлением данных, записываются в стандартный Laravel-лог. Внешний API выбирается по согласованию с Заказчиком.
В данный модуль не входит автоматическое уведомление о недоступности API, построение графиков курсов, вывод курсов в других частях сайта (кроме подвала), интеграция с биржевыми данными или другими валютами, настройка перечня валют через админку, а также хранение истории изменений курсов. Все эти функции могут быть реализованы отдельными модулями в будущем при необходимости.
Результат работы считается принятым, если курсы отображаются в подвале на всех страницах, обновляются автоматически ежедневно в 10:00, а при недоступности API показываются последние сохранённые данные. Также проверяется наличие даты обновления, корректное отображение на мобильных устройствах, логирование ошибок и отсутствие замедления загрузки страницы более чем на 5% относительно текущих показателей.
Основной риск — изменение формата ответа внешнего API. Для минимизации этого риска в сервисе предусматривается проверка структуры ответа и fallback-механизм для сохранения работоспособности при изменении формата. Второй риск — недоступность API или проблемы с доступом к сети. В этом случае модуль продолжает работать на последних актуальных данных, а ошибка фиксируется в логах для последующего анализа.
Оценка времени выполнения — 4.5 рабочих дня. Создание таблицы, модели и сервиса занимает полтора дня. Разработка Artisan-команды и настройка расписания — ещё полдня. Фронтенд-часть (View Composer, вёрстка плашки, адаптивность) — один день. Настройка Cron на сервере и проверка доступности API — полдня. И ещё один день выделяется на тестирование всех сценариев, включая падение API, и доработку по результатам тестирования.
exchange_rates;Подписи:
Заказчик: __________________ / ______________________
Исполнитель: __________________ / ______________________