Monday, May 23, 2011

Prototyping vs Designing

Long ago there was a question raised on habrahabr.ru about a balance between detailed designing and prototyping of a new product.
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: