Here are three of the most important non-functional requirements you’re likely to face:
Performance
If your website is too slow, you’ll (obviously) lose users. In this chapter, we’ll look at how patterns can help an individual user experience faster response time, and how patterns can help your system support a greater number of simultaneous users (throughput). (More on this when we discuss the Transfer Object.)
Modularity
In order for different pieces of your application to run on different boxes at the same time, your software is going to have to be modular... and modular in just the right ways.
Flexibility, Maintainability, and Extensibility
Flexibility: You need to change your system without going through some big development cycle. You might need to swap in the “limited time, special offer” components for a big sale. You might find a bug in a new component and need to swap in the older component temporarily. You need your system to be flexible.
Maintainability: You might need to change database vendors, and update your system quickly. You might get obscure bugs and need to track them down ASAP. The admins might decide to restructure the company’s naming service, and you’ll have to adjust—right now! You need your system to be maintainable.
Extensibility: The guys over in marketing might need a new feature to land that big client. Your users might demand that you support a brand new feature that their browsers have. Your system had better be extensible!