This is part two of a series of two blog entries about non-functional requirements using PASS MADE.
So after that extended week-long break, I think it’s time we have a look at the rest of the non-functional requirements in PASS MADE, and also some others that don’t appear in the acronym.
As a quick refresher, PASS MADE stands for…
Performance
Availability
Security
Scalability
Maintainability
Accessibility
Deployability
Extensibility
During this week we’ll look at the requirements between Maintainability and Extensibility as well as briefly mention a few others.
Maintainability requirements describe how easily a software system can be modified to correct bugs, add new functionality desired by a client, or to improve performance. In a nutshell, it is a measure of how easy it is to keep the solution functioning correctly. The requirements are usually characterized with some sort of number to describe how often or to what extent the system will be serviced or unavailable. Here are some examples of maintainability requirements:
- Maintenance work on the system will be limited to ten days throughout the year, and each of those work days will not exceed eight hours.
- Minor functionality updates to the system will take no more than five days.
- Any period of unexpected downtime will not exceed twenty minutes.
When looking at these requirements, it outlines the main objectives of maintainability requirements:
- Minimize maintenance costs and allow for programmers to work on other projects instead of doing maintenance work.
- Ensure that minor updates to the application don’t consume your resources.
- Ensure that defects and errors in your application don’t take long to correct.
Areas of concern with maintainability requirements usually revolve around the following areas:
- Breadth of the Application – Across how many locations will the solution be installed? If it’s installed in only one location, it (obviously) makes maintenance work a lot easier than it would be with a multi-site installation.
- Method of Distribution - If you are installing the solution across multiple sites, how are you going to make updates to your software universal? In essence, how are you going to keep your software properly maintained?
- Maintenance Expectations – It is important to discuss the maintenance work the client expects and come to a solution before writing anything in a formal document.
- Impact of Third-Party Agreements – If you are using third-party components to develop your application, you need to put a process in place to account for updates and bug fixes.
To summarize, maintainability requirements should focus on quantitative answers to problems such as modifications to improve functionality, corrections of minor defects (along with documentation updates). The areas these problems should revolve around include the time and expense needed to repair defects, account for system downtime, and staff locations with support teams.
Accessibility requirements focus on making your software as flexible as possible to accommodate for a wide range of users’ needs with regard to disabilities and impedances that would make their experience of your software less fruitful.
Before you get started with accessibility requirements, it is important to consider your user base. Talk with your client about how many of the potential users of this software will need assistive support from the software. Usually the potential users of your software are asked to fill out a needs assessment document, which outlines accessibility requirements from the employees’ perspective, the organization’s processes, and the current technology. From the results of this needs assessment, you and the client can start to think about purchase decisions to take accessibility needs into consideration. The chances are that you will need to incorporate accessibility into your final solution, so the rest of this section assumes that.
For some users, accessibility could simply mean being able to change font size, colors, sounds, and other display elements. For others with more serious impairments, assistive technology products are used to accommodate appropriately. Remember that a lot of these products are already built into the operating system, like Microsoft Narrator. Here are some areas in which to consider implementing accessibility:
- In areas that affect a large number of users.
- In areas that your users will use frequently.
- In areas that are integral and necessary for your application to work according to specification.
- Application-wide such that it is compatible with accessibility aids.
The final topic in this section looks at web-based solutions. It is estimated that about 8% of all web users are disabled, so making a website that is accessibility-enabled can reach many more users than a non-accessibility-enabled one. Consider users with slow connections or text-only browsers when designing your application.
Deployment requirements focus on your users. Who are they and how are they getting your application? How many sites are you deploying to? Which users require solutions in different languages?
Users can be broken down into three categories:
- Standalone Users – Users who are not connected to a LAN.
- Remote Access Users – Users who will gain access to the network through remote access modems.
- Local Network Users – Users who are directly connected to the network.
The important thing to remember is that you need to understand the needs of each of these users to have a successful deployment. Collect information from your project teams, staff, and user groups. Surveys and interviews are also good supplements to figuring out how best to deploy a solution.
Remember that even if an application runs correctly in the development environment that there is a still a chance for it to crash and burn in the production environment. End users might be missing critical components that the project team assumed was on all computers; the components may even be outdated as well. One way to avoid this is assume that your target computers don’t have any critical components on there, meaning that you have to install them with your software. But this doesn’t stop the DLL Hell “phenomenon” most of us are familiar with, as all of those components could later become corrupted.
The last thing to mention is about distributing your application. How will it make its way to your end users? This will mostly depend on the location and number of your users as well as what category they fit into (see above). Here are some common deployment scenarios:
- For a large number of users in diverse and remote locations you might want to consider deploying through CD-ROM.
- For a smaller number of users you should consider deploying through the Internet or over an intranet.
- For users that are located worldwide you should consider deploying over the Internet with different packages for different language accommodations.
Extensibility requirements look at the adaptability of a system and the degree to which that system can be enhanced in the future. There are two main tenets of extensibility that come up every time a new feature is requested for an application: cost and time.
When designing your application, you should think about the direction in which the application is likely to go after the initial deployment phase. Of course it is good to talk to stakeholders, your client, and members of your project group to create a clearer (though it would be impossible to make it crystal-clear) vision of where the project is going. Systems have to remain flexible to account for the changing nature of business, because if those systems become out-of-date, then it will be trashed. This is a constant problem that software developers have to face, and considering extensibility is a good first step toward alleviating the problem.
On a more concrete note, when developing extensibility requirements, think about the average time and the cost it will take to make updates in different areas of the application. After making these requirements, design defensively! It will save you a lot of time in the long run when the client requests an update to the application.
In looking at PASS MADE there are a slew of areas that you have may not have considered when designing your application, but these are just operational requirements. Other requirements exist like business requirements (how your application fits with the business’s organizational structure, performing gap analysis, and modeling data flow) and user requirements (use cases, globalization, and localization concerns) which should be performed before you even make it to the PASS MADE level. Also, you will need to use your analysis from PASS MADE to determine whether the production environment has the right hardware and infrastructure to support your application. If not, you and your client will need to reach an agreement on how their IT infrastructure will support the current application and any future releases of your application. A substantial amount of planning and communication should occur to reach the right conclusion on these issues, and they will surely save time later down the road.
Adapted from: Randy Cornish, et. al, Analyzing Requirements and Defining .NET Solution Architectures (Exam 70-300). Indianapolis: Que Publishing, 2003.