Google





Software’s Best Kept Secret: "ilities"

Luc K. Richard
July 11, 2005

Many developers make the mistake of thinking that quality attributes, commonly referred to as nonfunctional requirements, technical requirements or ilities, are somewhat superfluous. Convinced that these nonfunctional requirements are not as critical to the end product as functional requirements, ilities are rarely documented or even understood.

While quality attributes seem rather unnecessary to many developers, the fact is that they are critical to your product – and your business!

As a short-term competitive advantage, it's not hard to understand that when customers are faced with two or more products that offer similar functionality, they will pick the one that performs best, is more reliable, or user-friendlier. While this should be a good enough reason to emphasize quality attributes, many of you still need more convincing.

If you've been in this business long enough, I'm sure you've come to realize the importance of protecting your intellectual property. Unfortunately, your competitors seldom have problems getting a hold of your software. Whether they purchase your product, obtain an evaluation copy from your Web site, or download a pirated version, most can get a copy fairly easily, thereby making it almost impossible for you to keep your incremental improvements secret. Worse, once your competitors learn about your latest bells and whistles, they can easily copy them, thereby taking away any competitive advantage you may have had.

What if you could enhance your product with characteristics that couldn't be stolen so easily? What if you could add a key differentiator that your competitors could not reverse engineer so effortlessly?

Software's Best Kept Secret

Enhancing your system's performance, usability and reliability requires a lot of effort. A product can't achieve a 5-9 level of reliability overnight, nor can you improve its usability simply by throwing in more features. (As a matter of fact, throwing more features in a product will most likely make is less user-friendly.)

Given that functionality can so easily be copied and that your customers, when faced with two products that meet (or exceed) their functional needs, make their purchase decision on non-functional factors, don't you think you should invest in ilities?

Quality Attributes Enumerated

The following is a (partial) list of software quality attributes common to most software development projects.

External Quality Attributes
Availability: The percentage of “up-time” during which the system is fully operational.
Performance: The system's ability to meet latency, throughput, and resource utilization requirements.
Reliability: The extent to which the system will execute without failure for a specific period of time.
Scalability: The system's ability to handle a large amount of data.
Security: The system's ability to prevent and/or forbid restricted actions.
Usability: The end user's ability to learn the system and complete tasks.

Internal Quality Attributes
Integrability: The ability to make the separately developed components of the system work correctly together.
Maintainability: The system's ability to evolve and meet changing requirements.
Modifiability: The ease with which a software system can accommodate to changes.
Portability: The ability of a system to run under different computing environments. The environment types can be either hardware or software, but is usually a combination of the two.
Reusability: The degree to which existing applications can be reused in new applications.
Testability: The ease with which software can be made to demonstrate its faults.

External requirements, as you may have guessed, are important to your external customers. They therefore offer more potential for differentiating your product. On the other hand, internal requirements represent quality attributes that are important to your internal customers such as your product development or quality assurance teams. While requirements such as maintainability and testability will go a long way to reduce your development and maintenance costs, they won't truly influence your buyers to pick your product over your competitor's.

External and internal quality attributes differ in another manner. External requirements are measurable in a lab environment and can be assessed before a product is released. Internal requirements can only be evaluated post facto , when a product has already gone through its lifecycle.

A Word of Advice

Different domains and industries give emphasis to different quality attributes. A bank evaluating an online banking solution would definitely consider security as the most important quality attribute. On the other hand, an ezine that publishes hundreds of articles might prefer to emphasize usability or performance. Regardless of which quality attribute is important to your industry, my advice remains the same:

Conclusion

Software quality attributes such as performance, reliability or usability can make or break any sale. Nonetheless, defining quality attributes is an often-underestimated part of the software design and development process. If you truly want to gain a sustainable competitive advantage over your competitors, follow this simple advice: Find out which external nonfunctional requirements are critical to your specific domain or industry, and then gather, document and test these ilities as if they're all that matter. Why? Because once your competitors have copied all your functional secrets, ilities ARE all that matter.


This article was originally published on www.gantthead.com.