    <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/">
     <channel>
        <title>ACCU  :: Editorial: Size Does Matter</title>
        <link>https://members.accu.org/index.php/articles/284</link>
        <description>Professionalism in Programming</description>
        <dc:language>en-us</dc:language> 
        <dc:creator>Administrator</dc:creator> 
        <admin:generatorAgent rdf:resource="http://www.xaraya.org" /> 
        <admin:errorReportsTo rdf:resource="mailto:webeditor@accu.org" />
       <sy:updatePeriod>hourly</sy:updatePeriod>
       <sy:updateFrequency>1</sy:updateFrequency>
       <docs>http://backend.userland.com/rss</docs>




<div class="xar-mod-head"><span class="xar-mod-title">Project Management + Journal Editorial + Overload Journal #68 - Aug 2005</span></div>

<table border="0" cellpadding="1" cellspacing="0">
    <tbody>
    <tr>
        <td valign="top">
            Browse in :
       </td>
       <td valign="top">

                                            <a href="https://members.accu.org/index.php/articles/">All</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c13/">Topics</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c66/">Management</a>
<br />

                                            <a href="https://members.accu.org/index.php/articles/">All</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c184/">Journal Columns</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c185/">Editorial</a>
<br />

                                            <a href="https://members.accu.org/index.php/articles/">All</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c76/">Journals</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c78/">Overload</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c144/">68</a>
<br />

                                            <a href="https://members.accu.org/index.php/articles/c66-185-144/">Any of these categories</a>

                    -                        <a href="https://members.accu.org/index.php/articles/c66+185+144/">All of these categories</a>
<br />
</td>
   </tr>
   </tbody>
</table>




<div class="xar-error">
   <p>
 <strong>Note:</strong> when you create a new publication type,
the articles module will automatically use the templates
<em>user-display-[publicationtype].xt</em>
and <em>user-summary-[publicationtype].xt</em>.
If those templates do not exist when you try to preview or display a new article,
you'll get this warning :-)  Please place your own templates in themes/<em>yourtheme</em>/modules/articles . The templates will get the extension .xt there. </p>
</div>
<div class="xar-norm xar-standard-box-padding">
   <h1><strong>Title:</strong>&nbsp;Editorial: Size Does Matter</h1>
