    <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  :: The scoping problem</title>
        <link>https://members.accu.org/index.php/articles/401</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">Design of applications and programs + Overload Journal #49 - Jun 2002</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/c67/">Design</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/c196/">49</a>
<br />

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

                    -                        <a href="https://members.accu.org/index.php/articles/c67+196/">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;The scoping problem</h1>
<p><strong>Author:</strong>&nbsp;</p>
<p>
<strong>Date:</strong> 26 June 2002 17:46:10 +01:00 or Wed, 26 June 2002 17:46:10 +01:00</p>
<p><strong>Summary:</strong>&nbsp;</p>
<p><strong>Body:</strong>&nbsp;<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e18" id="d0e18"></a></h2>
</div>
<p>It is a clich&eacute; of software development that every project
is understaffed with a deadline that is too tight, and maybe
underresourced in terms of hardware and software too. I mean, have
you ever worked on a project where there where too many
programmers?</p>
<p>Jim McCarthy [<a href="#McCarthy">McCarthy</a>] suggests that
every project is bounded by three factors: features, time and
resources (i.e. developers) - these form the scope of the project:
what do we need to do? how long have we got? who's doing it? Their
product is a constant: if you want more features you must either
increase the time allowed or the number of developers. Likewise, if
you want a delivery sooner you must either reduce the number of
features or increase the number of developers. But, as we know from
Brooks' law [<a href="#Brooks">Brooks</a>], increasing the number
of developers makes a project later; unfortunately Brooks' law is
not true in reverse: reducing the number of developers will also
make the project later. Brooks' law can only be applied to a given
point in time.</p>
<p>I'd like to add two observations of my own to McCarthy and
Brooks:</p>
<div class="variablelist">
<dl>
<dt><span class="term">Observation 1:</span></dt>
<dd>
<p>Developers want to exceed the project requirements. Sometimes
this means they want to see a feature which isn't in the spec,
sometimes it means they want to do frivolous things like refactor
the code, or make it more readable, heaven forbid, some of them
actually want to make the code reusable! Truth is, most developers
believe they know best. Some of us are even known to claim that
this is a professional asset.</p>
</dd>
<dt><span class="term">Observation 2:</span></dt>
<dd>
<p>Developers are more likely to underestimate the time taken to do
a piece of work than they are to overestimate; this is especially
true when a developer wants to do a piece of work.</p>
</dd>
</dl>
</div>
<p>I think from these observations flows the axiom: software
projects are naturally over-committed in terms of time and
resources.</p>
<p>If my observations have not convinced you, consider what would
happen if you turned around at your next project meeting and said:
&quot;Well then chaps, looks like we've got four more weeks work and
then we'll be finished a whole month early, well done.&quot; Would the
reaction be:</p>
<div class="itemizedlist">
<ul type="disc">
<li>
<p>Launch a month early : pull that deadline back!</p>
</li>
<li>
<p>Add in some more features, fix some more bugs : back to
work!</p>
</li>
<li>
<p>Fire the contractors, we can save some money and still get it
done on time.</p>
</li>
<li>
<p>Congratulations: take a months paid leave.</p>
</li>
</ul>
</div>
<p>I'd like to be bold and suggest <span class=
"emphasis"><em>Kelly's first law of project
complexity</em></span>:</p>
<div class="blockquote">
<blockquote class="blockquote">
<p>Project scope will always increase in proportion to
resources.</p>
</blockquote>
</div>
<p>You see, I think projects are bit like programs: they will
expand to fill all the time and human resources available. This may
be a generalised case of Brooks' law, in his case he adds more
developers, now the project scope increases to cover training new
developers too.</p>
<p>Every time a deadline is pushed back to allow more bugs to be
fixed you are increasing the scope too. Even if the project
introduced those bugs in the first place, fixing them was never on
the feature list.</p>
<p>With a loose deadline there is a tendency to try some new beta
OS, upgrade your compiler, or experiment with generic programming
or many other things. Yes, these all have a place. I'm just saying
you have to recognise the cost of all these things. Introduce a
breathing space between projects to do these things. I don't want
to argue for arbitrary deadlines either. A deadline picked from the
sky and imposed is just as bad. Most projects have a rough deadline
before they ever start, given this the team needs to look at the
feature set and the resources, and balance all these things.</p>
<p>A word of caution: a developer joining a project at mid-point
may not be aware of these discussions, it is important to explain
the schedule to them and even adapt it after hearing their views.
If all of this puts you in mind of short cycles you're right. Every
time I work on a large project I am convinced that much of the
project could be achieved with less code, complexity and
effort.</p>
<p>This leads me to <span class="emphasis"><em>Kelly's second law
of project complexity</em></span>:</p>
<div class="blockquote">
<blockquote class="blockquote">
<p>Inside every large project there is a small one struggling to
get out.</p>
</blockquote>
</div>
<p>Take a look at your project, why is it so big? Would you write
it the same if you were doing it again? Chances are you would not,
you have learned from what you have done, and you would rewrite it
using less complexity and less code.</p>
<p>Writing a program is teaching the machine how to do something.
In doing this you come to understand the problem intimately and
inevitably see better ways of doing it. So much complexity is
unavoidable, but I suggest that much of it is avoidable if you
merely reduce the scope of the project.</p>
<p>OK, how do we reduce the scope of the project? Well, firstly aim
for minimalism [<a href="#Henney">Henney</a>] in design. Secondly,
design extendable systems. Write a core system to which you can add
code, your project may end up being big but it will still contain a
microkernel like element which make it easier to get to grips with:
embrace the words of John Vlissides [<a href=
"#Vlissides">Vlissides</a>] &quot;<span class="quote">A hallmark.... of
good object oriented design is that you can modify and extend a
system by adding code rather than hacking it.</span>&quot;</p>
<p>Next: keep your project and your team focused. Each project
iteration should have some Big Idea which you can drive towards.
This is good for morale too and you always know when you have
arrived.</p>
<p>And try this on your management: for every day the project is
finished early, everyone on the team gets half a day's paid
holiday.</p>
<div class="bibliography">
<div class="titlepage">
<h2><a name="d0e104" id="d0e104"></a>References</h2>
</div>
<div class="bibliomixed"><a name="McCarthy" id="McCarthy"></a>
<p class="bibliomixed">[McCarthy] Jim McCarthy, <span class=
"citetitle"><i class="citetitle">Dynamics of Software
Development</i></span>, Microsoft Press, 1995</p>
</div>
<div class="bibliomixed"><a name="Brooks" id="Brooks"></a>
<p class="bibliomixed">[Brooks] Fred Brooks, <span class=
"citetitle"><i class="citetitle">Mythical Man-Month</i></span>,
Addison-Wesley, 1974</p>
</div>
<div class="bibliomixed"><a name="Henney" id="Henney"></a>
<p class="bibliomixed">[Henney] Kevlin Henney, minimalism : omit
needless code, <span class="citetitle"><i class=
"citetitle">Overload 45</i></span>, October 2001</p>
</div>
<div class="bibliomixed"><a name="Vlissides" id="Vlissides"></a>
<p class="bibliomixed">[Vlissides] John Vlissides, <span class=
"citetitle"><i class="citetitle">The C++ Report</i></span>,
February 1998</p>
</div>
</div>
</div>
</p>
<p><strong>Notes:</strong>&nbsp;</p>
<p><em>More fields may be available via dynamicdata ..</em></p>
</div>
</channel>
</rss>
