6 мая 2006 Проектирование

Проблема технических заданий

Я встречал почти во всех технических заданиях одну и ту же проблему. Эта проблема полностью исходит из-за неграмотного и неумелого проектирования, которое заранее ставит результат работы под огромный вопрос и естественно это сказывается на сроках выполнения. Тратиться время на уточнения, на ненужные вопросы, на непонимания проектировщика (или заказчика) и разработчика.

Объясню проблему на примере задачи: по разработке функции добавления фотографии пользователя сайта. Не учитывая случаи, когда проектировщик сам же и разработчик, когда у разработчика масса свободного времени и он все делает по совести, потому что больше нечем занять это время или может быть он учиться.

Какое описание обычно встречается в технических заданиях

Вот такое:

На сайте должна быть форма добавления фотографии пользователя. Можно загружать файлы с расширением jpg и png. В случае неправильной загрузки, пользователю показывается сообщение об ошибке. Также пользователь может выбрать раздел сайта, в который он хочет загрузить свою фотографию.

Вот типичное описание. Чего можно ждать от разработчика с такой постановкой задачи? Всего чего угодно. И вины в этом разработчика не будет, потому что у него как у профессионала и опытного человека, есть несколько решений, которые будут основаны на том, как он видит результат исходя из своего опыта и знаний. Выбрав любое решение, он окажется прав и со спокойной совестью сделает функцию добавления фотографии. Тот ли это будет результат, которого ожидал заказчик? Неизвестно. Потому что задача поставлена таким образом, что заказчик сам не представляет четко результат, он ведь не смог его описать. Возможно, у него в мыслях есть образ того, чего хотел от разработчика, но этот образ кроме него, никому увидеть не удастся, а угадать с первого раза, вряд ли получиться. Можно заметить, что такой подход относится практически к любой задаче: от дизайна и до самых низкоуровневых технических решений.

Что происходит, после того как разработчик выполнил задачу по такому описанию? Обычно, за этим следуют исправления и дополнения со стороны заказчика. В виде: добавить сюда одно поле, ограничить такой-то параметр, увеличить на несколько пикселей другой параметр. Соответственно на простую задачу придется потратить время в несколько раз больше и заказчику, и разработчику. Все сроки сорваны, стоимость разработки взлетает пропорционально затраченному времени и все в проигрыше.

Как на самом деле должна ставиться задача

Тот же пример добавления фотографии изложенный грамотно.

  1. Форма добавления фотографии включает следующие поля в порядке расположения на странице сверху вниз:
    • Список разделов сайта, в которые пользователь может добавить фотографию. Список разделов прилагается (приложение А). По умолчанию устанавливается раздел сайта: «Общий».
    • Форма выбора файла с жесткого диска пользователя.
    • Кнопка отправки файла на сервер. Название кнопки: «Загрузить файл». Кнопка расположена справа относительно формы.
  2. Перед полем выбора файла или перед самой формой пояснение, о том, что пользователь может загрузить файлы только с расширением png и jpg, минимального размера 100 на 100 пикселей, максимального размера 500 на 500 пикселей и объемом файла не более 2 мегабайт.
    • Если пользователь нажимает кнопку загрузки, не выбрав файл, показываем сообщение об ошибке N123 (приложение Б)
    • Если пользователь загружает файл не png и не jpg, показываем сообщение об ошибке № 456
    • Если пользователь загружает файл недопустимого объема или размера, показываем сообщение об ошибке № 789
    • В случае успешной загрузки показываем сообщение № 098
  3. Сообщение об ошибке появляется над полем выбора файла.
  4. Сообщение об успешной загрузке файла показывается вместо формы.

И, конечно, если не учтено где-то отдельно, здесь же описывается, каким-образом файл должен быть обработан программой. Какие имена присваиваются закаченным файлам, в какую папку они складываются, как сжимаются и т.д.

Какие после такой постановки задачи могут быть неясности, доработки и изменения? Никаких. Результат предсказуем, как со стороны заказчика, так и со стороны разработчика. А срок выполнения можно просчитать с точностью до минуты.

Требуйте подробные описания задач.