<p><strong>Author:</strong>&nbsp;</p>
<p>
<strong>Date:</strong> 09 August 2005 05:00:00 +01:00 or Tue, 09 August 2005 05:00:00 +01:00</p>
<p><strong>Summary:</strong>&nbsp;The way that one goes about developing and delivering a software project depends critically on the scale of the project.<br />
Discuss.</p>
<p><strong>Body:</strong>&nbsp;<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e18" id="d0e18"></a></h2>
</div>
<p>The way that one goes about developing and delivering a software
project depends critically on the scale of the project. There is no
&quot;one size fits all&quot; approach. As a trivial example to illustrate
this, no one would consider writing a test harness for a &quot;hello
world&quot; program. (Actually, I have tried this question out on some
TDD proponents over the last year - and I have only found one that
insists that they would do so.)</p>
<p>Why shouldn't one write a test harness for &quot;hello world&quot;? As in
all design questions it is a matter of trade-offs: there is a cost
to doing it (a test harness for this program is typically more
complex than the program itself) and a benefit (a test harness that
confirms the program works). In this case the cost doesn't justify
the benefit - as one respondent put it &quot;I can just run the program
to see that it works&quot;.</p>
<p>OK, you might say that is a silly example, but it reflects the
basis on which the habits of those working in software development
form. Their first programs are that simple. And they write them
accordingly. As they become more accomplished they tackle bigger
and bigger problems the same way - usually long past the point at
which this is the most effective approach. Because they can still
succeed the need for change isn't apparent to them. Typically it
takes both a failure of catastrophic proportions, and also an open
mind, before they appreciate the need for a different approach.
Even so, old habits die hard and resisting the temptation to fix an
urgent problem with &quot;a quick 'low risk' hack&quot; requires
determination and vigilance.</p>
<p>This form of inertia (clinging to approaches that have become
inappropriate) isn't restricted to the individual developer - one
only has to look at the recent G8 response to climate change to see
it operating at the scale of nations. But that example is outside
the scope of this publication. What is relevant here is that it
also applies to larger software development units: teams,
departments and whole organisations.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e28" id="d0e28"></a>The Scale of a
Project</h2>
</div>
<p>There are many ways to attempt to characterise the scale of a
project:</p>
<div class="itemizedlist">
<ul type="disc">
<li>
<p>the number of developers;</p>
</li>
<li>
<p>the value (and risk) to the business;</p>
</li>
<li>
<p>the count of function points (or use cases, or
stories&hellip;);</p>
</li>
<li>
<p>the budget;</p>
</li>
<li>
<p>the size of the codebase;</p>
</li>
<li>
<p>the length of time the project is active;</p>
</li>
<li>
<p>the range of technologies employed;</p>
</li>
<li>
<p>Etc.</p>
</li>
</ul>
</div>
<p>All of these affect the effectiveness of different methods of
working. I hope no-one would claim that what is appropriate for one
developer working on a low profile project for a few days is
appropriate for a couple of dozen working on a high profile project
for a couple of years. The choice of appropriate methods is an
important decision and may need revision as a project progresses.
Alastair Cockburn provides a lucid discussion of his research into
the effect of scale on development process in &quot;Agile Software
Development&quot;.</p>
<p>It is very easy for an organisation that is accustomed to
running projects of one size to continue to deploy the same
practices on a project for which they are inappropriate. And, as
with our developer in the first example, it often takes a
significant failure before the assumptions that underlie this
decision can be questioned. In fact, the practices are often
habituated to an extent that means they are not even examined as a
potential cause.</p>
<p>Opinions as to the cause of failure all too often fail to bear
close examination, or are superficial - they identify a mistake by
an individual without following up and discovering the
circumstances that made that mistake inevitable. (There are many
examples of this cited in &quot;High-Pressure Steam Engines and Computer
Software&quot; - <a href=
"http://www.safeware-eng.com/index.php/publications/HiPreStEn"
target=
"_top">http://www.safeware-eng.com/index.php/publications/HiPreStEn</a>.)
If we look at those cases where there has been a thorough
examination of failing projects it has been found that the
individual errors of engineers and operators compounded
inappropriate working and management practices. (Commonly cited
examples include: Three Mile Island, Chernobyl, Challenger, Bhopal,
and Flixborough.)</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e67" id="d0e67"></a>As Projects
Grow</h2>
</div>
<p>A typical development department will begin by delivering small
projects, and its approach to the development and deployment of
software is appropriate to this circumstance. In a small project
everyone involved in development (which will often be the one and
only developer) can be expected to have an understanding of each of
the elements of the project, their interactions and the context in
which these elements work. They will also have an understanding of
the status of any ongoing work.</p>
<p>Sooner or later the department will begin to undertake medium
(or even large) scale projects - I'll explain what I mean by
&quot;medium&quot; and &quot;large&quot; in a moment. The point I want to make first is
that there is nothing obvious to alert an organisation that a new
project with an extra developer or two, lasting a little longer,
using an extra technology or two, and with a bit more functionality
than usual requires a different approach.</p>
<p>It would be great to have a rule that took the size of a project
and gave the appropriate development practices. Sadly, it isn't
that simple. There are just too many factors affecting both the
size of the project and the level of risk that an organisation is
prepared to accept. In practice, I find that it is only by
observing as the project progresses that a useful measure emerges.
But it is rare to find an organisation that will take early
indicators on board and make changes <span class=
"emphasis"><em>when it is not clear that anything will go
wrong</em></span>.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e79" id="d0e79"></a>Small, Medium
or Large</h2>
</div>
<p>The distinction I use is based upon whether the whole project
will &quot;fit in the head&quot; of all developers (small project), a few of
the developers (medium project), or none of the developers (large
project). It may not be immediately apparent, but a project can
move between these categories during its lifecycle - and not just
in one direction. (One project I am aware of moved from small to
medium to large and then back to medium, and if the current
initiatives succeed may yet make it back to small.)</p>
<p>In a typical medium sized project there will be one or more
people with this general understanding and a number of people with
specialised knowledge of particular areas. It is possible to run
such a project without taking account of these specialisations
without a big risk of disaster. Disaster can happen when firstly, a
subsystem reaches a state that requires specialised knowledge to
work on it; secondly, that this specialised knowledge is lost to
the team; and thirdly, work is undertaken that involves that
subsystem. There are development practices that mitigate these
risks but, like any insurance scheme, these have a cost that
eliminates them from consideration on a small project.</p>
<p>In a large project no-one will have an understanding of the
whole thing in detail - those with a general understanding of the
overall structure will rely on the expertise of those with a
detailed knowledge of individual components and vice versa. Any
significant development activity will cross boundaries of expertise
- and, in consequence, will entail a risk of changing things
without the specialised knowledge that makes the change safe.
(There are ways to mitigate this risk, but not with a &quot;small
project&quot; mentality.)</p>
<p>It is rare, therefore, to find a &quot;large project&quot; running
smoothly with &quot;small project&quot; practices - typically many pieces of
work will be failing. But even with this clue that something is
systemically wrong the reaction is often inappropriate - after all
the developer(s) implementing any piece of work that went wrong
clearly made mistakes. And this brings me back to the arguments
presented in &quot;High-Pressure Steam Engines and Computer Software&quot;
(this really is a good paper - if you are not familiar with it, go
and read it). Working practices should be chosen to both minimise
the likelihood of mistakes and to ensure that any mistakes are
detected and corrected before they derail the project.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e90" id="d0e90"></a>Changing
Working Practices</h2>
</div>
<p>So what do you do when you are on a project that is showing
symptoms of a mismatch between the working practices and the nature
of the project? If you are a single developer working on a
three-day project then it is probably easy to decide not to
allocate work based on &quot;SecondBestResource&quot;. (Indeed, if you
succeed in employing this pattern, then you probably have worse
problems than the project failing!) But problems can be subtle - is
the cost of setting up and maintaining a build server for the
project really justified? (Even if it is required for conformance
to departmental policy!)</p>
<p>On a larger project it is much harder to institute change - not
least because changes need to be negotiated with other project
members (who will not be inclined to change unless you first
convince them that there is a need). But even when you've
successfully convinced everyone that a build server would be a good
idea <span class="emphasis"><em>someone needs to spend time setting
it up and maintaining it</em></span>. And this is often the
sticking point - there are &quot;brownie points&quot; to be had implementing
features the customer will use, and the customer doesn't care less
about version control, test infrastructure, or the internal review
of work items. In these circumstances who would want to be seen
spending time on this stuff? It requires co-operation to tackle
these issues.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e100" id="d0e100"></a>Strategies
for Co-operation</h2>
</div>
<p>There are two basic strategies for co-operation: either someone
takes responsibility and orchestrates the activities of others, or
everyone takes responsibility for dealing with the problems she or
he identifies.</p>
<p>Both can work for small and medium sized projects and, in many
cases, it is easier to get one person to take responsibility than
to ensure that everyone does - which can make the first strategy
easier to implement. However, as the size of a project increases,
it becomes harder and harder for one person to keep track of
everything that needs doing and on large projects it becomes
impossible. There are, of course, ways to scale the first strategy
- break down the project's issues into groups (by sub-team, by
technology, by geography, or whatever) and ensure that someone
takes responsibility for each group. However, this always seems to
leave some issues that everyone disowns.</p>
<p>The strategy of everyone taking responsibility does scale a lot
better if everyone co-operates. The difficulty is getting everyone
to &quot;buy into&quot; this approach to begin with. It takes trust - and at
the beginning of a project this has typically not been earned. It
can be very difficult to convince everyone that &quot;freeloaders&quot; will
not be a problem - until they've participated in a team that works
this way. The thing that is missed is that the team is a small
enough social unit that &quot;freeloaders&quot; are quickly identified and
dealt with along with other problems.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e109" id="d0e109"></a>A Personal
Strategy</h2>
</div>
<p>As a member of a project one should behave as one believes
others ought to behave. The worst thing that can be done on
encountering a problem is to ignore it on the basis that &quot;someone
else&quot; should deal with it. The next worst thing is to bury it in a
write-only &quot;issues list&quot; in the hope that one day someone will deal
with it. If everyone behaves like that then nobody deals with
anything.</p>
<p>Everyone - including you and me - who encounters a problem has a
responsibility to do something with it: either deal with it, or
find someone better qualified to agrees to take responsibility.</p>
</div>
</p>
<p><strong>Notes:</strong>&nbsp;</p>
<p><em>More fields may be available via dynamicdata ..</em></p>
</div>
</channel>
</rss>
