In the world of software architecture, there are many “-ilities” you must take into consideration with every project. Prioritizing them is necessary because the client will optimistically ask that you do all of them. To help you out, here is a quick list outlining my top 7 default “-ilities” in the order that I prioritize them:
Software usability can be described as how effectively end users can use, learn, or control the system. Some questions to ask yourself to determine usability might be:
The definition of maintainability [for me] implies how brittle the code is to change. As a result, I tie the terms - flexibility and testability - into the overall maintainability of a project.
Scalability is the ability of your program to meet the demand of stress caused by increased usage gracefully. In short, ensure your program doesn’t slow or bust when pounded by more users than you originally anticipated.
How long the system is up and running and the Mean Time Between Failure (MTBF) is known as the availability of a program.
Are there points in the system where changes can be made with (or without) program changes?
I shouldn’t need to go into this one. Still, to be thorough, I like this definition of security: the measure of a system’s ability to resist unauthorized attempts at usage or behavior modification while still providing service to legitimate users.
Portability is the ability of your application to run on numerous platforms. This is can include actual application hosting, viewing, or data portability.
Obviously, this is not an exhaustive list. There are many, many more (Backward compatibility, Interoperability, and Reusability, to name a few).