<?xml version="1.0"?>
<rss version="2.0">
<channel>
  <title>Coding the Architecture - non-functional tag</title>
  <link>http://www.codingthearchitecture.com/tags/non-functional/</link>
  <description>Software architecture for developers</description>
  <language>en</language>
  <copyright>Coding the Architecture</copyright>
  <lastBuildDate>Mon, 21 May 2012 09:41:00 GMT</lastBuildDate>
  <generator>Pebble (http://pebble.sourceforge.net)</generator>
  <docs>http://backend.userland.com/rss</docs>
  
  
  <item>
    <title>Is VM size an architectural smell?</title>
    <link>http://www.codingthearchitecture.com/2012/05/16/is_vm_size_an_architectural_smell.html</link>
    
      
        <description>
          &lt;p&gt;
A couple of months ago I went to an excellent set of talks at &lt;a href=&#034;http://www.meetup.com/Londonjavacommunity/events/53477082/&#034;&gt;LJC night at QCon&lt;/a&gt;. This not only inspired my entry on &lt;a href=&#034;http://www.codingthearchitecture.com/2012/03/09/modelling_process_and_staleness.html&#034;&gt;staleness&lt;/a&gt; but also made me think about some more architectural smells.
&lt;/p&gt;&lt;p&gt;
Gil Tene from Azul spoke about the maximum size of VMs we all use. A quick show of hands indicated that the maximum size of VM heap memory most of us ran was 2-4GB. Gil argued, quite convincingly, that this was due to legacy issues with garbage collection but new techniques should make this limit redundant. 
&lt;/p&gt;&lt;p&gt;
I sort of agree... However, even if all the issues surrounding garbage collecting large VMs is solved, the 2-4GB limit is still a useful one.
&lt;/p&gt;&lt;p&gt;
In &lt;a href=&#034;http://www.codingthearchitecture.com/2011/10/02/is_caching_an_architectural_smell.html&#034;&gt;Architectural Smells&lt;/a&gt; I argued that there are architectural smells in the same way that there are code smells (aspects of a system that indicate but not guarantee a possible issue) and the example I gave was caching. I also think that VM size is an architectural smell.
&lt;/p&gt;&lt;p&gt;
When designing complex systems one of the most common design guidelines is to split differing responsibilities into specific services. Non-functional requirements may complicate this but most of us try to avoid having all functionality in a single service. Certain services are obviously distinct and can be isolated. However it&#039;s easy for functionality creep to result in a service gaining a lot of responsibilities and this often results in a larger run-time footprint.
&lt;/p&gt;&lt;p&gt;
During testing this shows itself as a service requiring a large VM - certainly in comparison to other services. I view this as an architectural smell and analyse the service to see if it should be split up. (Easier if you have some form of &lt;a href=&#034;http://leanpub.com/software-architecture-for-developers&#034;&gt;lightweight and iterative design process.&lt;/a&gt;)
&lt;/p&gt;&lt;p&gt;
This is very similar to the code smell of &lt;a href=&#034;http://en.wikipedia.org/wiki/Code_smell&#034;&gt;long method&lt;/a&gt;. It&#039;s rare that your code size or service size starts out by being too large but tends to happen over time. This is a good reason why an architect can&#039;t just &lt;a href=&#034;http://www.codingthearchitecture.com/2011/04/13/software_development_is_not_a_relay_sport.html&#034;&gt;throw it over the wall&lt;/a&gt; but needs to stay involved with the project. As developers add code to the system the design might need to change.
&lt;/p&gt;&lt;p&gt;
Whether you take an absolute size or relative size will depend on your system in question. Personally, I get concerned when a service is larger than 1GB unless its prime purpose is data storage and even then the data should probably be clustered across services rather than in a single block - but that&#039;s an argument for a different occasion.
&lt;/p&gt;

        </description>
      
      
    
    
    
    <category>What is the the role of a software architect?</category>
    
    <category>How do you deliver software architecture?</category>
    
    <comments>http://www.codingthearchitecture.com/2012/05/16/is_vm_size_an_architectural_smell.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2012/05/16/is_vm_size_an_architectural_smell.html</guid>
    <pubDate>Wed, 16 May 2012 08:01:04 GMT</pubDate>
  </item>
  
  <item>
    <title>Using new technology will make it faster</title>
    <link>http://www.codingthearchitecture.com/2009/05/15/using_new_technology_will_make_it_faster.html</link>
    
      
        <description>
          &lt;p&gt;
I heard an interesting throwaway comment recently that I thought I&#039;d share. To paraphrase...
&lt;/p&gt;

&lt;blockquote&gt;
The system is being rewritten with new technology, so it won&#039;t be slower than what we have now.
&lt;/blockquote&gt;

&lt;p&gt;
While it&#039;s true that new and updated technology *can* improve performance, it&#039;s also very easy to misuse that technology and come up with something that performs perceivably slower. I&#039;ve seen this a few times, predominantly where simple websites have been rewritten using new technologies. One of the biggest contributing factors is that new technologies often provider &#034;better&#034; and more complex ways to solve the same problem. For example, it&#039;s easy to see how a simple two-tier web application could be rewritten with a web-MVC framework and a distributed middle-tier added to make the architecture more fashionably SOA-like. Here, the added complexity could result in net performance gains or losses, depending on how the technology is applied through the design and architecture.
&lt;/p&gt;

&lt;p&gt;
There&#039;s nothing wrong with refreshing a software (or hardware) system with new technology, but it&#039;s naive to assume that performance won&#039;t degrade. New technology generally brings added complexity, and this complexity introduces more things that can go wrong. Any software/hardware architecture should undergo *some* non-functional testing before it goes live, and this still holds true for systems that are being rewritten as part of a technology refresh strategy. Don&#039;t assume anything ... &lt;a href=&#034;http://www.codingthearchitecture.com/pages/book/role.html#architectureEvaluation&#034;&gt;test it&lt;/a&gt;.
        </description>
      
      
    
    
    
    <category>How do you define software architecture?</category>
    
    <comments>http://www.codingthearchitecture.com/2009/05/15/using_new_technology_will_make_it_faster.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2009/05/15/using_new_technology_will_make_it_faster.html</guid>
    <pubDate>Fri, 15 May 2009 10:57:11 GMT</pubDate>
  </item>
  
  </channel>
</rss>

