Skip to main content

Quality busters: Forget the environment

The importance of non-functional and operational requirements

Michael Russell (MikeRussell@VickiFox.com), Application Architect, Vicki Fox Productions, Inc.
Photo of Michael Russell
Michael Russell has a Bachelors Degree in Physics and a Masters Degree in Computer Science. He was a logistics engineer, a technical services manager, and a certified IT architect at IBM for nearly 14 years; he is currently a Web application architect for a resort company in Orlando, Florida. He has experience in Windows, UNIX, and OS/400 environments and uses Web technology for entertainment through his own company, Vicki Fox Productions.

Summary:  The quality of an application depends on more than how well it satisfies user-functional requirements. Even an application that successfully makes it through development and deployment can encounter grumblings from users and system operators if it is hard to use, keeps failing, is difficult to diagnose, or consumes excessive resources. In addition to user-functional requirements, you must also consider how well the application satisfies the non-functional requirements and fits into the organization's operational environment.

View more content in this series

Date:  10 Aug 2004
Level:  Introductory
Activity:  1545 views

After the celebration

It is Friday and the SHEEP Web team is celebrating the successful installation of the new Java technology-based rich-client sales application. Everything appears to be working as designed. The users are happy. The project manager is finally relieved. The biggest decision being made today is who will get the last piece of pizza.

On Monday, the phones ring nearly non-stop. Several users call and ask, "What does RemoteException mean?" or, "What is a JNDI lookup?" Other users complain that they keep accessing the training system when they want to access the production system. The operations support team points out a log file that is growing very quickly, and says they may need to restart the server application to truncate the file. Suddenly, the SHEEP Web team is busy just keeping the application running.

A month later, the business sponsor points out certain screens in the SHEEP application that take many minutes to load and affect productivity. The developers have created a large number of quick-and-dirty fix scripts that run periodically to clean up tasks and files and restart services. The application is getting more fragile and complex.

This scenario seems to happen with many applications that are successfully deployed, whether custom built or off-the-shelf. Within months the well-crafted application is covered in virtual duct tape to hold it together.


Diagnosing the causes

The SHEEP Web team holds a meeting to determine what went wrong.

The team members followed the best-of-breed methods and patterns. They had active participation from the user community, so they understood the functional requirements well. They picked an appropriate reference architecture based upon the application class. They used the latest tools and techniques. They had active quality assurance and configuration management during the project. The source code followed the best object-oriented principles.

Figure 1 illustrates the way developers often think of an application. They think of the components that make up the application and how those components hold together. The boundary of their design is the functional requirements of the application. The SHEEP application figuratively suspends in isolation, and developers make the design decisions from this isolated view.


Figure 1. The developer's view of an application
The SHEEP Application developer view

Quality is often defined by how well the application meets the user's functional requirements, follows the best coding practices, uses the best methodologies, and passes various testing.

This narrow view of application quality even extends to the enterprise level. Too often, architects concentrate on the applications in the enterprise as isolated islands and on how to connect them.

However, no application exists in isolation. As Figure 2 illustrates, applications exist in a specific operational environment. An application consumes limited system resources, such as memory and disk space. It generates by-products, such as log files and temporary files. Applications have to share the operational environment with other applications. Specialized applications monitor the business applications. The operational environment has boundaries and security mechanisms to keep out malicious applications. All of these interrelate in one or more ways.


Figure 2. The operational view of an application
The SHEEP Application operational view

So, what went wrong with the SHEEP application? This column looks at the following causes:

  • Picking an inappropriate architecture
  • Overlooking the operational environment
  • Forgetting the non-functional requirements

Another cause, compromising the design to satisfy business constraints, is a management and political issue, and is beyond the scope of this column.


Understanding the influences

The causes of poor application quality correspond to failures to address the major influences on the application. More accurately, quality is how well the application satisfies all the influences and expectations. Figure 3 illustrates these influences.


