<?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>Pieter Nagel on Programming</title>
	<atom:link href="http://www.nagel.co.za/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.nagel.co.za</link>
	<description>Swapping words, lines, and pages - bit by bit.</description>
	<lastBuildDate>Tue, 17 Apr 2012 20:16:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>The people at the two poles</title>
		<link>http://www.nagel.co.za/2012/04/the-people-at-the-two-poles/</link>
		<comments>http://www.nagel.co.za/2012/04/the-people-at-the-two-poles/#comments</comments>
		<pubDate>Tue, 17 Apr 2012 20:16:46 +0000</pubDate>
		<dc:creator>pnagel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.nagel.co.za/?p=282</guid>
		<description><![CDATA[I have been working on the same system for almost 12 years now, and I have watched its lifecycle from cradle to the grave. In that time I have done a lot of soul-searching about balancing short term against long &#8230; <a href="http://www.nagel.co.za/2012/04/the-people-at-the-two-poles/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p class="alignnone size-full wp-image-283" title="seesaw2-thumb-300x202-34400-thumb-300x202-34401"><a href="http://www.nagel.co.za/wp-content/uploads/2012/04/seesaw2-thumb-300x202-34400-thumb-300x202-34401.jpg"><img class="aligncenter" title="seesaw2-thumb-300x202-34400-thumb-300x202-34401" src="http://www.nagel.co.za/wp-content/uploads/2012/04/seesaw2-thumb-300x202-34400-thumb-300x202-34401.jpg" alt="" width="300" height="202" /></a></p>
<p class="alignnone size-full wp-image-283" title="seesaw2-thumb-300x202-34400-thumb-300x202-34401">I have been working on the same system for almost 12 years now, and I have watched its lifecycle from cradle to the grave. In that time I have done a lot of soul-searching about balancing short term against long term considerations. Looking back, I have realized that these two poles of thinking are often embodied by two types of people in programmers&#8217; lives.</p>
<p>Championing the cause of the &#8220;short term&#8221; end of the scale, one often finds mostly lower to mid level managers &#8211; the Project Managers in whose lives it is a disaster if Feature X would slip to the 15th of February next month instead of the 7th. Who  feel strong pressure to make that happen, and will pass that pressure on to the team.</p>
<p>Often, those deadlines are there for a sound reason: missing the demo at the yearly trade show, missing the deadline for implementing a new tax regulation, or announcing a project to the market with great fanfare and then not making it can all be seriously damaging to the company as a whole.</p>
<p>But just as often those deadlines are more arbitrary. If they slip somewhat, one meeting of a steering committee might be a bit heated, and contingency plans that had anyway already been decided on may be put into action, but few people outside the steering committee may even know.</p>
<p>But on the other end of the scale, one finds the people who have a larger stake in the company as a whole:</p>
<p>I remember an after-work conversation with our CEO, during her smoke-break, where she said, almost pleaded, that something needs to be done about the speed of development at our company that was slowing down. She wasn&#8217;t primarily concerned about Feature X, or Feature Y. She was concerned about whether development by the end of the year would be more productive than last year, because with a downward trend the company itself would not remain viable at all.</p>
<p>I remember the Christmas year-end function where the investor that founded our company, and still carried it, pulled me aside to tell me the same: something had to be done about the speed of development. Little did he know &#8211; or perhaps he did &#8211; that I had already been trying to champion that cause &#8220;from below&#8221; for quite some time, and that short conversation we had gave me a lot of the boldness I needed to face the obstacles I perceived.</p>
<p>Often there is a large disconnect between these two groups of people, and over the long term (ha!) this does great damage to companies.</p>
<p>Short term concerns, such as hitting a laundry-list of goals on set dates, require one set trade-offs if they are to be met. More meta-level concerns, such as whether the company itself will remain in the position, year after year, of even playing the game of hitting laundry-lists of goals, require very different trade-offs.</p>
<p>Whenever you have opposite goals that are in tension, you can only successfully navigate the trade-offs if you actively manage and track all of your goals. Suppose you want to design an aeroplane that is both lightweight and cheap and strong. But imagine you only ever ask the team for feedback on the price, rarely talk to the team about its weight, and never mention the strength. Surely it would be madness to assume that you will just magically get an aeroplane that is anything but cheap at the expense of being too heavy to fly and to weak to remain in one piece?</p>
<p>But it seems that most development organisations seem to manage their long term goals by just assuming that if everyone fervently works towards the short-term goals, and keep on doing so for year after year after year, that the long term goals will just automatically be met.</p>
<p>And all around me I see the same phenomenon: companies that find themselves in crisis, because development is slowing down to a crawl, after five, or seven years or so of taking shortcuts. Companies that are unsure whether they&#8217;ll even be able to continue competing, or whether they need to abandon the entire product line and seek different markets.</p>
<p>If companies care about both the short term and the long term simultaneously, they need to put people and processes in place that champion both, and make sure these are felt at all levels of the company.</p>
<p>But all around me I see teams of programmers, who feel the Project Managers breathing short-term concerns down their neck day in and day out. But who not even once get to have that conversation with the CEO at her smoke break, or the company funder at the Christmas party.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagel.co.za/2012/04/the-people-at-the-two-poles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>In defense of Kanban</title>
		<link>http://www.nagel.co.za/2012/04/in-defense-of-kanban/</link>
		<comments>http://www.nagel.co.za/2012/04/in-defense-of-kanban/#comments</comments>
		<pubDate>Tue, 10 Apr 2012 18:59:18 +0000</pubDate>
		<dc:creator>pnagel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.nagel.co.za/?p=277</guid>
		<description><![CDATA[A friend told me, with a jaded and weary tone, that her employers decided to &#8220;use Kanban principles&#8221; for their development. She expressed cynicism about the Wikipedia definition that says &#8220;Kanban is a method for developing software products &#38; processes &#8230; <a href="http://www.nagel.co.za/2012/04/in-defense-of-kanban/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A friend told me, with a jaded and weary tone, that her employers decided to &#8220;use Kanban principles&#8221; for their development. She expressed cynicism about the <a href="http://en.wikipedia.org/wiki/Kanban_%28development%29">Wikipedia definition</a> that says <em>&#8220;<strong>Kanban</strong> is a method for developing software products &amp; processes with an emphasis on just-in-time delivery while not overloading the software developers.&#8221;</em></p>
<p>I guess that it is the &#8220;not overloading the developers&#8221; bit that she is sceptical about.</p>
<p>I can&#8217;t vouch for her employers, since anything that becomes a buzzword is at risk of half-baked implementations by people who don&#8217;t get it. But since I had great success with instigating Kanban at my previous time, and not just the CEO but the developers themselves were also pleased, I do feel I have to come to the defense of Kanban itself.</p>
<p>The essence of Kanban is to get to know one&#8217;s development system so well as to know where in the process the current bottlenecks are. And then, to try and increase productivity not by trying to run that system beyond its maximum capacity, but rather by improving the system itself so that the bottleneck is no longer a bottleneck.</p>
<p>That means running the system at no more than its current capacity. The people who are responsible for the current bottleneck tasks should feel a reduction of stress, since they are no longer asked to exceed their current capacity by sheer sweat and willpower alone.</p>
<p>Everyone else, who is <em>not</em> a bottleneck, should suddenly have a lot of slack on their hands &#8211; and this is by deliberate intent. It might seem like an anathema to Matrix Managers to have &#8220;resources&#8221; such as Business Analysts working at less than 100% capacity, but since developers have a limited capacity, it would be a wasteful exercise for Business Analysts to draw up more specifications than the developers could ever realistically code up.</p>
<p>The slack that is freed up is instead used to improve the current development process so that the current bottleneck is no longer so, at which point those people get their turn at being the ones with slack and other people get to be the bottleneck</p>
<p>For this Continuous Improvement &#8220;Kaizen&#8221; culture to really take hold and be really effective, you need to have a few elements in place:</p>
<ul>
<li>You need to take a broader view than just development. Instead, you must look at the business as a whole as a complicated system of its own, starting at the point where someone dreams up new requirements, and following it right through to the end where the completed requirements actually deliver some real-world value to real-world customers (an income to the company).</li>
<li>You need the right personalities to champion this improvement, who can keep on providing the emotional energy and impetus to stick at it. This is especially important in less healthy company cultures where trust has been lost and employees are jaded.</li>
<li>You need empirical information on how your current development processes are <em>really</em> functioning, as opposed to pie-in-the-sky ideas on how you <em>fervently believe</em> things are currently going. This is why Kanban has a strong emphasis on process visualization.</li>
<li>You need theories to help you come up with hypotheses as to why the current system is inefficient, and how you could improve it. For this, Kanban makes extensive use of the Theory of Constraints, and the Lean Principles that originated from the Toyota Way.</li>
</ul>
<p>All this is pretty abstract and philosophical. What makes Kanban so successful is that it provides extremely simple and easy to understand principles to help drive the aforementioned as emergent properties: Work-In-Progress (WIP) limits, and Pull Scheduling.</p>
<p>WIP limits refer to the notion that it is actually <em>not</em> a good idea to have too many irons in the fire at the same time. In other words, everyone should have a limit on how many different things they are busy with at the same time. At some point, before you can start with something new, you <em>have</em> to finish something old.</p>
<p>In general, lower WIP limits are better. If you find yourself blocked and unable to proceed on any of your current WIP tasks, that time is better spent investigating and alleviating the root causes of that blockage.</p>
<p>Pull Scheduling refers to the practice of not &#8220;pushing&#8221; new work to downstream people. Instead, people pull new work for themselves from upstream processes whenever they have completed something and their WIP limits allow them to start with something new.</p>
<p>This preference for completing old work instead of starting new work has the nice morale-boosting side effect that one tends to complete something tangible at regular intervals, which makes one&#8217;s work-life feel more and more like the regular hitting of milestones, instead of like one long death march after the other.</p>
<p>This has the salutary side effect of driving greater maturity when it comes to prioritisation of tasks. Instead of asking developers for everything and the kitchen sink, and padding those requirements with more nice-to-haves because development takes so darn long that you could just as well try and get everything out of your 18 month cycle that you can, management now has to focus on &#8220;what is the single most valuable thing I can have my people working on next, when they finished with what they&#8217;re doing now?&#8221;.</p>
<p>Finishing that &#8220;single most valuable thing&#8221; <em>first</em> before starting something new has the nice side effect that the business can start accruing the value of completing it immediately, instead of having to wait for the other bells and whistles to be finished. Furthermore, the decision whether to do the other bells and whistles at all can be informed by experience with having the core functionality already out in the field.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagel.co.za/2012/04/in-defense-of-kanban/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Tale Of Two Companies: Part II &#8211; The Fallout</title>
		<link>http://www.nagel.co.za/2012/04/a-tale-of-two-companies-part-ii-the-fallout/</link>
		<comments>http://www.nagel.co.za/2012/04/a-tale-of-two-companies-part-ii-the-fallout/#comments</comments>
		<pubDate>Sun, 01 Apr 2012 19:41:16 +0000</pubDate>
		<dc:creator>pnagel</dc:creator>
				<category><![CDATA[Agile Development]]></category>

		<guid isPermaLink="false">http://www.nagel.co.za/?p=270</guid>
		<description><![CDATA[In Part I we stopped where PSP and ALFI decided that ALFI would henceforth develop the web front-end to their financial products themselves, and PSP would henceforth provide just an API. Both companies looked forward to this arrangement with anticipation. &#8230; <a href="http://www.nagel.co.za/2012/04/a-tale-of-two-companies-part-ii-the-fallout/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In <a title="Part I" href="http://www.nagel.co.za/2012/04/a-tale-of-two-companies-part/">Part I</a> we stopped where PSP and ALFI decided that ALFI would henceforth develop the web front-end to their financial products themselves, and PSP would henceforth provide just an API. Both companies looked forward to this arrangement with anticipation.</p>
<p>The transitional period was, of course, a bit stressful. The go-live date of the new arrangement coincided with a very important company milestone for which all kinds of new features had to be developed, and so as part of their learning curve for taking over the web codebase, ALFI also had to crunch to get features out on time.</p>
<p>This meant that ALFI had all kinds of urgent queries about the API, or discovered all kinds of unfinished corners of the API, which PSP had to change for them. But now PSP&#8217;s two-weekly planning cycle was too onerous, because ALFI could not afford to wait until the start of the next cycle, then wait two more weeks for the change to be deployed, and then only start developing on their side of the API.</p>
<p>So PSP decided to make some &#8220;temporary&#8221; changes to their development cycle for ALFI&#8217;s sake. Critical new development tasks and bugfixes were allowed to be scheduled mid-cycle. Instead of deploying at the end of the cycle, PSP would deploy point-releases at regular points during the cycle.</p>
<p>This took a large toll on PSP. Deployments had an extremely high transaction cost associated with them: the automated validation of schema integrity would take hours to run, which means that the feedback cycle on bugfixes related to that was extremely slow. I would not be surprised if a lot of overtime was spent waiting for such feedback, and then fixing the issues. Once the data integrity was clean, deployments themselves could sometimes take a few hours of two employees, and this also had to be overtime so as to keep the system running during business hours.</p>
<p>Given that deployments happened once every few days, employee burnout must have been high.</p>
<p>Now, I am sure that PSP believes that this was a temporary state of affairs, and that as both companies adjust to the new situation, they would be able to incrementally re-assert their old two-weekly planning cycle.</p>
<p>But let&#8217;s just quickly look at the big picture:</p>
<p>ALFI entered the new arrangement due to dissatisfaction with the latency associated with the two week cycle, in the belief that they would then be able to help themselves with changes to the website without waiting on PSP.</p>
<p>But now, whenever ALFI wants to make changes to their front-end that need changes to PSP&#8217;s API, they need to first wait for the start of the next planning cycle, the wait two weeks for the changes to be developed, then wait for their own developers to code to the new API.</p>
<p>Is it likely that ALFI would be satisfied with the overhead on crucial features if they had not been satisfied with the overhead on changing marketing boilerplate text before?</p>
<p>It seems obvious to me that, far from PSP settling back to their old routine, they have now inadvertently helped to unleash forces that will keep on hammering away at their two week planning cycle. And either they will need to give in, or both they and their client will need to create ever more elaborate planning workarounds which will lead to increasing customer dissatisfaction.</p>
<p>Worse yet, at some point YALFI will also start developing their own front-end, and so similar forces will grow to act on PSP from that side.</p>
<p>I doubt that their two-week planning cycles will long survive these forces, no matter how hard and how faithfully they wish to cling to &#8220;doing XP the original way&#8221;.</p>
<p>What they need is a way to adapt to the new realities, instead of resisting them, without burning themselves out, and without relinquishing their core Agile values.</p>
<p>And for this, I think they would be well served by considering adding Kanban influences to their mix.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagel.co.za/2012/04/a-tale-of-two-companies-part-ii-the-fallout/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Tale Of Two Companies: Part I</title>
		<link>http://www.nagel.co.za/2012/04/a-tale-of-two-companies-part/</link>
		<comments>http://www.nagel.co.za/2012/04/a-tale-of-two-companies-part/#comments</comments>
		<pubDate>Sun, 01 Apr 2012 16:37:49 +0000</pubDate>
		<dc:creator>pnagel</dc:creator>
				<category><![CDATA[Agile Development]]></category>

		<guid isPermaLink="false">http://www.nagel.co.za/?p=250</guid>
		<description><![CDATA[This is a little cautionary tale about how a contractor and its client tried to simplify their relationship, and how that seems to be in danger of backfiring. Or at least from this outsider&#8217;s limited perspective. A Large Financial Institution &#8230; <a href="http://www.nagel.co.za/2012/04/a-tale-of-two-companies-part/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This is a little cautionary tale about how a contractor and its client tried to simplify their relationship, and how that seems to be in danger of backfiring. Or at least from this outsider&#8217;s limited perspective.</p>
<p>A Large Financial Institution (ALFI) has been using their Preferred Solutions Provider (PSP) for quite a few years. PSP wrote the system that manages the financial products that ALFI provides, as well as the web front-end through which ALFI&#8217;s clients could interact with their investments.</p>
<p>PSP manages this relationship in a strict Extreme Programming style, which means they run two week long development cycles, and ALFI can request some amount of Story Points worth of new work to be done during a planning meeting at the start of each of these iterations.</p>
<p>This implies that each such cycle has a fairly high transaction cost at its start: the planning meeting, during which PSP&#8217;s developers would presumably need to be present to estimate Story Points for each task. This ritual seems to take a half to a full day, or about 5%-10% of their development capacity.</p>
<p>But the real cost lies in the latency: each new requirement would have to wait until the next planning meeting, and then for the end of the iteration, or in other words at best between 2 &#8211; 4 weeks between desire and fulfillment.</p>
<p>At some point it was decided that the development of the web front-end would move in-house to ALFI itself, and that PSP would merely provide an API through which the back-end system could be accessed.</p>
<p>Both parties seemed to be pretty keen on this arrangement, each for their own reasons:</p>
<ul>
<li>ALFI was dissatisfied with the overhead to their requirements, especially in cases like when their Marketing Department wanted to tweak the text on their website, but had to wait 2 &#8211; 4 weeks for this to be delivered.</li>
<li>PSP had started to reposition their system as an engine that serves multiple clients, and if they no longer needed to develop ALFI&#8217;s front-end, that would also imply that they would not need to develop a front-end for their new client, Yet Another Large Financial Institution (YALFI), either.</li>
<li>PSP felt that the front-end was not their &#8220;core competency&#8221;, or, as I would paraphrase it in more technical terms: they didn&#8217;t like doing web development and wished to have it out of their lives so they could &#8220;focus&#8221; on the core system.</li>
</ul>
<p>And so it was decided that PSP would hand over the source code repository of the web front-end to ALFI.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagel.co.za/2012/04/a-tale-of-two-companies-part/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Part 2. Selling your soul to get the dishes done</title>
		<link>http://www.nagel.co.za/2009/10/selling-your-soul-to-get-the-dishes-done/</link>
		<comments>http://www.nagel.co.za/2009/10/selling-your-soul-to-get-the-dishes-done/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 21:46:45 +0000</pubDate>
		<dc:creator>pnagel</dc:creator>
				<category><![CDATA[Agile Development]]></category>

		<guid isPermaLink="false">http://www.nagel.co.za/?p=223</guid>
		<description><![CDATA[[This is Part 2 of my Quality and Productivity series]. In the first instalment of my Quality and Productivity series, I introduced a particular way of looking at something like a software development project: Instead of thinking of the project &#8230; <a href="http://www.nagel.co.za/2009/10/selling-your-soul-to-get-the-dishes-done/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>[This is Part 2 of my <a href="http://www.nagel.co.za/2009/10/qualitiy-and-productivity/">Quality and Productivity</a> series].</p>
<p>In the first instalment of my Quality and Productivity series, I introduced a particular way of looking at something like a software development project:</p>
<p>Instead of thinking of the project as a sequence of tasks to be completed, each of which costs a certain amount of time to complete, think of it this way: a project is a series of actions, each of which has short-term and long-term consequences. You can visualise these consequences as a green (positive) or red (negative) graphs with a certain shape (brief spikes, flat lines, or exponential curves) extending far off into the future.</p>
<p>This brings up an important corner case: none of what I&#8217;m trying to explore in this series has any relevance if the project <em>is not intended to have any future at all</em>. If the explicit plan is that the project should fail, or terminate in the near future, then by all means feel free to excuse yourself from this discussion.</p>
<p>Today, I want to play a bit with the conceptual vocabulary I&#8217;ve established. So, let&#8217;s combine some of our concepts:</p>
<p style="text-align: center;"><img class="aligncenter" src="http://www.nagel.co.za/wp-content/uploads/2009/10/SelllingSoulToGetTheDishesDone.png" alt="" width="375" height="198" /></p>
<p>In the above hypothetical scenario, a project took an action and derived some immediate short-term but short-lived benefit from it &#8211; the green spike. But the cost, or consequence of the benefit was an ongoing an increasing recurring detriment. Continuing in the same vein as in my last installment, one could call this &#8220;selling your soul to get the dishes done&#8221;. Don&#8217;t try this at home.</p>
<p>However, since no-one on earth would be so crazy as to do this (I hope), let&#8217;s move on to a potential permutation that&#8217;s a tad more realistic:</p>
<p style="text-align: center;"><img class="aligncenter" src="http://www.nagel.co.za/wp-content/uploads/2009/10/dishwashing-investing-curve7.png" alt="" width="375" height="198" /></p>
<p>In this case, the same short-term benefit was gained, but this time at a much lower cost: specifically, a small but constant ongoing cost.</p>
<p>The red part of the curve is more realistic, since it&#8217;s not unheard of for things to have ongoing constant costs &#8211; if you employ someone, you have to repeatedly pay them a salary for the foreseeable future; if you add a feature to your codebase, you will incur a small but repeated cost to maintain that feature in the face of framework upgrades.</p>
<p>However, the green part is still a bit atypical: usually software is developed in order to gain an ongoing benefit, such as clients paying fees for the services the software enables.</p>
<p>But I first want to pause here a bit.</p>
<p>Readers may suspect by now that I&#8217;m getting at the topic of trade-offs of long-term vs. short-term costs and benefits. So, they may guess that I&#8217;m heading towards saying that ongoing long-term cost will eventually negate short-term immediate benefits. Well, <em>I</em> thought that I was driving towards that point.</p>
<p>So, let&#8217;s introduce another concept: You can think of the state of your project today by stacking up <em>all</em> the graphs of all consequences of <em>all</em> past actions. Projects don&#8217;t consist of single actions, they consist of a multitude of actions, week-by-week and day-by-day. Each action has its own consequences; each of those consequences could potentially be good or bad, short-lived or long-term.</p>
<p>Now let&#8217;s explore what would happen if one made a habit of this hypothetical business model of getting short-lived benefit at constant long-term cost:</p>
<p style="text-align: center;"><img class="aligncenter" src="http://www.nagel.co.za/wp-content/uploads/2009/10/stacked-consequences-1.png" alt="" width="375" height="198" /></p>
<p>Well, ok. So the ongoing costs keep getting bigger and bigger. But hey &#8211; they do manage to get a nice <em>ka-ching!</em> in the cash register at regular intervals.</p>
<p>It is at this point, I guess, that some astute readers are really getting irritated with me. What&#8217;s with the silly green and red distinction between costs and benefits? Why don&#8217;t I just simplify my model by adding them up and talking about nett costs and benefits?</p>
<p>I must admit that my inner mathematician made the exact same objection, and it took me a while to figure out why I instinctively wanted to keep the red and green separate. But I kept them, and I have my reasons.</p>
<p>But for now, let&#8217;s acquiesce, and replace the above with a nett graph. Better yet, let&#8217;s graph the cumulative costs and benefits accrued over the entire lifetime of the project:</p>
<p style="text-align: center;"><img class="aligncenter" src="http://www.nagel.co.za/wp-content/uploads/2009/10/cumulative-consequences-1.png" alt="" width="375" height="198" /></p>
<p>Hey, that doesn&#8217;t look to bad! We&#8217;ve got a realistic cost model and a hypothetical pessimistic benefit estimate (only once-off short-term benefits), and even then the nett benefit seems to go through the ceiling. Maybe this model is sustainable after all!</p>
<p>Even I was stumped for a while, since my I set out to show that the hypothetical model is <em>not </em>sustainable.</p>
<p>And that&#8217;s where will pick up from in the next installment.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagel.co.za/2009/10/selling-your-soul-to-get-the-dishes-done/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The Grandfather&#8217;s Axe Pattern</title>
		<link>http://www.nagel.co.za/2009/10/the-grandfathers-axe-pattern/</link>
		<comments>http://www.nagel.co.za/2009/10/the-grandfathers-axe-pattern/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 19:44:51 +0000</pubDate>
		<dc:creator>pnagel</dc:creator>
				<category><![CDATA[Agile Development]]></category>

		<guid isPermaLink="false">http://www.nagel.co.za/?p=213</guid>
		<description><![CDATA[A friend of mine is saddled with occasionally maintaining some TCL code, because a few years ago a programmer who was a &#8220;TCL fanatic&#8221; worked at her company and then moved on. Neither she nor anyone else in the company &#8230; <a href="http://www.nagel.co.za/2009/10/the-grandfathers-axe-pattern/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A friend of mine is saddled with occasionally maintaining some TCL code, because a few years ago a programmer who was a &#8220;TCL fanatic&#8221; worked at her company and then moved on. Neither she nor anyone else in the company really loves TCL, and so she understands it only enough to maintain the damn program as required. Sometimes she goes all wistful at the idea of rewriting it all in C, in that &#8220;wouldn&#8217;t it be great if &#8211; but it ain&#8217;t never going to happen &#8211; but one <em>can</em> dream&#8230;&#8221; tone of voice.</p>
<p>Today, I am <em>not</em> going to comment on how suitable either TCL or C is for the job. I will take it as a given that, TCL is the wrong tool for the job and that C is the right tool for her to use &#8211; in her specific context. Because, of course, <em>she</em> and whichever reasons make her prefer C is an important part of her specific context.</p>
<p>However, I do want to comment on the &#8220;rewrite&#8221; bit. Rewrites are fraught with risk and are almost invariably more complicated that anticipated. See, for example, Uncle Bob on <a href="http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky">The Big Redesign in the Sky</a>.</p>
<p>I&#8217;ve lost count of the times when I&#8217;ve had to make a &#8220;small&#8221; change to our system which we thought would &#8220;obviously maintain existing semantics&#8221;, only to find that the big bold leap to the new algorithm doesn&#8217;t work. In those cases, it has been of great value to retain both the old and the desired new implementation <em>simultaneously</em>, add asserts to our code that verify that both algorithms yield the same result, run the whole test suite, and let the computer pinpoint the fallout. Fix test failures, lather, rinse repeat.</p>
<p>And all that in the context of a small modification within a single existing system! I shudder when I contemplate the notion of trying to create a whole second <em>system</em> from scratch.</p>
<p>Luckily, there are better ways than a blank-slate rewrite. One option is the &#8220;<a href="http://www.martinfowler.com/bliki/StranglerApplication.html">Strangler Pattern</a>&#8221; Martin Fowler described (also know as the &#8220;Strangler Vine Pattern&#8221;). The basic idea is to wrap the new system <em>around</em> the old system, siphon off more and more of the external-world inputs to the new application, until the new application replaces the old. Somewhat like a strangler vine replaces the tree it parasitises for scaffolding.</p>
<p>But there is another alternative, which I would call the &#8220;Grandfather&#8217;s Axe&#8221; pattern:</p>
<blockquote><p>As the proverb says: &#8220;This is my grandfather&#8217;s axe: my father fitted it with a new stock, and I have fitted it with a new head.&#8221;<br />
—Robert Graves, The Golden Fleece, p. 445</p></blockquote>
<p>If you replace all the parts of something one by one, is it still the same thing at the end? Or think of Theseus&#8217; Ship of Greek legend, which slowly, over time, had all its&#8217; planks replaced. Is it still the same ship?</p>
<div id="attachment_214" class="wp-caption aligncenter" style="width: 310px"><img class="size-full wp-image-214" title="trireme" src="http://www.nagel.co.za/wp-content/uploads/2009/10/trireme1.jpg" alt="Lost argonauts, recently spotted in the present-day incarnation of Theseus' ship." width="300" height="222" /><p class="wp-caption-text">Lost argonauts, recently spotted in the present-day incarnation of Theseus&#39; ship.</p></div>
<p>Instead of building a new system around the old one, replace parts of the old system one by one until only the new system remains. In the Strangler Pattern, the new system gets control <em>before</em> the old system does, and in that way intercepts more and more functionality. In this pattern, each part of the new system gets control at exactly the same point as the old part did, and functions within the context of the old system.</p>
<p>So, I would advise my friend:</p>
<ol>
<li>Install something like <a href="http://www.swig.org/">SWIG</a>.</li>
<li>Choose a simple, self-contained TCL function without dependencies to the rest of the TCL system. Reimplement it in C.</li>
<li>Figure out how to get the old TCL code to call the new C function.</li>
<li>With the mechanics of SWIG and TCL to C integration under your belt, next time you need to maintain a TCL function, try to move it to C first before extending its&#8217; behaviour.</li>
<li>Repeat until no TCL is left. This is the crux: if there&#8217;s no will to see if through, one is left with a more complicated system than one started off with.</li>
<li>Discard the SWIG scaffolding.</li>
</ol>
<p>One need not end up with a straightforward C port of the original system this way. As more and more of the system lives in the context you prefer, it should be easier to mould that part of the emerging new system into a new shape. That&#8217;s the premise: that the code is so much more expensive to maintain and modify in TCL that it would be cheaper and easier to modify it in C. If this premise isn&#8217;t true, there&#8217;s no point to this exercise.</p>
<p>Since the essence is to gain maintainability, I would also strongly advise taking the opportunity to explore Test Driven Development to bring the nascent new system under automated testing and gain a better handle on maintaining it.</p>
<p>However, I do feel compelled to point out that personally, I would never choose to move <em>towards</em> C in this way. I would use this technique to move <em>away</em> from C toward something like Python, Ruby, Lua, Scala or the like. Or, if appropriate, I would use this technique to isolate the speed-critical code into C subcomponents and the rest into a more malleable higher-level language &#8211; also known as the <a href="http://www.c2.com/cgi/wiki?AlternateHardAndSoftLayers">Alternate Hard and Soft Layers</a> pattern.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagel.co.za/2009/10/the-grandfathers-axe-pattern/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Part 1. Dishwashing, coin-dropping, investing, and hemorrhaging</title>
		<link>http://www.nagel.co.za/2009/10/dishwashing-coin-dropping-investing-and-hemorrhaging/</link>
		<comments>http://www.nagel.co.za/2009/10/dishwashing-coin-dropping-investing-and-hemorrhaging/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 22:44:53 +0000</pubDate>
		<dc:creator>pnagel</dc:creator>
				<category><![CDATA[Agile Development]]></category>

		<guid isPermaLink="false">http://www.nagel.co.za/?p=200</guid>
		<description><![CDATA[[This is Part 1 of my Quality and Productivity series]. For the most part, we tend to think about software projects as a sequence of tasks: we need to build the Whizz-Bang Widget, then the Decimal Doodad, then the Super-Service &#8230; <a href="http://www.nagel.co.za/2009/10/dishwashing-coin-dropping-investing-and-hemorrhaging/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>[This is Part 1 of my <a href="http://www.nagel.co.za/2009/10/qualitiy-and-productivity/">Quality and Productivity</a> series].</p>
<p>For the most part, we tend to think about software projects as a sequence of <em>tasks</em>: we need to build the Whizz-Bang Widget, then the Decimal Doodad, then the Super-Service Subsystem.</p>
<p>Tasks have <em>costs</em> associated with them, for example monetary costs (often mostly from salaries), and time costs (from the passage of time as the programmers sit around earning those salaries while doing whatever on earth is is they <em>do</em> when they create those doodads). Both of these costs are linked to <em>time</em>.</p>
<p>If we want to become a bit more sophisticated, we can say that tasks have inter-dependencies: we need to do the Widget before we can start tackling the Super-Service. But mostly, the concern here is once again <em>time</em>: task B will have to wait for task A, which means <em>time</em> has to pass.</p>
<p>And for the most part, it seems to me like our industry acts as that what it&#8217;s all about: things need to be done, and preferably quickly. Most of of our project management meetings, and artifacts, and Gantt charts, and status updates, and Burn-down charts, and task estimation, most of our de-facto behaviour that an outside anthropologist would notice &#8211; it all seems to me to be focused on <em>time</em>: <em>when</em> can I have this done?</p>
<p>I&#8217;ll call that task-based thinking, and my aim here is to break that mold a bit.</p>
<p>For a start, not all &#8220;tasks&#8221; are the same. Over the past few years I started sorting tasks, in my mind, into categories which I&#8217;ll call Dishwashing, Coin-dropping, Investing, and Hemorrhaging.</p>
<p>The essence of the distinction I want to make is this: tasks have certain <em>consequences</em> &#8211; either good, or bad (or both), and these consequences play out over time, long after the task is done. I imagine those consequences as a graph with green or red lines, going off into the future.</p>
<h2>Dishwashing</h2>
<p>You could do the dishes sloppily, with a half-hearted rinse and wipe, or you could scrub them up like a surgeon washes his hands. But for the most part, once you&#8217;ve used the dishes again and washed them again, no trace of how well or how badly you washed them the previous time remains.</p>
<p>The shape, over time, of the consequences of Dishwashing type tasks are pretty boring. There&#8217;s a brief blip of goodness as the plates gleam and the kitchen is tidy, but by tomorrow the value of that single act of dishwashing is gone, for ever:</p>
<div class="wp-caption aligncenter" style="width: 385px"><img class="  " src="http://www.nagel.co.za/wp-content/uploads/2009/10/dishwashing-investing-curve1.png" alt="" width="375" height="198" /><p class="wp-caption-text">Dishwashing: value over time</p></div>
<p>An example of this in the programming world would be: you are developing on your system, and the app suddenly crashes. You guess it&#8217;s &#8220;that bug&#8221; again, the one that (you hope!) only surfaces in the development environment. So, instead of permitting yourself to get &#8220;sidetracked&#8221; by figuring out the source of the bug, you just do the proverbial reboot, or &#8220;<code>make clean; make"</code> so that you can focus on the task at hand again because you know by experience that will make the bug go away &#8211; for now.</p>
<p>I would call that type of thing <em>dishwashing</em>. Rebooting helped you now, but it did absolutely nothing to prevent &#8220;that bug&#8221; from biting you in the backside again tomorrow, and the day after that, and next week, and the week thereafter&#8230;</p>
<p>I saw another good example of dishwashing this week: I had a mole cut out, and afterwards the doctor sat in front of her laptop for 15 minutes to make up the account. First she had to add a line item for &#8220;consultation&#8221;, then for &#8220;anaesthetic&#8221;, then for &#8220;stitches&#8221;, then for &#8220;wound dressing&#8221;, then for &#8220;sterilising the pincettes&#8221;, then for &#8220;disposing of the scalpel blade&#8221;, and so forth. As she did this she apologized profusely: their accounting system can actually cope with adding categories like &#8220;mole removal&#8221; that break down into typical line items, so that they need only add the unexpected items to the account. But, she said, they haven&#8217;t had the time to get round to setting it up yet. Well, what she did was dishwasing: it helped to get <em>my</em> account done, but did nothing to help get the <em>next</em> patient&#8217;s account done.</p>
<h2>Investing</h2>
<p>Years ago you could have taken take a sum of money and invested it in Google; or you could have put the same money in Enron. A week later, you wouldn&#8217;t have noticed much of a difference, but by now you&#8217;d have noticed that the act of investing in Google just keeps on giving, whilst the act of investing in Enron gave you <em>nothing</em>.</p>
<p>The time-shape of Investing type taks is more interesting. The value may take a while to kick in, but thereafter it remains a constant (in this case, literally) presence in your life:</p>
<div class="wp-caption aligncenter" style="width: 385px"><img src="http://www.nagel.co.za/wp-content/uploads/2009/10/dishwashing-investing-curve2.png" alt="" width="375" height="198" /><p class="wp-caption-text">Investing: value over time (constant)</p></div>
<p>In the financial world, that&#8217;s a pretty atypical investment, one with constant returns. But examples of this in the programming world are not so rare: Imagine you make an improvement that shaves a minute off your total compile time, and imagine you do a full compile five times each day, on average. Then your act yields a constant daily 5 minute return on investment for each and every single day thereafter.</p>
<p>But, of course, non-linear return curves are also possible, and not just in the financial world:</p>
<div class="wp-caption aligncenter" style="width: 385px"><img src="http://www.nagel.co.za/wp-content/uploads/2009/10/dishwashing-investing-curve3.png" alt="" width="375" height="203" /><p class="wp-caption-text">Investing: value over time (exponential)</p></div>
<p>What would an example of this be in our industry? Imagine you run the some sort of online service, and you make your money off subscriptions. You spend a certain fixed amount of time to release an API which allows other people to write plug-in apps for your service. Imagine that causes a community form around your service, and every day the word of mouth spreads to more and more people, who subscribe to your service to make use of the cool plugins their friends are nattering on about. And then, the next day, they natter on about it to two other friends, and so forth,</p>
<p>Oh, and by the way: when you look at these graphs you may wonder what measure of time is represented by the X axis. Well, for now, my answer is: <em>more than you think</em>. If you thought I drew a graph of how the consequences of the action panned out over the next week, no. I drew the next month. If you thought I drew a month, no. It was a year. If you thought I drew a year, well, actually, you&#8217;re looking at a decade.</p>
<h2>Coin-dropping</h2>
<p>Thus far, I&#8217;ve only drawn green graphs. Now it&#8217;s time for the red.</p>
<p>If, for example, you accidentally drop a coin on the ground when you peek inside your wallet, that would be a loss, but at least when it&#8217;s over, it&#8217;s over. So coin-dropping is the mirror image of dishwashing:</p>
<div class="wp-caption aligncenter" style="width: 385px"><img src="http://www.nagel.co.za/wp-content/uploads/2009/10/dishwashing-investing-curve4.png" alt="" width="375" height="203" /><p class="wp-caption-text">Coin-dropping: cost over time</p></div>
<p>IT example: you lean back in your chair and accidentally kick the power switch. Computer off. Dang.</p>
<p>Or, you hit ALT-TAB once to many and get distracted a single session of reading Slashdot.</p>
<h2>Hemorrhaging</h2>
<p>Hemorhaging is investing&#8217;s evil twin. Instead of keeping on giving, it just keeps on <em>taking:</em></p>
<div class="wp-caption aligncenter" style="width: 385px"><img src="http://www.nagel.co.za/wp-content/uploads/2009/10/dishwashing-investing-curve5.png" alt="" width="375" height="203" /><p class="wp-caption-text">Hemorrhaging: cost over time (constant)</p></div>
<p>An example of that in the computer world would be if you make a change that causes your system&#8217;s test suite to run 1 minute longer than before. For each and every day after that, your project loses <code>(number of developers) × (number of test runs)</code> minutes.</p>
<p>But here comes the stuff of nightmares: You get your running account and your credit card account numbers confused, and thereafter, you buy the office stationery, pay your electricity bill, run your company&#8217;s payroll, everything off the credit card. Not because you desperately need to stay afloat for just one more month until that huge contract you did pays out, no: just by accident. <em>And then you only notice the mistake once the interest payments exceed your income:</em></p>
<div class="wp-caption aligncenter" style="width: 385px"><img src="http://www.nagel.co.za/wp-content/uploads/2009/10/dishwashing-investing-curve6.png" alt="" width="375" height="203" /><p class="wp-caption-text">Hemorrhaging: cost over time (exponential)</p></div>
<p>What would be an example of that in the development world? Well, for example, you choose to add something to your toolchain whose running time is O(n<span style=" vertical-align:super;">2</span>) proportional to number of lines of code in your system. Today things are okay, but next quarter development is a bit slower, and next year ever worse, and five years later you institute a system where each developer has 30 PCs and rotates amongst them each day, so that she can continue coding on the changes she started compiling last month.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagel.co.za/2009/10/dishwashing-coin-dropping-investing-and-hemorrhaging/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Quality And Productivity</title>
		<link>http://www.nagel.co.za/2009/10/qualitiy-and-productivity/</link>
		<comments>http://www.nagel.co.za/2009/10/qualitiy-and-productivity/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 22:28:24 +0000</pubDate>
		<dc:creator>pnagel</dc:creator>
				<category><![CDATA[Agile Development]]></category>

		<guid isPermaLink="false">http://www.nagel.co.za/?p=202</guid>
		<description><![CDATA[This blog post is a placeholder index for a whole series of posts which I wish to do in future on quality and productivity, especially in the context of software development. I will update it to link to each future &#8230; <a href="http://www.nagel.co.za/2009/10/qualitiy-and-productivity/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This blog post is a placeholder index for a whole series of posts which I wish to do in future on quality and productivity, especially in the context of software development. I will update it to link to each future installment as I make it.</p>
<p>Over the past ten years I have been working as part of a team of developers who work on a single software system.Ten years is not exceptionally long, but I do suspect that it is much longer than the average time most programmers remain involved on a project.</p>
<p>In that time, I&#8217;ve gained some experience that I feel has given me a different perspective about many of the decisions and trade-offs we make day to day- because I&#8217;ve seen the long-term effect of many such decisions.</p>
<p>In short: I vociferously agree with the Agile and Lean dictum that to <em>increase</em> productivity, one needs to <em>increase</em> quality. Or, the converse: that cutting corners and lowering standards in order to get work done faster is a surefire recipe for <em>decreasing</em> productivity &#8211; bogging it down..</p>
<p>Nothing new there; nothing that <a href="http://en.wikipedia.org/wiki/W._Edwards_Deming">W. Edwards Deming</a>, the <a href="http://en.wikipedia.org/wiki/Lean_manufacturing">Lean</a> movement, <a href="http://www.threeriversinstitute.org/blog/">Kent Beck</a>, the signatories of the <a href="http://agilemanifesto.org/">Agile Manifesto</a>, and may practitioners in my own and other industries haven&#8217;t been saying in their own way for the past few decades.</p>
<p>But I find that I&#8217;ve grown to think about these things in ways that make it difficult to communicate with people who don&#8217;t share the same mental framework. More importantly: I find myself curious about what exactly my own mental framework <em>is</em>: I write it down for my own discovery more than anything else. In my mind, it feels like what I will write in future will be something akin to deriving a lot of the values and rules of thumb of the Agile world &#8220;from first principles&#8221;, as&#8217;t were, because it all &#8220;clicks together&#8221; in my head in a way I wish to share.</p>
<p>The outline as I anticipate it so far:</p>
<ul>
<li><a href="http://www.nagel.co.za/2009/10/dishwashing-coin-dropping-investing-and-hemorrhaging/">Part 1. Dishwashing, investing, and hemorrhaging</a>.</li>
<li><a href="http://www.nagel.co.za/2009/10/selling-your-soul-to-get-the-dishes-done/">Part 2. Selling your soul to get the dishes done.</span></a></li>
<li>The fallacy of &#8220;task-centric&#8221; thinking.</li>
<li>Ticking off a to do list, or making repeating appointments?</li>
<li>Cognitive bias: project mistakes we&#8217;re hard-wired to make</li>
<li>Over time, most systems tend to become absolutely dominated by long-term negative effects of short-term decisions.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.nagel.co.za/2009/10/qualitiy-and-productivity/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Bemoaning the dumbing down of consumer products</title>
		<link>http://www.nagel.co.za/2009/09/bemoaning-the-dumbing-down-of-consumer-products/</link>
		<comments>http://www.nagel.co.za/2009/09/bemoaning-the-dumbing-down-of-consumer-products/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 18:01:34 +0000</pubDate>
		<dc:creator>pnagel</dc:creator>
				<category><![CDATA[Other]]></category>

		<guid isPermaLink="false">http://www.nagel.co.za/?p=186</guid>
		<description><![CDATA[Nowadays it happens more and more that I can&#8217;t find what I want on the shelves, because the marketers of the products are too scared to say what the products actually are &#8211; doing so would confuse the customer, you &#8230; <a href="http://www.nagel.co.za/2009/09/bemoaning-the-dumbing-down-of-consumer-products/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Nowadays it happens more and more that I can&#8217;t find what I want on the shelves, because the marketers of the products are too scared to say what the products actually <em>are</em> &#8211; doing so would confuse the customer, you see.</p>
<p>Say, for example, my swimming pool is cloudy. I&#8217;ve already checked the acid, chlorinator, etc. so I surmise that the problem is that the pool is full of a little suspended particles &#8211; underwater dust, as&#8217;t were. Lots of <a href="http://www.gautrain.co.za/">Gautrain</a> construction in my area, so that&#8217;s no wonder.</p>
<p>No problem. I know exactly what I need and what it&#8217;s called: a <a href="http://en.wikipedia.org/wiki/Flocculation">flocculent</a>. The particles are so fine that they never settles to the bottom of the pool, where the Barracuda can suck it up. But a flocculent is a chemical that will make them stick together into larger clumps, that will sink and be caught by the filter.</p>
<p>Off to the shops, then.</p>
<p>I innocently and straightforwardly ask the shop assistant &#8220;where do you keep your flocculents?&#8221;, and I get punched in the face almost as hard as that time I told the petrol attendant &#8220;I want ethylene glycol&#8221; and he yelled at me: &#8220;I don&#8217;t care <em>where</em> you want her, pervert, you stay the <em>HELL</em> away from my wife!&#8221;</p>
<p>No, I lie. Today is a good day, the shop assistant just gives me a blank stare. For some reason they often give me blank stares when I ask for things.</p>
<p>So I just tackle the shelves myself. There&#8217;s rows and rows of Sparkle-Brites, and WonderBlues, and SuperClears &#8211; and SuperClear Plusses. Hmmm. On closer inspection, none are subtitled &#8220;WONDERBLUE flocculent&#8221; or the like, so a deeper inspection is warranted.</p>
<p>I turn the bottles round, expecting to find some marketing shpiel to the effect that &#8220;SuperClear is a superior flocculent that has been lovingly developed in our high tech labs in order to&#8230;&#8221;. Nothing. Nada.</p>
<p>What I do find is lots of promises that WonderBlue will make my pool wonderfully blue and clear, or that SparkleBrite is an essential part of every pool-owners poolcare regimen. Of course, I read the exact same statement on all the chlorine, all the Hydrochloric acid (pardon me, Pool Acid), Cyanuric Acid (oops, I mean Stabiliser), and algaecide (sorry, that would be &#8220;underwater disinfectant &#8211; kills blue-green pool-germs DEAD!&#8221;).</p>
<p>What to do?</p>
<p>If I&#8217;m lucky, the back of the product will at least say &#8220;&#8230; cleans the pool by making tiny particles that cloud your water sink to the bottom, where they can be sucked up by the automatic pool cleaner&#8221;. Then I can reasonably safely guess they mean &#8220;flocculent&#8221;.</p>
<p>If I&#8217;m less lucky, the back will read &#8220;&#8230;helps your pool filter clean the water better&#8221;. Then I can make a somewhat more cautious guess that they mean &#8220;flocculent&#8221;.</p>
<p>Alas, I&#8217;m left trying to guess whether a flocculent is most likely to be a powder, or a liquid, or a gel. Why can&#8217;t they just label their products with a description of what they <em>actually are</em>?</p>
<p>As it stands, I can just buy the damn things and see if they act like what I hope they are.</p>
<p>Which is, I guess, what the average consumer does, anyway: buy lots of stuff until they find something that works (because it complements their particular habits for neglecting certain pool chemicals), and then swear by that as the be-all and end-all of ultimate poolcare.</p>
<p>In a future installment, I shall relate my adventures when trying to purchase vulcanizing glue for a hobby project, and how the helpful shop assistant pointed me to &#8220;a theatre make-up shop where other that can help Star Trek fans like you&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagel.co.za/2009/09/bemoaning-the-dumbing-down-of-consumer-products/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Horses on Ice</title>
		<link>http://www.nagel.co.za/2009/03/horses-on-ice/</link>
		<comments>http://www.nagel.co.za/2009/03/horses-on-ice/#comments</comments>
		<pubDate>Sat, 07 Mar 2009 07:23:05 +0000</pubDate>
		<dc:creator>pnagel</dc:creator>
				<category><![CDATA[Other]]></category>

		<guid isPermaLink="false">http://www.nagel.co.za/?p=135</guid>
		<description><![CDATA[It would seem that horses on frozen lakes are not a good idea. (Well,  people on frozen lakes are not a good idea either, but at least rescuers are more likely to be able to drag people out if you &#8230; <a href="http://www.nagel.co.za/2009/03/horses-on-ice/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>It would seem that horses on frozen lakes are not a good idea. (Well,  people on frozen lakes are not a good idea either, but at least rescuers are more likely to be able to drag people out if you should fall through the ice.)</p>
<p>The following video show one such rescue of a horse that fell through a frozen pond. I found it quite nail-biting to watch, so for the sake of my horse-loving readers, I&#8217;ll give a spoiler: it all ends well.</p>
<div class="wp-caption aligncenter" style="width: 130px"><a href="http://www.youtube.com/watch?v=6o19cs_vQXQ"><img title="Untamed and Uncut - Horse Gets Trapped Under Ice" src="http://i3.ytimg.com/vi/6o19cs_vQXQ/default.jpg" alt="Untamed and Uncut - Horse Gets Trapped Under Ice" width="120" height="90" /></a><p class="wp-caption-text">Untamed and Uncut - Horse Gets Trapped Under Ice</p></div>
<p>The poor horse is in visible distress. Every time she does manage to wrestle her forequarters onto solid ice, the ice just cracked right out from underneath her and the she was dunked back into the frozen water. That seemed to make the horse just despair and dismay; at times she seemed ready to give up and die.</p>
<p>I find the technique the firemen used to traverse the ice fascinating: the laid down lots of ladders flat on the ice, then walked on the rungs of the ladders, instead of on the ice. In that way, the ladders become a giant snowshoe spreading their weight. I wonder of this is a common trick for ice rescues?</p>
<p>However, the firemen seemed obviously ill-prepared for the sheer size of the horse, and although they did manage to rescue her in the end, the way the handled her seemed very ill-prepared. It just seems wrong to try and haul a horse&#8217;s entire weight by a lasso around her neck.</p>
<p>It seems the firemen needed  some  <a title="Technical Large Animal Emergency Rescue" href="http://www.tlaer.org/">Technical Large Animal Rescue</a> training:</p>
<div class="wp-caption alignnone" style="width: 530px"><img title="Trained horse demonstrating how to be rescued" src="http://www.tlaer.org/gallery/technical/horse-floatation1_1.jpg" alt="Trained horse demonstrating how to be rescued" width="520" height="331" /><p class="wp-caption-text">Trained horse demonstrating how to be rescued</p></div>
<p>But the following photo just puzzlez me:</p>
<div class="wp-caption alignnone" style="width: 530px"><img title="This looks like something that would have the SPCA on your case" src="http://www.tlaer.org/gallery/technical/sheet-bend-knot_1.jpg" alt="" width="520" height="441" /><p class="wp-caption-text">This looks like something that would have the SPCA on your case</p></div>
<p>I can understand that rescuers will often only be able to use a less-ideal technique for harnessing a horse, but is the demonstrated technique really a viable way for dragging a horse by its tail? Or am I missing the purpose?</p>
<p>The whole thing of &#8220;horses falling through ice&#8221; <a href="http://www.horsetalk.co.nz/news/2009/02/026.shtml">seems</a> to <a href="http://news.yahoo.com/nphotos/water-trough/photo//090205/480/ce8ef07379a841a3bd772fe37c2b2059//s:/ap/20090206/ap_on_fe_st/odd_pencil_the_horse">happen</a> fairly regularly:</p>
<p><object width="425" height="344" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/tmg3BkHrGVQ&amp;hl=en&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed width="425" height="344" type="application/x-shockwave-flash" src="http://www.youtube.com/v/tmg3BkHrGVQ&amp;hl=en&amp;fs=1" allowFullScreen="true" allowscriptaccess="always" allowfullscreen="true" /></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nagel.co.za/2009/03/horses-on-ice/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

