From one side prototype allows you to:
- get understanding of technology;
- feel how something similar to a final product works and this helps to clarify requirements;
- make client happy by a visualized result.
From the other side:
- if requirements are changed during a prototype implementation it may appear to be hard to modify it;
- completed prototype is not a product which is done. Vice versa this is a draft of many features that are not done;
- its a pity to throw prototype away and there is a temptation to use it a base for future development;
- improve prototype trying to get a final product from it is expensive and time consuming, because improving of code is much harder than coding from the very beginning.
Detailed designing in turn allows you to:
- discover problems missed at a stage of requirements testing: incompleteness, inconsistency, ambiguity;
- fix them cheaply;
- get over requirements changes comparatively easily.
Weaknesses of designing are:
- you must understand the subject area better than when creating a prototype;
- you often need to keep a huge model in your head. Even if this model is written down, you must understand meaning of all records, where did they come from and their purpose;
- designing is not visual and is hard for understanding for people who does not take part in designing process;
- sometimes even a good design leads to an epic fail in the real life.
I agree with that small amount of comments where people say that such two approaches should not be opposed and that prototyping is one of the tools for detailed designing.
-----
Когда-то давно на Хабре возник вопрос о балансе между детальным проектированием и написанием прототипа нового продукта.
С одной стороны прототип позволяет:
- разобраться в технологии;
- пощупать руками нечто отдалённо похожее, на финальный продукт, что поможет уточнить требования;
- порадовать заказчика наглядным результатом.
- если в процессе изготовления прототипа поменяются требования, изменить его может быть сложно;
- готовый прототип - это не продукт, который done. Наоборот, это наброски кучи фич, которые не done;
- выбрасывать прототип жалко, и есть соблазн использовать его как базу для дальнейшей разработки;
- улучшать прототип с целью получить из него конечный продукт - дорого и долго, потому что переделывать код гораздо сложнее, чем писать с нуля.
- обнаружить проблемы, пропущенные на этапе тестирования требований: неполноту, противоречивость, неоднозначность;
- дёшево их исправить;
- сравнительно легко пережить изменения требований.
- нужно понимать предметную область лучше, чем при создании прототипа;
- часто требует держать большую модель в голове. Даже если эта же модель записана на бумаге, вы должны понимать значения записей, откуда они там возникли и зачем нужны;
- ненаглядно и сложно для понимания людьми, не принимающими непосредственного участия в проектировании;
- иногда даже хороший проект не выдерживает столкновения с реальностью.
No comments:
Post a Comment