Figure 3. Influences on an application
Influences on an application
  • The functional requirements describe what the application does.
  • The non-functional requirements describe how the application performs.
  • The operational environment describes where the application runs, who runs it, and when it runs.
  • The business constraints describe why the application is needed. This includes the value of the application to the business, the return on investment, funding, delivery schedule, resources, and more.

Architects and developers enjoy tackling the functional requirements and tend to concentrate their efforts in this area. A good evidence of this is the volume of books about specific technologies, languages, patterns, and methods that all speak to the functional aspect of the application. After all, the functional aspects are easier to understand, generally involve a limited number of solutions, and are exciting to developers. The other influence areas do not have clear-cut solutions, involve making trade-offs (none of which are ideal), and are boring to developers.

The application and its influences tightly interrelate. A choice made in one area affects all of the others. For example, using a distributed architecture (functional and operational) affects the application's maintainability (non-functional) and cost (business).


Picking an inappropriate architecture

Even with well-understood functional requirements, sometimes an architect chooses an inappropriate architecture. This happens for many reasons, including not knowing alternative approaches or platforms, political or career pressures, the desire to use the latest hype-driven products, and others.

In the opening example, the Web team created the SHEEP application. The business requirement was simply to create a mechanism that provided fiber for cloth. The SHEEP application fulfilled this requirement by creating wool. However, the business actually thought of a COTTON application since it fit better with its existing operating environment.

You can often satisfy the functional requirements with multiple solutions. Ideally, the architect evaluates the trade-offs associated with each solution to find the one that best fits the business' operating environment.


Overlooking the operational environment

As mentioned before, an application does not exist in isolation. It exists within an operational environment -- the life-support system for the application.

When meeting with the business users to obtain the requirements for the application, you realize that they are not aware of or concerned about what it takes to support the application. Their interest lies in how well the application supports their business needs. As a result, the architect must include the operations (or infrastructure) team in the requirements and design phases. Don't wait until it's time to deliver the application to work with the operations team. The operations team supports the application, and it has different requirements than that of the business community.

Figure 4 illustrates the major concerns that the operations team has when supporting an application. These concerns interrelate so that decisions made regarding one concern impact the others.


Figure 4. The operational environment
Aspects of the operational environment
  • User support -- Provide an interface with the user community
  • Problem resolution -- Diagnose problems and perform repairs
  • Configuration -- Manage the setup, topology, and customization of computers, networks, system software, and applications
  • Assets -- Manage the computing resources (inventory control) and make appropriate resources (processor, memory, and disk) available to applications
  • Security -- Manage the accessibility of the computers, network, and applications
  • Performance and capacity -- Measure computer and application performance and estimate growth rates to determine current and future capacity needs
  • Changes and updates -- Manage changes to applications and updates to system software and program products
  • Operations and monitoring -- Monitor the applications to ensure each is running as planned and to discover problems proactively
  • Backup and recovery -- Provide support for system restoration in the event of data or system failures

Forgetting the non-functional requirements

Just as architects and developers sometimes overlook the operational environment, they also sometimes forget the difficult-to-quantify, non-functional requirements. In many cases, when non-functional requirements are addressed during the initiation phase, the requirements are poorly stated or expressed in terms that are difficult to evaluate or act upon.

One possible reason why developers forget non-functional requirements is the difficulty of negotiating them with the business community. The business might want around-the-clock operations, yet the users only work normal business hours. The business might want excellent usability but be unwilling to pay for usability testing, or it might want sub-second response times on queries that process millions of data records. And the list goes on.

Architects build the non-functional requirements for the application by balancing the desires of the business with the realities of the operational environment, application architecture, and business constraints.

The non-functional aspects of the application interrelate. A design change that addresses a performance issue likely affects the reliability and maintainability of the application, among other aspects. Architects should consider the trade-offs associated with each solution.

The major, non-functional requirements can be divided into two categories -- observable and non-observable. Observable requirements are those that can be tested or are discernable at runtime. Non-observable requirements cannot be objectively tested and must be subjectively evaluated.

