<?xml version="1.0"?>
<rss version="2.0">
<channel>
  <title>Coding the Architecture - sbrown</title>
  <link>http://www.codingthearchitecture.com/authors/sbrown/</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>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>Software architecture training in the Czech Republic</title>
    <link>http://www.codingthearchitecture.com/2013/01/22/software_architecture_training_in_the_czech_republic.html</link>
    
      
        <description>
          &lt;p&gt;
I&#039;m pleased to say that my &lt;a href=&#034;http://www.softwarearchitecturefordevelopers.com&#034; target=&#034;_blank&#034;&gt;Software Architecture for Developers&lt;/a&gt; training course is coming to the Czech Republic in 2013, in conjunction with &lt;a href=&#034;http://www.aguarra.cz/skoleni-software-architecture.html&#034; target=&#034;_blank&#034;&gt;Aguarra&lt;/a&gt;. There are two public courses currently scheduled for the 21st/22nd February and the 23rd/24th September.
&lt;/p&gt;

&lt;p&gt;
Please see the &lt;a href=&#034;http://www.aguarra.cz/skoleni-software-architecture.html&#034; target=&#034;_blank&#034;&gt;Aguarra website&lt;/a&gt; for prices and to book a place.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <comments>http://www.codingthearchitecture.com/2013/01/22/software_architecture_training_in_the_czech_republic.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2013/01/22/software_architecture_training_in_the_czech_republic.html</guid>
    <pubDate>Tue, 22 Jan 2013 10:50:28 GMT</pubDate>
  </item>
  
  <item>
    <title>Software documentation as a guidebook</title>
    <link>http://www.codingthearchitecture.com/2013/01/15/software_documentation_as_a_guidebook.html</link>
    
      
        <description>
          &lt;p&gt;
&#034;Working software over comprehensive documentation&#034; is what the &lt;a href=&#034;http://agilemanifesto.org&#034; target=&#034;_blank&#034;&gt;Manifesto for Agile Software Development&lt;/a&gt; says and it&#039;s incredible to see how many software teams have interpreted those five words as &#034;don&#039;t write *any* documentation&#034;. The underlying principle here is that real working software is much more valuable to end-users than a stack of comprehensive documentation but many teams use this line in the agile manifesto as an excuse to not write any documentation at all. Unfortunately &lt;a href=&#034;http://xpdays.com.ua/materials/code-story/&#034; target=&#034;_blank&#034;&gt;the code doesn&#039;t tell the whole story&lt;/a&gt; and not having a source of supplementary information about a complex software system can slow the team down as they struggle to navigate the codebase. 
&lt;/p&gt;

&lt;p&gt;
I&#039;m also a firm believer that many software teams have a duty to deliver some supplementary documentation along with the codebase, especially those that are building the software under an outsourcing and/or offshoring contract. I&#039;ve seen IT consulting organisations deliver highly complex software systems to their customers without a single piece of supporting documentation, often because the team doesn&#039;t *have* any documentation. If the original software developers leave the consulting organisation, will the new team be able to understand what the software is all about, how it&#039;s been built and how to enhance it in a way that is sympathetic to the original architecture? And what about the poor customer? Is it right that they should *only* be delivered a working codebase?
&lt;/p&gt;

&lt;p&gt;
The problem is that when software teams think about documentation, they usually think of huge Microsoft Word documents based upon a software architecture document template from the 1990&#039;s that includes sections where they need to draw UML class diagrams for every use case that their software supports. Few people enjoy reading this type of document, let alone writing it! A different approach is needed. &lt;a href=&#034;http://samples.leanpub.com/software-architecture-for-developers-sample.pdf&#034; target=&#034;_blank&#034;&gt;Read more in &#034;Software Architecture for Developers&#034;&lt;/a&gt;...
&lt;/p&gt;
        </description>
      
      
    
    
    
    <comments>http://www.codingthearchitecture.com/2013/01/15/software_documentation_as_a_guidebook.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2013/01/15/software_documentation_as_a_guidebook.html</guid>
    <pubDate>Tue, 15 Jan 2013 11:09:22 GMT</pubDate>
  </item>
  
  <item>
    <title>Digitalisation - complex for all the wrong reasons</title>
    <link>http://www.codingthearchitecture.com/2013/01/11/digitalisation_complex_for_all_the_wrong_reasons.html</link>
    
      
        <description>
          &lt;p&gt;
Here&#039;s a short article that I wrote in 2011 for &lt;a href=&#034;http://dit.dk&#034; target=&#034;_blank&#034;&gt;Dansk IT&lt;/a&gt; about digitalisation. The TL;DR version is &#034;understand your enterprise architecture&#034;.
&lt;/p&gt;

&lt;p&gt;
- - -
&lt;/p&gt;

&lt;p&gt;
In my role as a software developer, Iʼm often asked to automate existing business processes and transform them into computer systems. Sometimes this is about replacing systems that are solely manual in nature and sometimes itʼs about replacing manual systems that have a digital core like an Excel spreadsheet. Digitalising these processes can be as simple as creating a way to capture the essential data, implementing some automated processing and ensuring that the resulting data is stored centrally for others to use. Unfortunately though, life is never that simple and digitalisation becomes a complex task for all the wrong reasons.
&lt;/p&gt;

&lt;p&gt;
The goal of most digitalisation efforts is usually related to reducing cost, improving efficiency or simply making somebodyʼs life easier. Achieving this normally requires centralising some aspects of the data and the associated process, ultimately requiring people to work together who are often in different teams and often in different locations. To complicate matters, you need to deal with the data silos that each of those separate teams have built up over the years. Essentially, itʼs *their* data that they have complete control of and itʼs *their* version of the truth. Iʼve seen this everywhere from large investment banks where each business area has their own definition of what should really be common reference data, through to organisations where each department has a different view of their customers. Creating a single consolidated source of truth typically requires teams to relinquish some of their control and likely some of their data too. Reaching agreement on the definition of common concepts is one thing, but getting teams to give up some of their perceived power is another entirely.
&lt;/p&gt;

&lt;p&gt;
Agile might be the hottest thing in software development at the moment, but having an understanding of the enterprise architecture is crucial for any digitalisation effort, particularly if it spans an organisation and crosses internal boundaries. My advice? Focus on the end-goal and donʼt get caught up on the politics, particularly if youʼre an outsider looking in.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <comments>http://www.codingthearchitecture.com/2013/01/11/digitalisation_complex_for_all_the_wrong_reasons.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2013/01/11/digitalisation_complex_for_all_the_wrong_reasons.html</guid>
    <pubDate>Fri, 11 Jan 2013 11:29:26 GMT</pubDate>
  </item>
  
  </channel>
</rss>
