завершённым, — имитация конечного результата. Для этого придётся заглянуть в будущее, чтобы увидеть программу в окончательном виде и попытаться заранее смоделировать её ключевые составляющие, Чтобы преуспеть в этом, придётся ограничиться созданием модели на основе набора временных компонентов и API, имитирующих готовую программу. Возможно, часть функций придётся запрограммировать жёстко, для других вообще написать заглушки, а реальные данные заменить имитационными. Все это допустимо на данном этапе — ведь создаётся всего лишь эмулятор реальной программы. Главная задача сейчас — создать «скелет» программы, а «мясом» он обрастёт позже.
• Используйте существующие наработки
Ещё один важный способ ускорения создания прототипа — использование существующих решений. Вовсе не обязательно все писать «с нуля». Некоторые наиболее успешные прототипы появились в результате модификация копии исходного текста рабочей программы.
• Оценивайте результаты
Когда прототип готов, не забудьте оценить результаты своей работы. В частности, работая с прототипом, можно оценить производительность на макроуровне, необходимый объём памяти и то, как она используется. Можно определить и сложность внедрения, и качество технологии, а также попытаться разобраться в её принципах. Короче говоря, какими бы ни были потребности, нужно выжать из прототипа максимум пользы.
• Документируйте результаты.
Это полезно не только для сегодняшних участников группы, но и для будущих. Если при работе с прототипом обнаружились серьёзные проблемы, то они скорее всего снова возникнут и в будущем. Каждый участник группы должен знать, почему принято то или иное важное решение. Со временем у вас соберётся целая библиотека проектных заметок, которая станет историческим документом проекта.
Из собственного опыта
Во время работы над BoundsChecker 5.0 разработчикам NuMega пришлось почти полностью переписать внутренние компоненты программы. При этом работа шла в основном на двух фронтах: обновление систем сбора и анализа информации. Из-за сложности проекта мы испытывали большой соблазн сначала довести до конца конструирование системы сбора данных, а затем закончить систему анализа. Но опять же в силу сложности проекта мы пришли к выводу, что лучше создать прототипы для обеих систем, чем тратить время на создание подробных спецификаций. Было решено смоделировать сбор части нужных данных и написать лишь части кода для анализа только этих данных. Если программа функционировала нормально, выводилось простое диалоговое окно с сообщением, что все работает.
Спустя неделю один из программистов зазвал меня в свой кабинет и продемонстрировал маленькое простенькое диалоговое окно. Прототип работал! Теперь мы знали, что все задуманное осуществимо от начала до конца и серьёзных проблем с производительностью не предвидится. Следующие две недели мы по очереди наращивали все функции, обретая все большую уверенность в успехе. Таким образом, окончательная архитектура и конструкция программы были существенно улучшены. Через три недели у нас был готовый проект, который мы могли точно спланировать. В конечном итоге это позволило нам сэкономить кучу времени при его реализации. Я не говорю, что после всё было прекрасно, но без этих простых действий у нас бы не хватило уверенности, знаний и понимания, чтобы правильно спланировать проект.