<?xml version="1.0"?>
<rss version="2.0">
<channel>
  <title>Coding the Architecture - quality tag</title>
  <link>http://www.codingthearchitecture.com/tags/quality/</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>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>How good is good enough?</title>
    <link>http://www.codingthearchitecture.com/2008/03/14/how_good_is_good_enough.html</link>
    
      
        <description>
          &lt;p&gt;
I&#039;ve undertaken a couple of project reviews recently where I&#039;ve been asked to assess whether the code is &#034;good enough&#034;. All software systems have a real-world context and the project has to balance &lt;a href=&#034;http://www.ambysoft.com/essays/brokenTriangle.html&#034;&gt;scope, budget and schedule&lt;/a&gt;. With this mind, what is &#034;good enough&#034;? Kevin has &lt;a href=&#034;http://www.codingthearchitecture.com/2006/04/26/first_experiences.html&#034;&gt;touched upon this before&lt;/a&gt; and I&#039;ve talked about having &lt;a href=&#034;http://www.codingthearchitecture.com/2006/05/02/quality.html&#034;&gt;just enough quality&lt;/a&gt;, but what does having &#034;good enough&#034; code actually mean?
&lt;/p&gt;

&lt;p&gt;
Here are some of the questions that I try to answer.
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is there a comprehensive set of automated unit tests, or evidence that the code has been unit tested (e.g. presence of boundary/null checks in the code)?&lt;/li&gt;
&lt;li&gt;Have good object oriented principles been adopted when putting together the design? For example, do classes have clear responsibilities?&lt;/li&gt;
&lt;li&gt;Have standard APIs and technologies been used? In other words, have any wheels been reinvented? If they have, is the alternative solution as good or better than the standard solution in this context?&lt;/li&gt;
&lt;li&gt;Does the codebase feel consistent, in terms of style and the approach to solving problems?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
The last point raises some interesting questions. It&#039;s really easy to get carried away when doing code reviews and flag up a large number of points ranging from inconsistent code formatting and lack of comments through to using better APIs and the latest language features to solve problems. Given the real-world context in which the system exists, that piece of software needs to solve a business problem and points like these are fairly minor in nature&lt;sup&gt;1&lt;/sup&gt;. However, an inconsistent codebase can highlight those instances where there is an overall lack of explicit technical leadership.
&lt;/p&gt;

&lt;p&gt;
If you were to look at your own system, how would you decide whether the code was good enough?
&lt;/p&gt;

&lt;p class=&#034;small&#034;&gt;
&lt;sup&gt;1&lt;/sup&gt; Although it&#039;s arguable that points like these are minor in nature, I still think that it&#039;s important to ensure they are raised. Personally, I don&#039;t like to see things like this in the codebase for a system that I&#039;m responsible for, but you need to present findings from activities like code reviews as appropriate. These minor points are important for the development team, but not so important if the key project stakeholder is asking you whether the code is good enough.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>How do you deliver software architecture?</category>
    
    <comments>http://www.codingthearchitecture.com/2008/03/14/how_good_is_good_enough.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2008/03/14/how_good_is_good_enough.html</guid>
    <pubDate>Fri, 14 Mar 2008 11:11:38 GMT</pubDate>
  </item>
  
  <item>
    <title>Poor execution</title>
    <link>http://www.codingthearchitecture.com/2007/07/30/poor_execution.html</link>
    
      
        <description>
          &lt;p&gt;
Let me paraphrase an interesting statement I heard last week about a software system.
&lt;/p&gt;

&lt;blockquote&gt;
The high-level design is fine, but the execution was poor.
&lt;/blockquote&gt;

&lt;p&gt;
I found this interesting and started thinking about it from several perspectives.
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You can define the best architecture in the world, but you still need to successfully deliver on that architecture.&lt;/li&gt;
&lt;li&gt;To ensure a successful delivery, you can&#039;t simply &lt;a href=&#034;http://www.codingthearchitecture.com/2007/05/14/the_hand_off.html&#034;&gt;hand-off the architecture&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;I&#039;m a strong believer that, particularly on smaller projects, the architect should take responsibility for the technical quality of the solution.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Software architects are the people responsible for ensuring the technical quality of the solution and, by this,  I&#039;m referring to quality at the macro level (e.g. meeting the non-functional requirements) as well as at micro level (e.g. coding standards, unit test coverage, use of continuous integration). More often than not, I find that teams let the latter fall down the gaps between the architect(s), developers, build manager, configuration manager, etc. In the event that nobody has been granted explicit ownership, I&#039;d say that this is another aspect that falls squarely underneath role of the software architect.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>What is the the role of a software architect?</category>
    
    <comments>http://www.codingthearchitecture.com/2007/07/30/poor_execution.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2007/07/30/poor_execution.html</guid>
    <pubDate>Mon, 30 Jul 2007 18:23:00 GMT</pubDate>
  </item>
  
  <item>
    <title>Quality</title>
    <link>http://www.codingthearchitecture.com/2006/05/02/quality.html</link>
    
      
        <description>
          &lt;p&gt;
