    <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  :: Software development and the learning organisation</title>
        <link>https://members.accu.org/index.php/articles/365</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 + Overload Journal #54 - Apr 2003</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/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/c157/">54</a>
<br />

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

                    -                        <a href="https://members.accu.org/index.php/articles/c66+157/">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;Software development and the learning organisation</h1>
<p><strong>Author:</strong>&nbsp;</p>
<p>
<strong>Date:</strong> 02 April 2003 22:57:19 +01:00 or Wed, 02 April 2003 22:57:19 +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>
<div class="blockquote">
<blockquote class="blockquote">
<p>&quot;When you ask people about what it is like being part of a great
team what is most striking is the meaningfulness of the
experience.... Some spend the rest of their lives looking for ways
to recapture that spirit.&quot; Peter Senge, 1990.</p>
</blockquote>
</div>
<p>Think back over the last ten years, what have you learnt? What
have we, the programmer community, learnt? En masse we've learnt
C++, added the standard library, re-learnt ISO-C++, incorporated
meta-programming and picked up Java, C99 and C#. And don't forget
Python, JavaScript, Perl and other scripting languages that didn't
exist in 1993.</p>
<p>Then add the technologies we've invented and learned: HTML, CGI,
HTTP, ASP, JSP, XML, .... Or maybe you've avoided the Internet and
just moved through Windows 3.1, 95, NT, 2000 and XP, or one of a
myriad of Unix/Linux systems and versions.</p>
<p>The programmer community is constantly learning. If change is
the only constant then learning is the only real skill you need.
Indeed, how can we change if we can't learn?</p>
<p>Being a programmer you learn the technologies, but you also have
to learn your &quot;problem domain.&quot; That is, the field you are
developing applications for. Some are lucky enough to work on IT
technologies and develop e-mail systems, or databases, but most of
us work outside the technology domain, so, I've managed to become a
minor expert in train time-tabling, electricity markets, and
financial instruments.</p>
<p>All the time we are learning, our teams are learning and our
organisations are learning. So too are our customers who use our
products. This happens whether we intend it to or not. Authors like
Peter Senge and John Seely Brown argue that we can harness this
learning through &quot;Organisational Learning&quot;, so creating &quot;Learning
Organisations&quot; which deliver better businesses - and in our case
better software.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e33" id="d0e33"></a>How does
learning relate to software development?</h2>
</div>
<p>If we look at the software development process there are at
least four key learning activities:</p>
<div class="itemizedlist">
<ul type="disc">
<li>
<p>Learn new technology</p>
</li>
<li>
<p>Learn the problem domain</p>
</li>
<li>
<p>Apply our technology to the problem, the process of problem
solving is learning itself</p>
</li>
<li>
<p>Users learn to use our application and learn about their own
problem - which changes the problem domain</p>
</li>
</ul>
</div>
<p>Each one of these points reinforces the others: in our effort to
solve a problem we need to learn more about the problem, our
solution may use a technology that is new to us. When the user sees
the end product their mental model of the problem will change too.
They too will learn, through the software, and acquire new insights
into the task that may lead to changes to the software.</p>
<p>Learning is thus inherent at every stage of software
development. We can either choose to ignore it and muddle through
somehow, or to accept it and help improve the learning process.</p>
<p>Maybe your manager is having difficulty understanding this -
after all he hired you because you already know Java so why do you
need to learn some more? - so let's put it in business terms.</p>
<p>Although we can buy the fastest machines on the market, only
hire people with an IQ above 160 and expand our teams endlessly and
work to ISO-9001, we aren't actually doing anything our competitors
can't do. All we are doing is proving we can spend money. Worse
still, none of this guarantees we will actually develop good
software.</p>
<p>If instead of viewing software development as a problem task we
view it as a learning activity we get some new insights. First we
can recognise that most developers actually want to make customers
happy, what is more they like learning new things. It is just
conceivable that a firm which encourages its staff to learn will
find it easier to retain staff, hire new staff and at the same time
see the ability of existing people increase.</p>
<p>Now to be really radical, John Seely Brown and Paul Duguid
believe that learning increases our ability to innovate. If we can
learn better we will find we can produce new ideas and better
solutions.</p>
<p>Since software development is intrinsically a learning process
it doesn't seem that great a jump to claim recognising it as such,
removing barriers to learning, and promoting learning within our
group will improve our software. Once we do this we have something
that competitor firms can't copy because we will create our own
environment.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e65" id="d0e65"></a>What can we do
to promote learning?</h2>
</div>
<p>The one thing I'm not suggesting is that you go to your boss and
ask to be sent on a course. Brown and Duguid (1991) suggest there
are two types of learning:</p>
<div class="itemizedlist">
<ul type="disc">
<li>
<p>Canonical learning: going on courses, sitting in class rooms,
reading manuals</p>
</li>
<li>
<p>Non-canonical learning: learning by watching, doing, listening
and a whole bunch of other stuff.</p>
</li>
</ul>
</div>
<p>What is more they go on to suggest that the second form, is the
better. By learning non-canonically we are more flexible and
innovative. While canonical, 5-day, &pound;1500 courses have a use,
there are a lot more things we can do to promote learning in our
organisations.</p>
<p>Before we go further, it is worth pointing out that there are
two types of knowledge. The sort we're all familiar with: explicit
knowledge, which can be written down, codified. Go pick up your
copy of Stroustrup, you can learn C++ from that, its all explicit
knowledge.</p>
<p>The second form is subtler: tacit knowledge. This is more
difficult to write down and we normally learn it by some process of
osmosis. Much of this knowledge is embedded in our work environment
or our programmer culture. So, when you write <tt class=
"literal">delete this</tt> you aren't breaking any of the rules in
Stroustrup, it's legal, but all of a sudden you're in trouble
because your team doesn't do that. Of course, coming from a COM
shop you think <tt class="literal">delete this</tt> is perfectly
OK.</p>
<p>This is a simple example of tacit knowledge and the fact that I
can write it down maybe invalidates it but I'm sure you get the
idea. But how do we learn this stuff?</p>
<p>We get much of it through our society. That is, by watching
other programmers, reading their code, exchanging war stories.
Being programmers of course we like things to be black and white,
quantifiable, written down, codified, so I'm sorry to tell you it
ain't going to happen. In fact writing it down may make things
worse!</p>
<p>In part we have so much knowledge we can't write it all down.
Some of it is so obvious nobody thinks it worth writing down, and
some we can't even put into words - although we may be able to
mumble some grammatically incorrect phrases over a beer which stick
in someone's mind.</p>
<p>Tacit knowledge is the reason so many specifications are
inadequate. The stuff is a lot like jelly, you can't nail it down,
it isn't in the specification because it is hard to codify. Only
when you come to use the specification do you find gaps that are
hard to fill. Computer code is inherently explicit knowledge.</p>
<p>Acquiring and learning to use this knowledge can take time. We
need to be immersed in the society and let this stuff lap around
us. Eventually we may try and do something, and from this we learn
some more.</p>
<p>This brings us to another important point about this kind of
learning. We're going to make mistakes. There will be failures. We
need room to try ideas, see how they work, or don't work and add
that information to our mental models. If we don't make mistakes
part of our internal model will be missing.</p>
<p>For example, have you ever needed to write a piece of code and
thought &quot;I bet I could use templates for that? But I don't really
know enough about meta-programming, O, I'll give it a try.&quot; And
although it takes longer at the end of the week you have something
that works and - very importantly - you understand templates? Along
the way you probably made a million syntax errors, many compilation
errors and got umpteen unexpected results but in doing so they
completed your mental model.</p>
<p>Now the difficult bit for managers is to accept this
trial-and-error approach. We need it. And although it doesn't look
good when you're filling in the weekly timesheet the numbers are
hiding the learning that occurred during development.</p>
<p>So, we need to accept mistakes will happen, we need to accept
that risk. And maybe we need to do away with processes that
penalise taking risks and making mistakes. (Although you may not
want to take risks the night before release.)</p>
<p>By implication here there needs to be trust. If we don't trust
someone to do the job they won't feel able to make those mistakes.
They'll stick to the tried and tested solutions. We need to trust
them to know when it is OK to play and when they should focus.</p>
<p>Nor does learning finish with our own team. The QA team will be
learning how to use our releases, and the best way to test them.
And when we finish and throw the software over the wall, users will
start their learning.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e111" id="d0e111"></a>What should
we not do?</h2>
</div>
<p>Even those who have worked in adversarial, deadline driven
environments have learned. The first thing we need to stop doing is
denying that learning happens. Brown and Duguid point out that when
managers deny that learning is occurring two things happen:</p>
<div class="itemizedlist">
<ul type="disc">
<li>
<p>Individuals feel undervalued, managers don't recognise the role
they play</p>
</li>
<li>
<p>Managers think their systems are working, &quot;We sent them on a
Java course and now they all write quality Java&quot; when in fact
everyone is helping everyone else.</p>
</li>
</ul>
</div>
<p>These effects describe &quot;Plug compatible programmer&quot; syndrome.
Management feel, or suggest by their actions, that they can &quot;just
hire another C++ contractor&quot; to plug a programmer shaped gap. After
all, all C++ programmers are compatible. Meanwhile, developers know
you need more than just C++ knowledge to work on the system, so
they feel their skills aren't recognised by management and
leave.</p>
<p>Brown and Duguid also suggest that seeking closure can be
damaging too. By seeking closure, say by writing up all that is
known about a given application, complete with UML diagrams, we
actually inhibit future change.</p>
<p>I once worked on a team who worked to ISO-9001 standards. You
weren't supposed to change the code without changing the
documentation. Not only did this increase the work load but it made
you reluctant to change anything. Increasingly code and
documentation said different things and you had to talk to people,
or step through the code with the debugger to see what was
happening, that is, exactly the situation the standard was meant to
prevent!</p>
<p>The need for closure made things worse. This happens all the
time with documentation, whether it is program documentation or
specifications. The emphasis on closure is one of the fundamental
reasons waterfall methodologies are so troublesome.</p>
<p>Closure prevents change and it prevents further learning, but
change and learning will happen. This doesn't only happen with us,
the developers, it happens with our customers. A customer signs off
on a spec, we develop the UI, show it to the customer who now wants
to change it. In seeing the UI the customer has learnt something.
Customer and developer are both engaged in a joint learning
process.</p>
<p>This search for closure manifests itself in many forms: product
contract, specification, program documentation, working procedures,
code standards and perhaps the worst of all: code itself!</p>
<p>Some degree of closure is always necessary, otherwise we would
never make a release. However premature closure limits learning
opportunities and development. We need to strike a balance.</p>
<p>Likewise, we need to strike a balance on how much risk we
accept. One organisation I know introduced procedures asking for
every change to be estimated in terms of lines of code. Developers
would naturally over estimate but it also made them more risk
averse, there was clear message: management wanted change and risk
limited. Thus they limited learning opportunities - specifically
code refactoring.</p>
<p>Blunt measurements such as lines of code, and timesheets asking
what you do with every half-hour in the week also send another
message: you aren't trusted. These are tools of managers who
believe that software development is an industrial process.
&quot;Scientific management&quot; is at odds with the concept of learning
because it doesn't allow for learning and change. It assumes that
one person knows best, the manager, the designer, or the architect
has looked at the problem and found the one true solution.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e141" id="d0e141"></a>Practical
things to do</h2>
</div>
<p>Organisational learning isn't a silver bullet, you can't go out
and buy it from Rational or Accenture. It is a concept. One of the
ways it manifests itself as a <span class="emphasis"><em>Learning
Organisation</em></span>. You have to build this for yourself. The
good news is that it need not entail a lot of up front expenditure,
no expensive courses from QA or Learning Tree.</p>
<p>Much of the change is about mindset: accept mistakes will
happen, accept some knowledge is tacit, accepting change, trusting
people and leaning to live with open issues.</p>
<p>Managers face a difficult position. They can't force anyone to
learn, nor should they. However, there are some practical things
they can do to encourage the process. These have both an obvious
role to play and a less obvious: by arranging these events and
making time for them there is a message that &quot;it is good to
learn.&quot;</p>
<p>Whatever your position you need to start with yourself. For an
organisation to learn the teams making up the firm must learn, for
teams to learn individuals must learn. And we must learn to
learn.</p>
<p>If you want to start encouraging others here are a few things
you could try:</p>
<div class="itemizedlist">
<ul type="disc">
<li>
<p>Set up an intranet and encourage everyone to produce their own
web pages, even if these aren't directly work related.</p>
</li>
<li>
<p>Keep documentation on the intranet in an easy to access format,
e.g. if your developers are using Solaris don't put the documents
in Word format.</p>
</li>
<li>
<p>If your documentation must live in a source control system then
arrange for it to be published to the intranet with the batch
build.</p>
</li>
<li>
<p>Allow an hour or two a month for &quot;tech talks&quot; - get developers
to present work they have done on the project or outside the
project.</p>
</li>
<li>
<p>Encourage debate - friction can be a good thing.</p>
</li>
<li>
<p>Organise a book study group.</p>
</li>
<li>
<p>Make your procedures fit your working environment and be
prepared to change them.</p>
</li>
<li>
<p>Hold end of project reviews, Alistair Cockburn (2002) even
suggest such reviews should be held during the project - why wait
to the next project to improve things?</p>
</li>
</ul>
</div>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e182" id="d0e182"></a>Finally</h2>
</div>
<p>I've only scratched surface of this subject, I'm still learning
a lot about it myself but I think it has important ramifications
for the software development community.</p>
<p>Unfortunately these ideas really require support from management
before they can really deliver benefits, and I know most Overload
readers are practising programmers who regard managers as part of
the problem not the solution. That's why I spent some time
advocating organisational learning in language they may
understand.</p>
<p>Still, there is a lot we as a community can learn here and most
of it has direct applicability to software development on a
day-today basis.</p>
</div>
<div class="bibliography">
<div class="titlepage">
<h2><a name="d0e191" id="d0e191"></a>Bibliography and
further reading</h2>
</div>
<div class="bibliomixed">
<p class="bibliomixed"><span class="bibliomisc">John Seely Brown
and Paul Duguid, 1991: &quot;Organizational learning and
communities-of-practice: Toward a unified view of working,
learning, and innovation&quot;, <span class="citetitle"><i class=
"citetitle">Organisational Science</i></span>, Vol. 2, No. 1,
February 1991, also <a href=
"http://www2.parc.com/ops/members/brown/papers/orglearning.html"
target=
"_top">http://www2.parc.com/ops/members/brown/papers/orglearning.html</a>.
I've drawn extensively on this article, although it is quite long
(18 pages) it is well worth a read.</span></p>
</div>
<div class="bibliomixed">
<p class="bibliomixed"><span class="bibliomisc">Brown, Collins
&amp; Duguid: <span class="citetitle"><i class="citetitle">Situated
Cognition and the Culture of Learning</i></span> - <a href=
"http://www.ilt.columbia.edu/ilt/papers/JohnBrown.html" target=
"_top">http://www.ilt.columbia.edu/ilt/papers/JohnBrown.html</a>
More psychological than the first but still interesting. Brown is a
PARC researcher and has several interesting papers at <a href=
"http://www2.parc.com/ops/members/brown/index.html" target=
"_top">http://www2.parc.com/ops/members/brown/index.html</a> -
including some on software design.</span></p>
</div>
<div class="bibliomixed">
<p class="bibliomixed"><span class="bibliomisc">Cockburn, A., 2002:
<span class="citetitle"><i class="citetitle">Agile Software
Development</i></span>, Addison- Wesley, 2002 I haven't heard
anyone from the Agile methodologies movement specifically link them
with Learning Organisations but I instinctively feel they are.
(Hopefully I'll explore this some more in future.) In the meantime
you'll find terms such as &quot;courage&quot; and &quot;coaching&quot; used in both
sets of literature, and similar discussions on the importance of
people, teams and listening.</span></p>
</div>
<div class="bibliomixed">
<p class="bibliomixed"><span class="bibliomisc">Nonaka, Ikujiro, et
al., 1995: <span class="citetitle"><i class="citetitle">The
Knowledge-Creating Company: How Japanese Companies Create the
Dynamics of Innovation</i></span>, Oxford University Press, 1995
Nonaka distinguishes &quot;Knowledge Creation&quot; from organisational
learning but the two are complementary. As the title suggests, this
book concentrates on the way Japanese companies exploit knowledge
creation. For a book summary see: <a href=
"http://www.stuart.iit.edu/courses/mgt581/%20filespdf/nonaka.pdf"
target="_top">http://www.stuart.iit.edu/courses/mgt581/
filespdf/nonaka.pdf</a></span></p>
</div>
<div class="bibliomixed">
<p class="bibliomixed">Senge, P.M. 1990: <span class=
"citetitle"><i class="citetitle">The Fifth Discipline</i></span>,
Random House, 1990 Easy to read, authority introduction to &quot;The Art
and Practice of the Learning Organisation.&quot; To a hardened software
engineer this may look like a touchy-feely meander. Don't let this
put you off, you can't get the most from people if you stick with a
binary view.</p>
</div>
</div>
</p>
<p><strong>Notes:</strong>&nbsp;</p>
<p><em>More fields may be available via dynamicdata ..</em></p>
</div>
</channel>
</rss>
