<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.crowehorwath.com/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Crowe Solutions Architecture Blog : disaster recovery</title><link>http://www.crowehorwath.com/cs/blogs/solutions/archive/tags/disaster+recovery/default.aspx</link><description>Tags: disaster recovery</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP2 (Build: 20611.960)</generator><item><title>Document Non-functional Requirements</title><link>http://www.crowehorwath.com/cs/blogs/solutions/archive/2008/01/07/document-non-functional-requirements.aspx</link><pubDate>Mon, 07 Jan 2008 16:56:00 GMT</pubDate><guid isPermaLink="false">733c1265-83be-4492-a5ff-7e2be949a514:65</guid><dc:creator>Daan De Brouckere</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.crowehorwath.com/cs/blogs/solutions/rsscomments.aspx?PostID=65</wfw:commentRss><comments>http://www.crowehorwath.com/cs/blogs/solutions/archive/2008/01/07/document-non-functional-requirements.aspx#comments</comments><description>&lt;p&gt;When a new solution is being discussed, it’s easy to focus on all of the things it should do, what it should look like, and what technologies it should be based on. It’s very easy to get caught up in discussions with business resources about comprehensive feature sets and ways to present the information to customers. With a technical audience, it’s entertaining to squabble about the pros and cons of using one technology versus another to address the functional needs of a business problem.&lt;/p&gt;
&lt;p&gt;When do discussions about disaster recovery, performance and scalability come into play? When should they? Why can’t I just say that the system shouldn’t fail, it should be fast, and it should be able to scale? The short answer is that this could be quite cost-prohibitive. The longer answers are below.&lt;/p&gt;
&lt;p&gt;Let’s start with disaster recovery. I liken the conversation about disaster recovery to discussions about life insurance. To most people, it’s not fun to talk about what would happen if you die. Same goes for the brand new system you’re about to build. Disaster recovery is not a topic to be discussed AFTER the database gets corrupted or the application server CPU overheats. These are conversations that have to be had BEFORE the system is designed. Just as the functional requirements are documents, so should be these disaster recovery requirements. Based on different up-time needs and recovery efficiency, disaster recovery requirements could vary from making sure each server is backed up nightly to putting structure around a hot-backup on the other side of the country.&lt;/p&gt;
&lt;p&gt;When it comes to talking about performance, the conversation tends to be easier; however, the proper documentation of performance requirements can be tough. How do you account for variations in network traffic? What if another process is running on your application server? The recommendation I have here is that you start by determining what an adequate response time looks like for the key functions in your new system. This needs to be balanced with the cost for delivering that kind of performance. Execute your performance tests in an environment that closely mirrors production. When it comes to documenting actual performance requirements, these can vary from a generic average response time per function to specific metrics around the key transactions of the system based on expected usage patterns throughout the day or during a specific time period (think concert ticket sales).&lt;/p&gt;
&lt;p&gt;What about scalability? How do we expect the system to grow over the next several years? How many users do we expect initially? How many of them will be using the system concurrently? Even after having the answers to these questions (or best guesses), documenting requirements around scalability is difficult. I would recommend turning these into technical requirements around sustainable transaction throughput. Considering these requirements during the design phase allows you to build in the proper flexibility so the system can support the future anticipated growth.&lt;/p&gt;
&lt;p&gt;Beyond these three different types of non-functional requirements, there may be many more that should be considered based on the system’s particular needs. The trick is to recognize early on in the initiation phase all the different non-functional aspects that are critical to the success of the system, documenting them, validating them, and ensuring they are written in a objective way.&lt;/p&gt;&lt;img src="http://www.crowehorwath.com/cs/aggbug.aspx?PostID=65" width="1" height="1"&gt;</description><category domain="http://www.crowehorwath.com/cs/blogs/solutions/archive/tags/performance/default.aspx">performance</category><category domain="http://www.crowehorwath.com/cs/blogs/solutions/archive/tags/requirements/default.aspx">requirements</category><category domain="http://www.crowehorwath.com/cs/blogs/solutions/archive/tags/scalability/default.aspx">scalability</category><category domain="http://www.crowehorwath.com/cs/blogs/solutions/archive/tags/disaster+recovery/default.aspx">disaster recovery</category></item></channel></rss>