<?xml version="1.0"?>
<rss version="2.0">
<channel>
  <title>Coding the Architecture - availability tag</title>
  <link>http://www.codingthearchitecture.com/tags/availability/</link>
  <description>Software architecture for hands-on software architects</description>
  <language>en</language>
  <copyright>Coding the Architecture</copyright>
  <lastBuildDate>Fri, 26 Sep 2008 13:09:00 GMT</lastBuildDate>
  <generator>Pebble (http://pebble.sourceforge.net)</generator>
  <docs>http://backend.userland.com/rss</docs>
  
  
  <item>
    <title>NFRs for system replacements</title>
    <link>http://www.codingthearchitecture.com/2008/05/28/nfrs_for_system_replacements.html</link>
    
      
        <description>
          &lt;p&gt;
As software architects, we tend to write about &lt;a href=&#034;http://www.codingthearchitecture.com/tags/nonfunctionalrequirements/&#034;&gt;non-functional requirements&lt;/a&gt; a lot; particularly about how they should be &lt;a href=&#034;http://www.codingthearchitecture.com/2007/09/06/engaging_without_non_functional_requirements.html&#034;&gt;defined&lt;/a&gt; and &lt;a href=&#034;http://www.codingthearchitecture.com/2007/09/26/nines.html&#034;&gt;challenged&lt;/a&gt; because of the &lt;a href=&#034;http://www.codingthearchitecture.com/2007/07/09/the_influence_of_non_functional_requirements.html&#034;&gt;influence&lt;/a&gt; they have. One of the reasons for talking about NFRs a lot is that, in the majority, project teams don&#039;t give them the attention that they should. And here&#039;s a great example that&#039;s slightly different from &lt;a href=&#034;http://www.codingthearchitecture.com/2007/09/06/engaging_without_non_functional_requirements.html&#034;&gt;the story where none of the NFRs were defined&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
As is the case in most organisations, technology has a limited lifespan. Perhaps the business evolves, the technology becomes harder to maintain, etc. Whatever the reason, many organisations regularly look at replacing their existing systems with solutions that are shinier and more buzzword compliant.
&lt;/p&gt;

&lt;p&gt;
In one of these cases, an organisation put together a 125 page specification for the replacement system detailing exactly what the system should do along with some details of the non-functional requirements. However, out of those 125 pages, only 1 of them featured the NFRs, and they can be summarised as follows.
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Performance&lt;/b&gt; : the system must be fast.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Scalability&lt;/b&gt; : the system must be able to support 100 messages per second.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Availability&lt;/b&gt; : the system must be available 24x7.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Security&lt;/b&gt; : only certain individuals are permitted to access the system.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Credit where credit is due ... at least some thought was put into the non-functional requirements and conversations to explore those requirements aren&#039;t starting from scratch. But on the other hand, those requirements are meaningless!
&lt;/p&gt;

&lt;p&gt;
I want to end this post on a positive note, so let me contrast this story with another replacement project that I&#039;ve been involved with recently. In this instance, the team *had* thought about the non-functional requirements and had detailed definitions for what they should be. This is excellent, particularly considering that the non-functional requirements surrounding the current implementation are vague in nature. System replacements are an opportunity to revisit what&#039;s important,  and that includes the non-functional aspects too.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <comments>http://www.codingthearchitecture.com/2008/05/28/nfrs_for_system_replacements.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2008/05/28/nfrs_for_system_replacements.html</guid>
    <pubDate>Wed, 28 May 2008 10:35:00 GMT</pubDate>
  </item>
  
  <item>
    <title>Separating the non-functionals</title>
    <link>http://www.codingthearchitecture.com/2007/10/02/separating_the_non_functionals.html</link>
    
      
        <description>
          &lt;p&gt;
I was recently involved in a discussion where we were talking about the best way to increase the scalability of a software system, which is essentially a Java EE web application.
The most obvious way to do this is to horizontally scale-out the application across multiple web servers (Tomcat, in this case), although I found it really interesting that the conversation soon turned towards topics such as the performance impact that session replication would have. Important as this is, we had moved on to talk about performance, availability, reliability and failover before finishing the scalability discussion. After all, there are some other options that are available.
&lt;/p&gt;

&lt;p&gt;
My experience indicates that it&#039;s really easy to get sidetracked when dealing with non-functional requirements and this is just one such example. Yes, you do need to take a holistic view of your non-functional requirements, but you do also need to take each in turn and look at all of the available options. In this particular example, I had a very clear idea of the scalability requirements but not the availability and reliability requirements. For all I know, it might be okay if a user is forced to log back into the application in the event of a Tomcat node going down.
&lt;/p&gt;

&lt;p&gt;
My advice is this - start by focussing on one thing at a time. On a related note, &lt;a href=&#034;http://www.infoq.com/news/2007/10/whatisscalability&#034;&gt;Think you know what scalability is?&lt;/a&gt; is a timely article that provides a good overview of what scalability is all about.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <comments>http://www.codingthearchitecture.com/2007/10/02/separating_the_non_functionals.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2007/10/02/separating_the_non_functionals.html</guid>
    <pubDate>Tue, 02 Oct 2007 11:07:00 GMT</pubDate>
  </item>
  
  <item>
    <title>Nines</title>
    <link>http://www.codingthearchitecture.com/2007/09/26/nines.html</link>
    
      
        <description>
          &lt;p&gt;
I&#039;ve been reviewing some software architecture documents as part of a training course today, where the authors had restated the non-functional requirements. Given that the non-functional requirements are some of the key architectural drivers, restating them in the architecture document is something that I recommend and like to see, so I was pleased that this had been done here. The thing that really struck me, though, was how nobody had seemed to question the requirements that they had been given. While most were okay, the availability requirement really stuck out as being extreme, for what is basically a desktop-based CRUD application.
&lt;/p&gt;

&lt;blockquote&gt;
The system must be available for 99.99% of the time, from 9am to 6pm London time.
&lt;/blockquote&gt;

&lt;p&gt;
With a duration of 9 working hours, this availability requirement means that only about 3 seconds of downtime can be tolerated. As a general guide, I&#039;d say that availability figures of 99% and above mean that you have to start thinking about different types of architectures that include characteristics such as automatic (or very fast manual) failover, clustering, no single points of failure and so on. Clearly, a change in the architecture has a knock-on effect to the cost, potentially turning a £100,000 project into a £1,000,000 project. Whenever you&#039;re given non-functional requirements, always be prepared to ask the stakeholders whether they really *need* them and remember to emphasise that added complexity doesn&#039;t come for free.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <comments>http://www.codingthearchitecture.com/2007/09/26/nines.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2007/09/26/nines.html</guid>
    <pubDate>Wed, 26 Sep 2007 22:21:00 GMT</pubDate>
  </item>
  
  </channel>
</rss>
