<?xml version="1.0"?>
<rss version="2.0">
<channel>
  <title>Coding the Architecture - trade-offs tag</title>
  <link>http://www.codingthearchitecture.com/tags/trade-offs/</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>Designing the tactical solution</title>
    <link>http://www.codingthearchitecture.com/2007/06/27/designing_the_tactical_solution.html</link>
    
      
        <description>
          &lt;p&gt;
In my previous post I asserted that there&#039;s really no such thing as a &lt;a href=&#034;http://www.codingthearchitecture.com/2007/06/21/the_tactical_solution.html&#034;&gt;tactical solution&lt;/a&gt;, but what should you do if you are asked to design one? Before I answer that, let&#039;s summarise what a tactical solution is all about.
&lt;/p&gt;

&lt;blockquote&gt;
... a tactical solution can be thought of as a stopgap. It&#039;s an interim solution. It&#039;s something potentially quick and dirty. It satisfies a very immediate need. Importantly, it has a limited lifespan.
&lt;/blockquote&gt;

&lt;p&gt;
Tactical solutions are all about fast delivery and limited lifespans. You need to take *both* of these into account if you are asked to design a tactical solution because they will undoubtedly influence your design decisions. Let&#039;s look at each in turn.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Fast delivery&lt;/b&gt;
&lt;br /&gt;
Compressed timescales will alter the way in which you tackle the design process, so here are my suggestions for dealing with this.
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Don&#039;t agonise over design decisions. Do the simplest thing that could possibly work in the available time and then stop.&lt;/li&gt;
&lt;li&gt;Be explicit about what your solution will and *won&#039;t* do. If the timescales have made you choose a design with limited future extensibility and flexibility, make this explicit so that everybody (including the stakeholders) understands the trade-offs that have been made and the impact they have in the future.&lt;/li&gt;
&lt;li&gt;On a similar note, make sure any assumptions you&#039;re working with are known by everybody.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;Limited lifespan&lt;/b&gt;
&lt;br /&gt;
A limited lifespan typically provides you with some boundaries for your key non-functional requirements and you can use this to your advantage.
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A tactical solution with a one year lifespan means your solution (in theory) only needs to scale to support data volumes for one year (plus a bit for safety). This makes some design decisions much easier, such as whether you need to design a solution that is horizontally scalable.&lt;/li&gt;
&lt;li&gt;Be explicit about what your solution will and *won&#039;t* support. If the limited lifespan has influenced your decision to build something that is simple rather than highly scalable, make this explicit so that everybody (including the stakeholders) understands the trade-offs that have been made and the impact they have in the future.&lt;/li&gt;
&lt;li&gt;Again, don&#039;t agonise over design decisions. Do the simplest thing that could possibly work for the anticipated lifespan and then stop.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
As &lt;a href=&#034;http://www.codingthearchitecture.com/2007/06/21/the_tactical_solution.html#comment1182524039815&#034;&gt;Kevin commented&lt;/a&gt;, a better approach to building a tactical solution is to make it the first delivery of a larger and more strategic solution. Sometimes this isn&#039;t possible though and delivering a solution with a limited lifespan in compressed timescales means that you have to &lt;a href=&#034;http://www.codingthearchitecture.com/2007/06/07/options.html&#034;&gt;make some trade-offs&lt;/a&gt;. If you find yourself in this situation, don&#039;t agonise over design decisions and make sure you&#039;re explicit about what the solution will and *won&#039;t* do.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>How do you define software architecture?</category>
    
    <comments>http://www.codingthearchitecture.com/2007/06/27/designing_the_tactical_solution.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2007/06/27/designing_the_tactical_solution.html</guid>
    <pubDate>Wed, 27 Jun 2007 20:16:00 GMT</pubDate>
  </item>
  
  <item>
    <title>Options</title>
    <link>http://www.codingthearchitecture.com/2007/06/07/options.html</link>
    
      
        <description>
          &lt;p&gt;
A recent consulting engagement has involved me defining a system architecture to solve a particular business problem. While coming up with something that meets the functional and non-functional requirements can be hard in itself, you always have to bear in mind there are always alternatives. In essence, you&#039;ll probably come up with several options, regardless of whether you present them all.
&lt;/p&gt;

&lt;p&gt;
The key thing that really struck me recently is that options can vary quite dramatically when you start to think about some of the additional constraints and trade-offs that can be/need to be considered. For example, your &#034;ideal&#034; architecture might be a distributed n-tier system but an alternative architecture might be a simple desktop application if infrastructure simply isn&#039;t available. Likewise, if time-to-market is the critical factor, you might even find yourself going down a number of different routes, some of which might be highly tactical and some might involve the use of an off-the-shelf product. Other  important aspects might include existing vendor relationships, in-house skillsets, functional scope, non-functional scope, etc.
&lt;/p&gt;

&lt;p&gt;
Whatever options you come up with, whoever is making the final decision needs to have as much data available in order to make the most informed decision possible. Unless you really are spoilt for choice, options represent trade-offs and sacrifices. If you know what these are, you have a much better chance of choosing the right option.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>How do you define software architecture?</category>
    
    <comments>http://www.codingthearchitecture.com/2007/06/07/options.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2007/06/07/options.html</guid>
    <pubDate>Thu, 07 Jun 2007 18:26:00 GMT</pubDate>
  </item>
  
  </channel>
</rss>

