    <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  :: Professionalism in Programming #35</title>
        <link>https://members.accu.org/index.php/articles/853</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">Professionalism in Programming, from CVu journal + CVu Journal Vol 17, #6 - Dec 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/c184/">Journal Columns</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c182/">Professionalism</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/c77/">CVu</a>

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

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

                    -                        <a href="https://members.accu.org/index.php/articles/c182+93/">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;Professionalism in Programming #35</h1>
<p><strong>Author:</strong>&nbsp;</p>
<p>
<strong>Date:</strong> 06 December 2005 05:00:00 +00:00 or Tue, 06 December 2005 05:00:00 +00:00</p>
<p><strong>Summary:</strong>&nbsp;<p>In the last issue of C Vu we started a journey into the world of
software development teamwork. We looked at team structure,
personal skills for good teamwork, at team working tools, and team
organisation. Phew! That's quite a lot of stuff to take in, but I
guess after two months you've finally digested it all, and are now
back ready for more.</p>
</p>
<p><strong>Body:</strong>&nbsp;<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e22" id="d0e22"></a></h2>
</div>
<div class="blockquote">
<blockquote class="blockquote">
<p>Recovering from failure is often easier than building from
success. (Michael Eisner)</p>
</blockquote>
</div>
<p>In the last issue of C Vu we started a journey into the world of
software development teamwork. We looked at team structure,
personal skills for good teamwork, at team working tools, and team
organisation. Phew! That's quite a lot of stuff to take in, but I
guess after two months you've finally digested it all, and are now
back ready for more.</p>
<p>If you're not, I'd quickly take an Alka-Seltzer and prepare for
the next instalment&hellip;</p>
<p>This time we'll look at &quot;team diseases&quot;. I don't think they're
contagious, but handle with care just in case.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e33" id="d0e33"></a>Team
Diseases</h2>
</div>
<p><span class="inlinemediaobject"><img src="/var/uploads/journals/resources/team.png"
align="right"></span>You can have a good spread of programmer
types, wonderful team organisation, and use the best tools to their
maximum, but still have a dysfunctional team. There are many
reasons that teams fail to produce results, and just as we
stereotyped different species of programmer [<a href=
"#Goodliffe">Goodliffe</a>] we can generalise categories of doomed
development teams - to see what we can learn from them.</p>
<p>So here are some of the classic team disasters. In each case
we'll see:</p>
<div class="itemizedlist">
<ul type="disc">
<li>
<p>their particular road to ruin,</p>
</li>
<li>
<p>the warning signs (so the you can recognise when you're headed
in this direction),</p>
</li>
<li>
<p>how to turn around a team stuck in that particular rut, and</p>
</li>
<li>
<p>how to be a successful programmer in that team situation
(sometimes <span class="emphasis"><em>despite</em></span> the
team)<sup>[<a name="d0e62" href="#ftn.d0e62" id=
"d0e62">1</a>]</sup>.</p>
</li>
</ul>
</div>
<p>Hopefully you won't recognise your current team in the following
list:</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e68" id="d0e68"></a>1. Tower of
Babel</h2>
</div>
<p><span class="inlinemediaobject"><img src=
"/var/uploads/journals/resources/team-babel.png" align="right"></span>Just like the
Biblical builders, a Babel-esque team suffers a massive
communication breakdown. Once the programmers fail to communicate,
development work is doomed - if anything works then it's more
likely by luck than by design.</p>
<p>With ineffective communication people make incorrect
assumptions. Bits of work fall between the cracks, potential error
cases are ignored, faults get forgotten about, programmers
duplicate effort, interfaces are misused, problems aren't
addressed, and small slippages, unnoticed, grow into mammoth
project delays because no one is monitoring progress.</p>
<p>Of course, the original Babel builders were fragmented by
multiple spoken languages<sup>[<a name="d0e80" href="#ftn.d0e80"
id="d0e80">2</a>]</sup>; without multilingual programmers you'll
struggle to communicate in this situation. However, these kinds of
project rarely suffer Babel syndrome - with language barriers to
cross people make more of an effort.</p>
<p>It's not only different spoken languages that can separate
developers. Different backgrounds, methodologies, programming
languages, even different personalities cause team members to
misunderstand one another. A small seed of confusion, unchecked,
will eventually grow; resentment and frustration will build up. At
worst, Babel teams end up not talking at all, with each programmer
sitting in their own corner, doing their own thing.</p>
<p>This problem can brew within the immediate software team, and
also between interacting teams. Extra-team Babel syndrome kicks in
when developers fail to talk to testers, or the management team are
disconnected from development.</p>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e88" id="d0e88"></a>Warning Signs</h3>
</div>
<p>You can tell that your team is headed towards Babel when one
developer can't be bothered to ask another about something, feeling
it's not worth the effort. It creeps in with a lack of detailed
specifications, and with ambiguous code contracts. You might see
either too few, or too many emails flying about. Too many emails
means that everybody's 'shouting', and no one's listening - nobody
has time to keep up with the constant barrage of information.</p>
<p>On the road to Babel there are no team meetings, and no one
person knows exactly what's going on in the project. Pick someone
at random: they can't tell you whether development is on course or
not.</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e95" id="d0e95"></a>Turn Arounds</h3>
</div>
<p>Talk to people. Go on - open the floodgates! Soon they'll all be
doing it.</p>
<p>Babel attitudes are difficult to redress once the rot has set in
because morale has been dragged to an all time low, apathy is
rampant, and no one believes that change is possible. The most
effective strategy is to work at boosting team morale, to bring the
developers closer together. Do something social to shake the team
up: consider a team building exercise, even a simple trip out for a
drink together. Buy some cakes one lunchtime, and share them with
the team.</p>
<p>Then develop some strategies to force people to talk to one
another. Create small focus groups to scope new features. Put two
people in charge of a piece of design work. Introduce pair
programming.</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e104" id="d0e104"></a>Success
Strategies</h3>
</div>
<p>To write good code in the face of such problems you have to be
very disciplined. Before you start a work package ensure that it's
rigorously defined. Write the specification yourself if you have
to, and mail it to all the involved people to get their buy-in
(provide a time limit for comments, stating that no feedback is
assumed to be agreement). Then it's clear when you've succeeded
because you have fulfilled the agreed spec.</p>
<p>Lock down all your external code interfaces fully, so there's no
confusion about what you're relying on, or what people can expect
of your code.</p>
</div>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e111" id="d0e111"></a>2.
Dictatorship</h2>
</div>
<p><span class="inlinemediaobject"><img src=
"/var/uploads/journals/resources/team-dictator.png" align="right"></span>This is the
original one man show, a team led by a strong-willed,
strong-personality, who is (usually) a highly skilled programmer.
Other programmers are required to be 'yes men', even if they don't
want to be, following the Dictator's mandates without question.</p>
<p>In some teams this works fine - with a well-chosen benevolent
leader and a team who respect him. Problems loom when a Dictator's
personality doesn't support his position, or when he is technically
substandard. If his ego gets in the way then the team is in
trouble: they will resent him, and grind to a frustrated halt.</p>
<p>When fashioned on purpose, this kind of team is a hierarchy,
with lines of defined authority. This structure was likened to a
<span class="emphasis"><em>surgical team</em></span> by Frederick
Brooks [<a href="#Brooks">Brooks</a>]. The surgical team places the
most highly-qualified technical individual, the lead
surgeon<sup>[<a name="d0e129" href="#ftn.d0e129" id=
"d0e129">3</a>]</sup>, at the top of the pile: acting as a code
writer, not a manager. He performs the bulk of the development and
has ultimate responsibility if bad things happen (if the patient
dies). He is backed up by a deliberately chosen team. This includes
a junior surgeon who performs smaller, lower risk tasks, supports
the lead surgeon, and learns the trade. The team also involves the
software equivalent of anaesthetists, nurses, and perhaps more
junior surgeons learning skills (e.g. sewing the patient up).</p>
<p>There are two dangers with this kind of team. The first comes
when external pressures force the Dictator to become more of a
manager; his technical specialism pretty much guarantees his
management will suck. His focus will shift away from the software
and the project will collapse. The second danger is a
self-appointed Dictator, who isn't recognised by the team. Work
flow will stall as the team is neither structured nor prepared to
support his leadership.</p>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e135" id="d0e135"></a>Warning
signs</h3>
</div>
<p>This team structure tends to develop slowly and subtly, as a
would-be Dictator slowly modifies the focus of his work role and
presumes his level of authority. You can see a Dictated team
brewing when you often find yourself saying:</p>
<div class="itemizedlist">
<ul type="disc">
<li>
<p>I can't do this without consulting ...</p>
</li>
<li>
<p>Oh, ... will moan if we do it like that.</p>
</li>
<li>
<p>But ... says we must do ... first.</p>
</li>
</ul>
</div>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e150" id="d0e150"></a>Turn
Arounds</h3>
</div>
<p>If you have a Dictator who is not a worthy lead surgeon, then
you must address the situation. Otherwise the team will petrify
under this authoritarian tyrant. Either work the issues through
with him (in all honesty, this is unlikely to work - change is
hard, especially for people with an inflated ego), or unseat them
from their throne by confronting a manager on the issue.</p>
<p>The problem with doing this is that after overthrowing the king,
without a team restructure, you need a new king. Lead surgeons are
hard to come by, and so it's probably better to restructure the
team.</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e157" id="d0e157"></a>Success
Strategies</h3>
</div>
<p>In a (functional or dysfunctional) Dictatorship, determine your
level of authority and responsibility. Get this agreed by the
people whose opinion really counts - your manager or team
leader.</p>
<p>However, once you've asserted your rightful development role,
you (and the other programmers) must still listen to and work with
the Dictator, even if you don't like his current position.
Otherwise you won't work well together and won't write
complementary code. There must be consensus in the design, or the
software will not work.</p>
<p>Don't be disrespectful or rude about a Dictator - it'll bring
the team morale down and make you more cross.</p>
</div>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e166" id="d0e166"></a>3.
Development Democracy</h2>
</div>
<p><span class="inlinemediaobject"><img src=
"/var/uploads/journals/resources/team-democracy.png" align="right"></span>An old proverb
says: <span class="emphasis"><em>all men are created
equal</em></span>, and here this is outworked. This is a team of
peers - programmers with similar levels of skill and complementary
personalities - who organise themselves in a non-hierarchical
fashion. It's an unusual beast in the corporate world, which
expects that someone must be 'boss'. The idea of a self-organising
team seems heretical. However, it has been shown to be a team model
that can work well. Some Democratic teams run by periodically
electing a leader from their ranks, based on whose skills are most
in demand at this stage of the project. Often there is no a clear
leader, and all decisions are taken by consensus.</p>
<p>We tend to forget the other half of that proverb: <span class=
"emphasis"><em>all men are created equal, but by practice grow
apart</em></span>. It takes a special set of individuals to make
this team culture work. The danger with a team founded on this
laudable principle is that as it grows, or when a certain member
leaves (the one who crystallises the group into making decisions),
things begin to drift. The team can lose it's focus, failing to
agree on anything, and failing to produce results in a timely
fashion. In the worst case, the team ends up arguing forever about
a single issue, contemplating its navel, and never actually
achieving anything.</p>
<p>With endless meetings and circular discussions the team is in
danger of <span class="emphasis"><em>analysis
paralysis</em></span>: of becoming focused on process, not on
delivery of the project. Like a real democracy, the genuine team
business can get lost in a sea of politicking.</p>
<p>You can accidentally end up with a Development Democracy if you
have a ineffective team leader who is incapable of making
decisions. This kind of bumbling leader will slowly phase himself
out without realising it. The frustrated team ends up jointly
taking over his role - forcing decisions to be made and choosing
the direction of development. Democracy is a particularly difficult
team structure in a crisis, even when established on purpose. If
personality friction prevents the election of the right man for the
situation, then an outside leader must be brought in to steer the
project.</p>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e189" id="d0e189"></a>Warning
Signs</h3>
</div>
<p>You can smell a sick Democracy a mile off: the rate of decision
making drops like a stone. If there is a software team leader then
everyone bypasses him, rather than be stalled by his dithering. He
is now a leader in name only; no one recognises him as being an
authority on the software or able to achieve anything.</p>
<p>Without strong leadership, no one is assigned responsibility for
each task; it's never clear who should be ensuring a task's
completion, and so nothing gets done. Weeks can go by without a
specification being completed, and with no visible progress.</p>
<p>In a rampant Development Democracy the smallest decision forces
the team into committee mode, and it takes days to conclude. Or a
decision is made: <span class="emphasis"><em>let's say 'yes' until
we decide to do something else</em></span>. &quot;Let your 'yes' be yes,
and your 'no' be no&quot;<sup>[<a name="d0e201" href="#ftn.d0e201" id=
"d0e201">4</a>]</sup>, otherwise you'll spend ages ripping up old
code and redoing it whenever someone changes their mind.</p>
<p>You might also notice that junior programmers feel alienated
because they'll never be elected leader.</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e207" id="d0e207"></a>Turn
Arounds</h3>
</div>
<p>Democracies aim to remove a specific bottleneck: where all
decisions must be made by the boss, who is not always the most
appropriate person (especially when they're not technical). In a
dysfunctional Democracy there is no decision making process, and no
decisions are made at any level. To return to a healthy Democracy,
ensure that leadership can move around the team freely and that
replacing the leader is easy. Don't attempt to run a Democracy
unless you have enough potential leaders.</p>
<p>As with any other slipping project, make sure that problems are
visible to everybody, both developers and managers. Make sure that
it's clear who's responsibility this problem is - especially if
it's not yours!</p>
<p>You can attempt to correct indecisive Democracies by showing
some strong will; don't be content to let matters continually
slide. You'll probably get a name as a trouble maker, but
eventually you'll also get a name as someone who achieves results.
Beware, though, of the danger of becoming a demi-Dictator as a
backlash.</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e216" id="d0e216"></a>Success
Strategies</h3>
</div>
<p>For your own sanity, avoid ditherers - the people who cannot
decide the simplest thing.</p>
<p>Ensure that you are allotted a well-defined part of the project,
and have clear and realistic deadlines. This is a major anchor
against the ebb and flow of uncertain leadership.</p>
</div>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e223" id="d0e223"></a>4. Satellite
Station</h2>
</div>
<p><span class="inlinemediaobject"><img src=
"/var/uploads/journals/resources/team-satelite.png" align="right"></span>A Satellite team
- split from the main development team - present their own world of
potential pain and pitfalls. It's hard to work as a cohesive unit
when part of the team is physically separated. Think about using a
severed limb; it's not dissimilar.</p>
<p>The Satellite might be an entire peripheral department, or a
part of your immediate software team split in a different location.
Telecommuting (working from home) is a special case, with only one
person in the Satellite.</p>
<p>It's not unusual for upper management to be in a 'head office'
elsewhere, but since they have little input to the day-to-day
programming activities this isn't problematic. However, if test or
other development teams are many miles away then you need to put
measures in place to ensure that the project succeeds. You must be
deliberate about this - split teams don't work together by
accident.</p>
<p>Programming requires close team interaction because our
individual pieces of code must interact closely. Anything that
threatens our human interactions threatens our code too. These are
the kinds of threat presented by Satellite teams, so take them
seriously:</p>
<div class="itemizedlist">
<ul type="disc">
<li>
<p>Physically disjoint development teams lose those informal,
spontaneous conversations that spring up beside the coffee machine.
The chance for easy dynamic cooperation disappears. With it goes a
level of shared insight and group understanding of the code</p>
</li>
<li>
<p>There is a lack of cohesion in development. Each site's local
practices and development culture will differ (if only slightly).
Inconsistent methodologies make handing over work complex.</p>
</li>
<li>
<p>Since you don't know people in the Satellite very well, there is
an inevitable lack of trust and familiarity. A them and us attitude
quickly emerges.</p>
</li>
<li>
<p>Another old proverb says: &quot;out of sight, out of mind&quot;. When you
don't see Satellite programmers regularly you'll forget to ask how
they're progressing, and won't think whether your change impacts
them (technically or procedurally).</p>
</li>
<li>
<p>Satellites make the simplest conversation difficult. You need
greater awareness of other programmers' schedules; when they're in
meetings or on holiday.</p>
</li>
<li>
<p>With cross-country projects, time zone changes become especially
problematic. There is a smaller communication window between teams,
and a larger eclipse period.</p>
</li>
</ul>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e256" id="d0e256"></a>Warning
Signs</h3>
</div>
<p>Geographically split teams are obvious, but also be wary of
separated teams within the same office. Splitting developers into
different rooms, or even across corridors, imposes an artificial
divide that can impede collaboration.</p>
<p>Watch for separation between departments, too. It can be just as
damaging. For example, test teams are often hived off separately
from the developers, sometimes in a different office or section of
the building. This is a real shame; it hinders essential
interaction between the teams and so the QA process is not as fluid
as it could be.</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e263" id="d0e263"></a>Turn
Arounds</h3>
</div>
<p>A Satellite Station team is not necessarily doomed; it just
requires careful monitoring and management. The problems are not
insurmountable, but definitely inconvenient - avoid them if you
can.</p>
<p>An essential survival strategy is to get all team members
meeting face-to-face very early on in the project. This helps to
build a rapport, trust and understanding. Regular meetings are even
better. When the team assembles provide food and drinks; this sets
people at ease and creates a more social atmosphere.</p>
<p>Arrange the Satellite so that their work requires the least
collaboration and coordination with the mothership. This will
minimise the impact of any problems.</p>
<p>Avoid code interaction problems by defining interfaces between
the separate sites' work early on. But beware of designing your
code around the team - you might not be creating the most
appropriate design. Programming is a process of making pragmatic
choices; each individual case is slightly different, and this is
balance you have to weigh up each time.</p>
<p>Groupware becomes an essential tool in a Satellite, to make
communication effective. Also consider using instant message
communication between sites. And remember: don't be scared of the
telephone!</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e276" id="d0e276"></a>Success
Strategies</h3>
</div>
<p>If you have to work with off-site people, make sure that you
know them well - personally and professionally. It makes a big
difference. You'll know how they react, and when they are being
sincere or sarcastic. Make an effort to be friendly to Satellite
programmers - it's easy to be mistaken for a grumpy idiot when they
only ever phone you at inconvenient times.</p>
<p>Make sure that you know exactly who is off site. Learn
everybody's name, find out what they do, and how to contact them.
Work at improving your communications skills. Don't be afraid to
contact someone when you need to - think whether you'd talk to them
if they were sat beside you.</p>
</div>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e283" id="d0e283"></a>5. The Grand
Canyon</h2>
</div>
<p>T<span class="inlinemediaobject"><img src=
"/var/uploads/journals/resources/team-canyon.png" align="right"></span>his team is
comprised of members with skill levels and experience at either end
of the spectrum. There is a clear skills gap; the chasm between the
'senior' developers and the 'junior' developers has not been
bridged, and so two distinct factions have grown. In almost every
Grand Canyon team, this is both a social and technical phenomenon -
the junior programmers socialise amongst themselves, and the senior
programmers socialise amongst themselves. This isn't helped when
the senior developers are seated together in one lump, and the
junior developers in a separate ghetto.</p>
<p>The reason for Grand Canyon culture is often historical: a
project starts with a small number of crack developers who must
quickly establish an architecture and get proof-of-concept code out
the door. They are naturally seated together and learn to work as a
swift, cohesive unit. As the project progresses more programmers
are required, and junior members are brought in. Because of the
existing office layout they are seated on the periphery, and then
given smaller programming tasks in order to learn the structure of
the system.</p>
<p>Without careful checking, senior developers can adopt a superior
attitude and look down on the junior developers. They hand over
small, tedious chunks of work and continue with the interesting
grander design work. The senior developers reason that it would
take prohibitively long to teach a junior about the bigger picture,
and there is an element of truth there. In this way, the junior
developers never get a chance to gain more responsibility and do
more 'fun' programming. They get frustrated and disillusioned.</p>
<p>Junior programmers want to learn their trade, and still have
youthful enthusiasm and a passion for programming. Senior
programmers may have a very different (more jaded?) world view,
with aspirations for management or more senior development roles.
These different personal motivations pull the factions in different
directions.</p>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e298" id="d0e298"></a>Warning
Signs</h3>
</div>
<p>Watch your team if it is currently growing. Look carefully at
the demographics of the members and watch how work is allotted
amongst them. Monitor the social dynamics of your team - unhealthy
teams develop cliques.</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e303" id="d0e303"></a>Turn
Arounds</h3>
</div>
<p>The problem in a Grand Canyon is that the team is not mixing;
there are polarised factions. The fix is simple: adopt strategies
that will mix them up. For example:</p>
<div class="itemizedlist">
<ul type="disc">
<li>
<p>Change the seating plan, so that both factions are interspersed.
This might consume valuable development time, but a day of desk
moving might win weeks of productivity.</p>
</li>
<li>
<p>Introduce team meetings to spread information.</p>
</li>
<li>
<p>Start pair programming, mixing senior and junior programmers.
Get the junior one to drive, whilst the senior navigates. This is a
discipline for the senior, and educational for the junior.</p>
</li>
<li>
<p>Begin a mentoring scheme to train junior developers. Although
this will emphasise the skills divide, it will also force the
factions closer.</p>
</li>
<li>
<p>Look at all the developer's job titles - do they foster a
dangerous and unnecessary pecking order?</p>
</li>
</ul>
</div>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e324" id="d0e324"></a>Success
Strategies</h3>
</div>
<p>Treat everyone as an equal, as a peer.</p>
<div class="itemizedlist">
<ul type="disc">
<li>
<p>If you're a senior programmer, recognise that the juniors need
to learn. You were once a novice too, and didn't understand how the
world worked. Don't hog all the interesting programming tasks. Be
willing to let others take responsibility.</p>
</li>
<li>
<p>If you're a junior programmer, ask for more challenging tasks.
Seek to learn. Perform your current task as well as you can - this
will prove that you are ready for greater responsibility.</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e336" id="d0e336"></a>6.
Quicksand</h2>
</div>
<p><span class="inlinemediaobject"><img src=
"/var/uploads/journals/resources/team-quicksand.png" align="right"></span>It takes just
one person, one sour apple, one lose cannon, to bring a team to its
knees. You need a brace of good programmers to make a good team,
however you only need one bad programmer to make a bad one. A team
stuck in Quicksand has unwittingly fallen foul of a rogue member.
This can be subtle; they might not have even spotted where the
problem stems, and the culprit probably has no intention of causing
any harm.</p>
<p>You might suffer Quicksand for a number of reasons:</p>
<div class="itemizedlist">
<ul type="disc">
<li>
<p>A technically incompetent programmer (probably the Cowboy coder
[<a href="#Goodliffe">Goodliffe</a>]). This guy isn't easy to spot
immediately, and no one will notice whilst he's writing poor code.
The timebomb has been laid, and later the project will be stalled
until his mess has been purged and replaced.</p>
</li>
<li>
<p>A morale drain sits under a little black cloud and demoralises
the entire team, sucking out all enthusiasm and cheer. Within a few
weeks no one can bring themselves to write any code, and they're
all considering jumping off the nearest bridge.</p>
</li>
<li>
<p>A mis-manager performs the exact opposite actions of a good
manager, constantly changing decisions, altering priorities,
shifting time-scales, and promising the impossible to customers.
The team members don't know where they stand because the ground is
always moving under their feet.</p>
</li>
<li>
<p>A time warp programmer bends the laws of relativity, so that
time slows down around him. Anything coming his way takes a
phenomenally long time to process. Decisions stall on his input,
his coding work doesn't get done, and meetings always start late
because he can't quite make the start. There's always a good reason
- perhaps he is doing other 'very important' jobs - but he amasses
a backlog of tasks and never gets round to anything. Eventually
other programmers get fed up and bypass him.</p>
</li>
</ul>
</div>
<p>In a Quicksand team one member's weakness can quickly destroy
the entire team's productivity. This is especially dangerous when
the culprit is high up the food chain. The more responsibility he
has, the more dire the consequences.</p>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e364" id="d0e364"></a>Warning
Signs</h3>
</div>
<p>Look for the one guy who doesn't gel with the team. He's the
person that everyone complains about<sup>[<a name="d0e369" href=
"#ftn.d0e369" id="d0e369">5</a>]</sup>, or the programmer who
always works alone (because everyone avoids him).</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e373" id="d0e373"></a>Turn
Arounds</h3>
</div>
<p>The most drastic but probably the easiest fix is to get rid of
the Quicksand cause. First you have to identify him, and sometimes
that's quite difficult.</p>
<p>Calls of unfair dismissal frighten managers, who will be
reluctant to fire someone because 'a few people can't get on with
him'. It takes some major league incompetence to make this a likely
outcome.</p>
<p>So you've got to find a way to minimise the chaos he can cause,
or work out ways to integrate him into the team better.</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e382" id="d0e382"></a>Success
Strategies</h3>
</div>
<p>Most importantly: don't be the Quicksand!</p>
<p>Presuming you're not, try to insulate yourself as much as
possible from the effects of a Quicksand team member. Limit
interaction with him, for the sake your blood pressure. Don't rely
on his code too much, and try to avoid his input as much as
possible. Don't get sucked into his bad practices, and don't
over-react to him - acting the exact opposite and making matters
worse.</p>
</div>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e389" id="d0e389"></a>7.
Lemmings</h2>
</div>
<p><span class="inlinemediaobject"><img src=
"/var/uploads/journals/resources/team-lemmings.png" align="right"></span>Like a group of
cute, furry animals with an insane urge to launch themselves off
the nearest cliff, this team is far too willing - even eager - to
accommodate the brief they've been given. Even when it's bogus.</p>
<p>The team comprises of very trusting, very loyal members. They
are technically competent, but don't see beyond their specific
instructions. Their enthusiasm and eagerness are commendable, but
without a visionary member - someone who asks <span class=
"emphasis"><em>why?</em></span>, who looks beyond the spec to
what's really required - the team is in constant danger of
delivering what was asked, but not what was needed.</p>
<p>Lemming teams are particularly vulnerable to the demands of
start-up companies. The disease starts when managers ask:
<span class="emphasis"><em>write this code quickly; we'll redo it
properly later</em></span>. Later never comes, instead the Lemmings
hear: <span class="emphasis"><em>the company needs more code, fast,
so just bolt this on quickly too</em></span>. Before long the team
culture is to dance when someone plays music. The work gets slowly
more and more difficult, with ever-more herculean tasks and an
ever-decaying codebase.</p>
<p>Eventually the team find themselves a broken mess at the bottom
of a sixty foot cliff. Game over.</p>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e412" id="d0e412"></a>Warning
Signs</h3>
</div>
<p>If you're not happy with the specification you're currently
working to then you may be in a team of Lemmings. You need a
realistic faith in your current project, or you're a mere code
mercenary. When you find yourself listening to vacuous promises and
being committed to unreasonable work, and when no one argues or
points out flaws in the plan, welcome to Lemming country. We hope
you enjoy your stay.</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e417" id="d0e417"></a>Turn
Arounds</h3>
</div>
<p>Review what your team is doing right now. Don't stop working,
but take a view from the customer requirements right through to
final delivery. Will the code you're working on provide what's
ultimately needed? Is it a short sighted hack that won't stand the
strain of many years in your codebase, or many years of use?</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e422" id="d0e422"></a>Success
Strategies</h3>
</div>
<p>Question the work you are given. Understand the motivation for
it. Stand up for good programming principles, and never believe
that you'll be allowed to fix code later, unless you can see it
scheduled on a plan that you believe in.</p>
</div>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e427" id="d0e427"></a>Next
Time</h2>
</div>
<p>Having thoroughly depressed ourselves at the sight of failing
software development teams, we'll conclude this series by
developing some principles for healthy collaborative software
construction, and looking at the natural life cycle of a software
team. Until then, enjoy the software factory&hellip;</p>
<p>With thanks to David Brookes, cartoonist extraordinaire, for the
excellent monkey pictures.</p>
</div>
<div class="bibliography">
<div class="titlepage">
<h2><a name="d0e434" id="d0e434"></a>References</h2>
</div>
<div class="bibliomixed"><a name="Goodliffe" id="Goodliffe"></a>
<p class="bibliomixed">[Goodliffe] Pete Goodliffe. 'Professionalism
in programming #30 - #31: Code Monkeys' in <span class=
"citetitle"><i class="citetitle">C Vu 17.1</i></span> and
<span class="citetitle"><i class="citetitle">17.2</i></span>,
2005.</p>
</div>
<div class="bibliomixed"><a name="Brooks" id="Brooks"></a>
<p class="bibliomixed">[Brooks] Frederick P Brooks Jr. <span class=
"citetitle"><i class="citetitle">The Mythical Man Month</i></span>.
Anniversary Edition. Addison-Wesley, 1995.</p>
</div>
</div>
<div class="footnotes"><br>
<hr class="c4" width="100">
<div class="footnote">
<p><sup>[<a name="ftn.d0e62" href="#d0e62" id=
"ftn.d0e62">1</a>]</sup> I don't claim that these strategies will
solve the team's general problem; they're deliberately
short-sighted ways to get your work done now, with minimum risk of
problems.</p>
</div>
<div class="footnote">
<p><sup>[<a name="ftn.d0e80" href="#d0e80" id=
"ftn.d0e80">2</a>]</sup> Genesis 11:1-9</p>
</div>
<div class="footnote">
<p><sup>[<a name="ftn.d0e129" href="#d0e129" id=
"ftn.d0e129">3</a>]</sup> Usually this guy is a technology
specialist, as defined by Belbin's team roles.</p>
</div>
<div class="footnote">
<p><sup>[<a name="ftn.d0e201" href="#d0e201" id=
"ftn.d0e201">4</a>]</sup> Matt 5:37, unless you're a Babel builder,
in which case your 'yes' might be Oui and your 'no' Nein!</p>
</div>
<div class="footnote">
<p><sup>[<a name="ftn.d0e369" href="#d0e369" id=
"ftn.d0e369">5</a>]</sup> They'll complain behind his back, which
is a part of what drags the team into Quicksand. No one addresses
the problem head on. No one likes to rock the boat. It will take
more effort to confront him than anyone can be bothered to
invest.</p>
</div>
</div>
</p>
<p><strong>Notes:</strong>&nbsp;</p>
<p><em>More fields may be available via dynamicdata ..</em></p>
</div>
</channel>
</rss>
