When a software system is constructed largely out of reusable components , developers can concentrate their time on understanding the new and unusual portion of the system . Thus, software system can be generated more quickly and easily , leading to style of
programming known as rapid prototyping or exploratory programming. A prototyping system is developed , user experiment with it , a second system is produced that is based on experience with the first, further experimentation takes place , and so on for several iterations. Such programming is particularly useful in situation where the goals and requirements of the system are only vaguey understood when the project begins.