<?xml version="1.0"?>
<rss version="2.0">
<channel>
  <title>Coding the Architecture - software design tag</title>
  <link>http://www.codingthearchitecture.com/tags/software design/</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 Maintainable Systems</title>
    <link>http://www.codingthearchitecture.com/2010/01/29/designing_maintainable_systems.html</link>
    
      
        <description>
          &lt;p&gt;
I&#039;m currently involved in a project to upgrade a third party piece of software and it&#039;s apparent that when the software was originally designed, the upgrade process was not considered. This became obvious when we totaled up the time required to perform, configure and post-release test the upgrade - it came to over three days of work. This was not even taking into account any rollback times (which is fortunately simplified these days by the use of virtualisation).
&lt;/p&gt;
&lt;p&gt;
The software is used heavily from Monday to Friday so we wanted to upgrade over a weekend. The vendor suggested we perform an upgrade on a parallel system and then get the users to re-enter all the data into the new system that was missed - you can imagine how well that would have gone down. This would also mean trying to post-release, regression test two systems that are live, being used and not in sync.
&lt;/p&gt;
&lt;p&gt;
Software almost always needs updating/upgrading (unless it&#039;s control software for a deep space probe!) The ability and consequence of upgrading should be considered as part of the design and development process. Questions to ask include:
&lt;/p&gt;
&lt;p&gt;
&lt;ul&gt;
&lt;li&gt; Can an upgrade be performed in parallel to a live, running system and how does a switchover occur?
&lt;li&gt; Will a system need to be taken down for any upgrades and for how long? How does this affect your Service Level Agreements?
&lt;li&gt; How easy will any upgrade be to rollback? Errors occur!
&lt;li&gt; Can you upgrade parts of the systems or does everything have to be done at once?
&lt;li&gt; What is the effect on any users? Will they need to log out first etc? Will they lose any work if they fail to follow your procedures?
&lt;li&gt; How easy will it be to test the upgraded system to determine success? Your notice of failure shouldn&#039;t be an angry user phone call.
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
Some simple tools can make all the difference. Most of my work is on financial applications and I like to run regression reports between systems for important points e.g. End-of-year. However it&#039;s often very difficult to get data out of systems to perform simple comparisons!
&lt;/p&gt;
&lt;p&gt;
Sensible configuration management is often missing. If I&#039;ve upgraded and configured new features in my pre-production environment I really shouldn&#039;t have to repeat the process from scratch in production. Manual processes are prone to errors and ideally once I&#039;ve prepared for an upgrade I should just hit a &#039;go&#039; button and sit back.
&lt;/p&gt;
&lt;p&gt;
In my experience very few software developers are aware of IT Service Management (ITSM/ITIL). In particular we should be aware of the Change Management, Release Management and Configuration Management roles that support staff have. If you want to read about ITSM/ITIL then the &lt;a  href=&#034;http://en.wikipedia.org/wiki/Information_Technology_Infrastructure_Library&#034;&gt;wiki page&lt;/a&gt; is a good place to start. 
&lt;/p&gt;
&lt;p&gt;
Some of the processes of ITSM may strike agile developers as being heavy-weight but this doesn&#039;t stop you developing the system in an agile manner, it just means that it can be deployed within a formal environment. 
&lt;/p&gt;
&lt;p&gt;
An architect should be aware of how the software fits into the organisation. So remember that your ‘users’ aren&#039;t just the end users but also the support staff who&#039;ll be maintaining your system for the next ten years!
&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>What is software architecture?</category>
    
    <comments>http://www.codingthearchitecture.com/2010/01/29/designing_maintainable_systems.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2010/01/29/designing_maintainable_systems.html</guid>
    <pubDate>Fri, 29 Jan 2010 13:04:00 GMT</pubDate>
  </item>
  
  </channel>
</rss>

