<?xml version="1.0"?>
<rss version="2.0">
<channel>
  <title>Coding the Architecture</title>
  <link>http://www.codingthearchitecture.com/</link>
  <description>Software architecture for developers</description>
  <language>en</language>
  <copyright>Coding the Architecture</copyright>
  <lastBuildDate>Fri, 17 May 2013 18:29:08 GMT</lastBuildDate>
  <generator>Pebble (http://pebble.sourceforge.net)</generator>
  <docs>http://backend.userland.com/rss</docs>
  
  
  <item>
    <title>SATURN 2013</title>
    <link>http://www.codingthearchitecture.com/2013/05/17/saturn_2013.html</link>
    
      
        <description>
          &lt;p&gt;
I attended the &lt;a href=&#034;http://www.sei.cmu.edu/saturn/2013/&#034; target=&#034;_blank&#034;&gt;SATURN 2013&lt;/a&gt;
conference in Minneapolis a couple of weeks ago, which is an annual practitioner conference about software architecture, organised by the Software Engineering Institute (SEI) of Carnegie Mellon University. The conference is in its 9th year now, but it&#039;s not something that&#039;s been on my radar to be honest, partly because it&#039;s in the US and partly because I&#039;ve not heard much about it in the past.
&lt;/p&gt;

&lt;p&gt;
SATURN is definitely not your typical hardcore developer conference, although there were a few talks that focussed on technology and code. The majority of the talks were a mix of how software architecture is being applied in the real-world alongside others that were more research focussed. This is unsurprising since the conference is organised by the SEI but the even the research talks were grounded in industry. I didn&#039;t really appreciate how much industry work the SEI actually did until I met some of the team. SATURN is certainly not an academic conference ... I don&#039;t remember hearing about missile control systems at a software conference in the past!
&lt;/p&gt;

&lt;p&gt;
The keynotes by Stephan Murer, Scott Berkun, Mary Poppendieck and Philippe Kruchten were excellent, as were Mary&#039;s and Philippe&#039;s tutorials that I attended on the Friday. If you want to see what sort of things were talked about at SATURN 2013, you can &lt;a href=&#034;http://saturnnetwork.wordpress.com/2013/05/16/download-all-saturn-2013-presentations-now/&#034; target=&#034;_blank&#034;&gt;download all of the slides&lt;/a&gt;. Here are the links to view/download the slides and photos from my own sessions:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#034;http://www.codingthearchitecture.com/presentations/saturn2013-effective-software-architecture-sketches&#034; target=&#034;_blank&#034;&gt;Effective software architecture sketches&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#034;http://www.flickr.com/photos/codingthearchitecture/sets/72157633374766667/&#034; target=&#034;_blank&#034;&gt;Photos from the sketching workshop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#034;http://www.codingthearchitecture.com/presentations/saturn2013-the-conflict-between-agile-and-architecture&#034; target=&#034;_blank&#034;&gt;The Conflict Between Agile and Architecture - Myth or Reality?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
It was great to catch-up with old friends and meet many new ones. The conference was fantastic as it was ... but then, during the closing session, I was surprised and honoured to win the IEEE Software sponsored SATURN 2013 &#034;Architecture in Practice&#034; Presentation Award for my talk about the conflict between agile and architecture!
&lt;/p&gt;

&lt;p align=&#034;center&#034;&gt;
&lt;img src=&#034;http://www.codingthearchitecture.com/images/saturn2013-award1.jpg&#034; alt=&#034;SATURN 2013 award&#034; class=&#034;photo&#034; /&gt;
&lt;/p&gt;

&lt;p align=&#034;center&#034;&gt;
&lt;img src=&#034;http://www.codingthearchitecture.com/images/saturn2013-award2.jpg&#034; alt=&#034;SATURN 2013 award&#034; class=&#034;photo&#034; /&gt;
&lt;/p&gt;

&lt;p&gt;
Talk about the &#034;icing on the cake&#034;. Once again, a huge thank you to everybody that voted. :-)
&lt;/p&gt;
        </description>
      
      
    
    
    
    <comments>http://www.codingthearchitecture.com/2013/05/17/saturn_2013.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2013/05/17/saturn_2013.html</guid>
    <pubDate>Fri, 17 May 2013 18:29:08 GMT</pubDate>
  </item>
  
  <item>
    <title>Software architecture for developers Google Group</title>
    <link>http://www.codingthearchitecture.com/2013/05/17/software_architecture_for_developers_google_group.html</link>
    
      
        <description>
          &lt;p&gt;
A number of people have recently asked me whether there was somewhere they could chat about software architecture after attending my &lt;a href=&#034;http://www.codingthearchitecture.com/training&#034;&gt;Software architecture for developers training course&lt;/a&gt;, so I&#039;ve created a &lt;a href=&#034;https://groups.google.com/forum/?fromgroups=#!forum/sa4d&#034; target=&#034;_blank&#034;&gt;Google Group&lt;/a&gt;. If you want to discuss software architecture, please feel free to join us too. 
&lt;/p&gt;
        </description>
      
      
    
    
    
    <comments>http://www.codingthearchitecture.com/2013/05/17/software_architecture_for_developers_google_group.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2013/05/17/software_architecture_for_developers_google_group.html</guid>
    <pubDate>Fri, 17 May 2013 17:24:00 GMT</pubDate>
  </item>
  
  <item>
    <title>Agile Software Architecture Sketches and NoUML</title>
    <link>http://www.codingthearchitecture.com/2013/04/16/agile_software_architecture_sketches_and_nouml.html</link>
    
      
        <description>
          &lt;p&gt;
If you&#039;re working in an agile software development team at the moment, take a look around at your environment. Whether it&#039;s physical or virtual, there&#039;s likely to be a story wall or Kanban board visualising the work yet to be started, in progress and done. Visualising your software development process is a fantastic way to introduce transparency because anybody can see, at a glance, a high-level snapshot of the current progress. As an industry, we&#039;ve become pretty adept at visualising our software development process over the past few years although it seems we&#039;ve forgotten how to visualise the actual software that we&#039;re building. I&#039;m not just referring to post-project documentation, this also includes communication during the software development process. Agility is about moving fast and this requires good communication, but it&#039;s surprising that many teams struggle to effectively communicate the design of their software.
&lt;/p&gt;

&lt;p&gt;
Read the rest of the article over at &lt;a href=&#034;http://www.infoq.com/articles/agile-software-architecture-sketches-NoUML&#034;&gt;InfoQ.com&lt;/a&gt;.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <comments>http://www.codingthearchitecture.com/2013/04/16/agile_software_architecture_sketches_and_nouml.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2013/04/16/agile_software_architecture_sketches_and_nouml.html</guid>
    <pubDate>Tue, 16 Apr 2013 21:12:00 GMT</pubDate>
  </item>
  
  <item>
    <title>Mapping software architecture to code</title>
    <link>http://www.codingthearchitecture.com/2013/04/08/mapping_software_architecture_to_code.html</link>
    
      
        <description>
          &lt;p&gt;
One of the things I&#039;m currently doing with a number of software teams is teaching them how to draw pictures. As an industry we&#039;ve got really good at visualising the way that we work using things like Kanban boards and story walls, but we&#039;ve forgotten how to visualise the software that we&#039;re building. In a nutshell, many teams are trying to move fast but they struggle to create a shared vision that the whole team can work from, which ultimately slows them down. And few people use UML nowadays, which just exaggerates the problem. I&#039;ve written an article about this and it&#039;s due for publication soon (I&#039;ll come back and add a link) plus it&#039;s covered in my &lt;a href=&#034;https://leanpub.com/software-architecture-for-developers&#034; target=&#034;_blank&#034;&gt;Software Architecture for Developers&lt;/a&gt; ebook and in a number of talks that I&#039;m doing around Europe (&lt;a href=&#034;http://www.dfkompetens.se/konferenser/kurser/1113036/&#034; target=&#034;_blank&#034;&gt;ITARC&lt;/a&gt;, &lt;a href=&#034;http://www.iasauk.org&#034; target=&#034;_blank&#034;&gt;IASA UK&lt;/a&gt;, &lt;a href=&#034;http://www.mix-it.fr&#034; target=&#034;_blank&#034;&gt;Mix-IT&lt;/a&gt;) and the US (&lt;a href=&#034;http://www.sei.cmu.edu/saturn/2013/&#034; target=&#034;_blank&#034;&gt;SATURN&lt;/a&gt;) during April. Here are the slides from &lt;a href=&#034;http://www.codingthearchitecture.com/presentations/dublinaltdotnet2013-agile-software-architecture-sketches&#034; target=&#034;_blank&#034;&gt;Agile software architecture sketches - NoUML!&lt;/a&gt; that I presented a few weeks ago in Dublin.
&lt;/p&gt;

&lt;h3&gt;The TL;DR version&lt;/h3&gt;
&lt;p&gt;
	The TL;DR version of this post is simply this ... if you&#039;re building monolithic software systems but think of them as being made up of a number of smaller components, ensure that your codebase reflects this. Consider organising your code by component (rather than by layer or feature) to make the mapping between software architecture and code explicit. If it&#039;s hard to explain the structure of your software system, change it.
&lt;/p&gt;

&lt;h3&gt;Decomposition into components&lt;/h3&gt;
&lt;p&gt;
	For the purpose of this post, let&#039;s assume visualising a software system isn&#039;t a problem and that you&#039;re sketching some ideas related to the software architecture for a new system you&#039;ve been tasked to build. An important aspect of &#034;just enough&#034; software architecture is to understand how the significant elements of a software system fit together. For me, this means going down to the level of components, services or modules. It&#039;s worth stressing this isn&#039;t about understanding low-level implementation details, it&#039;s about performing an initial level of decomposition. The Wikipedia page for &lt;a href=&#034;http://en.wikipedia.org/wiki/Component-based_software_engineering&#034; target=&#034;_blank&#034;&gt;Component based development&lt;/a&gt; has a good summary, but essentially a component might be something like a risk calculator, audit logger, report generator, data importer, etc. The simplest way to think about a component is that it&#039;s a set of related behaviours behind an interface, which may be implemented using one or more collaborating classes. Good components share a number of characteristics with good classes. They should have high cohesion, low coupling, a well-defined public interface, good encapsulation, etc.
&lt;/p&gt;

&lt;p&gt;
	There are a number of benefits to thinking about a software system in terms of components, but essentially it allows us to think and talk about the software as a small number of high-level abstractions rather than the hundreds and thousands of individual classes that make up most enterprise systems. The photo below shows a typical component diagram produced during the training classes we run. Groups are asked to design a simple financial risk system that needs to pull in some data, perform some calculations and generate an Excel report as the output.
&lt;/p&gt;

&lt;p align=&#034;center&#034;&gt;
	&lt;img src=&#034;http://www.codingthearchitecture.com/images/20130408-components-sketch.jpg&#034; alt=&#034;A sketch of components&#034; class=&#034;photo&#034; /&gt;
&lt;/p&gt;

&lt;p&gt;
	This sketch includes the major components you would expect to see for a system that is importing data, performing risk calculations and generating a report. These components provide us with a framework for partitioning the behaviour within the boundary of our system and it should be relatively easy to trace the major use cases/user stories across them. This is a really useful starting point for the software development process and can help to create a shared vision that the team can work towards. But it&#039;s also very dangerous at the same time. Without technology choices (or options), this diagram looks like the sort of thing an ivory tower architect might produce and it can seem very &#034;conceptual&#034; for many people with a technical background.
&lt;/p&gt;

&lt;h3&gt;Talk about components, write classes&lt;/h3&gt;
&lt;p&gt;
	People generally understand the benefit of thinking about software as higher level building blocks and you&#039;ll often hear people talking in terms of components when they&#039;re having architecture discussions. This often isn&#039;t reflected in the codebase though. Take a look at your own codebase. Can you clearly see components or does your codebase reflect some other structure? When you open up a codebase, it will often reflect some other structure due to the organisation of the code. Mark Needham has a great post called &lt;a href=&#034;http://www.markhneedham.com/blog/2012/02/20/coding-packaging-by-vertical-slice/&#034; target=&#034;_blank&#034;&gt;Coding: Packaging by vertical slice&lt;/a&gt; that talks about one approach to code organisation and a &lt;a href=&#034;https://www.google.com/search?client=safari&amp;amp;rls=en&amp;amp;q=package+by+feature+vs+package+by+layer&amp;amp;ie=UTF-8&amp;amp;oe=UTF-8&#034; target=&#034;_blank&#034;&gt;Google search for &#034;package by feature vs package by layer&#034;&lt;/a&gt; will throw up lots of other discussions on the same topic. The mapping between the architectural view of a software system and the code are often very different. This is sometimes why you&#039;ll see people ignore architecture diagrams (or documentation) and say &#034;the code is the only single point of truth&#034;.
&lt;/p&gt;

&lt;h3&gt;Auto-generating architecture diagrams&lt;/h3&gt;
&lt;p&gt;
	To change tack slightly, I was in Dublin a few weeks ago and I met Chris Chedgey, who is part of the inspiration behind this post. Chris is the co-founder of a company called Headway Software and they have a product called &lt;a href=&#034;http://structure101.com&#034; target=&#034;_blank&#034;&gt;Structure101&lt;/a&gt;. You should take a look if you&#039;ve not seen it before, they have some cool stuff in the pipeline. I won&#039;t do their product any justice by trying to summarise what it does, but one of its many features is to &lt;a href=&#034;http://structure101.com/resources/videos/structure101-overview.php&#034; target=&#034;_blank&#034;&gt;visualise and understand an existing codebase&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
	When I teach people how to visualise their software systems, we create a number of simple NoUML sketches at different levels of abstraction. These are the &lt;a href=&#034;http://www.codingthearchitecture.com/presentations/dublinaltdotnet2013-agile-software-architecture-sketches/43&#034; target=&#034;_blank&#034;&gt;context&lt;/a&gt;, &lt;a href=&#034;http://www.codingthearchitecture.com/presentations/dublinaltdotnet2013-agile-software-architecture-sketches/47&#034; target=&#034;_blank&#034;&gt;containers&lt;/a&gt; and &lt;a href=&#034;http://www.codingthearchitecture.com/presentations/dublinaltdotnet2013-agile-software-architecture-sketches/51&#034; target=&#034;_blank&#034;&gt;components&lt;/a&gt; diagrams. This context, containers and components approach is basically just a tree structure. A system is made up of containers (e.g. a web server, application server, database, etc), each of which is further made up of components. You can see some example diagrams on &lt;a href=&#034;http://www.flickr.com/photos/codingthearchitecture/sets/&#034; target=&#034;_blank&#034;&gt;Flickr&lt;/a&gt; and in my book. 
&lt;/p&gt;

&lt;p&gt;
	Given this is really just a tree structure, it should be fairly straightforward to auto-generate these diagrams from an existing codebase. And perhaps there is a tool out there that can do this, but I&#039;ve never seen one that has worked really well. Microsoft Visual Studio can generate some layer diagrams but I&#039;ve never met anybody that really raves about the architecture diagram support. Most tools generate diagrams showing dependencies between packages or classes but they don&#039;t tend to show components. And what&#039;s a component anyway? Is any class that implements an interface a component? If you&#039;re using inversion of control, perhaps everything that you inject is a component?
&lt;/p&gt;

&lt;p&gt;
	There are a number of reasons why auto-generating such diagrams is tricky but, once we start coding, much of the semantics associated with &#034;containers&#034; (runtime environments, process boundaries, etc) and &#034;components&#034; becomes lost of the sea of classes that make up the typical codebase. Many developers break their systems up into a number of projects within their IDEs to represent reusable libraries and deployable units but external tools often don&#039;t have access to this information if they are solely working from a bunch of JAR files or DLLs (for example). In essence, the information related to the abstract structural elements isn&#039;t adequately represented within a codebase. If you take a look at most codebases, I&#039;m fairly sure that you could come up with a set of rules as to what defines a component but perhaps it would be easier to simply make these concepts explicit. Some techniques already exist to do this (e.g. the &lt;a href=&#034;http://en.wikipedia.org/wiki/Architecture_description_language&#034; target=&#034;_blank&#034;&gt;Architecture Description Language&lt;/a&gt;) but I&#039;ve never seen them used in the corporate world.
&lt;/p&gt;

&lt;h3&gt;Packaging by component&lt;/h3&gt;
&lt;p&gt;
	To bring this discussion back to code, the organisation of the codebase can really help or hinder here. Organising a codebase by layer makes it easy to see the overall structure of the software but there are trade-offs. For example, you need to delve inside multiple layers (e.g. packages, namespaces, etc) in order to make a change to a feature or user story. Also, many codebases end up looking eerily similar given the fairly standard approach to layering within enterprise systems. Uncle Bob Martin says that if you&#039;re looking at a codebase, it should scream something about the business domain. Organising your code by feature rather than by layer gives you this, but again there are trade-offs. A variation I&#039;ve been experimenting with is organising code explicitly by component. The following screenshot shows an example of this in the codebase for my &lt;a href=&#034;http://techtribes.je&#034; target=&#034;_blank&#034;&gt;techtribes.je&lt;/a&gt; website (a content aggregator and portal for Jersey&#039;s digital sector). This screenshot only shows the core components; there&#039;s a separate Spring MVC project and the controllers use the components illustrated here. 
&lt;/p&gt;

&lt;p align=&#034;center&#034;&gt;
	&lt;img src=&#034;http://www.codingthearchitecture.com/images/20130408-package-by-component.png&#034; alt=&#034;Packaging by component&#034; class=&#034;photo&#034; /&gt;
&lt;/p&gt;

&lt;p&gt;
	This is similar to packaging by feature, but it&#039;s more akin to the &#034;micro services&#034; that Mark Needham talks about in &lt;a href=&#034;http://www.markhneedham.com/blog/2012/02/20/coding-packaging-by-vertical-slice/&#034; target=&#034;_blank&#034;&gt;his blog post&lt;/a&gt;. Each sub-package of je.techtribes.component houses a separate component, complete with it&#039;s own internal layering and Spring configuration. As far as possible, all of the internals are package scoped. You could potentially pull each component out and put it in it&#039;s own project or source code repository to be versioned separately. This approach will likely seem familiar to you if you&#039;re building something that has a very explicit loosely coupled architecture such as a distributed messaging system made up of loosely coupled components. I&#039;m fairly confident that most people are still building something more monolithic in nature though, despite thinking about their system in terms of components. I&#039;ve certainly packaged *parts* of monolithic codebases using a similar approach in the past but it&#039;s tended to be fairly ad hoc. Let&#039;s be honest, organising code into packages isn&#039;t something that gets a lot of brain-time, particularly given the refactoring tools that we have at our disposal. Organising code by component lets you explicitly reflect the concept of &#034;a component&#034; from the architecture into the codebase. If your software architecture diagram screams something about your business domain (and it should), this will be reflected in your codebase too.
&lt;/p&gt;

&lt;h3&gt;The structural elements of software&lt;/h3&gt;
&lt;p&gt;
	We could create a convention here to say that all sub-packages of je.techtribes.component are components, but it would be much easier to explicitly mark components using metadata. In Java, we could use annotations to do this, attributes in .NET, etc. If we used the same approach for other structural elements of software (e.g. services, layers, containers, etc), tool vendors could use this metadata to generate meaningful and *simple* architecture diagrams automatically. Plus, they could also use this structural information to generate dependency diagrams that focus on components rather than classes. I&#039;ve started experimenting with annotations as a way to do this and I&#039;ve created a &lt;a href=&#034;https://github.com/simonbrowndotje/structural-elements-of-software&#034; target=&#034;_blank&#034;&gt;Github repo&lt;/a&gt; to store whatever I come up with. 
&lt;/p&gt;

&lt;p&gt;
	The major caveat to all of this is that designing a software system based around components isn&#039;t &#034;the only way&#034;. It&#039;s a nice approach to think about software systems that are more monolithic in nature and it&#039;s a great stepping stone to designing loosely coupled architectures. But it isn&#039;t a silver bullet. Regardless of how you design software, I do hope this post has got you thinking about the mapping between software architecture and how it&#039;s reflected in the code.
&lt;/p&gt;

&lt;p&gt;
	Software architecture and coding are often seen as mutually exclusive disciplines and there&#039;s often very little mapping from the architecture into the code and back again. &lt;a href=&#034;http://www.codingthearchitecture.com/presentations/dublinaltdotnet2013-agile-software-architecture-sketches&#034; target=&#034;_blank&#034;&gt;Effectively and efficiently visualising a software architecture&lt;/a&gt; can help to create a good shared vision within the team, which can help it go faster. Having a simple and explicit mapping from the architecture to the code can help even further, particularly when you start looking at collaborative design and collective code ownership. Furthermore, it helps bring software architecture firmly back into the domain of the development team, which is ultimately where it belongs.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <comments>http://www.codingthearchitecture.com/2013/04/08/mapping_software_architecture_to_code.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2013/04/08/mapping_software_architecture_to_code.html</guid>
    <pubDate>Mon, 08 Apr 2013 10:27:59 GMT</pubDate>
  </item>
  
  <item>
    <title>New essays in the book</title>
    <link>http://www.codingthearchitecture.com/2013/03/14/new_essays_in_the_book.html</link>
    
      
        <description>
          &lt;p&gt;
Just a quick note to say that I&#039;ve added some new essays to my &lt;a href=&#034;https://leanpub.com/software-architecture-for-developers&#034; target=&#034;_blank&#034;&gt;Software Architecture for Developers&lt;/a&gt; book. They are:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Software architects should be master builders&lt;/b&gt;: this talks about the importance of software architects needing deep technology skills and working as a part of the team.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Technology is not an implementation detail&lt;/b&gt;: this is about why you shouldn&#039;t leave technology decisions as a after-thought.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;The need for sketches&lt;/b&gt;: this explains the importance of sketches in communicating the overall software architecture, both inside and outside of the immediate team.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Would you code it that way?&lt;/b&gt;: this talks about the key question you need to ask yourself whenever you&#039;re designing software and visualising that design through sketches.&lt;/li&gt;
&lt;/ul&gt;

&lt;/p&gt;
Leanpub does have the ability to e-mail readers whenever a new version of the book is published, but I try to only do this once or twice a month so as not to spam everybody. There is a version history at the back of the book though, which will tell you when new essays have been added plus it hyperlinks right to them. Hope you enjoy the new content.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <comments>http://www.codingthearchitecture.com/2013/03/14/new_essays_in_the_book.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2013/03/14/new_essays_in_the_book.html</guid>
    <pubDate>Thu, 14 Mar 2013 10:24:00 GMT</pubDate>
  </item>
  
  <item>
    <title>Presentation at QConLondon 2013</title>
    <link>http://www.codingthearchitecture.com/2013/03/12/presentation_at_qconlondon_2013.html</link>
    
      
        <description>
          &lt;p&gt;
Last week I spoke at QConLondon 2013 on the topic of &#034;Modern Legacy Systems&#034;. Here are the &lt;a href=&#034;http://www.codingthearchitecture.com/presentations/qconlondon2013-modern-legacy-systems&#034;&gt;slides&lt;/a&gt; and I&#039;ll update with a link to the video when QCon makes it available.
&lt;/p&gt;
&lt;p&gt;
Thank you to everyone that attended and I had a couple of great conversations afterwards about the topic. I even had someone tell me that they were the &#039;other side&#039; of one of the anecdotes I told - they were on the better of the two sides! The auditorium I spoke in (Churchill) was HUGE and had a maximum capacity of 700. I had under the capacity but this was the largest venue I&#039;ve spoken in and don&#039;t mind admitting that I found it intimidating! Fortunately I had watched Damien Conway&#039;s excellent &lt;a href=&#034;http://qconlondon.com/london-2013/presentation/Parallel%20KEYNOTE:%20Instantly%20Better%20Presentations%20-%20Churchill%20Auditorium%20Ground%20Floor&#034;&gt;Instantly Better Presentations&lt;/a&gt; talk earlier in the day and the tips came in handy. I would really advise anyone giving presentations to watch the video when it is available.
&lt;/p&gt;
&lt;p&gt;
I attended many fascinating presentations and a couple that stand out most were around technology and art - &lt;a href=&#034;http://qconlondon.com/london-2013/tracks/show_track.jsp?trackOID=771&#034;&gt;visual problem solving&lt;/a&gt;. This was a really enjoyable but I&#039;m struggling to find an immediate use for what I learned in my job!
&lt;/p&gt;
&lt;p&gt;
Also worth a mention was Jesper Richter-Reichhelm&#039;s talk on &lt;a href=&#034;http://qconlondon.com/london-2013/presentation/Painful%20success%20-%20lessons%20learned%20while%20scaling%20up&#034;&gt;Painful Success&lt;/a&gt;. This was a review of an architectural mistake that was made early in a project and its resolution. The problem came down to an incorrectly chosen architectural archetype which became evident when the system was under load. I think this is very common, particularly for on-line applications where it is assumed that a website architecture is suitable. What impressed me was Jesper&#039;s  honesty about the issue, which is necessary in finding a solution. Many people find admitting these errors impossible and I think we can all learn from the good example.
&lt;/p&gt;
&lt;p&gt;
        </description>
      
      
    
    
    
    <category>How do you share software architecture?</category>
    
    <category>What is software architecture?</category>
    
    <comments>http://www.codingthearchitecture.com/2013/03/12/presentation_at_qconlondon_2013.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2013/03/12/presentation_at_qconlondon_2013.html</guid>
    <pubDate>Tue, 12 Mar 2013 21:27:58 GMT</pubDate>
  </item>
  
  <item>
    <title>Photos and slides from DevWeek 2013</title>
    <link>http://www.codingthearchitecture.com/2013/03/11/photos_and_slides_from_devweek_2013.html</link>
    
      
        <description>
          &lt;p&gt;
Just a quick note to say thank you to everybody who came along to my workshop and/or talk at DevWeek 2013 last week. Here are links to the slides and photos.
&lt;/p&gt;

&lt;p align=&#034;center&#034;&gt;
&lt;img src=&#034;http://farm9.staticflickr.com/8251/8536668336_e6532b477c_z.jpg&#034; alt=&#034;Photos from DevWeek 2013&#034; class=&#034;photo&#034; /&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#034;http://www.codingthearchitecture.com/presentations/devweek2013-effective-architecture-sketches&#034; target=&#034;_blank&#034;&gt;Slides from my &#034;Effective architecture sketches&#034; workshop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#034;http://www.flickr.com/photos/codingthearchitecture/sets/72157632939643234/&#034; target=&#034;_blank&#034;&gt;Photos from my &#034;Effective architecture sketches&#034; workshop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#034;http://www.codingthearchitecture.com/presentations/devweek2013-software-architecture-for-developers&#034; target=&#034;_blank&#034;&gt;Slides from my &#034;Software architecture for developers&#034; talk&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Thanks again.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <comments>http://www.codingthearchitecture.com/2013/03/11/photos_and_slides_from_devweek_2013.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2013/03/11/photos_and_slides_from_devweek_2013.html</guid>
    <pubDate>Mon, 11 Mar 2013 08:40:10 GMT</pubDate>
  </item>
  
  <item>
    <title>Sample software guidebook and sketches</title>
    <link>http://www.codingthearchitecture.com/2013/02/26/sample_software_guidebook_and_sketches.html</link>
    
      
        <description>
          &lt;p&gt;
Documentation on software projects is often a contentious topic, particularly since the agile manifesto says that we should value working software over comprehensive documentation. My take on lightweight documentation has now been included in my &lt;a href=&#034;http://leanpub.com/software-architecture-for-developers&#034; target=&#034;_blank&#034;&gt;Software Architecture for Developers&lt;/a&gt; book and I&#039;ve had a stream of e-mail requests since publishing the new version to ask whether I would create a sample software guidebook too.
&lt;/p&gt;

&lt;h3&gt;A sample software guidebook&lt;/h3&gt;
&lt;p&gt;
Yes is the answer ... and I&#039;ve already started putting this together, based upon a side-project of mine called &lt;a href=&#034;http://techtribes.je&#034; target=&#034;_blank&#034;&gt;techtribes.je&lt;/a&gt;, which is basically a community portal for the IT, tech and digital industry in Jersey&lt;sup&gt;*&lt;/sup&gt;. This is a fun little side-project rather than a huge high-performance distributed system, but it should be enough to illustrate the concepts in the book.
&lt;/p&gt;

&lt;h3&gt;And some sample software architecture sketches&lt;/h3&gt;
&lt;p&gt;
The sample guidebook will also include some software architecture diagrams, which will again serve as an example of the context, containers, components and classes sketches that I talk about. The following context diagram (included in the sample guidebook) provides an overview of techtribes.je:
&lt;/p&gt;

&lt;p align=&#034;center&#034;&gt;
&lt;img src=&#034;http://www.codingthearchitecture.com/images/20130226-context-diagram.png&#034; alt=&#034;Context diagram for techtribes.je&#034; /&gt;
&lt;/p&gt;

&lt;p&gt;
The introduction and context sections of the sample guidebook are available in the published version of my book now and I&#039;ll be adding the other sections over the next few days. 
&lt;/p&gt;

&lt;h3&gt;Plus some open source code&lt;/h3&gt;
&lt;p&gt;
As a final note, I&#039;m planning to open-source the code behind techtribes.je on GitHub so that you can see the correlation between the code and the documentation. If there&#039;s anything else that you&#039;d like to see in the book, please just drop me a line.
&lt;/p&gt;

&lt;p&gt;
&lt;sup&gt;* just to avoid any confusion, I&#039;m referring to Jersey in the Channel Islands, not New Jersey! :-)&lt;/sup&gt;
&lt;/p&gt;
        </description>
      
      
    
    
    
    <comments>http://www.codingthearchitecture.com/2013/02/26/sample_software_guidebook_and_sketches.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2013/02/26/sample_software_guidebook_and_sketches.html</guid>
    <pubDate>Tue, 26 Feb 2013 11:06:00 GMT</pubDate>
  </item>
  
  <item>
    <title>More Legacy</title>
    <link>http://www.codingthearchitecture.com/2013/02/25/more_legacy.html</link>
    
      
        <description>
          &lt;p&gt;
In my last blog on &lt;a href=&#034;http://www.codingthearchitecture.com/2013/02/05/what_is_legacy.html&#034;&gt;legacy systems&lt;/a&gt; I talked about what they were and weren&#039;t. In this one I&#039;m going to expand on this and how they fit into the business process lifecycle.
&lt;/p&gt;
&lt;p&gt;
Like most developers the centre of my work life is the software development process. This might involve a business analysis phase before and some support afterwards but this is a relatively small percentage of my time.
&lt;/p&gt;
&lt;p&gt;
The &#039;software development centric&#039; view of the world is below (this is the &#039;SDLC diagram&#039; and your own process may differ but will share elements). There are two parts that interact with the outside world - requirements and deploy (which may be lightweight and frequent) and the external interactions are wrapped in that. 
&lt;/p&gt;
&lt;img src=&#034;http://www.codingthearchitecture.com/images/l2-sdlc.png&#034; alt=&#034;SDLC&#034; border=&#034;0&#034; /&gt;
&lt;p&gt;
For some businesses (e.g. public facing web sites) the software IS the business and there is no significant period before or after the software development - it occurs constantly. These businesses are very interesting to us developers for this very reason (and therefore the projects often discussed at conferences) but are actually the exception. For the majority of organisations their individual IT systems perform a function that constitute only a small part of what they do.
&lt;/p&gt;
&lt;p&gt;
Therefore users of our software view the world differently. The software development phase is a very small part of their business processes lifecycle and lifespan. They view the world a little more like this:
&lt;/p&gt;
&lt;img src=&#034;http://www.codingthearchitecture.com/images/l2-in-context.png&#034; alt=&#034;SDLC&#034; border=&#034;0&#034; /&gt;
&lt;p&gt;
Most of the processes they execute will originally have been done ‘manually’ (I include generic software tools such as spreadsheets) and may been done this way from 6 months to 100 years. (If you think I&#039;m exaggerating with &#039;100 years&#039; then you should speak to someone who&#039;s worked with an old insurance company!) 
&lt;/p&gt;
&lt;p&gt;
Eventually it will be decided that it is cost effective to develop bespoke software (or spend a lot of effort configuring BPM/CRM etc software). This process may be iterative and deliver value quickly but will be mostly complete after a relatively short period of time (compared to the organisation’s lifespan).
&lt;/p&gt;
&lt;p&gt;
It is now fully live and a software team will consider it to now be in its maintenance phase. From the organisation&#039;s point-of-view this is where the real value is extracted from the system. Very little money is being spent on it but it is being used and either helping to generate revenue or increasing the efficiency of a process.
&lt;/p&gt;
&lt;p&gt;
As time goes on there will be a decreasing number of changes made to it. Eventually it will be considered ‘legacy’. Ultimately the system will reach end-of-life and replaced when no longer fit for purpose. 
&lt;/p&gt;
&lt;p&gt;
If we were going to scale the diagram to indicate time then it might look like this:
&lt;/p&gt;
&lt;p&gt;
&lt;img src=&#034;http://www.codingthearchitecture.com/images/l2-context-sized.png&#034; alt=&#034;SDLC&#034; border=&#034;0&#034; /&gt;
&lt;/p&gt;
&lt;p&gt;
These are kind of lifecycle times that I&#039;ve experienced and yours may differ - this will depend largely on the industries you work within.
&lt;/p&gt;
&lt;p&gt;
Therefore &#039;legacy&#039; should be viewed as a phase in the lifecycle of the process. Note that I have a small arrow going back to Software Development from the maintenance/legacy phase as it may have upgrades or additions made many years after being deployed.
&lt;/p&gt;
&lt;p&gt;
A comment on my previous blog post said that they refer to &#039;legacy&#039; systems as &#039;mature&#039; as this has more positive connotations. I think it also accurately reflects legacy as being a stage of a lifecycle rather than any particular indication of quality.
&lt;/p&gt;
&lt;p&gt;
Lastly I&#039;m just going to quickly plug my talk at QCon again (&lt;a href=&#034;http://qconlondon.com/london-2013/presentation/Modern%20Legacy%20Systems&#034;&gt;Modern Legacy Systems&lt;/a&gt;) which explores some legacy issues, makes suggestions about approaching them and how to leave a good legacy rather than a bad one. If you haven&#039;t booked your place at QCon yet then you can use code ANNE100 to get £100 off.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>How do you define software architecture?</category>
    
    <category>What is the the role of a software architect?</category>
    
    <category>What is software architecture?</category>
    
    <comments>http://www.codingthearchitecture.com/2013/02/25/more_legacy.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2013/02/25/more_legacy.html</guid>
    <pubDate>Mon, 25 Feb 2013 21:05:00 GMT</pubDate>
  </item>
  
  <item>
    <title>What is Legacy?</title>
    <link>http://www.codingthearchitecture.com/2013/02/05/what_is_legacy.html</link>
    
      
        <description>
          &lt;p&gt;
I&#039;m speaking at QCon london this year on the topic &lt;a href=&#034;http://qconlondon.com/london-2013/presentation/Modern%20Legacy%20Systems&#034;&gt;Modern Legacy Systems&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
This was tweeted by @QCon as follows 
(note this talk isn&#039;t specifically about Java but about systems in general).
&lt;/p&gt;
&lt;p&gt;
&lt;img src=&#034;http://www.codingthearchitecture.com/images/qcon-tweet.png&#034; alt=&#034;Tweet1&#034; border=&#034;0&#034; /&gt;
&lt;/p&gt;
&lt;p&gt;
and within minutes UncleBobMartin replied:
&lt;/p&gt;
&lt;p&gt;
&lt;img src=&#034;http://www.codingthearchitecture.com/images/qcon-tweet2.png&#034; alt=&#034;Tweet2&#034; border=&#034;0&#034; /&gt;
&lt;/p&gt;
&lt;p&gt;
This illustrates a good point about attitudes towards legacy code and systems. Although the term is often used negatively, legacy code is NOT, necessarily, bad code (and a system is more than just code).  
&lt;/p&gt;
&lt;p&gt;
In most areas of life a &#039;Legacy&#039; is a good thing! It might refer to a valuable art collection left to a museum or perhaps the body of work of a famous author. Only in I.T. is something old (but valuable) viewed as bad.
&lt;/p&gt;
&lt;p&gt;
When we refer to a System being Legacy we&#039;re really saying that the system is built in a way that differs to how we&#039;d choose to do so now. The system may have been written well, using the best technologies and tools available at the time. A system written in 2001 using Java 1.2 and Oracle 8i etc may have made perfect sense at the time but if you wrote it now you&#039;d at least use the latest versions available or even something different entirely (Scala, mongoDB etc didn&#039;t exist then).
&lt;/p&gt;
&lt;p&gt;
A system &lt;b&gt;maintained&lt;/b&gt; by professional programmers would be upgraded throughout time and migrated to new technology when required (as Bob suggests). However, this is rarely a decision for the programmers - it&#039;s a management decision. To be fair to management, does it really make sense to spend large amounts of money continually upgrading a system if it works? If the programmers and systems team did a good job then no-one might need to make changes for many years. This indicates a high return-on-investment and a good quality system. A Legacy!
&lt;/p&gt;
&lt;p&gt;
Of course when you do have to make changes or additions you have a very different set of challenges compared to modifying a system that is being continually developed. My talk at QCon explores some of these issues, makes suggestions about approaching them and how to leave a good legacy rather than a bad one. If you haven&#039;t booked your place at QCon yet then you can use code ANNE100 to get £100 off.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>What is software architecture?</category>
    
    <category>How do you deliver software architecture?</category>
    
    <comments>http://www.codingthearchitecture.com/2013/02/05/what_is_legacy.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2013/02/05/what_is_legacy.html</guid>
    <pubDate>Tue, 05 Feb 2013 21:56:00 GMT</pubDate>
  </item>
  
  </channel>
</rss>
