<?xml version="1.0"?>
<rss version="2.0">
<channel>
  <title>Coding the Architecture - responsibility tag</title>
  <link>http://www.codingthearchitecture.com/tags/responsibility/</link>
  <description>Software architecture for developers</description>
  <language>en</language>
  <copyright>Coding the Architecture</copyright>
  <lastBuildDate>Mon, 21 May 2012 09:41:00 GMT</lastBuildDate>
  <generator>Pebble (http://pebble.sourceforge.net)</generator>
  <docs>http://backend.userland.com/rss</docs>
  
  
  <item>
    <title>Why aren&#039;t software architects held accountable?</title>
    <link>http://www.codingthearchitecture.com/2009/03/03/why_arent_software_architects_held_accountable.html</link>
    
      
        <description>
          &lt;p&gt;
Mike Walker has an interesting post comparing the architect roles across the building and software industries, entitled &lt;a href=&#034;http://blogs.msdn.com/mikewalker/archive/2009/03/02/the-nemesis-of-software-architecture.aspx&#034;&gt;The Nemesis of Software Architecture&lt;/a&gt;. Comparisons aside, there&#039;s one point that I really wanted to pick up on.
&lt;/p&gt;

&lt;blockquote&gt;
4. Accountability Inherent - Building architects are accountable for there work when their specification fail while software architects are not. An example of this is the case of an architect stealing a design for the Freedom Tower or the example of MIT that sued well known architect for defective structures. There is clear accountability whereas I still haven&#039;t heard of someone getting sued for copy &amp; paste...
&lt;/blockquote&gt;

&lt;p&gt;
I&#039;m a big proponent of software architects having the &lt;a href=&#034;http://www.codingthearchitecture.com/tags/responsibility/&#034;&gt;responsibility&lt;/a&gt; and &lt;a href=&#034;http://www.codingthearchitecture.com/tags/authority/&#034;&gt;authority&lt;/a&gt; to ensure that the projects they are working on come to a successful conclusion, but it does raise an interesting question of why project sponsors don&#039;t typically hold software architects accountable. Perhaps it&#039;s because the dynamics and roles of everybody on the project team aren&#039;t well understood in most cases. For example, what&#039;s the working relationship between a project manager and an architect; or the developers and an architect? Or maybe it&#039;s because our agile approaches tend to favour sharing the responsibility throughout the entire team, which can end up with the project lacking a single coherent and consistent direction.
&lt;/p&gt;

&lt;p&gt;
In order to address this, maybe we need to go back to basics. Why aren&#039;t software architects explicitly given accountability at the outset of a project and what incentive is there for them to accept it?
&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>What is the the role of a software architect?</category>
    
    <comments>http://www.codingthearchitecture.com/2009/03/03/why_arent_software_architects_held_accountable.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2009/03/03/why_arent_software_architects_held_accountable.html</guid>
    <pubDate>Tue, 03 Mar 2009 10:14:00 GMT</pubDate>
  </item>
  
  <item>
    <title>Becoming more architecturally aware - part 2</title>
    <link>http://www.codingthearchitecture.com/2008/10/28/becoming_more_architecturally_aware_part_2.html</link>
    
      
        <description>
          &lt;p&gt;
&lt;a href=&#034;http://www.codingthearchitecture.com/2008/10/17/becoming_more_architecturally_aware_part_1.html&#034;&gt;Last time&lt;/a&gt; I talked about how we need to understand how application frameworks are designed and work behind the scenes in order to produce code that is consistent and compliant with the overall architectural principles. The second aspect that we need to become architecturally aware about is the underlying technology.
&lt;/p&gt;

&lt;p&gt;
Again, let&#039;s put this in context of my current .NET project. I have much more Java experience than .NET experience; I&#039;ve written some C# and I&#039;ve played with Silverlight, but ASP.NET is new to me.  Thankfully, the concepts behind ASP.NET translate fairly directly with those behind JSP, so it&#039;s not as if I&#039;m tackling this from a standing start. Having said that, I&#039;ve felt that it&#039;s really important to get to grips with the underlying architecture of the technology so I can be sure that the code I write, again, integrates properly into the overall architecture. An example here would be the ASP.NET page life cycle. Like JSP, ASP.NET pages have a series of things that happen to them when a request is made, which includes creation of the request/response objects, page compilation, page instantiation, calling page event handlers and so on.

&lt;p&gt;
Knowing the finer details of a programming language is one thing, although using or not using new language features such as generics isn&#039;t necessarily going to negatively affect the architectural integrity of the solution. Not understanding something like the page life cycle of ASP.NET could. For example, it&#039;s important to understand the page life cycle so that you understand when objects can be shared/cached. Session management is another important thing to understand, and blindly throwing objects into the user&#039;s session can have architectural implications if your application needs to scale horizontally and you need to implement transparent session failover using session replication.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&#034;http://www.codingthearchitecture.com/pages/book/mind-the-gap.html&#034;&gt;Being more architecturally aware&lt;/a&gt; doesn&#039;t necessarily mean that you need to understand the entirety of the bigger picture, but you should understand how to write code that is architecturally compliant. And that means understanding more about how the underlying technologies work.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>What is software architecture?</category>
    
    <comments>http://www.codingthearchitecture.com/2008/10/28/becoming_more_architecturally_aware_part_2.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2008/10/28/becoming_more_architecturally_aware_part_2.html</guid>
    <pubDate>Tue, 28 Oct 2008 20:18:49 GMT</pubDate>
  </item>
  
  <item>
    <title>Becoming more architecturally aware - part 1</title>
    <link>http://www.codingthearchitecture.com/2008/10/17/becoming_more_architecturally_aware_part_1.html</link>
    
      
        <description>
          &lt;p&gt;
In my &lt;a href=&#034;http://www.codingthearchitecture.com/pages/book/mind-the-gap.html&#034;&gt;Mind the gap&lt;/a&gt; essay and &lt;a href=&#034;http://www.codingthearchitecture.com/2008/06/11/slides_from_our_software_architect_2008_sessions.html&#034;&gt;Why Software Projects Fail&lt;/a&gt; presentation, I talk about how we as developers should be more architecturally aware if we are to bridge the gap between the code and the overall design. I include myself in this statement because recently I&#039;ve started adding functionality to an existing ASP.NET website and I&#039;ve found it essential that I become as architecturally aware as possible in a short amount of time. Let me provide a couple of real world examples.
&lt;/p&gt;

&lt;p&gt;
Although I&#039;m adding behaviour that is in effect isolated from the rest of the application, my code is still a constituent part of the overall architecture. In addition, I&#039;m using some of the utilities and frameworks that the development team have already produced. Clearly I need to understand the usage patterns in order that I can be productive as a developer on the team but, furthermore, I need to understand something about the inner workings in order that the code I write is architecturally compliant with the rest of the system. I&#039;m sure you&#039;ve seen this yourself, but give a few people the same framework and you&#039;ll see usage patterns that you hadn&#039;t even dreamed of. Some will be what you expected, some may be better than what you expected and some may break your framework in horrible ways.
&lt;/p&gt;

&lt;p&gt;
If somebody on the team is taking responsibility for the architecture and undertaking reviews, it&#039;s possible to catch those instances where application framework code isn&#039;t being used as anticipated. Sometimes, it&#039;s even possible to automate these architectural conflicts with a set of automated unit tests. If, however, nobody is taking on this architectural guardian role and everybody is simply using what they&#039;ve been provided with, then this is where problems start to creep in. Sometimes they creep in from people adopting a copy-paste approach to development (i.e. copying another class because it &#034;works&#034;) and sometimes they creep in because people just aren&#039;t aware of the hidden side effects of their framework usage pattern. Either way, problems introduced because of a lack of architectural awareness might not show up during local single-user testing, but could prove critical when the system is rolled out to a wider user base.
&lt;/p&gt;

&lt;p&gt;
The only way to get really productive with existing application code is to dive into it and understand how it works at both a conceptual and implementation level. Only then can you ensure that the code being written is compliant with the rest of the architecture, which is crucial for the quality and integrity of the solution. This is one way in which developers should become more architecturally aware and next time I&#039;ll discuss another.
&lt;/p&gt;


        </description>
      
      
    
    
    
    <category>What is software architecture?</category>
    
    <comments>http://www.codingthearchitecture.com/2008/10/17/becoming_more_architecturally_aware_part_1.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2008/10/17/becoming_more_architecturally_aware_part_1.html</guid>
    <pubDate>Fri, 17 Oct 2008 09:06:00 GMT</pubDate>
  </item>
  
  <item>
    <title>Mind the gap again</title>
    <link>http://www.codingthearchitecture.com/2008/08/04/mind_the_gap_again.html</link>
    
      
        <description>
          &lt;p&gt;
I did some technical consulting/due diligence on a large software development project recently where I&#039;d been called in to look at how the project team was dealing with some of the non-functional requirements. I&#039;m not sure exactly how large the project team was, but it was somewhere over 50 people and the project itself was subdivided into a number of smaller teams, where each team was responsible for looking after a small subsystem within the overall architecture.
&lt;/p&gt;

&lt;p&gt;
The summary of my review was that very little thought has gone into the non-functional requirements and that retrospectively performing some non-functional testing *could* expose a whole host of problems that are expensive to fix. One of the reasons for the lack of work on the non-functional requirements is that each of the subsystem teams basically doesn&#039;t have an architect. Instead, they have a Technical Project Manager and a Technical Team Lead, with definitions as follows (I&#039;m simplifying this a little). 
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Technical Project Manager&lt;/b&gt; : a generalist rather than specialist, and somebody that has a technology background but doesn&#039;t necessarily understand technology in great detail.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Technical Team Lead&lt;/b&gt; : depending on the team, this person is either similar to the Technical Project Manager but working at a lower level of detail, or it&#039;s the lead developer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
This sort of team/resource profile isn&#039;t actually that uncommon and I see many project teams that are organised in this way. In essence, teams get in a Technical Project Manager because they think people in this role can successfully undertake the project management *and* architecture roles on the project. Unfortunately, my experience suggests that this isn&#039;t always the most successful approach.
&lt;/p&gt;

&lt;p&gt;
In &lt;a href=&#034;http://www.jrothman.com/weblog/2005/04/i-need-technical-project-manager.html&#034;&gt;I Need a Technical Project Manager&lt;/a&gt;, Johanna Rothman talks about the dynamics of taking on both the project management and architecture roles. Specifically, she says that one of the roles usually has to give way, and I agree. Coming back to the project I was reviewing, the basic problem was this - the Technical Project Managers didn&#039;t have enough experience of dealing with the architecture aspects (including NFRs). As for the Technical Team Leads, the same thing applies (their focus is generally at a lower level), but in addition they don&#039;t have the &lt;a href=&#034;http://www.codingthearchitecture.com/2007/05/21/authority.html&#034;&gt;authority&lt;/a&gt; to make architectural decisions. Also, with both roles, it&#039;s hard to ascertain exactly who has the &lt;a href=&#034;http://www.codingthearchitecture.com/2007/05/16/responsibility.html&#034;&gt;responsibility&lt;/a&gt; for something like the non-functional requirements.
&lt;/p&gt;

&lt;p&gt;
I see this pattern crop up fairly regularly, and it&#039;s a variation of what I talk about in my &lt;a href=&#034;http://www.codingthearchitecture.com/pages/book/mind-the-gap.html&#034;&gt;Mind the gap&lt;/a&gt; essay, where key responsibilities fall down the gap between team members. The easiest way to fix this sort of problem is to be explicit about the roles/responsibilities when starting the project. And that means pinning those responsibilities on somebody.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>What is the the role of a software architect?</category>
    
    <comments>http://www.codingthearchitecture.com/2008/08/04/mind_the_gap_again.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2008/08/04/mind_the_gap_again.html</guid>
    <pubDate>Mon, 04 Aug 2008 16:12:46 GMT</pubDate>
  </item>
  
  </channel>
</rss>

