<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>let x=x &#187; professional practice</title>
	<atom:link href="http://www.crazymcphee.net/x/category/tech/professional-practice/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.crazymcphee.net/x</link>
	<description>programming idiom and methodology</description>
	<lastBuildDate>Tue, 13 Jul 2010 21:56:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>That&#8217;s the just the way it&#8217;s done round here</title>
		<link>http://www.crazymcphee.net/x/2010/07/14/thats-the-just-the-way-its-done-round-here/</link>
		<comments>http://www.crazymcphee.net/x/2010/07/14/thats-the-just-the-way-its-done-round-here/#comments</comments>
		<pubDate>Tue, 13 Jul 2010 21:56:44 +0000</pubDate>
		<dc:creator>Scot Mcphee</dc:creator>
				<category><![CDATA[business]]></category>
		<category><![CDATA[professional practice]]></category>
		<category><![CDATA[change]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[profession]]></category>

		<guid isPermaLink="false">http://www.crazymcphee.net/x/?p=576</guid>
		<description><![CDATA[Many of us hear this phrase in our workplace. When you hear it, what you&#8217;re really being told is that the company is afflicted with one or more of the following: is afraid of change not interested in improvement has a rigid top-down process development style doesn&#8217;t care what you think I think the greatest [...]]]></description>
			<content:encoded><![CDATA[<p>Many of us hear this phrase in our workplace. When you hear it, what you&#8217;re really being told is that the company is afflicted with one or more of the following:</p>
<ul>
<li>is afraid of change</li>
<li>not interested in improvement</li>
<li>has a rigid top-down process development style</li>
<li>doesn&#8217;t care what you think</li>
</ul>
<p>I think the greatest problem is the organisation basically doesn&#8217;t trust it&#8217;s employees to know what they are doing. It doesn&#8217;t matter that you may know something better or that you care about improving the company&#8217;s performance.  I find when I hear this sort of phrase from in companies I&#8217;m consulting at, you soon discover all manner of other issues, idiotic decision making processes, strange convoluted internal processes, inflexible management styles, complete reliance on reporting and long meetings for project visibility, and completely rigid thinking.</p>
<p>What the upshot of all this is, is usually a company that then is left with workers that accept their situation rather then improving it. Ultimately, when such companies confront the reality of their situation and require change to avoid failure, they fail because their employees don&#8217;t want change &#8211; they&#8217;ve had it ground down out of them over the years.</p>
<p>Stasis as a corporate strategy only works for so long.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crazymcphee.net/x/2010/07/14/thats-the-just-the-way-its-done-round-here/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Modern management theory, explained</title>
		<link>http://www.crazymcphee.net/x/2010/06/26/modern-management-theory-explained/</link>
		<comments>http://www.crazymcphee.net/x/2010/06/26/modern-management-theory-explained/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 14:30:13 +0000</pubDate>
		<dc:creator>Scot Mcphee</dc:creator>
				<category><![CDATA[business]]></category>
		<category><![CDATA[professional practice]]></category>
		<category><![CDATA[technical]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[poorly attempted humour]]></category>
		<category><![CDATA[profession]]></category>

		<guid isPermaLink="false">http://www.crazymcphee.net/x/?p=561</guid>
		<description><![CDATA[Oh &#8230; now I get it, courtesy of Errol Morris, who made the Oscar winning documentary Fog Of War, among many other excellent films, who explains in this New York Times interview with David Dunning (part 1): DAVID DUNNING: Well, my specialty is decision-making. How well do people make the decisions they have to make [...]]]></description>
			<content:encoded><![CDATA[<p>Oh &#8230; <em>now</em> I get it, courtesy of <a href="http://opinionator.blogs.nytimes.com/category/errol-morris/">Errol Morris</a>, who made the Oscar winning documentary Fog Of War, among many other excellent films, who explains in <a href="http://opinionator.blogs.nytimes.com/2010/06/20/the-anosognosics-dilemma-1/">this New York Times interview with David Dunning</a> (part 1):</p>
<blockquote><p>DAVID DUNNING:  Well, my specialty is decision-making.  How well do people make the decisions they have to make in life?  And I became very interested in judgments about the self, simply because, well, people tend to say things, whether it be in everyday life or in the lab, that just couldn’t possibly be true.  And I became fascinated with that.  Not just that people said these positive things about themselves, but they really, really believed them.  Which led to my observation: if you’re incompetent, you can’t know you’re incompetent.</p>
<p>ERROL MORRIS:  Why not?</p>
<p>DAVID DUNNING:  If you knew it, you’d say, “Wait a minute.  The decision I just made does not make much sense.  I had better go and get some independent advice.”   But when you’re incompetent, the skills you need to produce a right answer are exactly the skills you need to recognize what a right answer is.  In logical reasoning, in parenting, in management, problem solving, the skills you use to produce the right answer are exactly the same skills you use to evaluate the answer.  And so we went on to see if this could possibly be true in many other areas.  And to our astonishment, it was very, very true.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.crazymcphee.net/x/2010/06/26/modern-management-theory-explained/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Throw it away and write another one</title>
		<link>http://www.crazymcphee.net/x/2010/05/30/throw-it-away-and-write-another-one/</link>
		<comments>http://www.crazymcphee.net/x/2010/05/30/throw-it-away-and-write-another-one/#comments</comments>
		<pubDate>Sun, 30 May 2010 08:47:10 +0000</pubDate>
		<dc:creator>Scot Mcphee</dc:creator>
				<category><![CDATA[architecture]]></category>
		<category><![CDATA[professional practice]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[technical]]></category>
		<category><![CDATA[tools and techniques]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[ANTLR]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[craftsmanship]]></category>
		<category><![CDATA[emergent design]]></category>
		<category><![CDATA[profession]]></category>
		<category><![CDATA[refactor]]></category>
		<category><![CDATA[rewrite]]></category>
		<category><![CDATA[test driven design]]></category>

		<guid isPermaLink="false">http://www.crazymcphee.net/x/?p=557</guid>
		<description><![CDATA[Most developers familiar with agile methods are familiar with the idea of the spike. A spike is a time-boxed task that concentrates on clarifying the unknowns in your project. Usually these are technological (&#8220;can this be done with this technology?&#8221;) but they are also sometimes in the area of the business domain (&#8220;is this a [...]]]></description>
			<content:encoded><![CDATA[<p>Most developers familiar with agile methods are familiar with the idea of the <em>spike</em>. A spike is a time-boxed task that concentrates on clarifying the unknowns in your project. Usually these are technological (&#8220;can this be done with this technology?&#8221;) but they are also sometimes in the area of the business domain (&#8220;is this a good idea?&#8221;) too. One key idea is that the at the end of the spike, it is thrown away. It&#8217;s not supposed to be used as production code, it&#8217;s just supposed to answer some questions about the project, to validate or invalidate particular approaches to a problem, to provide further clarity around unknowns, to explore risk, to help with estimation, etc. I think this can be a useful general idea when dealing with technology, even in a &#8220;production&#8221; context.</p>
<p>Recently I was learning <a href="http://www.antlr.org">ANTLR</a>, trying to decide whether this was a right technology to pursue a particular project which involved parsing a preexisting message format. After a week of a spike, we decided that it was worth pursuing and started on earnest on the grammar for our project. However a week into this process, I had an epiphany &#8230; I was doing some things wrong with the ANTLR grammar which were now slowing progress in adding the new characteristics it needed to be complete. Many developers know this feeling; the features of my grammar that I had built over the first week were naive and now hampering it from expanding into the new requirements. I took it on myself to kill the entire grammar and start again. It took less than a day and half to replicate that week&#8217;s worth of work (i.e. pass the test suite which had built up around it).  I&#8217;ve done this before; scrap the first attempt at building a domain and try again. Here my domain was the same (it was after all defined in both a standards specification and in the many hundreds of thousands of sample messages we captured from an existing system), but its implementation needed refinement.</p>
<p>So I think that the rule about throwing away spikes can in fact be made a general axiom of programming:</p>
<blockquote><p>When you are learning a new technology, make sure you  throw away the first thing you build that works &#8211; to avoid accumulating  your mistakes.</p></blockquote>
<p>Thanks to <a href="http://www.twasink.net/">Robert</a> for the important qualifier &#8220;that works&#8221;. <img src='http://www.crazymcphee.net/x/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>N.B. my views about <a title="The rewrite will be ready shortly" href="http://www.crazymcphee.net/x/2009/02/01/the-rewrite-will-be-ready-shortly/">system  rewrites</a> have not changed regardless.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crazymcphee.net/x/2010/05/30/throw-it-away-and-write-another-one/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New software, old process, big mistake</title>
		<link>http://www.crazymcphee.net/x/2010/03/06/new-software-old-process/</link>
		<comments>http://www.crazymcphee.net/x/2010/03/06/new-software-old-process/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 07:37:54 +0000</pubDate>
		<dc:creator>Scot Mcphee</dc:creator>
				<category><![CDATA[architecture]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[professional practice]]></category>
		<category><![CDATA[business process]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[profession]]></category>
		<category><![CDATA[transformation]]></category>

		<guid isPermaLink="false">http://www.crazymcphee.net/x/?p=526</guid>
		<description><![CDATA[Its very common for software developers to be asked to build some software that is a straight port of an old software package, or to faithfully model (i.e. completely identical to) an existing process that the customer has. This is a huge mistake &#8211; try to avoid these projects. I hold that if the customer [...]]]></description>
			<content:encoded><![CDATA[<p>Its very common for software developers to be asked to build some software that is a straight port of an old software package, or to faithfully model (i.e. completely identical to) an existing process that the customer has. This is a huge mistake &#8211; try to avoid these projects. I hold that if the customer wants software, either custom developed or &#8220;off the shelf&#8221; purchased from a vendor, they are <em>already</em> changing their business model (aka their &#8220;process&#8221;). It&#8217;s the worst possible to thing to build or buy software and just model what is already done (perhaps it is actually impossible). As an senior developer or architect, my riposte to these requests is always &#8220;well don&#8217;t spend any money and just do whatever it is you do now&#8221;.</p>
<p>I don&#8217;t hold that software makes an existing business process &#8220;efficient&#8221; at all. Rather I think software makes possible a new process, which should be more &#8220;efficient&#8221; in terms of money gained less dollars spent &#8211; but its a <em>new</em> process, not the old one. In effect, new software creates new business opportunities. New software will only make an existing, unchanged process, <em>less</em> efficient, if a new business process is not designed along with the new software. If the business just wants new software without changing &#8220;what they do&#8221; they are wasting their money, IMHO.</p>
<p>Of course there is the possibility (probability?) the business doesn&#8217;t actually understand what it is they <em>actually do</em> anyway. This is not an uncommon position for many businesses that are happy to cruise along in neutral making some marginal profit on some marginal activity. Usually these businesses are also found to be beating their workers with sticks (usually only metaphorical ones unless they &#8216;offshore&#8217; their operation to countries where killing your workers is just a part of &#8216;Business as Usual&#8217;. Typically they hold that marginal process can be made &#8216;better&#8217; simply with just more exhortation (or threats) to greater and greater efforts at a totally demoralized (if not actively hostile) workforce, but I suspect that&#8217;s a story for another day!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crazymcphee.net/x/2010/03/06/new-software-old-process/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Mistakes you can make with SOA</title>
		<link>http://www.crazymcphee.net/x/2009/11/03/mistakes-you-can-make-with-soa/</link>
		<comments>http://www.crazymcphee.net/x/2009/11/03/mistakes-you-can-make-with-soa/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 07:49:45 +0000</pubDate>
		<dc:creator>Scot Mcphee</dc:creator>
				<category><![CDATA[professional practice]]></category>
		<category><![CDATA[rants]]></category>
		<category><![CDATA[technical]]></category>
		<category><![CDATA[tools and techniques]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[profession]]></category>
		<category><![CDATA[soa]]></category>
		<category><![CDATA[test driven design]]></category>
		<category><![CDATA[wizards considered harmful]]></category>

		<guid isPermaLink="false">http://www.crazymcphee.net/x/?p=494</guid>
		<description><![CDATA[Bob Lewis has a great column this month, &#8220;What if SOA is a mistake&#8220;? His penultimate paragraph asks: Lost in the shuffle is something basic: Programmer productivity. Friends who are hands-on with such matters tell me the available SOA development environments are less than half as productive as products like PowerBuilder and Delphi were, back [...]]]></description>
			<content:encoded><![CDATA[<p>Bob Lewis has a great column this month, &#8220;<a href="http://www.weblog.keepthejointrunning.com/wordpress/?p=3174" target="_blank">What if SOA is a mistake</a>&#8220;? His penultimate paragraph asks:</p>
<blockquote><p>Lost in the shuffle is something basic: Programmer productivity. Friends who are hands-on with such matters tell me the available SOA development environments are less than half as productive as products like PowerBuilder and Delphi were, back when they were viable.</p></blockquote>
<p>Putting aside the Powerbuilder and Delphi love for just one minute, this is something I&#8217;ve been banging on about now for the past year &#8230; the programming tooling that is foisted onto programmers by the choice of the deployment architecture. It&#8217;s just all <em>wrong</em>.</p>
<p>In my view, what makes a programming language really productive is <em>notepad</em>. Or <em>vi</em>, or <em>emacs, </em>or<em> gvim, </em>or<em> textmate</em>, take your pick. What I mean is &#8230; <em>the programming language has to be able to be programmed with a simple editor</em>. Yes, an advanced IDE will make things more productive, but the basics must also apply. Now a lot of SOA environments are simply <em>not programmable</em> without the specific IDE tied to it. Even worse, the IDEs are often completely custom jobs that require a developer to be re-trained &#8230; losing <em>years and years</em> of productive speed with muscle-memory style automatic ability to navigate the programmer&#8217;s usual editing tool. Seriously. This stuff is whack. A program language or an environment needs to be IDE-neutral. If you got a plumber around, would you insist that he only use the tools you supply from your home handyman kit? Or would you expect the plumber to have mastered a set of his own tools already? And making matters worse, it&#8217;s rarely <em>programmers</em> that choose these tools which are foisted on them. The server/deployment environment and the language used to implement need to be decoupled from the tools used to build it.</p>
<p>But an even <em>worse</em> failing of many of these SOA tool suites, is that they all strongly and irrevocably coupled to the deployment/runtime environment. Generally they totally lack the ability to keep up with modern programming practice. Like for instance, automated testing. Or even <em>unit tests</em>, let alone advanced and productive techniques such as Test-First approaches or Test Driven Design. The tools often lack refactoring support. All of these things are in my opinion, and in the opinion of many leading developers, absolutely essential to quality engineering practice and agile development outcomes like &#8220;delivery of working software&#8221;. Both the &#8220;delivering&#8221; and the &#8220;working&#8221; part means the whole process needs to be <em>repeatable</em>. That&#8217;s why automated integration testing, to name just one thing, is <em>essential</em> in modern development. But often the fancy custom development tooling is a complete barrier to achieving this.</p>
<p>But you won&#8217;t hear any of this from the big vendors. One big vendor recently announced their new version of their middleware product suite had a &#8216;focus on testability&#8217;, but you ask any of their presales guys to demonstrate this in an actual development environment. Ask them about continuous integration support, for example. Witness their blank looks. Their development product is completely orientated to &#8220;one button push from the IDE to production&#8221; modes of thinking the idea of continuous integration builds is almost totally antithetical to the very concepts of operation the product is organised around. They think that finally adding support for Subversion version control system, at least five years too late, is a wondrous achievement.</p>
<p>They are aiming for &#8216;programmerless programming&#8217;: of course in process just creating a new type of programmer. Every new generation of programmers simply have to learn the same hard-fought lessons of software engineering over and over again because each generation of tooling apparently scraps the paradigm over and over again in a vain attempt to create push-button, wizard-driven programming models. They nearly all suffer from &#8216;hello world&#8217; programming &#8211; the simple examples that sell them to IT management are trivial to conquer using the wizards, but more complex problems (i.e. real world ones) are flat-out impossible. Thus these tools are always mirages which look great at a huge distance on the horizon but are flat lifeless salt pans of bleached skulls and bones on closer examination (or, maybe they are more like tar pits that look like a nice waterhole but one step into it and you are sucked down   to your doom).</p>
<p>As you might be able to tell, I am utterly contemptuous of many of these SOA tool paradigms. I have nothing against SOA itself, <em>per se</em>. But there is nothing more productive than a programmer who understands the importance of simple and repeatable build and deployment automation using command line tools and who knows his programming <em>editor</em> inside out after ten years of use. Give that programmer a better language by all means, add incremental features to that IDE, allow the programmers to continuously improve their techniques, promote professional craftsmanship, yes, yes and a thousand times yes. But no amount of drag and drop wizards, push-button deployments, and &#8220;object inspector&#8221; property editors will ever usurp that deep knowledge a good programmer brings to both his language and his personal tooling choices.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crazymcphee.net/x/2009/11/03/mistakes-you-can-make-with-soa/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Agile and assembly lines</title>
		<link>http://www.crazymcphee.net/x/2009/09/26/agile-and-assembly-lines/</link>
		<comments>http://www.crazymcphee.net/x/2009/09/26/agile-and-assembly-lines/#comments</comments>
		<pubDate>Sat, 26 Sep 2009 02:19:55 +0000</pubDate>
		<dc:creator>Scot Mcphee</dc:creator>
				<category><![CDATA[professional practice]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[xp]]></category>

		<guid isPermaLink="false">http://www.crazymcphee.net/x/?p=477</guid>
		<description><![CDATA[Coder Friendly&#8217;s got an interesting article about Agile Evangelism. First I&#8217;m not going to take issue with the article itself but something that he quotes from DanC&#8217;s Lost Garden on Managing Complexity: The repetative (sic) steps that a single worker performs on an assembly line is a good example of a simple task This is [...]]]></description>
			<content:encoded><![CDATA[<p>Coder Friendly&#8217;s got an <a href="http://www.coderfriendly.com/2009/09/24/agile-evangelism-can-be-dangerous-focus-on-your-needs/">interesting article about Agile Evangelism</a>. First I&#8217;m not going to take issue with the article itself but something that he <a href="http://lostgarden.com/2006/04/managing-game-design-risk-part-i.html">quotes from DanC&#8217;s Lost Garden on Managing Complexity</a>:</p>
<blockquote><p>The repetative (sic) steps that a single worker performs on an assembly line is a good example of a simple task</p></blockquote>
<p>This is a terribly Fordist/Taylorist view to take of assembly work. That most beloved of industrial examples, Toyota, takes weeks to train its process-line workers to be able not only to do the simple repetitive steps of assembly, but also to be able to identify and rectify problems with the assembly-line. As <a href="http://chasingtherabbitbook.mhprofessional.com/apps/ab/">Steven Spear</a>, author of <a href="http://www.amazon.com/Chasing-Rabbit-Outdistance-Competition-Christensen/dp/0071499881">Chasing the Rabbit</a> (<a href="http://www.crazymcphee.net/x/2009/03/08/achieving-high-velocity/">my review here</a>) might say, anyone who thinks that &#8220;assembly line&#8221; work is simple task probably doesn&#8217;t understand the nature of their process enough to keep up with their more innovate competitors, let alone outdistance them. Understanding your process, well more importantly, your organisational goals and how your process does or does not fulfil those goals, is critical to improving your organisation, and it leads me onto the idea of &#8220;evangelism&#8221;.</p>
<p>I both agree and disagree with Coder Friendly&#8217;s position:</p>
<blockquote><p>Don’t become an evangelist yourself : look at your project and decide which methodologies is the most adapted. Sometimes, Agile is not the right one but if you see that your requirements are far from agreement or certainty, Agile approaches are probably a good choice.</p></blockquote>
<p>I agree that &#8220;evangelism&#8221; can be politically off-putting.People don&#8217;t react well to being told their old kool-aid contains poison, and to uncritically drink this new kool-aid instead. However the main problem I have with a statement like this is that non-Agile companies use this &#8220;adaptation&#8221; argument and approach, in order to keep their poor contexts alive. This is the fallacy that&#8217;s found in &#8216;scrum butt&#8217;: &#8220;Oh we do Scrum, but &#8230;&#8221;. The clauses after the &#8216;but&#8217; are typically critical. The organisation concerned is usually trying to keep some essential organisational dysfunction alive, because of politics, resistance to change, simple misunderstanding, lack of understanding about their own process, or maybe even simple laziness. I&#8217;ve got no problem with an organisation that is mature in its use of an agile method adapting it to their local circumstance &#8211; in fact if you are doing it properly, with its emphasis on empowering teams to own their process and carrying out regular &#8216;inspect and adapt&#8217; at the end of every iteration, after six or twelve months of this the process will most certainly be adapted to the local conditions.</p>
<p>However, the real danger is at the <em>start</em> of the agile adoption process, when you have people hand-waving about &#8220;can&#8217;t do that here&#8221;, for whatever value of <em>that</em> there is. I&#8217;ve seen it said about: pairing; story boards; acceptance criteria; automated testing; retrospectives; daily stand-up; adaptive and emergent design; and just about every other aspect of XP or Scrum process. The reason is, I think, that these organisations rarely understand what the real organisational goals actually are, and they understand even less about their existing process, to the point they just &#8220;do&#8221; the process that &#8220;is&#8221;. &#8220;It is what it is&#8221;, is a great term, and if anyone says this to you it&#8217;s just a fatalistic attempt to accept as unchanging something you <em>can</em> change. <em>Accept the bad. Don&#8217;t think it could be better</em>.  Attempts to meddle in the process, i.e. change it, induce fear, and with fear often comes timidity.</p>
<p>This is where you need a <em>real</em> agile evangelist. This is not someone who just thinks that Scrum or XP or whatever other process should be blindly substituted for the existing one, but someone who understands that process is about competitive advantage, eliminating waste, and that you have to start from a known position and continuously work towards improvement. Change is not just good, but necessary, and you <em>need</em> those change agents. <em>Passion for doing things better is bad?</em> Only in a change-averse company. So learn your existing process, thoroughly, and then learn the proposed agile process, thoroughly, and only then will you be able to &#8216;synthesise&#8217; a replacement. Only I think you&#8217;ll find that replacement will look a lot more like the plain old agile process than your existing unagile process. After all, if your existing process already has adequate inspect-and-adapt cycles within it (not lip-service ones, real ones), probably you are already doing and agile or lean process even if you don&#8217;t call it that, and you&#8217;re already number one in your marketplace. If not, perhaps you require the passion of an evangelist.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crazymcphee.net/x/2009/09/26/agile-and-assembly-lines/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Systems versus Individuals and technical debt</title>
		<link>http://www.crazymcphee.net/x/2009/09/05/systems-versus-individuals-and-technical-debt/</link>
		<comments>http://www.crazymcphee.net/x/2009/09/05/systems-versus-individuals-and-technical-debt/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 23:38:48 +0000</pubDate>
		<dc:creator>Scot Mcphee</dc:creator>
				<category><![CDATA[professional practice]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[emergent design]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[profession]]></category>
		<category><![CDATA[refactor]]></category>
		<category><![CDATA[technical debt]]></category>

		<guid isPermaLink="false">http://www.crazymcphee.net/x/?p=468</guid>
		<description><![CDATA[I kind of disagree with this picture by Josh Susser regarding the &#8220;circle of death&#8221; in terms of code quality and late night effort. It is right enough as far as it goes but it doesn&#8217;t go far enough. First up, the easy way out &#8211; take a day off, go for a walk in [...]]]></description>
			<content:encoded><![CDATA[<p>I kind of disagree with <a href="http://blog.hasmanythrough.com/2009/9/3/circle-of-death">this picture</a> by Josh Susser regarding the &#8220;circle of death&#8221; in terms of code quality and late night effort. It is right enough as far as it goes but it doesn&#8217;t go far enough.</p>
<p>First up, the easy way out &#8211; take a day off, go for a walk in the park, have a nice dinner, get a good nights sleep. You should always work to &#8220;sustainable progress&#8221; and yes this means every hour you work over 40 hours a week means your quality is steadily decreasing until some point where every extra hour you put will take two to fix it later (in other words, negative impact). Even just pair programming will help prevent this in the first place as long at least one of you isn&#8217;t operating on half the sleep they need. But ultimately, all of this just blames the individual, when really poor code quality and technical debt are much more a function of the management system, methodology, total sum of the choices by every on the team, etc. (For a start, why are you up late in the first place? Was that your choice, or an outside imposed deadline?).</p>
<p>As James Adam and &#8220;iSteve&#8221; point out in the comments &#8211; technical debt is different from just &#8220;buggy software&#8221; and in my experience it&#8217;s usually function of management or other types of systemic choices (and &#8220;systemic&#8221; includes you, the programmer as well everyone else). What it really does is trade <em>easy change now</em> for <em>even harder change later</em>. It wants that sweet sweet sugar hit straight away but forgets about the &#8220;sugar coma&#8221; that comes a few minutes afterwards. It defers &#8220;paying the piper&#8221; until tomorrow for that lovely tune today. James Adam rightly says in his comment this <em>can be a valid choice</em>, but all of the team have to be fully aware of the <em>consequences</em> of that choice. One of which is typically that the longer  you defer the payment, the more debt you&#8217;ll accumulate, until all you are doing is paying off the interest and not getting to the principal.</p>
<p>As &#8220;iSteve&#8221; says, management (and maybe &#8220;management&#8221; might mean just you telling yourself this in your head) always promises to &#8220;fix it later&#8221; and never does allow that. &#8220;Just make the hack&#8221; and gloss over the problem is a mantra that we&#8217;ve all heard before. Where it gets painful is where every change is now taking twice as long as it should because of the accumulation of hacks. Every single one one of us has been there before, and are probably in various levels of it right now.</p>
<p>In my view this is the much more insidious circumstance because it is <em>systemic</em>.  After all the solution to a bad day&#8217;s work because I was too tired to think properly is to simply get a good night&#8217;s sleep, roll back yesterday&#8217;s coding, and do it again today. All I&#8217;ve done is lost a day&#8217;s work.  However, an organisation is likely to have accumulated months if not years of organisational cruft that makes changing their context that much harder than just rolling back yesterday&#8217;s poor code and trying again &#8211; it requires commitment to change from everyone who counts in the first instance.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crazymcphee.net/x/2009/09/05/systems-versus-individuals-and-technical-debt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile is hard</title>
		<link>http://www.crazymcphee.net/x/2009/07/22/agile-is-hard/</link>
		<comments>http://www.crazymcphee.net/x/2009/07/22/agile-is-hard/#comments</comments>
		<pubDate>Wed, 22 Jul 2009 01:42:52 +0000</pubDate>
		<dc:creator>Scot Mcphee</dc:creator>
				<category><![CDATA[business]]></category>
		<category><![CDATA[professional practice]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[methodology]]></category>

		<guid isPermaLink="false">http://www.crazymcphee.net/x/?p=427</guid>
		<description><![CDATA[Johanna Rothman on agile adoption for the organisation: Agile requires the discipline to move projects through teams. Multitasking is nuts in agile. Moving team members around to have the “best” specialist available for a particular team is nuts. Performance reviews for individuals is nuts. Managers have to change everything they do, if they want to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://jrothman.com/blog/mpd/2009/07/plunge-in-or-dip-your-toe-for-managers.html">Johanna Rothman on agile adoption for the organisation</a>:</p>
<blockquote><p>Agile requires the discipline to move projects through teams. Multitasking is nuts in agile. Moving team members around to have the “best” specialist available for a particular team is nuts. Performance reviews for individuals is nuts. Managers have to change everything they do, if they want to move the organization to agile. Managers need to see the problems exposed by any given project’s transition to agile and work to remove those obstacles before transitioning to agile.</p></blockquote>
<p>It&#8217;s too easy to think that just because you can get one of your teams to use an agile approach, that your organisation is now Agile. Too many managers &#8220;see the problems exposed by given project&#8217;s transition to agile&#8221; and decide to <em>blame the agile process</em> for the problems thus exposed.In far too many organisations I&#8217;ve seen have extremely capable teams delivering quality software in an agile process but remain &#8211; in some cases years later &#8211; completely unsupported by their senior management (and in some cases with very little support even from their CIO level).</p>
<p>That&#8217;s a very sad situation as it is and takes all your selling skills to get the management to &#8220;get with the program&#8221; so to speak. But this situation can be even more compounded when the management have been convinced that Agile is some sort of silver bullet that will cure all their issues. Whenever you are trying to sell agile to management, never waver from the fact that <em>agile is hard</em> (as everything worth doing is nearly always difficult anyway!). Agile takes discipline.</p>
<p>Johanna&#8217;s right to say you can&#8217;t adopt agile across an entire organisation in a big bang approach. But you can&#8217;t also adopt it without skill and commitment to doing so from managers and executives.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crazymcphee.net/x/2009/07/22/agile-is-hard/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Agile is dead</title>
		<link>http://www.crazymcphee.net/x/2009/06/23/agile-is-dead/</link>
		<comments>http://www.crazymcphee.net/x/2009/06/23/agile-is-dead/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 05:49:44 +0000</pubDate>
		<dc:creator>Scot Mcphee</dc:creator>
				<category><![CDATA[architecture]]></category>
		<category><![CDATA[infrastructure and frameworks]]></category>
		<category><![CDATA[professional practice]]></category>
		<category><![CDATA[rants]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[profession]]></category>
		<category><![CDATA[vendors]]></category>
		<category><![CDATA[wizards considered harmful]]></category>

		<guid isPermaLink="false">http://www.crazymcphee.net/x/?p=400</guid>
		<description><![CDATA[I know that&#8217;s a pretty bold statement but here&#8217;s why. This morning I went to a vendor&#8217;s presentation morning, it was the usual game of buzzword bingo from the very first slide on. All the usual enterprise2.0, social-networking, portal-compliant, content-management, vertically-integrated, SOA-BPM-UCM-JEE-ESB-WS-BPEL platform-framework-enabling scalability-enhancing fun-lovin&#8217; don&#8217;t write code but manage-the-enterprise-blog-wiki-twitter-facebook-youtube shopping cart drag-n-drop non-content that [...]]]></description>
			<content:encoded><![CDATA[<p>I know that&#8217;s a pretty bold statement but here&#8217;s why. This morning I went to a vendor&#8217;s presentation morning, it was the usual game of <em>buzzword bingo</em> from the very first slide on. All the usual enterprise2.0, social-networking, portal-compliant, content-management, vertically-integrated, SOA-BPM-UCM-JEE-ESB-WS-BPEL platform-framework-enabling scalability-enhancing fun-lovin&#8217; <em>don&#8217;t write code</em> but manage-the-enterprise-blog-wiki-twitter-facebook-youtube shopping cart drag-n-drop <em>non-content</em> that we have all come to expect from the big vendors was fully in attendance.</p>
<p>But the real kicker was a presentation on <em>Agile Integration</em>, by one of the vendor&#8217;s partners (and in the interests of disclosure, a competitor to my own employer). A few slides in and there&#8217;s the inevitable &#8220;what is agile&#8221; slide with a standard dictionary definition and some lip-service to previous history. Now the thing here of course, is that the word <em>Agile</em> in software development parlance is by now a well-entrenched piece of <em>jargon</em> &#8211; it has a specific meaning to most people that is fairly precise and different to just the garden-variety common English usage. This is the purpose of jargon in a discipline: to be precise in communication. And the <a href="http://agilemanifesto.org/" target="_blank">agile manifesto</a>, nearly 10 years old, just means in effect, if you&#8217;re in the software development game you just can&#8217;t redefine the term to mean something else.</p>
<p>Except of course, you <em>can</em>, if you do, and you&#8217;re <em>big</em> enough and enough people listen to your incredibly mangled marketoid-speak. <em>But implementing a SOA solution is not Agile</em>, no matter how many times you make an incredibly weak case that it is or how many times you repeat any other platform-orientated mantra. Yes, you read it right, according to the vendor&#8217;s partner at least, <em>SOA is Agile</em>.</p>
<p>This banality made me so angry, it was very lucky that straight after there was the morning coffee break because I was seething and it took all my self-discipline not to launch into an attack during the questions (easy picking, because there were no other questions asked!). I had to vent at my poor colleagues in the break.</p>
<p>Anyway, on my admittedly pessimistic reading it means that <em>Agile Is Dead</em>, as pretty soon we are going to find clients telling people, &#8220;Yeah we do agile, we bought the million-dollar SOA package off that vendor&#8221;, and then they&#8217;ll be saying the reason their integration projects are still failing is because they haven&#8217;t installed the very latest patchset, or upgraded to all-new <em>LEANsuite 17.4.15.8 release B</em> with the optional drag-n-drop Super-Agility add-in for Portals, Release 16f (the &#8220;f&#8221; is for &#8220;fail&#8221;).</p>
<p>At sushi train lunch afterwards, we made the observation that pretty much the vendor wants to be <em>all the food groups all at once</em>. Kind of like this bit of gluggy sushi I mistakenly lifted off the train:</p>
<div id="attachment_404" class="wp-caption alignnone" style="width: 310px"><a href="http://www.crazymcphee.net/x/wp-content/uploads/2009/06/img_0080.jpg"><img class="size-medium wp-image-404" title="bad sushi" src="http://www.crazymcphee.net/x/wp-content/uploads/2009/06/img_0080-300x225.jpg" alt="All the food groups. Nasty." width="300" height="225" /></a><p class="wp-caption-text">All the food groups. Nasty.</p></div>
<p>Now I&#8217;m not saying that you can&#8217;t do &#8220;SOA&#8221; with an agile process, if that&#8217;s your preferred architectural style, then if you are committed you can certainly develop it in an Agile fashion. You can&#8217;t afford however, to confuse the two things. If you do, that picture above is  what your enterprise will look like too if you mistake the <em>buzzword bingo</em> offered by vendors for actual <em>insight into agile development process</em>. Talk to an expert instead.</p>
<p>Sorry to be so negative, the whole morning pretty much sapped my will to live.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crazymcphee.net/x/2009/06/23/agile-is-dead/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>To do redux</title>
		<link>http://www.crazymcphee.net/x/2009/06/07/to-do-redux/</link>
		<comments>http://www.crazymcphee.net/x/2009/06/07/to-do-redux/#comments</comments>
		<pubDate>Sat, 06 Jun 2009 22:50:45 +0000</pubDate>
		<dc:creator>Scot Mcphee</dc:creator>
				<category><![CDATA[professional practice]]></category>
		<category><![CDATA[rants]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[profession]]></category>
		<category><![CDATA[refactor]]></category>
		<category><![CDATA[xp]]></category>

		<guid isPermaLink="false">http://www.crazymcphee.net/x/?p=393</guid>
		<description><![CDATA[I just want to answer the anonymous &#8220;process nazis&#8221; trackback on yesterday&#8217;s &#8216;//TODO&#8217; Considered Harmful post, because that blog desn&#8217;t allow comments without a login. Quite apart from issues with Godwin&#8217;s Law (and that the writer has enumerated a bunch of rules that get &#8220;violated&#8221; then accuses other people of being process nazis), the post [...]]]></description>
			<content:encoded><![CDATA[<p>I just want to answer the anonymous &#8220;<a href="http://chaosinmotion.com/blog/?p=279">process nazis</a>&#8221; trackback on yesterday&#8217;s <a href="http://www.crazymcphee.net/x/2009/06/06/todo-considered-harmful/">&#8216;//TODO&#8217; Considered Harmful</a> post, because that blog desn&#8217;t allow comments without a login. Quite apart from issues with Godwin&#8217;s Law (and that the writer has enumerated a bunch of rules that get &#8220;violated&#8221; then accuses <em>other</em> people of being process nazis), the post severely misattributes both my post, and also, I think, misunderstands what agile methodologies are all about.</p>
<p>First, I no where made any &#8220;assertion that if you are putting ‘//TODO’ markers in your code, you’re somehow not properly following the Scrum process&#8221; &#8211; I said if you find yourself using &#8216;//TODO&#8217; markers in your code you are being prevented from getting to done-done and that you should &#8220;<em>Identify the problem, propose a counter-measure and fix the process</em>&#8220;. I can&#8217;t emphasise that enough. &#8220;Fix the process&#8221; does not mean &#8220;follow scrum&#8221; but rather to use your team&#8217;s collective brain to work out what stops you from fixing the code then and there and propose a solution to the problem.</p>
<p>I think &#8216;//TODO&#8217; should either be in the current story (I will concede that you might want to use a &#8216;//TODO&#8217; to remind yourself about tasks in your current story, i.e. &#8220;come back here tomorrow when I add the validation&#8221;) or in the &#8220;backlog&#8221;. I put &#8220;backlog&#8221; in quotes there to point out I mean &#8220;backlog&#8221; in the broadest sense, if you using Scrum or XP that&#8217;s actually where the work-to-be-done is physically kept, but if you have some other process then your &#8220;backlog&#8221; is kept somewhere else, and what is preventing you from adding to it?</p>
<p>I will ask a question of the anonymous poster &#8211; at what point exactly  is a &#8216;//TODO&#8217; comment left decaying in the codebase without a story for days or weeks <em>a good idea</em>? Or is it that you just do not want to make what it is being done in the code base <em>transparent</em> to those who are paying your bills?</p>
<p>I will contend; &#8216;//TODO&#8217; never gets done because the product owners never see them. They act as an opaque barrier to open communication. If you find a &#8216;//TODO&#8217;, lets say a big major refactoring will be needed to support a story you already see in the backlog, what&#8217;s the problem with having an open and honest communication with the <em>team</em> about the story&#8217;s estimate? If it&#8217;s a future story, i.e. feature related, it should be in the &#8220;backlog&#8221;; if it is code or design related which impacts you now, either it should be done then and there (<a href="http://www.extremeprogramming.org/rules/refactor.html">refactor mercilessly</a>) or it&#8217;s a bug which you either fix or raise a bug report for, and if it&#8217;s just some nebulous &#8220;improvement&#8221; either do it now or <a href="http://c2.com/xp/YouArentGonnaNeedIt.html">YAGNI</a>. If you&#8217;ve got great tooling like Mylyn for Eclipse you can drop a &#8220;task&#8221; at the code point and move on. The point there is the &#8220;TODO&#8221; isn&#8217;t obscured away in the code but rather <em>visible to all</em> because the &#8216;//TODO&#8217; is now either in your Wiki, your task-tracking tooling via it&#8217;s Mylyn integration, or is included as part of a story card on the story board.</p>
<p>If you can&#8217;t refactor mercilessly &#8211; what the post is <em>really</em> about &#8211; all the usual excuses apply, i.e. &#8220;we&#8217;re not confident about the code base not breaking in unknown ways&#8221; (i.e. no tests), &#8220;it has to be done by tomorrow,&#8221; <em>et cetera</em>, and all of these are <em>symptoms of dysfunction</em> in your organisation.</p>
<p>People love their little comfort zones and they don&#8217;t like being pushed out of them, that&#8217;s for sure, programmers included (yeah, and that&#8217;s a me too). <em>Habit</em> is not an excuse for avoiding improvement.</p>
<p>Here&#8217;s a great imaginary conversation from the C2 wiki entry about <a href="http://c2.com/xp/YouArentGonnaNeedIt.html">YAGNI</a> that I think applies here:</p>
<blockquote><p>&#8220;But Ron, I know how to do it right now, and later I might not.&#8221; </p>
<p>&#8220;So, Sam, you&#8217;re telling me that this class you&#8217;re writing is so complex that even <strong>you</strong> won&#8217;t be able to maintain it?&#8221;</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.crazymcphee.net/x/2009/06/07/to-do-redux/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
