<?xml version="1.0"?>
<rss version="2.0">
<channel>
  <title>Coding the Architecture - architecture definition tag</title>
  <link>http://www.codingthearchitecture.com/tags/architecture definition/</link>
  <description>Software architecture for developers</description>
  <language>en</language>
  <copyright>Coding the Architecture</copyright>
  <lastBuildDate>Mon, 09 Jan 2012 09:02:08 GMT</lastBuildDate>
  <generator>Pebble (http://pebble.sourceforge.net)</generator>
  <docs>http://backend.userland.com/rss</docs>
  
  
  <item>
    <title>Jitter</title>
    <link>http://www.codingthearchitecture.com/2011/09/06/jitter.html</link>
    
      
        <description>
          &lt;p&gt;
On CTA we often talk about non-functional requirements and how this can drive the architecture of a system. Most of these cover issues of desired response time and capacity (latency, throughput, storage etc) but I believe that Jitter is a metric which is either forgotten or unknown to some software engineers – even though it&#039;s essential for hardware engineers.
&lt;/p&gt;
&lt;p&gt;
The most basic definition would be “variation in response”. In other words, the response, transmission or latency in a system will not be a constant. In many systems this variation goes unnoticed as it is small compared to the response itself. However I believe that as the systems we deal with become more performant and demanding, software engineers will need to understand, measure and tune this.
&lt;/p&gt;
&lt;p&gt;
A quick web-search of jitter shows the term being used to cover performance degradations due to activities such as garbage collection or unexpected user actions. This seems to greatly annoy telecommunications and hardware engineers who would argue that these are predictable, system and user events which could just be turned off – although ignoring your users and asking for a machine with infinite memory may get you fired. They would argue that true Jitter is an unpredictable variation in response whose occurrence frequency follows a normal distribution. Like most effects that are normally distributed it is caused by cumulative random events, most of which are due to the switching actions. Personally, I think you should measure whatever makes sense in your system.
&lt;/p&gt;
&lt;p&gt;
Jitter means that hard limits for latency can be statistically likely but not guaranteed. Specifications such as:
&lt;/p&gt;
&lt;blockquote&gt;
“The system should respond to action X within 200ms”.
&lt;/blockquote&gt;
&lt;p&gt;
Should be challenged and replaced with statements like:
&lt;/p&gt;
&lt;blockquote&gt;
“The systems should response to action X within 200ms for 95% of requests”
&lt;/blockquote&gt;
&lt;p&gt;
Of course we are making the implicit assumption that this is normally distributed and the system WILL, eventually, respond. You might want to explicitly state that all actions will be executed but stating a hard limit for all responses means that if you measure for long enough, you&#039;ll break your specification.
&lt;/p&gt;
&lt;p&gt;
Jitter can be quite obvious on messaging based systems that contain many hops. This will also tend to have a nice, Gaussian distribution due to the cumulative random delays.
&lt;/p&gt;
&lt;p&gt;
The best way to measure Jitter is to set up a standard test where you can sequentially fire a large number of requests into your system and measure the response time. However, rather than simply add these up and find an average we need to count how many responses are in a set of timing windows e.g. how many responses fall between 5ms-10ms, 10ms-15ms, 15ms-20ms etc. If we plot the number in each section we should see our expected Normal distribution.
&lt;/p&gt;

&lt;p&gt;
Reducing Jitter is subtly different from reducing latency itself. You are trying to reduce the variation in the response times or &#039;squeeze&#039; the response profile.
&lt;/p&gt;
&lt;p&gt;
Often when you reduce latency you will reduce the Jitter proportionally however this is not always the case. For example, network hops are a common cause of latency but each hop will increase the Jitter as well – you are accumulating more random delays with each hop. If you change the physical architecture of your system to have more but quicker hops you will almost certainly increase the jitter (remember this is the variation in response and not the actual response) even if the average latency is lower. It IS important to measure it and monitor as the system evolves.
&lt;/p&gt;
&lt;p&gt;
Simon is covering a number of related issues in his Skills Matter tutorial
&lt;a href=&#034;http://www.codingthearchitecture.com/2011/08/25/load_testing_for_developers.html&#034;&gt;Load Testing for Developers&lt;/a&gt;.

&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>How do you define software architecture?</category>
    
    <comments>http://www.codingthearchitecture.com/2011/09/06/jitter.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2011/09/06/jitter.html</guid>
    <pubDate>Tue, 06 Sep 2011 08:02:41 GMT</pubDate>
  </item>
  
  <item>
    <title>Speaking at the Software Architect 2010 conference</title>
    <link>http://www.codingthearchitecture.com/2010/09/30/speaking_at_the_software_architect_2010_conference.html</link>
    
      
        <description>
          &lt;p&gt;
&lt;img src=&#034;http://www.codingthearchitecture.com/images/sa2010-speaker.jpg&#034; alt=&#034;I&#039;m speaking at Software Architect 2010&#034; align=&#034;right&#034; style=&#034;padding: 0px 0px 8px 8px;&#034; /&gt;Just a quick post to say that I&#039;m speaking at the &lt;a href=&#034;http://www.software-architect.co.uk&#034; target=&#034;_blank&#034;&gt;Software Architect 2010 conference&lt;/a&gt; in London next month. I&#039;m running a pre-conference workshop, a post-conference workshop and two technical breakout sessions as follows.
&lt;/p&gt;

&lt;blockquote&gt;
&lt;h3&gt;Software Architecture in a Day (pre-conference workshop)&lt;/h3&gt;
&lt;p&gt;
This one-day workshop is an interactive introduction to software architecture and what it means to be a software architect. It&#039;s aimed at software developers who are looking towards their first software architect role, developers who want to become more architecturally aware and software architects that are new to the role. We&#039;ll be asking and answering the following questions:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;What is software architecture?&lt;/li&gt;
&lt;li&gt;What is the role of a software architect?&lt;/li&gt;
&lt;li&gt;How do you define software architecture?&lt;/li&gt;
&lt;li&gt;How do you share software architecture?&lt;/li&gt;
&lt;li&gt;How do you deliver software architecture?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;Where do you start?&lt;/h3&gt;
&lt;p&gt;
One of the hardest things about software development is being asked to come up with a design when all you&#039;re given is a set of requirements and a blank sheet of paper. Many software teams will dive straight into the code and while this can initially be very productive, the slippery slope of constant refactoring is awaiting those teams that haven&#039;t quite found a design that works. Often, a little forethought is all that&#039;s needed to get the development process heading in the right direction. So where do you start?
&lt;/p&gt;

&lt;h3&gt;How do you design for non-functional requirements?&lt;/h3&gt;
&lt;p&gt;
You may have heard people talking about &#034;non-functional requirements&#034;, mentioning things like performance, scalability, availability, security, flexibility and so on. What do you do if you&#039;re asked to design software that exhibits these qualities and furthermore, how do you do it in a pragmatic way? Come along to find out about some of the approaches that you can adopt and some of the trade-offs you&#039;ll need to make.
&lt;/p&gt;

&lt;h3&gt;Boxes &amp; Lines (post-conference workshop)&lt;/h3&gt;
&lt;p&gt;
Talking about software architecture will get you so far, but in reality it&#039;s all about experience and that&#039;s exactly what this workshop offers. Given a set of functional requirements, you&#039;ll be asked to identify the other architectural drivers before doing some design, choosing some technologies and drawing some boxes and lines. Join us if you want to know where to start with designing software and how to go about the software architecture definition process in a lightweight, structured and pragmatic way.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
Feel free to stop me and say hello if you&#039;re at the conference; should be a great event.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>What is the the role of a software architect?</category>
    
    <category>What is software architecture?</category>
    
    <category>How do you share software architecture?</category>
    
    <category>How do you define software architecture?</category>
    
    <category>How do you deliver software architecture?</category>
    
    <comments>http://www.codingthearchitecture.com/2010/09/30/speaking_at_the_software_architect_2010_conference.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2010/09/30/speaking_at_the_software_architect_2010_conference.html</guid>
    <pubDate>Thu, 30 Sep 2010 19:12:00 GMT</pubDate>
  </item>
  
  <item>
    <title>Structure and guidelines, consistency and clarity</title>
    <link>http://www.codingthearchitecture.com/2010/08/02/structure_and_guidelines_consistency_and_clarity.html</link>
    
      
        <description>
          &lt;p&gt;
One of my key points about software architecture is that it introduces structure and guidelines into a software system, which in turn leads to consistency and clarity of the overall design. Basically, I&#039;m saying that there are some real benefits from thinking about your design upfront. This isn&#039;t a particularly groundbreaking statement, but you&#039;d be surprised how few teams spend some quality time to do this. As I mentioned in &lt;a href=&#034;http://www.codingthearchitecture.com/2010/07/13/estimating_a_software_system.html&#034; target=&#034;_blank&#034;&gt;Estimating a software system&lt;/a&gt;, this thinking doesn&#039;t need to take very long at all.
&lt;/p&gt;

&lt;div align=&#034;center&#034;&gt;
&lt;img src=&#034;http://www.codingthearchitecture.com/images/20100802-workshop.png&#034; alt=&#034;A design workshop can introduce software architecture&#034; /&gt;
&lt;/div&gt;

&lt;p&gt;
If you take a &lt;a href=&#034;http://www.codingthearchitecture.com/pages/define.html&#034; target=&#034;_blank&#034;&gt;simple lightweight approach&lt;/a&gt;, you can map out the major functional requirements and come up with a design down to the major components in a couple of days. Then, you can do some high-level estimating off the back of this design. There are a number of ways that you can map out the functional requirements, although I find that &lt;a href=&#034;http://www.agilemodeling.com/artifacts/userStory.htm&#034; target=&#034;_blank&#034;&gt;user stories&lt;/a&gt; are a good way to summarise the key requirements.
&lt;/p&gt;

&lt;p&gt;
Thinking about your software design on your own is great, but making it a collaborative exercise is even better and comes highly recommended. We&#039;re doing this at the moment for another project where each of us on the team has specialisms in different technology aspects of the overall solution. The benefit of this is that we all know how the technology in our own areas works, but the details of how those technologies collaborate is often unknown. Also, we sometimes tend to assume what responsibilities each technology will take on and it&#039;s only by discussing the overall solution as a group that we realise we&#039;ve either doubled up on something or assumed that somebody else was looking after it. Essentially, software design as a collaborative exercise allows everybody&#039;s vision to meet so that the end-result is consistent and clear. As I&#039;ve written before, often &lt;a href=&#034;http://www.codingthearchitecture.com/2010/04/13/build_processes_as_architectural_health_indicators.html&#034; target=&#034;_blank&#034;&gt;some of the basic foundations are missed&lt;/a&gt;.
&lt;/p&gt;

&lt;div align=&#034;center&#034;&gt;
&lt;img src=&#034;http://www.codingthearchitecture.com/images/20100802-benefits.png&#034; alt=&#034;Software architecture introduces structure and guidelines into a software system, leading to consistency and clarity&#034; /&gt;
&lt;/div&gt;

&lt;p&gt;
For me, explicitly thinking about the components that make up the software system introduces structure, which in turn can be used as a template for building that system. From this, you get a consistent approach to solving common problems and a thought out design with a clear architectural vision. A couple of days upfront can really make a big difference to the big picture.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>How do you define software architecture?</category>
    
    <comments>http://www.codingthearchitecture.com/2010/08/02/structure_and_guidelines_consistency_and_clarity.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2010/08/02/structure_and_guidelines_consistency_and_clarity.html</guid>
    <pubDate>Mon, 02 Aug 2010 21:05:00 GMT</pubDate>
  </item>
  
  <item>
    <title>Start with the big picture</title>
    <link>http://www.codingthearchitecture.com/2009/11/18/start_with_the_big_picture.html</link>
    
      
        <description>
          &lt;p&gt;
One of the hardest things about the software architecture role is being asked to come up with a software architecture when all you&#039;re given is a set of requirements and a blank piece of paper. It&#039;s certainly one of the most fun parts of the role, but it can be a daunting prospect trying to figure out where to start and what to do. Many software teams dive straight into the code and this can initially be very productive but many teams soon start to venture down the slippery slope of constant refactoring while they try to find a design that works. Often, a little forethought is all that&#039;s needed to get the architecture definition process heading in the right direction. So where do you start?
&lt;/p&gt;

&lt;div align=&#034;center&#034;&gt;
&lt;img src=&#034;http://www.codingthearchitecture.com/images/book/start-with-the-big-picture-4.png&#034; alt=&#034;All&#034; /&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;a href=&#034;http://www.codingthearchitecture.com/pages/book/start-with-the-big-picture.html&#034;&gt;Read the full essay...&lt;/a&gt;
&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>How do you define software architecture?</category>
    
    <comments>http://www.codingthearchitecture.com/2009/11/18/start_with_the_big_picture.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2009/11/18/start_with_the_big_picture.html</guid>
    <pubDate>Wed, 18 Nov 2009 08:05:57 GMT</pubDate>
  </item>
  
  </channel>
</rss>

