<?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>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>Is VM size an architectural smell?</title>
    <link>http://www.codingthearchitecture.com/2012/05/16/is_vm_size_an_architectural_smell.html</link>
    
      
        <description>
          &lt;p&gt;
A couple of months ago I went to an excellent set of talks at &lt;a href=&#034;http://www.meetup.com/Londonjavacommunity/events/53477082/&#034;&gt;LJC night at QCon&lt;/a&gt;. This not only inspired my entry on &lt;a href=&#034;http://www.codingthearchitecture.com/2012/03/09/modelling_process_and_staleness.html&#034;&gt;staleness&lt;/a&gt; but also made me think about some more architectural smells.
&lt;/p&gt;&lt;p&gt;
Gil Tene from Azul spoke about the maximum size of VMs we all use. A quick show of hands indicated that the maximum size of VM heap memory most of us ran was 2-4GB. Gil argued, quite convincingly, that this was due to legacy issues with garbage collection but new techniques should make this limit redundant. 
&lt;/p&gt;&lt;p&gt;
I sort of agree... However, even if all the issues surrounding garbage collecting large VMs is solved, the 2-4GB limit is still a useful one.
&lt;/p&gt;&lt;p&gt;
In &lt;a href=&#034;http://www.codingthearchitecture.com/2011/10/02/is_caching_an_architectural_smell.html&#034;&gt;Architectural Smells&lt;/a&gt; I argued that there are architectural smells in the same way that there are code smells (aspects of a system that indicate but not guarantee a possible issue) and the example I gave was caching. I also think that VM size is an architectural smell.
&lt;/p&gt;&lt;p&gt;
When designing complex systems one of the most common design guidelines is to split differing responsibilities into specific services. Non-functional requirements may complicate this but most of us try to avoid having all functionality in a single service. Certain services are obviously distinct and can be isolated. However it&#039;s easy for functionality creep to result in a service gaining a lot of responsibilities and this often results in a larger run-time footprint.
&lt;/p&gt;&lt;p&gt;
During testing this shows itself as a service requiring a large VM - certainly in comparison to other services. I view this as an architectural smell and analyse the service to see if it should be split up. (Easier if you have some form of &lt;a href=&#034;http://leanpub.com/software-architecture-for-developers&#034;&gt;lightweight and iterative design process.&lt;/a&gt;)
&lt;/p&gt;&lt;p&gt;
This is very similar to the code smell of &lt;a href=&#034;http://en.wikipedia.org/wiki/Code_smell&#034;&gt;long method&lt;/a&gt;. It&#039;s rare that your code size or service size starts out by being too large but tends to happen over time. This is a good reason why an architect can&#039;t just &lt;a href=&#034;http://www.codingthearchitecture.com/2011/04/13/software_development_is_not_a_relay_sport.html&#034;&gt;throw it over the wall&lt;/a&gt; but needs to stay involved with the project. As developers add code to the system the design might need to change.
&lt;/p&gt;&lt;p&gt;
Whether you take an absolute size or relative size will depend on your system in question. Personally, I get concerned when a service is larger than 1GB unless its prime purpose is data storage and even then the data should probably be clustered across services rather than in a single block - but that&#039;s an argument for a different occasion.
&lt;/p&gt;

        </description>
      
      
    
    
    
    <category>What is the the role of a software architect?</category>
    
    <category>How do you deliver software architecture?</category>
    
    <comments>http://www.codingthearchitecture.com/2012/05/16/is_vm_size_an_architectural_smell.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2012/05/16/is_vm_size_an_architectural_smell.html</guid>
    <pubDate>Wed, 16 May 2012 08:01:04 GMT</pubDate>
  </item>
  
  <item>
    <title>SharePoint projects need software architecture too</title>
    <link>http://www.codingthearchitecture.com/2012/05/15/sharepoint_projects_need_software_architecture_too.html</link>
    
      
        <description>
          &lt;p&gt;
I was reading &lt;a href=&#034;http://www.21apps.com/21shift/norequirements/&#034; target=&#034;_blank&#034;&gt;Requirements–we don’t need them!&lt;/a&gt; by &lt;a href=&#034;http://twitter.com/andrewwoody&#034; target=&#034;_blank&#034;&gt;Andrew Woodward of 21apps&lt;/a&gt; recently, which talks about the importance of having a visionary product owner on your SharePoint project to ensure that it delivers the right thing. That all makes sense and it&#039;s inspired me to write this blog entry ... SharePoint projects also need a healthy dose of software architecture.
&lt;/p&gt;

&lt;p&gt;
If you&#039;re currently thinking &#034;well, yes, duh!&#034;, that&#039;s awesome. Unfortunately, I&#039;ve seen a number of SharePoint implementations where the basic tenets of software architecture have been forgotten or neglected. Here&#039;s a summary of why software architecture is important for SharePoint projects.
&lt;/p&gt;

&lt;h3&gt;1. Many SharePoint implementations aren&#039;t just SharePoint&lt;/h3&gt;
&lt;p&gt;
Many of the SharePoint solutions I&#039;ve seen are not just simple implementations of the SharePoint product where end-users can create lists, share documents and collaborate. As with most software systems, they&#039;re a mix of new and legacy technologies, usually with complex integration points into other parts of the enterprise via web services and other integration techniques. Often, bespoke .NET code is also a part of the overall solution, either running inside or outside of SharePoint. If you don&#039;t take the &#034;big picture&#034; into account by understanding the environment and its constraints, there&#039;s a chance that you&#039;ll end up building the wrong thing or building something that doesn&#039;t work.
&lt;/p&gt;

&lt;h3&gt;2. Non-functional requirements still apply to SharePoint solutions&lt;/h3&gt;
&lt;p&gt;
Even if you&#039;re *not* writing any bespoke code as a part of your SharePoint solution, that doesn&#039;t mean you can ignore non-functional requirements. Performance, scalability, security, availability, disaster recovery, audit, monitoring, etc are all potentially applicable. I&#039;ve seen SharePoint projects where the team has neglected to think about key non-functional requirements, even on public Internet-facing websites. As expected, the result was solutions that exhibited poor response times and/or severe security flaws (e.g. cross-site scripting). Often these issues were identified at a late stage in the (usually waterfall) project lifecycle.
&lt;/p&gt;

&lt;h3&gt;3. SharePoint projects are complex and require technical vision too&lt;/h3&gt;
&lt;p&gt;
Like any programming language, SharePoint is a complex platform and there are usually a number of different ways to solve a single problem. In order to get some consistency of approach and avoid chaos, SharePoint projects need strong technical leadership and the &lt;a href=&#034;http://www.codingthearchitecture.com/pages/book/role.html&#034;&gt;software architecture role&lt;/a&gt; is as applicable here as it is if you&#039;re writing a software system from scratch. If you&#039;ve ever seen SharePoint projects where a seemingly chaotic team has eventually delivered something of a poor quality, you&#039;ll appreciate why this is important. 
&lt;/p&gt;

&lt;h3&gt;4. SharePoint solutions still need to be documented&lt;/h3&gt;
&lt;p&gt;
With all of this complexity in place, I&#039;m continually amazed to see SharePoint solutions that have no documentation. I&#039;m not talking about hefty 200+ page documents here, but there should be at least *some* &lt;a href=&#034;http://www.codingthearchitecture.com/pages/book/software-architecture-document-guidelines.html&#034;&gt;lightweight documentation&lt;/a&gt; that provides an overview of the solution. Some diagrams to show how the SharePoint solution works at a high-level are also useful, and something along &lt;a href=&#034;http://www.codingthearchitecture.com/pages/book/c4.html &#034;&gt;these lines&lt;/a&gt; works well. Some *lightweight* documentation can be a great starting point for future support, maintenance and enhancement work; particularly if the project team changes or if the project is delivered under an outsourcing agreement.
&lt;/p&gt;

&lt;h3&gt;Strong leadership and discipline aren&#039;t just for software development projects&lt;/h3&gt;
&lt;p&gt;
If you&#039;re delivering software solutions then you need to make sure that you have at least one person undertaking the technical leadership role, looking after the things that I&#039;ve highlighted above. If not, you&#039;re doing it wrong. As an aside, all of this applies to Microsoft Dynamics CRM projects too, especially if you&#039;re &#034;just tacking on an Internet-facing ASP.NET website to expose CRM data via the Internet&#034;.
&lt;/p&gt;

&lt;p&gt;
I mentioned all of this to somebody a while back and they replied &#034;but SharePoint isn&#039;t software development&#034;. Regardless of whether it is or isn&#039;t software development, successful SharePoint projects need strong technical leadership and discipline. SharePoint projects need software architecture.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <comments>http://www.codingthearchitecture.com/2012/05/15/sharepoint_projects_need_software_architecture_too.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2012/05/15/sharepoint_projects_need_software_architecture_too.html</guid>
    <pubDate>Tue, 15 May 2012 11:47:15 GMT</pubDate>
  </item>
  
  <item>
    <title>Software architecture track at GOTO Copenhagen 2012</title>
    <link>http://www.codingthearchitecture.com/2012/05/11/software_architecture_track_at_goto_copenhagen_2012.html</link>
    
      
        <description>
          &lt;p&gt;
It&#039;s not long now until the GOTO Copenhagen 2012 conference and I&#039;m really honoured to be hosting &lt;a href=&#034;http://gotocon.com/cph-2012/tracks/show_track.jsp?trackOID=542&#034; target=&#034;_blank&#034;&gt;the software architecture track&lt;/a&gt;. The vision for the track is to get people in the software architecture role to share their experiences of how they approach software projects. Here&#039;s the theme that Jasper Arildslund (Trifork) and I came up with.
&lt;/p&gt;

&lt;blockquote&gt;
In this track we relate the origins of the architect back to its roots of being a master-builder and ask why our industry has moved away from this in the real world. You will hear some stories from real master-builders as we take a look at how they approached the software architectures that they created.
&lt;/blockquote&gt;

&lt;p&gt;
We have a number of speakers covering hands-on software architecture from a number of different perspectives and I&#039;m really looking forward to all of the talks. Here&#039;s the list...
&lt;/p&gt;

&lt;h3&gt;1. Master-builder; the original generalising specialist? (Simon Brown)&lt;/h3&gt;
&lt;p&gt;
Applying the building metaphor to software doesn&#039;t necessarily work, although in medieval times the people that architected buildings were the select few that made into the exclusive society of master-builders. The clue here is in the name and a master-builder really was a master of their craft. Once elevated to this status though, did the master-builder continue to build or was that task left to those less noble? Fast-forward several hundred years and it seems we&#039;re asking the same question. Join us as we look at how master-builders fit into our modern world of software development before looking at how my own role has evolved over the years. &lt;a href=&#034;http://gotocon.com/cph-2012/presentation/Master-builder;%20the%20original%20generalising%20specialist?&#034; target=&#034;_blank&#034;&gt;Read more...&lt;/a&gt;
&lt;/p&gt;

&lt;h3&gt;2. A team, a system, some legacy and you (Eoin Woods)&lt;/h3&gt;
&lt;p&gt;
Software architecture is often described as if it is something that is only undertaken (or relevant) when creating a new system from scratch. However in my career I’ve joined many more projects where a system existed already, than projects where I got to design a system from the beginning.
&lt;p&gt;
&lt;/p&gt;
In these situations, it is paramount that you are a “master builder” rather than a designer of castles-in-the-air. A real system exists, it needs help quickly, there is far too much to do and there is no time to wish that things could have been done differently. Action is needed now!
&lt;p&gt;
&lt;/p&gt;
In this talk I’ll describe some of my experiences working on the architecture of existing systems and the principles and techniques that I’ve used to be (mostly) successful in doing this. &lt;a href=&#034;http://gotocon.com/cph-2012/presentation/A%20team,%20a%20system,%20some%20legacy%20?%20and%20you&#034; target=&#034;_blank&#034;&gt;Read more...&lt;/a&gt;
&lt;/p&gt;

&lt;h3&gt;3. Master-builders have rich conceptual models of software design (George Fairbanks)&lt;/h3&gt;
&lt;p&gt;
How hard is it for an architect to be a master-programmer, or a programmer to be a master-architect? One might assume this is easy because both programmers and architects work with the same materials (software) and have the same goal: the design and construction of quality software. In reality, it is quite hard because programmers and architects focus on different aspects of the same software system, aspects that are intricately interconnected. To be a master-builder means understanding programming and architectural aspects separately and being able to reason through the interconnections.
&lt;p&gt;
&lt;/p&gt;
The essential problem is that while we have good descriptions of individual concepts (e.g., encapsulation, design patterns, code indentation style, application frameworks, modules, layers, typing, callbacks, functional programming, quality attributes, domain modeling, code invariants, architectural styles) we lack a clear understanding of how all those concepts fit together and how they interact on real projects.
&lt;p&gt;
&lt;/p&gt;
Until we can relate all these concepts, programmers and architects will only occasionally succeed in being master-builders. This talk presents a conceptual model that relates many of these design concepts and implementation concerns and is a first step towards a clear description of how they all fit together. &lt;a href=&#034;http://gotocon.com/cph-2012/presentation/Master-builders%20have%20rich%20conceptual%20models%20of%20software%20design&#034; target=&#034;_blank&#034;&gt;Read more...&lt;/a&gt;
&lt;/p&gt;

&lt;h3&gt;4. Functional Architecture (Phil Trelford)&lt;/h3&gt;
&lt;p&gt;
Much has been made of the promise of functional programming to solve the pressing issues of concurrency woes as we move to a world of multi-core and distribute computing. In this talk I&#039;ll draw on my own commercial experience of designing and developing large enterprise applications across a range of industries discussing potential sweet spots for functional programming like domain modelling, domain specific languages and of course concurrency. Along with where object-orientated or a mixed approach may be more appropriate. &lt;a href=&#034;http://gotocon.com/cph-2012/presentation/Functional%20Architecture&#034; target=&#034;_blank&#034;&gt;Read more...&lt;/a&gt;
&lt;/p&gt;

&lt;h3&gt;5. 15 Lessons from 15 Years as a Software Architect (Ingo Rammer)&lt;/h3&gt;
&lt;p&gt;
In 1995, Ingo started working on some of the first Internet-based online shops, and he continues to work as a software architect more than a decade and a half later. Quite a bit has changed within these years, but a few things however seem to remain true, no matter what the current wave of technology brings us. In this session, Ingo will talk about his experiences as a software architect (and as a consultant to software architects) and about the lessons he has learned which caused projects to succeed - or to fail. After all: the best mistakes to learn from might be the ones you don’t have to make yourself. &lt;a href=&#034;http://gotocon.com/cph-2012/presentation/15%20Lessons%20from%2015%20Years%20as%20a%20Software%20Architect&#034; target=&#034;_blank&#034;&gt;Read more...&lt;/a&gt;
&lt;/p&gt;

&lt;h3&gt;And there&#039;s more&lt;/h3&gt;
&lt;p&gt;
I&#039;m also re-running &lt;a href=&#034;http://www.codingthearchitecture.com/2012/03/13/photos_from_my_qcon_london_2012_tutorial.html&#034;&gt;the tutorial that I ran at QCon London 2012&lt;/a&gt; called &lt;a href=&#034;http://gotocon.com/cph-2012/presentation/Are%20you%20a%20software%20architect?&#034; target=&#034;_blank&#034;&gt;Are you a software architect?&lt;/a&gt;. See you in Copenhagen!
&lt;/p&gt;

&lt;p&gt;
p.s. George and I will be repeating our talks &lt;a href=&#034;http://gotocon.com/amsterdam-2012/schedule/friday.jsp&#034; target=&#034;_blank&#034;&gt;on Friday at GOTO Amsterdam 2012&lt;/a&gt; too
&lt;/p&gt;
        </description>
      
      
    
    
    
    <comments>http://www.codingthearchitecture.com/2012/05/11/software_architecture_track_at_goto_copenhagen_2012.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2012/05/11/software_architecture_track_at_goto_copenhagen_2012.html</guid>
    <pubDate>Fri, 11 May 2012 06:47:27 GMT</pubDate>
  </item>
  
  <item>
    <title>How do you design software?</title>
    <link>http://www.codingthearchitecture.com/2012/05/10/how_do_you_design_software.html</link>
    
      
        <description>
          &lt;p&gt;
&lt;a href=&#034;http://www.codingthearchitecture.com/2012/04/27/how_do_you_design_software.html&#034;&gt;I recently set a challenge&lt;/a&gt; ... describe how you design software in the time it takes you to have a coffee break. I&#039;ve posed this same question to a few people myself and answering it is really tough. And that, I think, is kind of worrying. Related to this is my observation that teams now find it &lt;a href=&#034;http://www.codingthearchitecture.com/2012/04/12/moving_fast_requires_good_communication.html&#034;&gt;easy to visualise the software development process but not the actual software that they&#039;re building&lt;/a&gt;.
&lt;/p&gt;

&lt;h3&gt;We used to have a reference point&lt;/h3&gt;
&lt;p&gt;
If you look back 10 years or so, a number of teams were using the &lt;a href=&#034;http://en.wikipedia.org/wiki/IBM_Rational_Unified_Process&#034; target=&#034;_blank&#034;&gt;Rational Unified Process&lt;/a&gt; (RUP). Don&#039;t worry, I&#039;m not about to start evangelising RUP but it does have a number of very useful elements and it gave software teams a reference point for the software design process. As a real-world example, I worked on a fairly large RUP project a while back and, as you can imagine, we spent a long time producing documentation and UML models in order to come up with the design for this particular enterprise Java system. I don&#039;t remember what the trigger was, but eventually we had some consultants from Rational come in to help us and they provided advice on which RUP products we should focus on in order to streamline the software design process.
&lt;/p&gt;

&lt;p&gt;
As an aside, I met Uncle Bob for the first time when he was in London recently and we had a quick chat about this sort of stuff. The &#034;boundary, controller, entity&#034; approach that he mentions in his &lt;a href=&#034;http://www.codingthearchitecture.com/2011/11/22/re_clean_architecture.html&#034;&gt;clean architecture talks&lt;/a&gt; is exactly the approach that the guys from Rational recommended that we take. In a nutshell, they gave us a set of simple steps for transforming use cases through to high-level software designs, which could then be implemented using enterprise Java. 
&lt;/p&gt;

&lt;/p&gt;
Look back even further than this and you have all of the notations that preceded UML, data flow diagrams, entity relationship diagrams and higher level methods like &lt;a href=&#034;http://en.wikipedia.org/wiki/Structured_systems_analysis_and_design_method&#034; target=&#034;_blank&#034;&gt;SSADM&lt;/a&gt;. Again, you can consider these as reference points and guidance for the software design process.
&lt;/p&gt;

&lt;h3&gt;Where is our reference point now?&lt;/h3&gt;
&lt;p&gt;
Many of my thoughts about the current state of the software development industry are summed up in &lt;a href=&#034;http://www.codingthearchitecture.com/2012/03/14/the_frustrated_architect.html&#034;&gt;The frustrated architect&lt;/a&gt; so I won&#039;t repeat them here. What I will repeat though is that many software teams have thrown far too much away in their haste to adopt &#034;agile&#034;. UML and documentation are typical examples of something that is being thrown away by software teams on a daily basis. After all, 3 months spent creating UML models is 3 months where the software (and value) isn&#039;t being delivered. That&#039;s all fine, but &lt;a href=&#034;http://www.codingthearchitecture.com/2012/04/12/moving_fast_requires_good_communication.html&#034;&gt;agility and, therefore moving fast, requires good communication&lt;/a&gt; yet many software teams now struggle to articulate what it is they are building and how they are building it.
&lt;/p&gt;

&lt;h3&gt;If we can&#039;t articulate how we design software, we can&#039;t teach it&lt;/h3&gt;
&lt;/p&gt;
So how *are* teams designing software? They obviously *are* designing software because I&#039;ve seen it! Occasionally I&#039;ll hear &#034;we do something like domain-driven design&#034;. More usually though, teams tell me that they &#034;draw some pictures on a whiteboard&#034;, to which my response is &#034;how do you decide what to draw?&#034;.
&lt;/p&gt;

&lt;p&gt;
If you&#039;ve seen me speak, you&#039;re likely to have heard me talk about how the software architecture role should be about collaboration, coaching and mentoring. Why? Because &lt;a href=&#034;http://www.codingthearchitecture.com/pages/book/where-are-the-software-architects-of-tomorrow.html&#034;&gt;we&#039;re losing the software architects of tomorrow&lt;/a&gt; and coaching is key to reversing this trend. But if we can&#039;t articulate how we design software, how are we going to teach this skill to others?
&lt;/p&gt;
        </description>
      
      
    
    
    
    <comments>http://www.codingthearchitecture.com/2012/05/10/how_do_you_design_software.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2012/05/10/how_do_you_design_software.html</guid>
    <pubDate>Thu, 10 May 2012 09:26:57 GMT</pubDate>
  </item>
  
  <item>
    <title>How much up front design is just enough?</title>
    <link>http://www.codingthearchitecture.com/2012/05/09/how_much_up_front_design_is_just_enough.html</link>
    
      
        <description>
          &lt;p&gt;
I ran an interactive, gamestorming session a couple of weeks ago at Skills Matter to help us answer the question of &#034;how much up front design is enough?&#034;. It was a lot of fun! Since the session was interactive, there was only a short amount of presentation but the &lt;a href=&#034;http://www.codingthearchitecture.com/presentations/skillsmatter2012-just-enough/&#034; target=&#034;_blank&#034;&gt;slides are available to view online&lt;/a&gt; and &lt;a href=&#034;http://skillsmatter.com/podcast/design-architecture/how-much-just-enough&#034; target=&#034;_blank&#034;&gt;the video can be viewed on the Skills Matter website&lt;/a&gt;.
&lt;/p&gt;

&lt;p align=&#034;center&#034;&gt;
&lt;img src=&#034;http://www.codingthearchitecture.com/images/20120424-just-enough.jpg&#034; alt=&#034;How much up front design is just enough?&#034; class=&#034;photo&#034; /&gt;
&lt;/p&gt;

&lt;p&gt;
More interestingly though are some write-ups of the session and I urge you to go and read the following blog entries if you want to see how we went about answering the question and the answers that we collectively came up with.
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#034;http://blog.rozs.net/post/21774436774/what-is-just-enough-design&#034; target=&#034;_blank&#034;&gt;What is &#034;just enough&#034; design?&lt;/a&gt; by Paul Rozs&lt;/li&gt;
&lt;li&gt;&lt;a href=&#034;http://tapmantwo.blogspot.co.uk/2012/04/just-enough-upfront-design.html&#034; target=&#034;_blank&#034;&gt;&#034;Just Enough&#034; upfront design&lt;/a&gt; by Richard Tappenden&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
A big thank you to everybody that came along and participated, particularly to Paul and Richard for taking the time to write-up the session.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <comments>http://www.codingthearchitecture.com/2012/05/09/how_much_up_front_design_is_just_enough.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2012/05/09/how_much_up_front_design_is_just_enough.html</guid>
    <pubDate>Wed, 09 May 2012 19:22:41 GMT</pubDate>
  </item>
  
  <item>
    <title>Software architecture training in Jersey, June 2012</title>
    <link>http://www.codingthearchitecture.com/2012/05/09/software_architecture_training_in_jersey_june_2012.html</link>
    
      
        <description>
          &lt;p&gt;
For a second year, I&#039;m pleased to say that I&#039;ll be running &lt;a href=&#034;http://www.softwarearchitecturefordevelopers.com/training/&#034; target=&#034;_blank&#034;&gt;Software Architecture for Developers&lt;/a&gt; in Jersey. If you want to get a feel for what we&#039;ll be covering during this two day training course, take a look at the following blog entries.
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#034;http://www.codingthearchitecture.com/2012/03/14/the_frustrated_architect.html&#034; target=&#034;_blank&#034;&gt;The frustrated architect&lt;/a&gt; (my talk of the same name is also available &lt;a href=&#034;http://www.infoq.com/presentations/The-Frustrated-Architect&#034; target=&#034;_blank&#034;&gt;to watch online at InfoQ.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#034;http://www.codingthearchitecture.com/2012/03/13/photos_from_my_qcon_london_2012_tutorial.html&#034; target=&#034;_blank&#034;&gt;Photos from my QCon London 2012 tutorial&lt;/a&gt; (are you a software architect?)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#034;http://www.codingthearchitecture.com/2012/04/12/moving_fast_requires_good_communication.html&#034; target=&#034;_blank&#034;&gt;Moving fast requires good communication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#034;http://www.codingthearchitecture.com/2011/04/03/deliberate_practice_effective_sketches.html&#034; target=&#034;_blank&#034;&gt;Deliberate practice, effective sketches&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here are the details...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Dates&lt;/b&gt;: Wednesday 27th June 2012 and Thursday 28th June 2012 (2 days)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Cost&lt;/b&gt;: £895 per person (includes a copy of &lt;a href=&#034;http://leanpub.com/software-architecture-for-developers&#034; target=&#034;_blank&#034;&gt;Software Architecture for Developers&lt;/a&gt; - the book)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Trainer&lt;/b&gt;: &lt;a href=&#034;http://www.simonbrown.je&#034; target=&#034;_blank&#034;&gt;Simon Brown&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Location&lt;/b&gt;: &lt;a href=&#034;http://www.regus.co.uk/meeting-rooms/st-helier&#034; target=&#034;_blank&#034;&gt;Regus, St Helier, Jersey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Laptop required&lt;/b&gt;: No laptop is needed unless &lt;a href=&#034;http://www.codingthearchitecture.com/2011/08/27/using_evernote_for_training_courses.html&#034; target=&#034;_blank&#034;&gt;you want to use Evernote&lt;/a&gt; to take notes&lt;/li&gt;
&lt;li&gt;More details can be found at &lt;a href=&#034;http://www.softwarearchitecturefordevelopers.com&#034; target=&#034;_blank&#034;&gt;www.softwarearchitecturefordevelopers.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;To book, please e-mail simon.brown at codingthearchitecture.com&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
If you&#039;re considering making the short journey over by air or sea, why not make a weekend of it and &lt;a href=&#034;http://www.jersey.com&#034; target=&#034;_blank&#034;&gt;see what Jersey has to offer&lt;/a&gt; in the summer.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <comments>http://www.codingthearchitecture.com/2012/05/09/software_architecture_training_in_jersey_june_2012.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2012/05/09/software_architecture_training_in_jersey_june_2012.html</guid>
    <pubDate>Wed, 09 May 2012 16:12:00 GMT</pubDate>
  </item>
  
  <item>
    <title>How do you design software?</title>
    <link>http://www.codingthearchitecture.com/2012/04/27/how_do_you_design_software.html</link>
    
      
        <description>
          &lt;p&gt;
A big thanks to everybody that came along to the &lt;a href=&#034;http://www.meetup.com/Oslo-Software-Architecture/events/56988222/&#034; target=&#034;_blank&#034;&gt;Why do software projects fail?&lt;/a&gt; session last night, it was a really fun evening! The slides from my talk are available to &lt;a href=&#034;http://bit.ly/Jej95b&#034; target=&#034;_blank&#034;&gt;download/view online&lt;/a&gt;.
&lt;/p&gt;

&lt;p align=&#034;center&#034;&gt;
&lt;img src=&#034;http://static.codingthearchitecture.com/presentations/iasa2012-why-do-software-projects-fail/slides/slide.013.png&#034; alt=&#034;Coffee break challenge&#034; width=&#034;600px&#034; /&gt;
&lt;/p&gt;

&lt;p&gt;
As I said in my talk, here&#039;s my challenge to you. Next time you grab a coffee with your team, have a quick discussion about how *you* design software. By &#034;design software&#034;, I mean taking a set of vague requirements with a blank sheet of paper and creating a software solution. Think about things like your process, approach, tools, techniques, etc. Can you explain how you design software within the time it takes to finish your coffee break?
&lt;/p&gt;

&lt;p&gt;
Please do let me know how you get on. I&#039;ll post a follow-up next week...
&lt;/p&gt;
        </description>
      
      
    
    
    
    <comments>http://www.codingthearchitecture.com/2012/04/27/how_do_you_design_software.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2012/04/27/how_do_you_design_software.html</guid>
    <pubDate>Fri, 27 Apr 2012 08:36:00 GMT</pubDate>
  </item>
  
  <item>
    <title>Moving fast requires good communication</title>
    <link>http://www.codingthearchitecture.com/2012/04/12/moving_fast_requires_good_communication.html</link>
    
      
        <description>
          &lt;p&gt;
If you&#039;re working on 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 in order to visualise the work remaining to be started, in progress and done. 
&lt;/p&gt;

&lt;p align=&#034;center&#034;&gt;
&lt;img src=&#034;http://www.codingthearchitecture.com/images/20120412-kanbanboard.jpg&#034; alt=&#034;Kanban board&#034; /&gt;
&lt;/p&gt;

&lt;h3&gt;We&#039;re adept at visualising our software development process&lt;/h3&gt;
&lt;p&gt;
Why? Put simply, it&#039;s a fantastic way of introducing transparency into software projects because anybody can see, at a glance, a snapshot of the current progress at a high-level. Couple this with value stream mapping and you can start to design some pretty fancy looking Kanban boards to reflect that way that your team works. In a nutshell, we&#039;ve become pretty adept at visualising our software development process.
&lt;/p&gt;

&lt;h3&gt;But we&#039;ve forgotten how to visualise the software that we&#039;re building&lt;/h3&gt;
&lt;p&gt;
However, it seems we may have forgotten how to visualise the actual software that we&#039;re building. I&#039;m not talking about post-project documentation here (that&#039;s a story for another day), I&#039;m talking about communicating &#034;the big picture&#034;. Why is this important? Well, if you want to ensure that everybody is contributing to the same end-goal, you need to be able to communicate the vision of what it is you&#039;re building. And if you want agility and the ability to move fast, you need to do this effectively and efficiently. You can argue about whether notations such as UML offer an effective way to communicate software architecture or not, but that&#039;s often irrelevant as a starting point because many teams have already thrown out UML or simply don&#039;t know it. What&#039;s the result? Usually boxes and lines diagrams like the sketches below.
&lt;/p&gt;

&lt;p align=&#034;center&#034;&gt;
&lt;img src=&#034;http://www.codingthearchitecture.com/images/20120412-sketches.jpg&#034; alt=&#034;Architecture sketches&#034; /&gt;
&lt;/p&gt;

&lt;p&gt;
Boxes and lines diagrams *can* work very well, but there are many pitfalls associated with sketching software architecture in this way. My approach is to use &lt;a href=&#034;http://www.codingthearchitecture.com/pages/book/c4.html&#034;&gt;a collection of simple diagrams, each showing a different level of abstraction&lt;/a&gt;.
&lt;/p&gt;

&lt;p align=&#034;center&#034;&gt;
&lt;img src=&#034;http://www.codingthearchitecture.com/images/20120412-classroom.jpg&#034; alt=&#034;Effective architecture sketches&#034; /&gt;
&lt;/p&gt;

&lt;p&gt;
All of my guidance around doing this is going to be enhanced and included in my &lt;a href=&#034;http://leanpub.com/software-architecture-for-developers&#034; target=&#034;_blank&#034;&gt;software architecture e-book&lt;/a&gt; but if you can&#039;t wait, you can always join me at &lt;a href=&#034;http://skillsmatter.com/course/design-architecture/software-architecture-developers&#034; target=&#034;_blank&#034;&gt;Skills Matter in London (23rd April)&lt;/a&gt; or &lt;a href=&#034;http://www.bouvet.no/BouvetWEB/Kurs.aspx?catid=162e6100-e21d-4048-b9ee-1195a36fffff&amp;newsid=f16f0105-f995-4304-ae2f-5fe56e13a3b4&#034; target=&#034;_blank&#034;&gt;Bouvet in Oslo (26th April)&lt;/a&gt; for our &lt;a href=&#034;http://www.softwarearchitecturefordevelopers.com&#034; target=&#034;_blank&#034;&gt;Software Architecture for Developers training course&lt;/a&gt;.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <comments>http://www.codingthearchitecture.com/2012/04/12/moving_fast_requires_good_communication.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2012/04/12/moving_fast_requires_good_communication.html</guid>
    <pubDate>Thu, 12 Apr 2012 08:52:30 GMT</pubDate>
  </item>
  
  <item>
    <title>The frustrated architect</title>
    <link>http://www.codingthearchitecture.com/2012/03/14/the_frustrated_architect.html</link>
    
      
        <description>
          &lt;p&gt;
The IT industry is either taking giant leaps ahead or it&#039;s in deep turmoil. On the one hand we&#039;re pushing forward, reinventing the way that we build software and striving for craftsmanship at every turn. On the other though, we&#039;re continually forgetting the good of the past and software teams are still screwing up on an alarmingly regular basis.
&lt;/p&gt;

&lt;p&gt;
Software architecture plays a pivotal role in the delivery of successful software yet it&#039;s frustratingly neglected by many teams. Whether performed by one person or shared amongst the team, the software architecture role exists on even the most agile of teams yet the balance of up front and evolutionary thinking often reflects aspiration rather than reality.
&lt;/p&gt;

&lt;h3&gt;Software architecture has a bad reputation&lt;/h3&gt;

&lt;p&gt;
I tend to get one of two responses if I introduce myself as a software architect. Either people think it&#039;s really cool and want to know more or they give me a look that says &#034;I want to talk to somebody that actually writes software, not a box drawing hand-waver&#034;. The software architecture role has a bad reputation within the IT industry and it&#039;s not hard to see where this has come from.
&lt;/p&gt;

&lt;p&gt;
The thought of &#034;software architecture&#034; conjures up visions of ivory tower architects doing big design up front and handing over huge UML models or 200 page Microsoft Word documents to an unsuspecting development team as if they were the second leg of a relay race. And that&#039;s assuming the architect actually gets involved in designing software of course. Many people seem to think that creating a Microsoft PowerPoint presentation with a slide containing a big box labelled &#034;Enterprise Service Bus&#034; *is* software design. Oh, and we mustn&#039;t forget the obligatory narrative about &#034;ROI&#034; and &#034;TCO&#034; that will undoubtedly accompany the presentation.
&lt;/p&gt;

&lt;p&gt;
Many organisations have an interesting take on software development as a whole too. For example, they&#039;ve seen the potential cost savings that offshoring can bring and therefore see the coding part of the software development process as being something of a commodity. The result tends to be that local developers are pushed into the &#034;higher value&#034; software architecture jobs with an expectation that all coding will be undertaken by somebody else. In many cases this only exaggerates the disconnect between software design and software development, with people often being pushed into a role that they are not prepared for. These same organisations tend to see software architecture as a rank rather than a *role*.
&lt;/p&gt;

&lt;h3&gt;Agile aspirations&lt;/h3&gt;

&lt;p&gt;
Agile might be over ten years old, but it&#039;s still the shiny new kid in town and many software teams have aspirations of &#034;becoming agile&#034;. Agile undoubtedly has a number of benefits but it isn&#039;t necessarily the silver bullet that everybody wants you to believe it is. As with everything in the IT industry, there&#039;s a large degree of evangelism and hype surrounding it. Start a new software project today and it&#039;s all about self-organising teams, automated acceptance testing, continuous delivery, retrospectives, Kanban boards, emergent design and a whole host of other buzzwords that you&#039;ve probably heard of. This is fantastic but often teams tend to throw the baby out with the bath water in their haste to adopt all of these cool practices. &#034;Non-functional requirements&#034; not sounding cool isn&#039;t a reason to neglect them.
&lt;/p&gt;

&lt;p&gt;
What&#039;s all this old-fashioned software architecture stuff anyway? Many software teams seem to think that they don&#039;t need software architects, throwing around terms like &#034;self-organising team&#034;, &#034;YAGNI&#034;, &#034;evolutionary architecture&#034; and &#034;last responsible moment&#034; instead. If they do need an architect, they&#039;ll probably be on the lookout for an &#034;agile architect&#034;. I&#039;m not entirely sure what this term actually means, but I assume that it has something to do with using post-it notes instead of UML or doing TDD instead of drawing pictures. That is, assuming they get past the notion of only using a very high level system metaphor and don&#039;t use &#034;emergent design&#034; as an excuse for foolishly hoping for the best.
&lt;/p&gt;

&lt;h3&gt;So you think you&#039;re an architect?&lt;/h3&gt;

&lt;p&gt;
It also turns out there are a number of people in the industry claiming to be software architects whereas they&#039;re actually doing something else entirely. I can forgive people misrepresenting themselves as an &#034;Enterprise Architect&#034; when they&#039;re actually doing hands-on software architecture within a large enterprise. The terminology in our industry *is* often confusing after all.
&lt;/p&gt;

&lt;p&gt;
But what about those people that tend to exaggerate the truth about the role they play on software teams? Such irresponsible architects are usually tasked with being the technical leader yet fail to cover the basics. I&#039;ve seen public facing websites go into a user acceptance testing environment with a number of basic security problems, a lack of basic performance testing, basic functionality problems, broken hyperlinks and a complete lack of documentation. And that was just my external view of the software, who knows what the code looked like. If you&#039;re undertaking the software architecture role and you&#039;re delivering stuff like this, you&#039;re doing it wrong. This *isn&#039;t* software architecture, it&#039;s also foolishly hoping for the best.
&lt;/p&gt;

&lt;h3&gt;From frustration and beyond&lt;/h3&gt;

&lt;p&gt;
Admittedly not all software teams are like this but what I&#039;ve presented here isn&#039;t a &#034;straw man&#034; either. Unfortunately many organisations do actually work this way so the reputation that software architecture has shouldn&#039;t come as any surprise.
&lt;/p&gt;

&lt;p&gt;
If we really do want to succeed as an industry, we need to get over our fascination with shiny new things and starting asking some questions. Does agile need architecture or does architecture actually need agile? Have we forgotten more about good software design than we&#039;ve learnt in recent years? Is foolishly hoping for the best sufficient for the demanding software systems we&#039;re building today? Does any of this matter if we&#039;re not fostering the software architects of tomorrow? How do we move from frustration to serenity?
&lt;/p&gt;

&lt;p&gt;
If this strikes a chord and your view of software architecture is more like &lt;a href=&#034;http://www.codingthearchitecture.com/2012/03/13/photos_from_my_qcon_london_2012_tutorial.html&#034; target=&#034;_blank&#034;&gt;the role we discussed at QCon London&lt;/a&gt;, you can view &lt;a href=&#034;http://www.codingthearchitecture.com/presentations/skillsmatter2011-the-frustrated-architect/&#034; target=&#034;_blank&#034;&gt;the slides and video from my &#034;The Frustrated Architect&#034; talk&lt;/a&gt;, which I&#039;ll be repeating at the &lt;a href=&#034;http://www.devweek.com/sessions/conference3.asp&#034; target=&#034;_blank&#034;&gt;DevWeek conference&lt;/a&gt; in London on the 29th of March. &lt;a href=&#034;http://leanpub.com/software-architecture-for-developers&#034; target=&#034;_blank&#034;&gt;My book&lt;/a&gt; also has some answers. ;-)
&lt;/p&gt;
        </description>
      
      
    
    
    
    <comments>http://www.codingthearchitecture.com/2012/03/14/the_frustrated_architect.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2012/03/14/the_frustrated_architect.html</guid>
    <pubDate>Wed, 14 Mar 2012 11:27:00 GMT</pubDate>
  </item>
  
  <item>
    <title>Photos from my QCon London 2012 tutorial</title>
    <link>http://www.codingthearchitecture.com/2012/03/13/photos_from_my_qcon_london_2012_tutorial.html</link>
    
      
        <description>
          &lt;p&gt;
I ran a &lt;a href=&#034;http://qconlondon.com/london-2012/presentations/show_presentation.jsp?oid=3887&#034; target=&#034;_blank&#034;&gt;tutorial at the QCon London 2012 conference&lt;/a&gt; last week where we focussed on the software architecture role. Throughout the day I asked the audience a number of questions, the answers to which I summarised on the flipchart at the front. Here are the questions and answers...
&lt;/p&gt;

&lt;h3&gt;Is software architecture important?&lt;/h3&gt;
&lt;p align=&#034;center&#034;&gt;
&lt;img src=&#034;http://www.codingthearchitecture.com/images/qconlondon2012-is-software-architecture-important.jpg&#034; alt=&#034;Photo from QCon London 2012&#034; class=&#034;photo&#034; /&gt;
&lt;/p&gt;

&lt;h3&gt;What does the software architecture role include?&lt;/h3&gt;
&lt;p align=&#034;center&#034;&gt;
&lt;img src=&#034;http://www.codingthearchitecture.com/images/qconlondon2012-role.jpg&#034; alt=&#034;Photo from QCon London 2012&#034; class=&#034;photo&#034; /&gt;
&lt;/p&gt;

&lt;h3&gt;Should software architects code?&lt;/h3&gt;
&lt;p align=&#034;center&#034;&gt;
&lt;img src=&#034;http://www.codingthearchitecture.com/images/qconlondon2012-software-architects-should-code.jpg&#034; alt=&#034;Photo from QCon London 2012&#034; class=&#034;photo&#034; /&gt;
&lt;/p&gt;

&lt;h3&gt;What soft skills are needed to undertake the software architecture role?&lt;/h3&gt;
&lt;p align=&#034;center&#034;&gt;
&lt;img src=&#034;http://www.codingthearchitecture.com/images/qconlondon2012-soft-skills.jpg&#034; alt=&#034;Photo from QCon London 2012&#034; class=&#034;photo&#034; /&gt;
&lt;/p&gt;

&lt;h3&gt;Who might be interested in your software?&lt;/h3&gt;
&lt;p align=&#034;center&#034;&gt;
&lt;img src=&#034;http://www.codingthearchitecture.com/images/qconlondon2012-stakeholders.jpg&#034; alt=&#034;Photo from QCon London 2012&#034; class=&#034;photo&#034; /&gt;
&lt;/p&gt;

&lt;h3&gt;What pitfalls are there for people new to the software architecture role?&lt;/h3&gt;
&lt;p align=&#034;center&#034;&gt;
&lt;img src=&#034;http://www.codingthearchitecture.com/images/qconlondon2012-pitfalls.jpg&#034; alt=&#034;Photo from QCon London 2012&#034; class=&#034;photo&#034; /&gt;
&lt;/p&gt;

&lt;p&gt;
Interesting that the software architecture role we discuss is so different from what you typically find in many organisations, huh? :-)
&lt;/p&gt;

&lt;p&gt;
Thanks to everybody who came along!
&lt;/p&gt;
        </description>
      
      
    
    
    
    <comments>http://www.codingthearchitecture.com/2012/03/13/photos_from_my_qcon_london_2012_tutorial.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2012/03/13/photos_from_my_qcon_london_2012_tutorial.html</guid>
    <pubDate>Tue, 13 Mar 2012 13:48:00 GMT</pubDate>
  </item>
  
  </channel>
</rss>

