> For the complete documentation index, see [llms.txt](https://vijaynarayanan24.gitbook.io/art-of-software-reuse/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://vijaynarayanan24.gitbook.io/art-of-software-reuse/design/evolve-functionality-iteratively.md).

# Evolve Functionality Iteratively

When you recognize the need for a reusable software asset it is key to map out a realization strategy. If you approach asset realization big bang you could:

* end up creating a software asset that is irrelevant to your project’s immediate needs
* add significant schedule risk due due to increased design, development, and testing time

Either way, you will spend a ton of precious $ drowning your savings. *Instead mitigate these risks\_by evolving the reusable asset over multiple iterations.* Take the example of a reusable assets that sends notifications to your users. Let us name the asset Business Notifier. Instead of trying to build the 100 bells and whistles that this asset could have we come up with a simple plan to evolve it over several iterations.

Iteration #1 – notification via email for predefined business events\
Iteration #2 – allow user to choose notifications out of the business events\
Iteration #3 – let users define custom business rules to generate business events\
Iteration #4 – send notifications on a web console or instant messaging applications\
Iteration #5 – allow users to include their friends when receiving notifications.\
Iteration #6 – integrate notifications with workflow for review by a support person

Obviously this is just an example and the features you put in an iteration are based on business requirements, priority, ease of implementation, and project deadlines. You could for example reduce investment in an asset if it is no longer a priority or vice-versa.

The takeaway is no matter what you want to build as a reusable asset plan its evolution over multiple iterations.*You will reduce risks, stay flexible to your business requirements and needs, and build only assets that you want to invest in.*