Kevin posted a great entry about his &lt;a href=&#034;http://www.thepragmaticarchitect.com/2006/04/26/first_experiences.html&#034;&gt;first architect experiences&lt;/a&gt; and it&#039;s inspired me to write a follow up about quality.
&lt;/p&gt;

&lt;blockquote&gt;
Contrary to my expectations, I&#039;ve found that being separated from the development team has made me more tolerant of their mistakes, despite being less able to address these mistakes directly. This I attribute, in part, to being better able to see the value of less costly development. Of course, this is not to say that code quality, mentoring and review aren&#039;t still very important! However, I find that I&#039;m less exacting and more pragmatic - if I were to press for the quality that I&#039;d deliver myself (as a lead developer) then I&#039;d be negating some of the cost benefits of having got someone else to do it in the first place! As a lead developer I knew when things weren&#039;t up to scratch and I&#039;d do something about it; as an architect I have the context and obligation to determine when things are &#034;good enough&#034; and be confident not doing anything about it. Sure, it&#039;s frustrating not being able to roll your sleeves up and show everybody how it should be done ;) but there&#039;s also satisfaction to be taken from making a call on whether something&#039;s fit for purpose.
&lt;/blockquote&gt;

&lt;p&gt;
This is something that I can certainly relate to and I also feel the same frustration at times. So, let&#039;s explore the quality aspect further. Imagine a scale that measures quality. What Kevin is saying is that, as a lead developer, you always strive for the ideal level of quality. Call it perfection if you wish.
&lt;/p&gt;

&lt;div align=&#034;center&#034;&gt;
&lt;img src=&#034;http://www.thepragmaticarchitect.com/images/just-enough-quality.png&#034; alt=&#034;Just enough quality&#034; /&gt;
&lt;/div&gt;

&lt;p&gt;
Take a step into the architect&#039;s shoes and you have to think about the cumulative/average quality across the whole development team. Clearly, asking everybody to achieve perfection isn&#039;t realistic, so it&#039;s your job as an architect to ensure that quality across the board is adequate. Perhaps that&#039;s the wrong word, but let&#039;s say the quality has to be as good as you can get it within the given time and budgetary constraints.
&lt;/p&gt;

&lt;p&gt;
Getting the quality towards the top end of that scale would be my own goal, but how far would &lt;i&gt;you&lt;/i&gt; try to push it? How much is &#034;just enough&#034;? If you insist on nothing less than perfection, how do you get your team to achieve it?
&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>What is the the role of a software architect?</category>
    
    <comments>http://www.codingthearchitecture.com/2006/05/02/quality.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2006/05/02/quality.html</guid>
    <pubDate>Tue, 02 May 2006 21:01:41 GMT</pubDate>
  </item>
  
  <item>
    <title>Reviews</title>
    <link>http://www.codingthearchitecture.com/2006/03/17/reviews.html</link>
    
      
        <description>
          &lt;p&gt;
I recently read chapter 5 of &lt;a href=&#034;http://www.oreilly.com/catalog/appliedprojectmgmt/index.html&#034;&gt;Applied Software Project Management&lt;/a&gt; and it was all about reviews. Inspections, desk checks, walkthroughs and code reviews were all mentioned along with the compelling argument that reviews have a very high return on investment because catching a defect early is much much cheaper than catching it later. Think about it, a couple of hours spent reviewing your key use cases is much cheaper than getting somebody to rewrite and retest a software component that works but does the wrong thing.
&lt;/p&gt;

&lt;p&gt;
I&#039;ll be honest, I&#039;m as guilty as the next person in not doing enough reviews, but why do we let this happen and how can we readdress the balance? The first part of the question is easy to answer and I&#039;d like to offer up the following suggestions.
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Time : there are always better things to be doing.&lt;/li&gt;
&lt;li&gt;Context switching : it takes a while to switch from what you&#039;re doing and focus on something else that you might not necessarily be familiar with.&lt;/li&gt;
&lt;li&gt;Learning curve : As an architect, you&#039;re not going to know the entire system inside-out, so there&#039;s the learning curve to consider when you review something you&#039;ve not seen before.&lt;/li&gt;
&lt;li&gt;Tools : if you&#039;ve installed code checking tools (e.g. PMD, Checkstyle, etc) then there&#039;s a tendency to &#034;leave it to the tools&#034;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
So, how do we address this? Well, for code reviews, an easy answer is to adopt extreme programming&#039;s pair programming, but of course this isn&#039;t always possible and/or desirable. Something that I recommend other architects do is delegate some of the reviewing to others on the team, perhaps sitting with them for the first few reviews to help them see what you want. This is good because not only does it free you up a little, but it helps develop their skillset and spreads knowledge of the project across more of the team.
&lt;/p&gt;

&lt;p&gt;
Ultimately though, you just need to make time for reviews. Ensure that they are included in any estimates and, if you&#039;re an architect, ensure that you set some time aside for reviews. As an architect you&#039;re probably responsible for the technical quality and you can&#039;t assure it if you don&#039;t review it.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>What is the the role of a software architect?</category>
    
    <comments>http://www.codingthearchitecture.com/2006/03/17/reviews.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2006/03/17/reviews.html</guid>
    <pubDate>Fri, 17 Mar 2006 15:05:20 GMT</pubDate>
  </item>
  
  </channel>
</rss>