With statistical sampling, you can measure the observable, non-functional requirements, including:

  • Performance -- The responsiveness of the system, for example, response time and throughput
  • Security -- The measure of the system's ability to protect from malicious agents and unauthorized changes, while permitting legitimate use
  • Availability -- The proportion of time the system is available (up and running) to service user requests
  • Reliability -- The system's ability to provide consistent behavior, perform the intended work, and recover from failure
  • Capacity -- The resource usage of the system, including projected growth
  • Usability -- The ease with which the target audience can use the system

The non-observable, non-functional requirements include the following:

  • Maintainability -- The ease with which the system can be changed, whether for bug fixes or to add new functionality
  • Portability -- The ease of moving the application to other operating environments
  • Integrity -- The ability of the system to protect and preserve transactions
  • Scalability -- The ease with which the system can move to larger or distributed computer environments to satisfy processing demand
  • Manageability -- The ease with which the system can be reused, deployed, and tested
  • Safety -- The ability of the system to not harm users, including physical harm, as in medical systems, or financial harm, as in accounting systems, or other forms of harm
  • Efficiency -- The assessment of how well the system utilizes resources and how it affects other applications in the environment

In summary

You can create an application using the best practices, best tools, and best methods, and it can still be of poor quality and not satisfy users' needs. Overlooking the influences on the application sometimes causes this poor quality. Broadly speaking, four things influence application quality:

  • Functional requirements
  • Non-functional requirements
  • The operational environment
  • Business constraints

Picking the wrong architecture to meet the functional requirements causes poor results. Overlooking the nature of the operating environment and support needs leads to poor end quality. Forgetting the non-functional requirements leads to undesired behavior. Architects and developers must balance all the influences to pick the best solution, none of which is ideal.

Stay tuned

This column is the first in a series about the causes of poor application quality. Subsequent columns elaborate on examples of operational environments and non-functional requirement problems. Future columns start with an example of the problem, discuss the nature of the problem, and conclude with the questions architects should consider during design to reduce these problems.


Resources

About the author

Photo of Michael Russell

Michael Russell has a Bachelors Degree in Physics and a Masters Degree in Computer Science. He was a logistics engineer, a technical services manager, and a certified IT architect at IBM for nearly 14 years; he is currently a Web application architect for a resort company in Orlando, Florida. He has experience in Windows, UNIX, and OS/400 environments and uses Web technology for entertainment through his own company, Vicki Fox Productions.

Comments (Undergoing maintenance)



Trademarks  |  My developerWorks terms and conditions

Help: Update or add to My dW interests

What's this?

This little timesaver lets you update your My developerWorks profile with just one click! The general subject of this content (AIX and UNIX, Information Management, Lotus, Rational, Tivoli, WebSphere, Java, Linux, Open source, SOA and Web services, Web development, or XML) will be added to the interests section of your profile, if it's not there already. You only need to be logged in to My developerWorks.

And what's the point of adding your interests to your profile? That's how you find other users with the same interests as yours, and see what they're reading and contributing to the community. Your interests also help us recommend relevant developerWorks content to you.

View your My developerWorks profile

Return from help

Help: Remove from My dW interests

What's this?

Removing this interest does not alter your profile, but rather removes this piece of content from a list of all content for which you've indicated interest. In a future enhancement to My developerWorks, you'll be able to see a record of that content.

View your My developerWorks profile

Return from help

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=1
Zone=Web development
ArticleID=15049
ArticleTitle=Quality busters: Forget the environment
publish-date=08102004
author1-email=MikeRussell@VickiFox.com
author1-email-cc=htc@us.ibm.com

My developerWorks community

Tags

Help
Use the search field to find all types of content in My developerWorks with that tag.

Use the slider bar to see more or fewer tags.

Popular tags shows the top tags for this particular content zone (for example, Java technology, Linux, WebSphere).

My tags shows your tags for this particular content zone (for example, Java technology, Linux, WebSphere).

Use the search field to find all types of content in My developerWorks with that tag. Popular tags shows the top tags for this particular content zone (for example, Java technology, Linux, WebSphere). My tags shows your tags for this particular content zone (for example, Java technology, Linux, WebSphere).

Rate a product. Write a review.

Special offers