<?xml version="1.0"?>
<rss version="2.0">
<channel>
  <title>Coding the Architecture - experience tag</title>
  <link>http://www.codingthearchitecture.com/tags/experience/</link>
  <description>Software architecture for developers</description>
  <language>en</language>
  <copyright>Coding the Architecture</copyright>
  <lastBuildDate>Wed, 16 May 2012 08:01:04 GMT</lastBuildDate>
  <generator>Pebble (http://pebble.sourceforge.net)</generator>
  <docs>http://backend.userland.com/rss</docs>
  
  
  <item>
    <title>To SQL or not to SQL?</title>
    <link>http://www.codingthearchitecture.com/2009/07/21/to_sql_or_not_to_sql.html</link>
    
      
        <description>
          &lt;p&gt;
Eric Lai wrote an interesting article for Computerworld entitled &lt;a href=&#034;http://www.computerworld.com/s/article/9135086/No_to_SQL_Anti_database_movement_gains_steam_&#034;&gt;No to SQL? Anti-database movement gains steam&lt;/a&gt; that highlighted the small but growing trend for not using a traditional relational database for managing data. Nati Shalom&#039;s &lt;a href=&#034;http://natishalom.typepad.com/nati_shaloms_blog/2009/07/no-to-sql-anti-database-movement-gains-steam-my-take.html&#034;&gt;No to SQL? Anti-database movement gains steam - My Take&lt;/a&gt; is a good follow-up.
&lt;/p&gt;

&lt;p&gt;
I&#039;m sure that most of us have good experiences of using a relational database in our projects and, despite the pain of sometimes mapping the data into a relational schema, relational databases provide an easy to use known quantity
for managing data. With this in mind, you should certainly let your &lt;a href=&#034;http://www.codingthearchitecture.com/2008/07/30/experience_should_guide_not_constrain.html&#034;&gt;experience guide you&lt;/a&gt; but bear in mind that relational databases aren&#039;t the answer to every question.
&lt;/p&gt;

&lt;p&gt;
The case study that we use as a basis for the &lt;a href=&#034;http://www.softwarearchitecturefordevelopers.com&#034;&gt;exercises in our software architecture training course&lt;/a&gt; is relatively small yet most people decide to use a relational database to store the data without really giving the alternatives a second thought. Most of the time it comes down to experience in that most people are comfortable with using a relational database in their architecture. But there are many viable alternatives; from using flat files and object databases through to in-memory data structures, data grids and the cloud. So while relational databases might be a solution for your particular problem, it&#039;s always worth spending a couple of minutes assessing whether they are the *best* solution. Here are some things to think about before deciding on whether to go down the SQL or non-SQL route.
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do you have special non-functional requirements that would be hard to satisfy with a relational database? (e.g. high performance/low latency, massive scalability, etc)&lt;/li&gt;
&lt;li&gt;What is the available skillset of the team?&lt;/li&gt;
&lt;li&gt;Do you have existing licenses for an RDBMS?&lt;/li&gt;
&lt;li&gt;Could an open source RDBMS be appropriate?&lt;/li&gt;
&lt;li&gt;Do you need to access legacy systems where the data is already in an RDBMS?&lt;/li&gt;
&lt;li&gt;Do you have the hardware available to run an RDBMS?&lt;/li&gt;
&lt;li&gt;Do you already have existing backup and archival processes and procedures for relational databases?&lt;/li&gt;
&lt;li&gt;What are your management information and reporting requirements (scheduled and ad hoc)? Is it possible to satisfy these with a non-SQL solution?&lt;/li&gt;
&lt;li&gt;Do other systems need access to your data via a SQL interface? (a service gateway might be a better approach, but that&#039;s another issue)&lt;/li&gt;
&lt;li&gt;Do you have data migration requirements from an existing relational database?&lt;/li&gt;
&lt;li&gt;Can the data management problem be split up into transactional and non-transactional partitions, maybe using a relational database for only one of them?&lt;/li&gt;
&lt;li&gt;Do you really *need* persistence?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Relational databases are established mainstream solutions that are applicable in many cases. Just don&#039;t forget that there are other alternatives too.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>How do you define software architecture?</category>
    
    <comments>http://www.codingthearchitecture.com/2009/07/21/to_sql_or_not_to_sql.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2009/07/21/to_sql_or_not_to_sql.html</guid>
    <pubDate>Tue, 21 Jul 2009 10:07:00 GMT</pubDate>
  </item>
  
  <item>
    <title>Experience should guide, not constrain</title>
    <link>http://www.codingthearchitecture.com/2008/07/30/experience_should_guide_not_constrain.html</link>
    
      
        <description>
          &lt;p&gt;
One of the things that &lt;a href=&#034;http://www.codingthearchitecture.com/2006/06/07/when_can_you_call_yourself_an_architect.html&#034;&gt;makes an architect&lt;/a&gt; is experience, and in many cases an architect has got where they are because of the expertise that they&#039;ve built up in their chosen technology; be it Java, .NET or whatever. I&#039;m still of the opinion that it&#039;s perfectly viable to be an architect with a particular technology focus (e.g. a &lt;a href=&#034;http://www.simongbrown.com/blog/2007/03/28/do_you_need_a_java_architect.html&#034;&gt;Java architect&lt;/a&gt;) but there is always a danger that everything will start to look like a single technology solution.
&lt;/p&gt;

&lt;p&gt;
In a way, this is inevitable. If your experience is mainly in technology X, then you&#039;re going to feel comfortable designing systems in technology X. Of course, this doesn&#039;t necessarily mean that technology X is the best solution. An example that I always cite is that most of my background is in building Java systems; from client-server and web apps through to distributed systems and service-oriented architectures. A few years back, Swing would have been my first choice of technology for building a desktop application. Ask me know though, and I&#039;d lean towards a .NET or RIA client, but ultimately it depends on a number of things. In this case, the influencing factors include the skillset of the team, existing vendor relationships, politics, supported desktop platforms, desktop deployment policies, operational/support requirements and so on.
&lt;/p&gt;

&lt;p&gt;
Being open to other technologies is a hard lesson to learn and, as we&#039;ve seen on the &lt;a href=&#034;http://skillsmatter.com/course/java-jee/coding-the-architecture-workshop&#034;&gt;architecture training course&lt;/a&gt;, it&#039;s natural for people to stick to their tried and tested technology set. As an architect, you should certainly let your experience guide you in making the right decision. Having said that, you shouldn&#039;t let it constrain you.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>How do you define software architecture?</category>
    
    <comments>http://www.codingthearchitecture.com/2008/07/30/experience_should_guide_not_constrain.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2008/07/30/experience_should_guide_not_constrain.html</guid>
    <pubDate>Wed, 30 Jul 2008 20:08:00 GMT</pubDate>
  </item>
  
  <item>
    <title>Patterns are about experience...</title>
    <link>http://www.codingthearchitecture.com/2006/01/31/patterns_are_about_experience.html</link>
    
      
        <description>
          &lt;p&gt;
&lt;a href=&#034;http://rearchitect.wordpress.com/2006/01/31/why-software-patterns-are-important/&#034;&gt;Why software patterns are important&lt;/a&gt; is a good post about why patterns are important within the context of being an architect.
&lt;/p&gt;

&lt;blockquote&gt;
In general term Patterns can help by trying to identify common solutions to recurring problems. The interesting thing of pattern is that they are captured by &lt;b&gt;experience&lt;/b&gt;. They aren&#039;t designed upfront in a speculative way. They emerge from the field, from real software that works, from real teams.
&lt;br /&gt;&lt;br /&gt;
...
&lt;br /&gt;&lt;br /&gt;
Pattern reading is an important activity for every software architect which hasn&#039;t a valuable experience. I think that pattern studying is an important activity in any computer science curricula. Students can learn a lot about software design and architecture without waiting to hurt in the war&#039;s field of a software development job.
&lt;/blockquote&gt;

&lt;p&gt;
Essentially, this is saying that while you can&#039;t gain real-world experience from reading, you *can* gain insights into what works and what doesn&#039;t. This is an important part of an architect&#039;s role and helps you make those critical decisions that &lt;a href=&#034;http://www.thepragmaticarchitect.com/2006/01/24/scaling_is_much_more_than_software.html&#034;&gt;balance the functional and the non-functional requirements&lt;/a&gt;.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>What is the the role of a software architect?</category>
    
    <comments>http://www.codingthearchitecture.com/2006/01/31/patterns_are_about_experience.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2006/01/31/patterns_are_about_experience.html</guid>
    <pubDate>Tue, 31 Jan 2006 17:02:15 GMT</pubDate>
  </item>
  
  </channel>
</rss>

