In the Real World, web apps can
get complicated. A popular web site can get hundreds of thousands of hits per
hour. To handle this kind of volume, most big web sites create complex hardware
architectures in which the software and data is distributed across many
machines. This complexity can be handled through the non-functional parameters
of the system.
The most important and fore
fronted job for a web application solution is to provide the end user / clients
with a reliable, useful, and correct experience. In other words, the designed
solution must satisfy the functional requirements such as “select an item from
the menu” or “add item to the shopping cart”. Once we have made sure that the
system supports the use cases, we will most likely be faced with another set of
requirements—requirements for what happens behind the scenes, i.e. the
Here we discuss some of the most
important non-functional requirement we are likely to face during the software
development cycle: Performance, Modularity, Flexibility,
Maintainability, and Extensibility
Performance: If our website is too slow, we will (obviously) lose users. So we need
to circumvent this situation which could help an individual user experience
faster response time so that system support a greater
number of simultaneous users (throughput).
A common architecture we are
probably quite familiar with is configuring the hardware in layers or “tiers”
of functionality. Adding more computers to a tier is known as horizontal
scaling, and is considered one of the best ways to increase throughput.
Modularity: In order for different pieces of our application to run on
different boxes at the same time, our software is going to have to be
modular... and modular in just the right ways.
Flexibility: We need to change our system without going through some big
development cycle. We might need to swap in the “limited time, special offer”
components for a big sale. We might find a bug in a new component and need to
swap in the older component temporarily. So, we need our system to be flexible.
Maintainability: Sometimes we might need to change database vendors, and update our
system quickly. We might get obscure bugs and need to track them down ASAP. The
admins might decide to restructure the company’s naming service, and we will
have to adjust—right now! We need our system to be maintainable.
Extensibility: The guys over in marketing might need a new feature to land that
big client. Our users might demand that we support a brand new feature that
their browsers have. So, our system had better be extensible!