    <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</title>
        <link>https://members.accu.org/index.php/articles/1013</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 12, #3 - May 2000</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/c126/">123</a>
<br />

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

                    -                        <a href="https://members.accu.org/index.php/articles/c182+126/">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</h1>
<p><strong>Author:</strong>&nbsp;</p>
<p>
<strong>Date:</strong> 05 May 2000 13:15:36 +01:00 or Fri, 05 May 2000 13:15:36 +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="d0e22" id="d0e22"></a></h2>
</div>
<p>It's Saturday night and you are settling down with a tub of
popcorn and a couple of drinks to watch a video. Maybe you've
managed to persuade some unsuspecting non-computer nerd to watch it
with you (you didn't tell them it was Star Wars, did you?)</p>
<p>The production that you're watching is undoubtedly the result of
an enormous amount of effort by more than one dedicated team of
people, all working together to create the final movie. Although
you cannot necessarily see it, there have been many, many man-hours
(man-days, and 'mythical' man-months) put into the product.</p>
<p>Although when you see some films do you wonder if they should
have bothered.</p>
<p>Compare that vast coordination of effort to how we write
software. We may like to think that given enough time we could
create an entire 'professional' software package. But if you were
to try to create a movie on your own the result would be somewhat
poor (to be polite). The 'Blair Witch Project's of this world are
few and far between; and even though that film involved very few
people to create, to get the final product to your video machine
took marketing, distribution, and more.</p>
<p>In most professions, good products are almost always the result
of good teamwork.</p>
<p>In this column we will examine teamwork as it applies to us, as
programmers. What makes for good teamwork? How can we be more
effective in our teams?</p>
<p>Over the years there have been many different types of software
teams working together to produce software products. They range
from the highly formal teams (suits in offices) with a rigid
structure and process to the 'new frontier' work of the open source
movement, as characterised by the Linux kernel effort where anyone
can contribute to the software.</p>
<p>Both methods of working have had great successes. Both have had
great failures. The Linux kernel and the IBM OS/360 are notable
successes for each camp. The Ariane 5 is a legendary flop and
Mozilla is an interesting 'open source' flop - when Netscape open
sourced its code it was expected to result in rapid development and
improvement. It is fair to say that the Mozilla development has
been somewhat disappointing compared to other open source
projects.</p>
<p>Being a good software engineer is more than just being a good
programmer. It is not enough to be able to write code that computes
'pi' to some ridiculous accuracy in less than ten lines of C. There
are many other skills required. And one of them is teamworking.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e42" id="d0e42"></a>Stretching the
metaphor</h2>
</div>
<p>There are a number of different metaphors that can be used to
describe our teamwork. The problem with metaphors is that they are
only useful up to a point. Software engineering has its own
problems and challenges. Chemical engineering is different to civil
engineering, which is different to making a movie, which is
different to writing software.</p>
<p>One metaphor that we often employ in this context is that of
building. In as far as it goes it is a useful metaphor. After all,
we 'construct' the software, according to a plan, from different
components (some of which we build ourselves, others which we
buy/bring in).</p>
<p>So let us have a look at the building metaphor in a bit more
depth and see what it can tell us about our own profession.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e51" id="d0e51"></a>You need a
team</h2>
</div>
<p>Maybe you could build a small outhouse (and plumb a toilet in
there if you are particularly good) on your own initiative, but you
will be working for a very long time before you build an
out-of-town shopping centre.</p>
<p>It is not hard to write a specific command line utility, or a
simple software package (say a drawing package or some such) and
many people have done so. However to construct something of the
nature of today's enterprise-level highly complex software super
structures takes more than an individual has to give.</p>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e58" id="d0e58"></a>The team has a
goal</h3>
</div>
<p>The team is working together to finish the construction work.
Not only do they have the target in sight, they must reach it
within certain time constraints. It is part of the building work
specification that it will take a certain amount of time to
create.</p>
<p>There is a frighteningly strong parallel with 'building'
software here. How many large constructions take longer than
expected to complete? How many programs are delivered on time?</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e65" id="d0e65"></a>Someone
commissions the work, for a purpose</h3>
</div>
<p>Someone (or rather, some company) will have contracted the
builders for the work. They do this because the builders are
skilled at building where they are not. The construction company
specialises in construction. Their reputation is based on the
quality of their building work.</p>
<p>Once the building is complete there are users who will occupy it
and use its facilities. The building has been created to serve a
specific need.</p>
<p>All software is written for users for a purpose. In many cases
the 'customer' for our software may be another part of the same
company (many commercial banks have huge software teams working on
their electronic infrastructure). However, a particular development
team is commissioned to do a set piece of work for a set
purpose.</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e74" id="d0e74"></a>Each team member
makes a contribution</h3>
</div>
<p>There are many people involved in the building's construction,
and each one's work is important. The building would not be
completed if they did not do their particular piece of work.</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e79" id="d0e79"></a>Each team member
does something different</h3>
</div>
<p>There are different roles within the team. This is a natural
thing and boosts productivity (as first observed by the Scottish
economist Adam Smith). Each member of the team is skilled in a
particular field. They each play a different part in the creation
of the final product. They have each been trained to do their task,
and their skills improve with experience.</p>
<p>There are the architects who envision, design and specify the
building being constructed. They need to write detailed plans to
convey their vision to those who are going to implement it.</p>
<p>There are the builders, the plumbers, the electricians who do
the building work. There may be many people working in these roles
(depending on the size of the construction) organised by a
manager.</p>
<p>In software we too have architects, whose blueprints are the
software specifications. Programmers implement these specifications
- paralleling the builders, plumbers and so on.</p>
<p>If a builder has architectural skills, it is not appropriate for
him to ignore the plans and rearchitect his allotted piece of work.
That is more than incorrect practice, it is downright dangerous.
His work will not fit in to the overall building plan. When someone
comes back to maintain the building, it does not match the
architect's plans. The rearchitected work is unlikely to fit
properly with adjoining bits of work - this may lead to structural
weakness. The building will lack the overall consistency of the
single architect's vision.</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e92" id="d0e92"></a>There are team
members with responsibility</h3>
</div>
<p>The foreman is the people manager. He looks after each person's
role, and ensures that the work is progressing to schedule. He,
along with other managers take responsibility for the work being
undertaken - both in terms of quality and timely delivery.</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e97" id="d0e97"></a>They use
appropriate materials which must be accounted for</h3>
</div>
<p>Building work cannot proceed without the necessary raw
materials. This is in addition to the requisite amount of time and
labour. Without the building supplies, the building simply will not
be possible - it's hard to build a wall without bricks.</p>
<p>Without the electricity, computers, test-equipment, bought-in
components and so on, our work would not be possible.</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e104" id="d0e104"></a>They use
appropriate tools for the job</h3>
</div>
<p>The hods and JCBs of our trade are our compilers, our IDEs and
our software libraries.</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e109" id="d0e109"></a>What comes out
is dependent on what goes in</h3>
</div>
<p>If each team member works harder and tries to produce their work
to a higher standard, exactly to specification, then the overall
building will be of a higher quality. Each team member needs to
contribute to the best of their ability for a truly successful
outcome. Good software depends on good software engineers skilled
at their tasks. A programmer who writes non-future proof code will
diminish the overall quality of the end product, even if he is only
working on a small part of it.</p>
<p>But, of course buildings are different from programs. (And you
do not see many programmers revealing their 'bum cleavage', do you?
If you know otherwise I do not want to know about it.)</p>
<p>Buildings cannot really be developed in an iterative and
incremental manner. Any change to a building's specification will
result in costly demolition prior to rebuilding. In our world of
'pure thought stuff' we can tear down and rebuild with very little
material cost (but with the costs of time and labour). In software
we are better able to build abstract interfaces between certain
software blocks. The engineering discipline is different, but that
does not mean we cannot learn from the parallels with other
professions.</p>
</div>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e118" id="d0e118"></a>Our
teams</h2>
</div>
<p>So what are the kind of teams that we work in? For a typical
software engineer there will be participation in a number of levels
of teams, each with different dynamics and requiring different
levels of contribution.</p>
<p>Say you are working on a component of a larger project. The
component may be written by just yourself, or a team of a few
people: team one. The component will fit into a wider product. All
the people involved with this product (maybe some hardware, some
software, and other non-engineering roles such as marketing) form
team two. You are also part of a company that may be working on
many different products simultaneously. Team three.</p>
<p>Although the company is a team it is really not unusual for it
to be layered with a 'them and us' mentality between departments
and groups. Is this good? Is it conductive to good product created
on time and within budget?</p>
<p>A company's management team 'dictate' the strategy which affects
which products the engineering teams produce. If this vision is not
shared and justified to the company members it will not feel like
the company's vision, just something management are enforcing. This
kind of atmosphere can lead to a build up of resentment between
parts of an organisation - therefore a drop in effectiveness in
working as a cohesive team.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e129" id="d0e129"></a>Team working
skills</h2>
</div>
<p>So what skills do we need to be effective team workers? What
does it mean to be a good team worker?</p>
<p>Teamwork is a skill acquired over time, no one is born with what
it takes to be successful in a winning team. However, it is clear
that there are some people who are more adept at it than
others.</p>
<p>Different skills are required from each different role in the
team. However, presented below are a list of skills that each
member really should have.</p>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e138" id=
"d0e138"></a>Communication</h3>
</div>
<p>Teamwork is dead without communication. The parts cannot move as
a whole without communication. How can the goal and vision be
shared without communication.</p>
<p>Projects really do fail because of a lack of communication.</p>
<p>Inter-team communication occurs in several ways: conversations
between individual engineers, phone calls, meetings, written
specifications, email correspondence. Each has a particular dynamic
and use.</p>
<p>Communication should involve (or at the very least be visible
to) all relevant parties. It should be sufficiently detailed, but
not consume too much time. It should be performed in a suitable
medium - for example the recording of design decisions should be in
a specification, not by word of mouth.</p>
<p>In addition to inter-team communication there is also the
important aspect of communication between teams. The classic
exemplary scenario of bad communication in practice is between a
company's marketing department and its engineers. If marketing do
not ask the engineers what is possible they will sell products that
the company cannot make. This kind of problem is cyclical: once it
has occurred once, the two teams are less likely to talk to each
other (due to resentment) and it will just happen again and
again.</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e151" id="d0e151"></a>Humility</h3>
</div>
<p>This is an essential characteristic, and often the most lacking
in our profession.</p>
<p>You cannot want to hoard all the work for yourself - it is just
not possible for one person to do everything. You have to be
willing to let another team member contribute - even if it is
something you want to do.</p>
<p>Humility also implies actually wanting to make your contribution
to serve the team, not slacking off to let others do all the work.
You should not only listen to the opinions of others, but also
value them. Yours is not the only solution. You do not necessarily
know the only, or the best way to solve a problem.</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e160" id="d0e160"></a>Dealing with
conflict</h3>
</div>
<p>We have to be realistic: some people cannot help grating against
each other. In this kind of situation, we have to be mature and
responsible in our attitudes, and learn to resolve potential
conflict situations. Conflict and animosity severely degrade the
performance of a team.</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e165" id="d0e165"></a>Learning</h3>
</div>
<p>This does not just mean learning new technical skills, but
learning to work as a team. It is not always a God-given gift.</p>
<p>Ask yourself what can you gain from your peers? Learn from what
they know, learn from what they are like, how they react. Learn to
communicate with them. Seek criticism from them at all levels, from
the formal code review to their passing opinion on something your
thinking about.</p>
<p>Good teamwork builds the project and also builds the team. Part
of building up the team is for each member to be learning as they
work. For this to happen each member should seek to share their
skills, where appropriate.</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e174" id=
"d0e174"></a>Adaptability</h3>
</div>
<p>This is tied closely with learning.</p>
<p>If the team has a need no one can currently fill and doesn't
have the ability to bring in an outside resource a solution needs
to be found. Adaptable people can learn the new skills quickly to
be able to fill the need and serve the team. It can also be
beneficial for them to learn the new skill.</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e181" id="d0e181"></a>Know your
limitations</h3>
</div>
<p>If you commit yourself to perform a bit of work that you know
you cannot do, or later find out that you do not have the skills to
complete (and you cannot realistically learn them in the given time
scales) then you should make your manager aware of this as soon as
possible. Otherwise, you will fail to deliver your piece of the
project and the whole team will suffer as a consequence.</p>
<p>Many people see admitting that they cannot do something as a
weakness, but it is not. It is better to admit your limitations
than to be a point of weakness in the team. A good manager should
provide some extra resource to help you do the work, and along the
way you will learn the new skills that you previously lacked.</p>
</div>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e188" id=
"d0e188"></a>Characterising good teamwork</h2>
</div>
<p>We have investigated what skills are required to be a good team
player. But what overall factors make for good teamwork? There are
a number of other influences that will radically affect the
effectiveness of the team at working together, and the quality of
the work produced by the team as a whole.</p>
<p>These include:</p>
<div class="itemizedlist">
<ul type="disc">
<li>
<p>The correct spread of people with the correct range of
appropriate skills.</p>
</li>
<li>
<p>Team members with a range of experience, some able to learn from
others (a whole team of newbies will clearly be doomed from the
start).</p>
</li>
<li>
<p>A clear and realistic goal (even better if it is an 'exciting'
project that the team members really want to see completed).</p>
</li>
<li>
<p>Motivation (whether financial or emotional).</p>
</li>
<li>
<p>Suitable specifications available as soon as possible for each
member to work to that will ensure individual pieces of work fit
together.</p>
</li>
<li>
<p>A good manager.</p>
</li>
<li>
<p>A small a team as realistically possible, but no smaller</p>
</li>
<li>
<p>A clear software engineering process for the team to follow.</p>
</li>
<li>
<p>Complimentary team member personality types - to success the
team needs encouragers not people who will drag morale down.</p>
</li>
<li>
<p>Backing from the company, not hindrance.</p>
</li>
<li>
<p>Luck.</p>
</li>
</ul>
</div>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e229" id=
"d0e229"></a>Conclusion</h2>
</div>
<p>The whole is greater than the sum of it's parts, or so the
saying goes. This is, of course, only true if the parts are each
working well. If each part is failing then the whole will fail.</p>
<p>Good teamwork comes from more than just a well defined process
or a fixed structure. Good work stems from good individuals. A
professional programmer has to be able to work in a team. As well
as being technically skilled they must be able to create a
component that will fit as a piece into the larger jigsaw. This
means being able to communicate and work with others. This means
understanding your role, and carrying it out appropriately, working
to the best of your ability. It means looking out for other team
members, being team-focused, not self-focused.</p>
<p>Maybe you would like to consider your past experiences of team
work. Which do you think went well? Which did not? Can you
characterise the reasons why or why not? Maybe you would like to
share them with the C Vu readership.</p>
</div>
</p>
<p><strong>Notes:</strong>&nbsp;</p>
<p><em>More fields may be available via dynamicdata ..</em></p>
</div>
</channel>
</rss>
