<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:iweb="http://www.apple.com/iweb" version="2.0">
  <channel>
    <title></title>
    <link>http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Technology_Blog.html</link>
    <description> </description>
    <generator>iWeb 3.0.1</generator>
    <item>
      <title>An Open Letter to Telstra regarding your customer service</title>
      <link>http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2009/9/21_An_Open_Letter_to_Telstra_regarding_your_customer_service.html</link>
      <guid isPermaLink="false">88a40abc-729e-4920-9d72-a5cd449c4d36</guid>
      <pubDate>Mon, 21 Sep 2009 19:35:09 +1000</pubDate>
      <description>To Whom it may concern,&lt;br/&gt;&lt;br/&gt;I am writing to describe the experience I have had with Telstra over the past 3.5 months.&lt;br/&gt;&lt;br/&gt;For the past two years I have had a telephone service through a local infrastructure operator, TransACT Capital Communications. With their services becoming increasingly less competitive I decided to move my home telephone back to Telstra, and on June 9 ordered a home connection. This connection was to be established on July 3.&lt;br/&gt;&lt;br/&gt;On June 29 I received a voicemail message from a Telstra representative who told me that my order had been ‘lost’ and asked that I phone Telstra connections to resolve the problems.&lt;br/&gt;Later that day I spent 80 minutes on the phone to a Telstra representative, yet was disconnected in the middle of the call and unable to place the order.&lt;br/&gt;&lt;br/&gt;Several days later I successfully made the order to connect with Telstra, with a scheduled connection date in mid July. The day after the scheduled connection, when I confirmed that my home connection was still with TransACT, I phoned Telstra to find out why my connection had not been made. I was informed that my connection had been made, and after a lengthy discussion determined that the new number had been ‘connected’, but that the connection had not been made to my home. This component of the connection was due to occur on August 3.&lt;br/&gt;&lt;br/&gt;On July 28 I received a bill for one month’s line rental. This was for the connection that had (technically) been made, but had not been provided to me. At this point I again phoned Telstra, requesting that the bill be withdrawn. The operator said that she would cancel the connected service, and confirmed a number of times at my request that this cancellation would not effect the connection due to be made on August 3, also stating that my home telephone number would not change.&lt;br/&gt;&lt;br/&gt;On the evening of August 3 I attempted to phone my home to verify that the connection had been made. A recorded message advised that my old phone number was being forwarded to the new number, and a second message advised me that the number had been disconnected.&lt;br/&gt;&lt;br/&gt;On August 4 I once again phoned Telstra to find out what had happened, and the operator I spoke to arranged for a technician to visit my home on August 11 to verify once and for all that the connection would be established.&lt;br/&gt;&lt;br/&gt;On the evening of August 10 I received an SMS from Telstra advising me that the connection would be ‘auto-activated’ and that a technician would not be visiting the next morning.&lt;br/&gt;&lt;br/&gt;On the morning of August 11, just as I was leaving for work, a Telstra technician arrived at my home to make the connection.&lt;br/&gt;&lt;br/&gt;At last - At mid-morning on August 11 - more than two months after ordering a Telstra connection, I had obtained it.&lt;br/&gt;&lt;br/&gt;On August 12 I received two bills, one for call forwarding from my old number to my new number and the other for line rental from 23 July to 10 August.&lt;br/&gt;Regarding the latter bill, as described above I did not have a telephone connection during this time, attempting to bill me for the absence of a telephone line is reprehensible.&lt;br/&gt;Regarding the former, of the five times I spoke with Telstra to arrange this connection, I was offered number forwarding only on the third occasion, which I declined. I did not request, nor desire, forwarding of my previous phone number to my new number. Furthermore, I was advised on the fourth occasion I spoke with Telstra about this connection that my old number would be retained.&lt;br/&gt;&lt;br/&gt;On the afternoon of Friday, August 21 ADSL was activated on the line. I returned home later in the evening to discover that my phone line was no longer operational because a mistake had been made at the exchange. This was resolved on August 23.&lt;br/&gt;&lt;br/&gt;Since that time I have received four additional bills from Telstra, three of which were for the ‘number forwarding’ account which I did not request and asked to have cancelled as soon as I received the first bill for it.&lt;br/&gt;The third and fourth bills both included charges for line rental from August 11 - September 10. Because of the substantial amount of time I have spent to date endeavouring to resolve your billing inadequacies, and the inconvenient opening hours of your billing department, I am still attempting to resolve this issue.&lt;br/&gt;&lt;br/&gt;In summary, the level of service you have provided to me has been worse that abysmal. I have invested well in excess of 10 hours of my time attempting to firstly obtain a telephone connection and secondly be charged correct amounts for this connection.&lt;br/&gt;In addition to sharing my experiences I am seeking recompense under the terms of your Customer Service Guarantee, and summarise with the following key dates:&lt;br/&gt;&lt;br/&gt;June 9: Ordered connection&lt;br/&gt;August 11: Obtained connection&lt;br/&gt;August 21: Lost connection&lt;br/&gt;August 23: Regained connection&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Disappointedly yours,&lt;br/&gt;&lt;br/&gt;Chris Bennetts-Cash</description>
    </item>
    <item>
      <title>Back to tech - Using perl to import Lotus Notes calendar to iCal</title>
      <link>http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2009/7/18_Back_to_tech_-_Using_perl_to_import_Lotus_Notes_calendar_to_iCal.html</link>
      <guid isPermaLink="false">279d7818-5e3e-460e-ab0b-49b8adfa0eca</guid>
      <pubDate>Sat, 18 Jul 2009 15:35:35 +1000</pubDate>
      <description>&lt;a href=&quot;http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2009/7/18_Back_to_tech_-_Using_perl_to_import_Lotus_Notes_calendar_to_iCal_files/jilagan_Calendar_Icon_%28Large%29.jpg&quot;&gt;&lt;img src=&quot;http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Media/object000.png&quot; style=&quot;float:left; padding-right:10px; padding-bottom:10px; width:198px; height:163px;&quot;/&gt;&lt;/a&gt;The last few hours has seen me back to my coding roots (yay!). I recently discovered that Lotus Notes 8.0, which is used at work for everything other than lunch, has the ability to export its calendar in iCalendar (.ics) format.&lt;br/&gt;This set me thinking about how wonderful it would be to be able to have my work calendar on my iPhone, removing the necessity to rush from meeting to meeting via my desk to double-check where I’m meant to be going.&lt;br/&gt;&lt;br/&gt;So I excitedly exported my Notes calendar to a .ics file on my corporate USB stick (that’s a story for another time), popped it into my my Macbook and imported the file into iCal.&lt;br/&gt;&lt;br/&gt;Only to see no additional events in my calendar. I restarted iCal to see if it had gone crazy. Unfortunately not.&lt;br/&gt;“Not to worry, I’ll do it via Google Calendar”. Looks like Google Calendar can’t read Lotus’ interpretation of the iCalendar “standard” either.&lt;br/&gt;&lt;br/&gt;Bugger.&lt;br/&gt;&lt;br/&gt;So I spent a couple of hours on Saturday morning fiddling with the contents of the calendar file to see if I could make it work.&lt;br/&gt;Notes included a large number of timezone definitions. That probably makes some sense, but might not help matters. Then I discovered there were almost a dozen separate calendar sections within the XML file. Definitely not right. “I need to reformat this” I thought, firing up XCode and trying to think of the easiest way to implement it in perl.&lt;br/&gt;&lt;br/&gt;I ended up with this, which works mostly - Although for my very large calendar (5 years, not 1) required an additional tweak. So if you’re suffering the same problem give it a go!&lt;br/&gt;&lt;br/&gt;!/usr/bin/perl -w&lt;br/&gt;&lt;br/&gt;use strict;&lt;br/&gt;my $line;&lt;br/&gt;my $event = 0;&lt;br/&gt;my $endEvent = 0;&lt;br/&gt;&lt;br/&gt;print&amp;lt;&amp;lt;END_PRINT;&lt;br/&gt;BEGIN:VCALENDAR&lt;br/&gt;X-WR-CALNAME:LotusNotes&lt;br/&gt;PRODID:-//Apple Inc.//iCal 3.0//EN&lt;br/&gt;CALSCALE:GREGORIAN&lt;br/&gt;VERSION:2.0&lt;br/&gt;METHOD:PUBLISH&lt;br/&gt;BEGIN:VTIMEZONE&lt;br/&gt;TZID:Australia/Canberra&lt;br/&gt;BEGIN:STANDARD&lt;br/&gt;TZOFFSETFROM:+1100&lt;br/&gt;TZOFFSETTO:+1000&lt;br/&gt;DTSTART:20080406T030000&lt;br/&gt;RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU&lt;br/&gt;TZNAME:EST&lt;br/&gt;END:STANDARD&lt;br/&gt;BEGIN:DAYLIGHT&lt;br/&gt;TZOFFSETFROM:+1000&lt;br/&gt;TZOFFSETTO:+1100&lt;br/&gt;DTSTART:20081005T020000&lt;br/&gt;RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU&lt;br/&gt;TZNAME:EST&lt;br/&gt;END:DAYLIGHT&lt;br/&gt;END:VTIMEZONE&lt;br/&gt;END_PRINT&lt;br/&gt;&lt;br/&gt;while (&amp;lt;&gt;) {&lt;br/&gt;   if (/^BEGIN\:VEVENT/) {&lt;br/&gt;      $event = 1;&lt;br/&gt;   } elsif (/END\:VEVENT/) {&lt;br/&gt;      $event = 0;&lt;br/&gt;      $endEvent = 1;&lt;br/&gt;   }&lt;br/&gt;   if ($event or $endEvent and not ( /^BEGIN\:VCALENDAR/ or /END:VCALENDAR/ )) {&lt;br/&gt;      $line = $_;&lt;br/&gt;      $line =~ s/\;TZID=(.)+\:/\;TZID=Australia\/Canberra:/g;&lt;br/&gt;      print $line;&lt;br/&gt;   }&lt;br/&gt;   $endEvent = 0;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;print &amp;quot;END:VCALENDAR\n&amp;quot;;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Simply run it from a terminal like so:&lt;br/&gt;perl fileNameWithPastedCode.pl brokenNotesCalendar.ics &gt; fixedNotesCalendar.ics&lt;br/&gt;&lt;br/&gt;I mentioned a problem earlier - When run over my entire calendar file this didn’t change the effect of an import (even though it worked fine with a 12-month snapshot of my calendar). I don’t understand why, but when I opened the resulting file in TextWrangler the resulting file was double-spaced. Here’s what I did:&lt;br/&gt;Changed the character format using TextWrangler to “Unix (LF)”:&lt;br/&gt;&lt;br/&gt;Saved the file&lt;br/&gt;Opened a terminal and ran the following:&lt;br/&gt;grep -ve ^$ fixedNotesCalendar.ics&lt;br/&gt;&lt;br/&gt;And it all worked!</description>
      <enclosure url="http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2009/7/18_Back_to_tech_-_Using_perl_to_import_Lotus_Notes_calendar_to_iCal_files/jilagan_Calendar_Icon_%28Large%29.jpg" length="47040" type="image/jpeg"/>
    </item>
    <item>
      <title>&quot;How do we sustain improvement practice in our section?&quot;</title>
      <link>http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2009/5/19_%22How_do_we_sustain_improvement_practice_in_our_section%22.html</link>
      <guid isPermaLink="false">a8b7eae2-54a9-497b-a3f4-18829731f581</guid>
      <pubDate>Tue, 19 May 2009 07:10:39 +1000</pubDate>
      <description>&lt;a href=&quot;http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2009/5/19_%22How_do_we_sustain_improvement_practice_in_our_section%22_files/StairwayToHeaven-D-4d.jpg&quot;&gt;&lt;img src=&quot;http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Media/object023.png&quot; style=&quot;float:left; padding-right:10px; padding-bottom:10px; width:198px; height:95px;&quot;/&gt;&lt;/a&gt;I took a long weekend last week, and returning to work on Monday found an email in my inbox from a colleague who is venturing into the BPM waters. Needless to say I ignored it until I’d gone through the rest of my inbox.&lt;br/&gt;&lt;br/&gt;Then I came back to it. “How do we sustain improvement practice in our section?” Of course we need to - we are all still aiming for the nirvana of business processes that are actively managed and continually-improved, aren’t we?&lt;br/&gt;&lt;br/&gt;Here are some options I’ve put forward. What would you recommend?&lt;br/&gt;&lt;br/&gt;	1.	Measure measure measure.&lt;br/&gt;This is an area where we both aren’t very good and have  the capacity to become very good.&lt;br/&gt;If we capture measures of the effectiveness and efficiency of our processes and monitor them over time we can identify activities whose variation changes these measures &amp;amp; standardise activities to optimise our measures.&lt;br/&gt;A very highly-recommended resource is Stacey Barr, her newsletters &amp;amp; articles at &lt;a href=&quot;http://www.staceybarr.com/&quot;&gt;http://www.staceybarr.com&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;	1.	Apply Process Improvement methodologies such as Six Sigma, Lean, TQM, CMMI, ... that guide process improvement activities&lt;br/&gt;These have a lot of potential but also potentially require a lot of effort to start &amp;amp; continue. The Six Sigma methodology is similar to what I’ve described in (1), define metrics that measure quality of any processes that contribute to outcomes &amp;amp; work toward reducing variation in these measures. Lean is about identifying &amp;amp; removing different types of waste in your processes, and I think is a very useful framework to guide process analysis - “what do we currently do that doesn’t add value?”.&lt;br/&gt;&lt;br/&gt;	1.	Forget the frameworks and use the wisdom of crowds&lt;br/&gt;Toyota, in addition to having led the world in process improvement methodologies (often being held up as examples of what we’re trying to attain with lean &amp;amp; six sigma), have developed an organisational culture where all staff are expected and empowered to improve business processes. They receive millions of employee suggestions every year, and (so I was told) around 40% of these suggestions are implemented, at least for a time. With employees knowing that they’re able to influence &amp;amp; improve all facets of the organisation (including influencing the nature of their work) people actually spend time thinking about how to do things better - And who knows better than people involved in the process what doesn’t work well and how it might be improved?&lt;br/&gt;This option really excites me, I think it has a lot of potential if we can move past the cliché of ‘suggestion boxes’ and move toward a culture that strives for change and improvement.&lt;br/&gt;And while changing culture is probably the most challenging option to pursue, I think it is going to be the one that best stands the test of time (provided it’s done successfully).&lt;br/&gt;&lt;br/&gt;</description>
      <enclosure url="http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2009/5/19_%22How_do_we_sustain_improvement_practice_in_our_section%22_files/StairwayToHeaven-D-4d.jpg" length="121803" type="image/jpeg"/>
    </item>
    <item>
      <title>Enterprise-wide BPM in analytical services</title>
      <link>http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2009/4/2_Enterprise-wide_BPM_in_analytical_services.html</link>
      <guid isPermaLink="false">7988b55f-6dcd-485d-8a45-590a3aa19497</guid>
      <pubDate>Thu, 2 Apr 2009 15:36:11 +1100</pubDate>
      <description>&lt;a href=&quot;http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2009/4/2_Enterprise-wide_BPM_in_analytical_services_files/JT20Campbell1.jpg&quot;&gt;&lt;img src=&quot;http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Media/object024.png&quot; style=&quot;float:left; padding-right:10px; padding-bottom:10px; width:198px; height:94px;&quot;/&gt;&lt;/a&gt;It’s been six months since I last blogged. This has been for a number of reasons, but the biggest is that I’ve been so consumed between work and my hobbies that time spent at home has been filled with - incredibly - relaxing!&lt;br/&gt;&lt;br/&gt;But I’ve come to the point where I need to tease out some ideas that are tugging at my brain, see if I can build them into a coherent picture, and solicit feedback from anyone who is interested (that’s you, right?!).&lt;br/&gt;&lt;br/&gt;For this, I want you to imagine a hypothetical organisation of considerable size. This organisation is engaged in collecting, aggregating and analysing large amounts of data, across a number of quite different subject areas.&lt;br/&gt;Over the decades of its existence each subject matter area within the organisation has developed independently from the others. With the current push to reduce costs and improve productivity there is now a recognition that these differences need to be united.&lt;br/&gt;&lt;br/&gt;This has been attempted (or begun) a couple of times to date, with the involved parties soon floundering for want of direction. It is now beginning again, and with this work tying into the periphery of the BPM programme I’m currently leading (and for which the end of my involvement is in sight) I’m taking an interest in this project being successful so that it can envelop mine, taking responsibility for the “continuous improvement” phase of the BPM endeavour.&lt;br/&gt;&lt;br/&gt;The progress to date&lt;br/&gt;A high level process architecture has been defined for the organisation in focus, with all stakeholders agreeing to the architecture. This is at the level of “Acquire data”, “Process inputs”, “Aggregate data”, “Analyse &amp;amp; explain”, etc. Pockets of technology have been produced to meet various business needs within each high-level process, but no common methodology exists to guide people in the implementation of this process.&lt;br/&gt;&lt;br/&gt;The progress from here&lt;br/&gt;The programme leader is convinced that a business process improvement project is needed to define lower level process maps and ... improve productivity.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;This screams out to me as missing a few steps, with no clear plan for how mapping lower level processes (which will be quite different for each subject area involved) will result in improved productivity. Pointing this out had two consequences:&lt;br/&gt; - A number of people were annoyed at my challenge of their plan;&lt;br/&gt; - I became responsible for ensuring there was a coherent plan for identifying (realistic) process improvements.&lt;br/&gt;&lt;br/&gt;So here’s the plan - Please leave a comment to tell me what you think!&lt;br/&gt;&lt;br/&gt;Members of the subject matter areas work together to identify a small set of alternative processes within each part of the process architecture that encompass the as-is processes being followed throughout the organisation.&lt;br/&gt;This is the initial plan. At the end of this we will have a small number of as-is process maps for “Acquire data”, and for each of the other high level processes.&lt;br/&gt;&lt;br/&gt;At this point the way by which each subprocess is implemented will probably differ throughout the organisation, perhaps significantly.&lt;br/&gt;&lt;br/&gt;From here, measures will be identified for each subprocess of the above process maps to measure their efficiency, effectiveness and adaptability. Metrics will be collected to identify which processes are of the poorest health, and these processes - and these only - will be standardised throughout the organisation, with common techniques and tools defined as necessary to resolve the pain.&lt;br/&gt;&lt;br/&gt;The result of this will be  organisational business processes that are somewhat standardised - Processes that don’t cause problems will continue to work as they always have, implemented differently throughout the organisation; but processes that are points of pain will be fixed, standardised, and adopted throughout the organisation.</description>
      <enclosure url="http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2009/4/2_Enterprise-wide_BPM_in_analytical_services_files/JT20Campbell1.jpg" length="37112" type="image/jpeg"/>
    </item>
    <item>
      <title>New stereo cables</title>
      <link>http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/11/30_New_stereo_cables.html</link>
      <guid isPermaLink="false">9709f051-810a-425a-b973-a7e2c9c9c931</guid>
      <pubDate>Sun, 30 Nov 2008 11:40:50 +1100</pubDate>
      <description>&lt;a href=&quot;http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/11/30_New_stereo_cables_files/IMG_0045.jpg&quot;&gt;&lt;img src=&quot;http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Media/object025.png&quot; style=&quot;float:left; padding-right:10px; padding-bottom:10px; width:198px; height:136px;&quot;/&gt;&lt;/a&gt;A confession: This post barely qualifies to be part of this blog, but it IS about technology, just not the technology I usually write about.&lt;br/&gt;&lt;br/&gt;But I recently got some new speaker cables, and they’ve made such a difference to the sound in my stereo that I feel the need to talk about them.&lt;br/&gt;&lt;br/&gt;I got them all from &lt;a href=&quot;http://www.coemaudio.com.au/&quot;&gt;Coem Audio Australia&lt;/a&gt; - A small store in Qld that specialise in high-quality Chinese hi-fi equipment. Their quality is great (but certainly not Van Den Hull), their service is incredible, and their cost is amazing by hi-fi standards (I paid about $300 for the four cables).&lt;br/&gt;&lt;br/&gt;What I got:&lt;br/&gt;&lt;a href=&quot;http://www.coemaudio.com.au/Cables/Interconnects/175/&quot;&gt;Rose Voix DG1 75 ohm digital coaxial cable&lt;/a&gt;&lt;br/&gt;This is a simple coax cable. Replacing this in my system and leaving everything else the same made a noticeable difference to the sound coming out of my DAC - the homemade coax cable it replaced was a relatively low quality cable because it seems impossible to find really high quality coaxial cable in Canberra.&lt;br/&gt;This cable is now running from my &lt;a href=&quot;http://www.marantz.com/new/index.cfm?fuseaction=Products.ArchProduct&amp;cont=eu&amp;bus=hf&amp;prod_id=2476&amp;type=cd&quot;&gt;Marantz CD7300&lt;/a&gt; to my &lt;a href=&quot;http://www.coemaudio.com.au/Sources/DACs/183/&quot;&gt;modified Lite DAC-AH&lt;/a&gt; non-oversampling D/A converter.&lt;br/&gt;&lt;br/&gt;&lt;a href=&quot;http://www.coemaudio.com.au/Cables/Interconnects/162/&quot;&gt;SoundRight SN2 interconnects (x2)&lt;/a&gt;&lt;br/&gt;Twisted OFC cable. Got these because I wanted a comparison to my homemade interconnects (made by braiding two pairs of 12 gauge OFC wire for each cable). The twin shielding of these cables is great because of the stereo’s proximity to my Mac Mini.&lt;br/&gt;These cables are now running from my DAC to my homemade audio switching box and from the box to my &lt;a href=&quot;http://www.decibelhifi.com.au/prod332.htm&quot;&gt;Sonic Impact Super T-Amp&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;&lt;a href=&quot;http://www.coemaudio.com.au/Cables/Speaker-Cables/144/&quot;&gt;SoundRight LN2 Speaker Cables&lt;/a&gt;&lt;br/&gt;These guys are shown in the photo above, and they’re absolutely huge. Replacing plain old CAT5 (two sets of four 12-gauge OFC twisted) cable they make a massive difference to the sound. My previous speaker cable was three CAT5 cables braided together (4 wires for each pole of treble, 8 wires for each pole of bass) and that was good. This cable goes a step further in bringing out the subtleties of my music. Connecting them up and playing what happened to by in my CD player at the time - The Left Side of The Fragile by Nine Inch Nails - revealed instruments, beats and nuances that I’d never heard before in my 8 years of listening to this album somewhat religiously.&lt;br/&gt;Definitely the biggest change to my system from this shopping expedition, these are letting me rediscover my music collection.&lt;br/&gt;Connected from my T-Amp to my &lt;a href=&quot;http://www.monitoraudio.co.uk/product.php?range=8&amp;product=56&quot;&gt;Monitor Audio Bronze B2&lt;/a&gt; bookshelf speakers.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Aside from the amazing sound, the other result of this little shopping expedition is that my speakers are now well &amp;amp; truly the worst part of my system. Which mean I finally get to replace them with some homemade copies of the &lt;a href=&quot;http://www.6moons.com/audioreviews/47lab/shigaraki3.html&quot;&gt;Konus Essence&lt;/a&gt; transmission line speakers.</description>
      <enclosure url="http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/11/30_New_stereo_cables_files/IMG_0045.jpg" length="157118" type="image/jpeg"/>
    </item>
    <item>
      <title>Where does CMM fit into Business Process Management?</title>
      <link>http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/11/30_Where_does_CMM_fit_into_Business_Process_Management.html</link>
      <guid isPermaLink="false">51ff4c54-418d-401f-a1f2-17258d76eaa4</guid>
      <pubDate>Sun, 30 Nov 2008 11:00:54 +1100</pubDate>
      <description>&lt;a href=&quot;http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/11/30_Where_does_CMM_fit_into_Business_Process_Management_files/droppedImage.jpg&quot;&gt;&lt;img src=&quot;http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Media/object026.png&quot; style=&quot;float:left; padding-right:10px; padding-bottom:10px; width:198px; height:191px;&quot;/&gt;&lt;/a&gt;As you might have guessed from my recent post about CMM, my organisation is currently looking at CMM and whether/why/how we should be adopting it to improve the maturity of our software development processes.&lt;br/&gt;Hand in hand with that someone has recently asked how CMM fits into our BPM strategy.&lt;br/&gt;&lt;br/&gt;I need to take an aside here to say that we don’t actually have a BPM strategy, but we need one. We have an increasing number of BPM adopters throughout the organisation and our lack of clear strategy or governance exposes the risk of letting down all interested parties by letting them do their own thing without any clear guidance.&lt;br/&gt;&lt;br/&gt;But back to CMM and its place in BPM...&lt;br/&gt;Business Process Management is an approach to management that improves the effectiveness of an organisation. The graph at the top of this page shows ‘the world of BPM’ - BPM encapsulates the three types of activity that are a part of process management. The axes on the graph can be pretty much anything you like - cost, time, effort, risk, potential return, ...&lt;br/&gt;&lt;br/&gt;Process re-engineering is large-scale change to an organisation’s business processes - Essentially throwing out what you’ve got now because it’s completely ineffective and starting over again. Very high risk, very high effort and very expensive.&lt;br/&gt;&lt;br/&gt;Process renewal is the usual domain of BPM - Looking at how you work now and changing components of the existing processes to improve their efficiency, effectiveness or agility.&lt;br/&gt;&lt;br/&gt;Process improvement is the lowest level (i.e. simplest) process change. Essentially this involves ‘tweaking’ processes so that they perform better and more efficiently, and does not involve making large changes to a process (although there may be large changes to the way the process is executed). Perhaps the most common methodologies for undertaking process improvement are Lean and Six Sigma, but this is also where CMM(I) fits in.&lt;br/&gt;CMM is a methodology for software process improvement, providing guidance on assessing where your software processes are and what you need to do to improve on your current position.&lt;br/&gt;&lt;br/&gt;So, CMM fits nicely within BPM - albeit in a specific part (incremental process improvement, targetted only at software processes) - but is also a standalone methodology, so does not require an organisational BPM strategy to be successful.&lt;br/&gt;&lt;br/&gt;There is a second, unasked question, about where CMM ranks in comparison to the increasingly-common, and incredibly powerful, combination of Lean and Six Sigma.&lt;br/&gt;Since Lean Six Sigma is something I’m still increasing my knowledge of that is a discussion for another day. My impression so far is that changes should be governed by the analysis that Six Sigma provides, but that CMM provides a great methodology for identifying the specific improvements that can be implemented to resolve performance problems identified by Six Sigma.</description>
      <enclosure url="http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/11/30_Where_does_CMM_fit_into_Business_Process_Management_files/droppedImage.jpg" length="11661" type="image/jpeg"/>
    </item>
    <item>
      <title>Capability Maturity Model - I guess I'm a cynic</title>
      <link>http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/11/30_Capability_Maturity_Model_-_I_guess_Im_a_cynic.html</link>
      <guid isPermaLink="false">7a7a72c8-a508-4f3e-b8dd-afc3d2277a4d</guid>
      <pubDate>Sun, 30 Nov 2008 10:09:38 +1100</pubDate>
      <description>&lt;a href=&quot;http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/11/30_Capability_Maturity_Model_-_I_guess_Im_a_cynic_files/fiveLevels.jpg&quot;&gt;&lt;img src=&quot;http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Media/object027.png&quot; style=&quot;float:left; padding-right:10px; padding-bottom:10px; width:199px; height:95px;&quot;/&gt;&lt;/a&gt;Since I joined my current workplace I’ve been complaining pretty loudly about our lack of well-defined and consistent software processes, and equally loudly made the claim that we’re at level 1 of the Capability Maturity Model (characterised by ad-hoc processes, with successes due to the heroics of individual people).&lt;br/&gt;After making this claim for four years I am - finally - becoming better educated and have spent the last few days reading &lt;a href=&quot;http://www.librarything.com/work/737408/book/36766125&quot;&gt;The Capability Maturity Model&lt;/a&gt; and understanding what it involves at a more detailed level.&lt;br/&gt;And you know what? I was right. We are a level 1 organisation. But - and this is what surprised me and made me realise what a cynic I am - Only barely. With some rigour and standard processes for software estimation I suspect the bulk of the teams and projects would satisfy the requirements for CMM level 2 and be exceptionally close to - if not at - level 3. This has been a nicely-reassuring discovery, and I now have a desire to launch a mission to push for us to reach some consistent point (because I’ve got so much free time [sarcasm]...).&lt;br/&gt;&lt;br/&gt;What this consistent point is I think will be only a few small steps from where we are now, and will see us with&lt;br/&gt;	•	Defined ways for attaining - or at least justifying - estimates&lt;br/&gt;	•	Defined processes - at a high level - of how we produce software&lt;br/&gt;	•	Advice on how to tailor these software processes to specific projects&lt;br/&gt;&lt;br/&gt;I think that this will place us well with respect to CMM level 3, giving us a level of maturity in our software processes that will (in theory) remove the dependence on individual people and provide enough consistency to be confident that we’re doing reasonably good stuff across the board.&lt;br/&gt;&lt;br/&gt;So how can I do that? If you’ve got any suggestions I’d love to hear them!</description>
      <enclosure url="http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/11/30_Capability_Maturity_Model_-_I_guess_Im_a_cynic_files/fiveLevels.jpg" length="44827" type="image/jpeg"/>
    </item>
    <item>
      <title>Why should programmers care about OH&amp;S?</title>
      <link>http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/11/6_Why_should_programmers_care_about_OH%26S.html</link>
      <guid isPermaLink="false">49147d95-94ed-427d-85d8-bbecc52631a6</guid>
      <pubDate>Thu, 6 Nov 2008 21:34:01 +1100</pubDate>
      <description>I’ve been fighting the good fight recently, trying to convince influential people within my organisation of the value of having - and applying - OH&amp;amp;S standards for software development. Useability has always been quite a passion of mine, and I think that this is as good a reason as any for me to rant about why this is something we, as developers, should care about.&lt;br/&gt;&lt;br/&gt;So why should developers care about occupational health and safety?&lt;br/&gt;&lt;br/&gt;To answer this I’m going to take a step back and ask why we write software.&lt;br/&gt;We write it for people to use. As much as we hate to admit it, and as much as we might just want to write software for the sake of writing software, the reality is that if we’re going to make a living writing software then we have to write software that people will actually use.&lt;br/&gt;So we write software for people. That’s a great start.&lt;br/&gt;Let’s list some attributes that we know are true about the people we write software for:&lt;br/&gt;	-	They have a short attention span&lt;br/&gt;	-	They usually want the impossible&lt;br/&gt;	-	If they don’t use our software very often they’ll complain a lot if it’s not really ‘intuitive’&lt;br/&gt;	-	If they do use our software a lot they’ll complain a lot if it’s time-consuming to do common things (regardless of how intuitive it is)&lt;br/&gt;	-	Their bodies are designed to hunt and/or gather&lt;br/&gt;	-	Their bodies are not designed to sit at a desk using a computer&lt;br/&gt;	-	Their bodies are definitely not designed to push a mouse around a desk a lot&lt;br/&gt;	-	Their bodies are also not designed to carry out repetitive tasks&lt;br/&gt;&lt;br/&gt;So, applying these facts in the context of software development, where does this leave us?&lt;br/&gt;	1.	Frequently used things should be fast but not necessarily intuitive&lt;br/&gt;	2.	Infrequently used things should be intuitive but not necessarily fast&lt;br/&gt;	3.	Fast is measured in terms of&lt;br/&gt;	a.	Processing time&lt;br/&gt;	a.	Time to invoke&lt;br/&gt;	b.	Amount of keystrokes and/or mouse movements required to invoke&lt;br/&gt;	1.	Frequently used things should be available by both mouse and keyboard commands (this means letting people use either, not requiring them to use both)&lt;br/&gt;	2.	Things are intuitive if they’re easy to find by an inexperienced person with the same characteristics as the intended user. Without training.&lt;br/&gt;	5a.	The intended user is usually not the software engineer who developed the software.&lt;br/&gt;&lt;br/&gt;That’s all pretty basic, isn’t it? HCI 101. So why go on about such simple things?&lt;br/&gt;Put simply - most people ignore this. And as a result users are forced to do repetitive tasks, get frustrated (and hence tense their muscles), and spend prolonged periods either using a mouse or keying. And this leads to us developers indirectly injuring our users, which isn’t a good thing (despite how appealing it might be sometimes).&lt;br/&gt;&lt;br/&gt;So next time you’re about to write some software, stop.&lt;br/&gt;Think about who’s going to be using it, and how they’re going to be using it. Don’t just code it however is easiest for you, or let the user interface fall out of reckless coding, but sit down, grab a pencil and a piece of paper, and think about how you’d like to interact with the system if you were the user.&lt;br/&gt; Even better, pick up copies of The Humane Interface, The Design Of Everyday Things and The Inmates Are Running The Asylum.&lt;br/&gt;Then read them.&lt;br/&gt;And finally, apply them.&lt;br/&gt;&lt;br/&gt;Please.</description>
    </item>
    <item>
      <title>DBC vs. TDD Part 3 - Conclusion?</title>
      <link>http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/10/27_DBC_vs._TDD_Part_3_-_Conclusion.html</link>
      <guid isPermaLink="false">dc2ac69a-1055-4bcd-908d-bc42ac39df2b</guid>
      <pubDate>Mon, 27 Oct 2008 16:31:22 +1100</pubDate>
      <description>&lt;a href=&quot;http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/10/27_DBC_vs._TDD_Part_3_-_Conclusion_files/IMG_0033.jpg&quot;&gt;&lt;img src=&quot;http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Media/object028.png&quot; style=&quot;float:left; padding-right:10px; padding-bottom:10px; width:198px; height:94px;&quot;/&gt;&lt;/a&gt;Finally - Part three of my internal debate about the differences between Design by Contract and Test-Driven Development.&lt;br/&gt;This is a week late because I’ve been on training for the past week. In fact, by the time I manage to find internet access and publish this it’ll probably be a week and a half late because I’m STILL on training, but this time in a different city - which just makes things even more difficult.&lt;br/&gt;&lt;br/&gt;This week I’m going to (attempt to) tie together the last two articles and draw some sort of conclusion about where I think DbC and TDD should live.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;OK, now that we’ve explored the definitions of DbC and TDD where does that leave us?&lt;br/&gt;&lt;br/&gt;Well, we have a clear understanding that DbC is a methodology to ensure that a given unit of a system will produce the output expected of it, provided that the information passed to it is fit for purpose. We also know that it is a tool to encourage developers to step back and look at the forest before they begin coding - That is, it requires the person responsible for the unit of work to clearly define what the unit will do, and in which circumstances it will do it.&lt;br/&gt;&lt;br/&gt;With regard to TDD, we know that it is a methodology to ensure that a given project artefact is fit for purpose - that is, it has been verified by testing a sufficiently diverse sample of use cases to cover all possibilities.&lt;br/&gt;Again, TDD is also a tool that encourages taking a broader perspective - Before you start working on something you think about what criteria define success for that piece of work, and you write tests to verify those criteria.&lt;br/&gt;&lt;br/&gt;So far TDD and DbC are neck and neck - They both sound like they’re offering exactly the same benefits.&lt;br/&gt;But there are a couple of less-obvious differences...&lt;br/&gt;&lt;br/&gt;	1.	 When you’re following DbC and you think you’re finished you probably still need to write and execute tests (and then iterate). When you’re following TDD you only think you’re finished when all of your tests pass.&lt;br/&gt;&lt;br/&gt;	1.	 The paragraph on TDD isn’t talking specifically about units of a system, although it is including them. It is also including collections of units within a system, the entire system, and a collection of systems - TDD should be followed just as closely at every level within a project, beginning by defining the acceptance criteria for the project and ending by defining tests to verify the correctness of individual units within the project.&lt;br/&gt;&lt;br/&gt;This really means - I believe - that DbC is a great thing. It’s a really great thing, and it’s probably not unlikely that it was a significant contributor to the development of TDD (I may be wildly incorrect in that statement, and I probably am, but you have to admit it’s possible!).&lt;br/&gt;Just like all really great things, eventually something better comes along. Usually the something better is excommunicated or put to death as well, but eventually it comes to be accepted as better.&lt;br/&gt;&lt;br/&gt;DbC offers so much benefit at the unit level within a software project, and TDD offers all of these benefits at all levels within a software project, from the unit level right up to the UAT level.&lt;br/&gt;&lt;br/&gt;There are other arguments that are often used to justify DbC’s continued existence, and I want to run through them now because, frankly, I think they’re ridiculous.&lt;br/&gt;&lt;br/&gt;	1.	 Runtime assertion checking&lt;br/&gt;Do you really want to do this? If you’re learning how to program at school then go for it, but checking your preconditions is just making work for yourself that you really don’t need to do. It’s also breaking the fundamental precept of DbC (or at least one of them) - That your unit has undefined behaviour if the starting contract is not met.&lt;br/&gt;Throwing an exception isn’t undefined.&lt;br/&gt;&lt;br/&gt;	1.	 Contracts are general whereas tests are specific&lt;br/&gt;True. How do you test your contracts?&lt;br/&gt;Regardless of whether we’re DbC’ing, TDD’ing, or ABC’ing, we can only ever test specific cases. Our contracts might validate that our code works for the general case, but we only know that our contracts work for specific cases.&lt;br/&gt;And while we’re on this point, once you’re happy with the specific cases in which you’ve tested your contracts you will disable any runtime, assertion-throwing contract checks for the reasons outlined in (1), won’t you?&lt;br/&gt;&lt;br/&gt;	1.	 Contracts discourage defensive programming&lt;br/&gt;The thinking behind this point eluded me for awhile because the people who make the claim usually claim (1) first (which certainly IS defensive). But then a great colleague explained that defensive programming is discouraged because you’ve documented everything you expect to be true when your method is called, and you only write enough code to cater for this.&lt;br/&gt;While I don’t believe that DbC discourages defensive programming, I do believe that it tries to, so I’ll put the difference between theory and practice aside for now.&lt;br/&gt;This argument is 100% correct. Defensive programming means you’re doing more work than you need to, which is a bad thing.&lt;br/&gt;However, I don’t think people need the reminder to be lazy anymore. We already have:&lt;br/&gt;	(a)	 Larry Wall’s three virtues of a programmer: Laziness, Impatience and Hubris.&lt;br/&gt;	(b)	 TDD encouraging people to stop coding as soon as their tests pass.&lt;br/&gt;	(c)	 Agile methodologies becoming increasingly-common and resulting in people running around saying “YAGNI”* rather than doing any exception checking at all - which is a much better thing to worry about than whether they’re doing enough.&lt;br/&gt;&lt;br/&gt;	1.	 Contracts encourage defensive programming&lt;br/&gt;Yeah, go figure. I think this argument has something to do with runtime assertion checking so you can be sure that (a) your code has valid inputs, and (b) it does the right thing with them.&lt;br/&gt;See (1).&lt;br/&gt;&lt;br/&gt;	1.	 DbC and TDD are complementary, damnit!&lt;br/&gt;Maybe you disagree with my definitions of one or both of them, in which case that’s fine. But if not, this statement is right only insofar as it’s correct to say that lumberjacking and building timber furniture are complementary (I know that’s a terrible example - I’m sitting in a hotel without enough stimulus to come up with anything better. And I suppose it would be quite a convenient way to cut out the middleman if you were a furniture builder and a lumberjack. Damn. Let’s try again).&lt;br/&gt;&lt;br/&gt;But if not, this statement is right only insofar as it’s correct to say that putting air into your car tyres and getting new tyres fitted are complementary - With one you get air-filled tyres; with the other you get air-filled tyres, new tread, a wheel balance, and you get it all done by Joe your local mechanic without lifting a finger yourself.&lt;br/&gt;&lt;br/&gt;Anyway, if you haven’t gotten my point by now those two examples are certainly not going to help  you.&lt;br/&gt;In a phrase: The advantages realised by DbC are a subset of those realised by TDD, and a small subset at that.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;* “You Aren’t Gonna Need It”. Like “TODO” but more agile, and hence more cool.</description>
      <enclosure url="http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/10/27_DBC_vs._TDD_Part_3_-_Conclusion_files/IMG_0033.jpg" length="121853" type="image/jpeg"/>
    </item>
    <item>
      <title>DBC vs. TDD Part 2 - Test Driven Development</title>
      <link>http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/10/16_DBC_vs._TDD_Part_2_-_Test_Driven_Development.html</link>
      <guid isPermaLink="false">5028aaae-e6a6-404c-8e5a-70d3c7cc8224</guid>
      <pubDate>Thu, 16 Oct 2008 22:15:56 +1100</pubDate>
      <description>&lt;a href=&quot;http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/10/16_DBC_vs._TDD_Part_2_-_Test_Driven_Development_files/gm_test_500_2.jpg&quot;&gt;&lt;img src=&quot;http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Media/object029.png&quot; style=&quot;float:left; padding-right:10px; padding-bottom:10px; width:199px; height:95px;&quot;/&gt;&lt;/a&gt;This is part two of my DBC vs. TDD ramblings, where I’ll be describing Test-Driven Development and why it’s A Good Thing.&lt;br/&gt;My ideas about what TDD is seem to vary significantly from what is commonly known as TDD. I think this is a result of tools being developed that make automated testing and TDD really easy, but these tools being used almost exclusively for automating unit tests because as programmers we find it very easy to focus on the details and forget the bigger picture - and as a result writing automated unit tests has come to be seen as the way to ‘do TDD’.&lt;br/&gt;&lt;br/&gt;So here’s TDD in my eyes - Which I think is well-aligned with the ideas Kent Beck puts forth in ‘Extreme Programming Explained’ and ‘Test Driven Development’.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Each piece of functionality you’re going to implement has tests written verifying that it meets the  outcomes required of it, before you even think about coding. What I want to point out here is that this doesn’t say “writing automated unit tests before you start coding”. That’s not TDD, that’s writing automated unit tests before you start coding. Maybe it’s ‘unit test driven development’, which is a subset of TDD - But this isn’t something you want to do at the outset.&lt;br/&gt;&lt;br/&gt;We start TDD by defining the acceptance tests we’re intending to satisfy (i.e. the user stories we’re going to implement). We can automate these tests, or we can not. That doesn’t matter. What matters is that we’re using these acceptance tests to drive our development, rather than using what we’ve developed to write our acceptance tests. Doing this lets us know when we’re finished - The moment our acceptance tests pass we can confidently stop developing.&lt;br/&gt;This is the part of TDD that is often forgotten, and which has started popping up under other names, including ‘acceptance test driven development’ and (I would argue) Dan North’s ‘Behaviour Driven Development’.&lt;br/&gt;&lt;br/&gt;Once we’ve defined our acceptance tests we can start to think about implementation. When we do that we’ll probably want to write unit tests for our modules before we start writing them. Just like with design by contract, this helps us to step back and understand exactly what we’re doing as well as providing a way to know when we’re done.&lt;br/&gt;This - the final part of TDD - is what now seems to be considered as the whole of TDD, and this is where we use defined (and perhaps automated) unit tests to drive the development of individual modules.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Next week I want to bring together TDD and DBC to see where they intersect and what, if anything, is offered by one methodology but not the other.</description>
      <enclosure url="http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/10/16_DBC_vs._TDD_Part_2_-_Test_Driven_Development_files/gm_test_500_2.jpg" length="62388" type="image/jpeg"/>
    </item>
    <item>
      <title>DBC vs. TDD Part 1 - Design By Contract</title>
      <link>http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/10/9_DBC_vs._TDD_Part_1_-_Design_By_Contract.html</link>
      <guid isPermaLink="false">39d0eff5-6dc5-448c-b91c-456d2af788f0</guid>
      <pubDate>Thu, 9 Oct 2008 21:13:30 +1100</pubDate>
      <description>&lt;a href=&quot;http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/10/9_DBC_vs._TDD_Part_1_-_Design_By_Contract_files/281135463_302121a578.jpg&quot;&gt;&lt;img src=&quot;http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Media/object030.png&quot; style=&quot;float:left; padding-right:10px; padding-bottom:10px; width:198px; height:94px;&quot;/&gt;&lt;/a&gt;I’ve just finished reading ‘The Pragmatic Programmer’, which has one section devoted to the merits of Design By Contract. I came out of university four years ago with the idea that DBC was A Good Thing, and was using it for around six months before I began supplementing it with Test Driven Development techniques. This gradually turned into using TDD and forgetting all about DBC. Reading The Pragmatic Programmer has made me think about this in more detail, and made me wonder whether Design By Contract even has a place in software engineering now that TDD has become well-known and is fairly widely used.&lt;br/&gt;&lt;br/&gt;This is the first of three articles where I wanted to explore this idea, find out what you think, and see what conclusions I end up reaching. This article goes into Design By Contract - What it is and why we might choose to use it. The second will cover similar aspects of Test Driven Development; with the third article comparing the two to see where they intersect and what (if anything) is offered by one technique but not the other.&lt;br/&gt;&lt;br/&gt;So, let’s get started with Design By Contract.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Each piece of functionality you write has a ‘contract’ specifying what must be true when the method is called, and one specifying what will be true after the method has completed provided the initial contract is satisfied by the caller.&lt;br/&gt;A class may also have a ‘class invariant’ specifying things that will remain true throughout the existence of a particular class instance.&lt;br/&gt;&lt;br/&gt;The notion is that, before you start coding, you step back and think through which situations your method should operate in, and which it should not. Then you write these down as your initial contract. Next you think about what will be true upon completion of your method and write this down. These contracts might be automated or they might not be, that doesn’t matter. The point here is that you have documented all conditions your method must be successful in, and all conditions your method must satisfy upon completion.&lt;br/&gt;Once you begin actually implementing your method you then have a reference point to look back on to ensure that you do everything you need to for all the conditions you need to cater for. This ensures that we’re focusing on what we need to be focusing on, acting as a verification and validation mechanism while we’re coding.&lt;br/&gt;&lt;br/&gt;</description>
      <enclosure url="http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/10/9_DBC_vs._TDD_Part_1_-_Design_By_Contract_files/281135463_302121a578.jpg" length="49533" type="image/jpeg"/>
    </item>
    <item>
      <title>Why are software requirements difficult?</title>
      <link>http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/8/1_Why_are_software_requirements_difficult.html</link>
      <guid isPermaLink="false">c152e60c-7128-48ed-a505-3584133c44c1</guid>
      <pubDate>Fri, 1 Aug 2008 12:06:36 +1000</pubDate>
      <description>&lt;a href=&quot;http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/8/1_Why_are_software_requirements_difficult_files/DSCN1250.jpg&quot;&gt;&lt;img src=&quot;http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Media/object031.png&quot; style=&quot;float:left; padding-right:10px; padding-bottom:10px; width:198px; height:137px;&quot;/&gt;&lt;/a&gt;One of the new activities I included in the requirements capture course I wrote for work, and which is presented to both technical and non-technical staff within the Bureau, is an ice-breaking activity looking at why software requirements are difficult.&lt;br/&gt;&lt;br/&gt;What is your favourite pen?&lt;br/&gt;Why?&lt;br/&gt;&lt;br/&gt;In comparison with a complex piece of business software a pen is a pretty darn simple thing, but even defining the requirements for a pen can be darn difficult.&lt;br/&gt;Here are some suggestions to get you started:&lt;br/&gt;	•	Diameter&lt;br/&gt;	•	Weight&lt;br/&gt;	•	Balance of weight&lt;br/&gt;	•	Friction of ballpoint&lt;br/&gt;	•	Viscousity of ink&lt;br/&gt;	•	Drying time of ink&lt;br/&gt;	•	Suitability for left-handed people&lt;br/&gt;	•	Composition of ink (Allergies, ethical or religious opposition to the use of animal products)&lt;br/&gt;	•	Colour&lt;br/&gt;	•	Comfort when using for long periods of time</description>
      <enclosure url="http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/8/1_Why_are_software_requirements_difficult_files/DSCN1250.jpg" length="111593" type="image/jpeg"/>
    </item>
    <item>
      <title>Risk management</title>
      <link>http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/7/30_Risk_management.html</link>
      <guid isPermaLink="false">f638aa8f-0c79-4104-a7f2-66350f04470e</guid>
      <pubDate>Wed, 30 Jul 2008 23:06:35 +1000</pubDate>
      <description>&lt;a href=&quot;http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/7/30_Risk_management_files/droppedImage.jpg&quot;&gt;&lt;img src=&quot;http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Media/object032.png&quot; style=&quot;float:left; padding-right:10px; padding-bottom:10px; width:198px; height:94px;&quot;/&gt;&lt;/a&gt;I thought I had a pretty good knowledge of the standard for risk assessment (AS4360) until this afternoon - I was editing a risk assessment paper and it was pointed out to me that the approach I’d described (in the picture above) differed from another standard in the Bureau that also purported to be an implementation of AS4360.&lt;br/&gt;A quick google showed me four more examples of a risk rating matrix, but rather than tell me who was right I’d ended up with six quite different approaches.&lt;br/&gt;&lt;br/&gt;And so I discovered that the standard doesn’t actually promote a single approach to rating risks, which makes a lot of sense in hindsight. In the end I used the same approach as the other ABS standard because I felt it took into consideration our moderate, but not extreme, risk aversion.</description>
      <enclosure url="http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/7/30_Risk_management_files/droppedImage.jpg" length="55497" type="image/jpeg"/>
    </item>
    <item>
      <title>Catching up</title>
      <link>http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/7/29_Catching_up.html</link>
      <guid isPermaLink="false">94602731-a747-4e6d-9596-4b3833ebcf02</guid>
      <pubDate>Tue, 29 Jul 2008 21:12:34 +1000</pubDate>
      <description>For the past six months I seem to have been doing the job of three people, and it’s led me to think about a few things (in the rare moments I haven’t been thinking about work).&lt;br/&gt;Firstly about the terrible opinion people have of public servants. We’re not all lazy OK?&lt;br/&gt;&lt;br/&gt;But I’ve also been thinking about how fascinating it is being able to develop a really close relationship with clients.&lt;br/&gt;I’m a software engineer. I started programming when I was six (BASIC on a Radio Shack TRS-80). Earlier today I was giving a code walkthrough on the C++ automatic address coding application to a couple of the guys from Census; being able to think through and explain the custom memory structures and funky pointer arithmetic after not seeing it for two years filled me with an odd sense of joy.&lt;br/&gt;But the guts of my work for the past six months has been getting a good understanding of how National Accounts Branch work and how they could work more efficiently or effectively, then setting a vision for change and leading teams within the branch through change; as well as looking for opportunities to make Prices’ work easier by spending a lot of time with them understanding all about the CPI.&lt;br/&gt;Dear God that paragraph sounds wanky. Next thing you know I’ll be talking about synergies...&lt;br/&gt;&lt;br/&gt;But my time doing things that sound like clichéd buzzwords have had an interesting effect. I’m surprisingly enthralled with the work these branches do, and am even a little tempted to move to the statistical side of things.&lt;br/&gt;Having the opportunity to work really closely with your clients means you’re constantly learning new things, challenging yourself and developing relationships. And, even better, you’re doing all this while delivering better value to your clients - Having an intimate understanding of your clients’ business will often allow you to predict problems before they occur.&lt;br/&gt;&lt;br/&gt;And so I suppose the point I’m trying to make is that being a software engineer in a non-software organisation is really interesting.&lt;br/&gt;&lt;br/&gt;Till next time...</description>
    </item>
    <item>
      <title>User Stories - An Introduction</title>
      <link>http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/3/18_User_Stories_-_An_Introduction.html</link>
      <guid isPermaLink="false">d3703cb7-3a34-4bdc-a56d-653645fedf64</guid>
      <pubDate>Tue, 18 Mar 2008 20:26:36 +1100</pubDate>
      <description>&lt;a href=&quot;http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/3/18_User_Stories_-_An_Introduction_files/shapeimage_1.jpg&quot;&gt;&lt;img src=&quot;http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Media/object033.png&quot; style=&quot;float:left; padding-right:10px; padding-bottom:10px; width:198px; height:94px;&quot;/&gt;&lt;/a&gt;I’ve been spending a bit of time lately writing new material for the requirements capture course we run at work as part of an attempt to revise the course to make it reflect modern techniques and best practices. While I was doing this I found an introduction to user stories that I wrote during my previous project when I began pushing an agile approach to get us to moving forward.&lt;br/&gt;Reflecting on it, it seems like my approach to user stories is influenced mostly by Kent Beck (eXtreme Programming) and Alan Cooper (Interaction Design), and ends up much more verbose than the behaviour-focused style of Dan North. With this verbosity comes a finer level of detail, and I’m beginning to really see how complementary these techniques - specifying behaviour at a high level to guide the project and creating detailed user stories just-in-time - are. With that in mind, and given the current interest in BDD (If you haven’t heard of BDD check out Dan North’s articles at &lt;a href=&quot;http://www.dannorth.net/&quot;&gt;http://www.dannorth.net&lt;/a&gt;), here’s my diatribe on user stories.&lt;br/&gt;&lt;br/&gt;The development of user stories from our requirements gathering meetings is an attempt to capture typical patterns of usage; I am not necessarily attempting to capture every possible pattern of use, nor am I necessarily attempting to enunciate every system response. The goal of my user stories is to allow me to identify the major entities in the Respondent module and the major activities performed on them, and to begin developing the Respondent module based on this knowledge.&lt;br/&gt;&lt;br/&gt;Once this effort has resulted in an initial prototype of the Respondent module, it is anticipated that the application itself will serve as the main vehicle for identifying the outstanding requirements - When it is released it should fulfil its major functions (as specified during previous meetings), which industry studies suggest to be around 80%. From this point a number of incremental releases can be used to:&lt;br/&gt;- Identify what is lacking. It is typically easier to identify what is missing from a product than to identify what is missing from a description of a product (and then to hope that your perception of the description matches with that of the person building it);&lt;br/&gt;- Provide feedback on interface design. With a number of releases planned within a short space of time there is much more scope for making both large and small changes to the design of the application;&lt;br/&gt;- Provide additional scope for defect identification, defect removal and regression testing. Providing a number of releases will provide the ability to release bugfixes alongside additional functionality, which provides scope for both verifying that the defects have been resolved and ensuring that this has not introduced additional issues;&lt;br/&gt;- Prevent 'analysis paralysis'. A common occurrence during the requirements gathering phase of any complex system is an extended length of time being taken to finalise requirements because - since&lt;br/&gt;the system is complex - we want to get them right. This is a major cause of failure in IT projects, and the use of 'lightweight' development techniques is one way to prevent it. Because we intend to release a number of versions of the Respondent module, each delivering incremental improvements over the last, at any point we can decide we've expended enough effort on the module and cease work on it - with a completed (although not necessarily 100% completed) application to show for it. This incremental approach is based on the common application of the Pareto principle to IT systems (that&lt;br/&gt;the first 80% of the functionality requires 20% of the effort, and the remaining 20% of the functionality requires 80% of the effort); and&lt;br/&gt;- Provide scope for changing requirements. Because the initial releases of the Respondent module will be focussed on delivering the most commonly-used functionality (which, by its nature, is less&lt;br/&gt;likely to undergo change than the less-core parts of the module), requirements for peripheral parts of the module will be free to undergo change at no (TA) cost until their requirements are defined.&lt;br/&gt;&lt;br/&gt;This concept of &amp;quot;Just-in-Time Requirements Analysis defines requirements only when they are needed – and only at the detailed required. It is an iterative process that expects and embraces change and makes it easy for requirements to evolve over time ... This allows development to begin with incomplete requirements and also provides a mechanism for incorporating feedback from actual development into analysis. The end result is a shorter project life cycle, better requirements, less risk, and an evolving baseline that meets the changing business needs of customer.&amp;quot; (Michael Lee, The Agile Alliance).</description>
      <enclosure url="http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/3/18_User_Stories_-_An_Introduction_files/shapeimage_1.jpg" length="21522" type="image/jpeg"/>
    </item>
    <item>
      <title>The Business Process Management Framework and Business Analysis</title>
      <link>http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/3/18_The_Business_Process_Management_Framework_and_Business_Analysis.html</link>
      <guid isPermaLink="false">fd510f3a-cba3-4007-bd61-50b5d87e5972</guid>
      <pubDate>Tue, 18 Mar 2008 19:10:55 +1100</pubDate>
      <description>&lt;a href=&quot;http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/3/18_The_Business_Process_Management_Framework_and_Business_Analysis_files/shapeimage_1.jpg&quot;&gt;&lt;img src=&quot;http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Media/object034.png&quot; style=&quot;float:left; padding-right:10px; padding-bottom:10px; width:198px; height:94px;&quot;/&gt;&lt;/a&gt;Continuing with the theme of requirements capture, I’ve been writing some course material describing how the outputs produced by Roger Burlton’s &lt;a href=&quot;http://www.processrenewal.com/&quot;&gt;Business Process Management Framework&lt;/a&gt;, when it is used, can be valuable inputs to requirements gathering activities. The BPMF can provide not only requirements, but users (I feel dirty using that word), priorities, and key performance indicators.&lt;br/&gt;Here’s what I’ve written...&lt;br/&gt;&lt;br/&gt;In situations where the Business Process Management Framework has been applied much of the work undertaken by the process analyst(s) can be leveraged to aid requirements gathering activities. This section briefly describes outputs of the BPMF that will assist requirements gathering.&lt;br/&gt;&lt;br/&gt;Stakeholder Analysis&lt;br/&gt;The stakeholder analysis phase of the BPMF results in a detailed study of all stakeholders in the system being studied. Referring to the stakeholder analysis will often reveal a number of functional and non-functional requirements, and can also be used to identify the names, roles and types of stakeholders without needing to cover ground that has already been covered as part of the BPMF.&lt;br/&gt;&lt;br/&gt;&amp;quot;To be&amp;quot; Process Maps&lt;br/&gt;Once a renewed business process has been defined as part of the BPMF detailed process maps are created to describe the renewed process. These process maps can be used as one tool to identify functional requirements - discussing the process maps with stakeholders is a useful method for deciding which parts of the process should be automated as part of the development project.&lt;br/&gt;&lt;br/&gt;IGOE Diagrammes&lt;br/&gt;IGOE (Input, Guide, Output, Enabler) diagrammes are created for each process analysed as part of the BPMF, and these diagrammes can be used as an information aid during requirements gathering activities. Because they provide information about what is used by a process, what is produced by a process, what guides the process or dictates portions of the process, and the systems and stakeholders that support the process they can be invaluable in directing requirements gathering activities and ensuring that key parts of the are process being developed are not forgotten.&lt;br/&gt;&lt;br/&gt;Pain/Gain Analysis&lt;br/&gt;One artefact often produced by the BPMF is a pain/gain analysis. This is usually represented as a scatter graph of processes with 'pain' (effort) depicted on the X axis and 'gain' (value) on the Y axis, and can be exceptionally useful for prioritising requirements.&lt;br/&gt;When prioritising requirements using a pain/gain chart priority should be given to those processes whose renewal will provide the largest gain. Additionally, it is usually a good idea to prioritise the more complex processes over the simpler ones so that they can undergo longer periods of testing before the end of development. This will result in us prioritising the high pain-high gain processes first, followed by the low pain-high gain processes, the low pain-low gain processes, and finally the high pain-low gain processes (in reality these will often be identified as delivering too little value at too high a cost to be developed). In situations where stakeholders need to be 'won over' by seeing some quick progress made, some of the 'quick wins' (low pain-high gain activities) can be undertaken first to deliver actual business value in very little time.</description>
      <enclosure url="http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/3/18_The_Business_Process_Management_Framework_and_Business_Analysis_files/shapeimage_1.jpg" length="25351" type="image/jpeg"/>
    </item>
    <item>
      <title>Balancing the Triangle</title>
      <link>http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/1/31_Balancing_the_Triangle.html</link>
      <guid isPermaLink="false">8d61dea0-f79f-48cb-9093-6ca8044dc9c5</guid>
      <pubDate>Thu, 31 Jan 2008 20:28:26 +1100</pubDate>
      <description>&lt;a href=&quot;http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/1/31_Balancing_the_Triangle_files/shapeimage_1.jpg&quot;&gt;&lt;img src=&quot;http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Media/object035.png&quot; style=&quot;float:left; padding-right:10px; padding-bottom:10px; width:198px; height:94px;&quot;/&gt;&lt;/a&gt;In my experience, one of the things old software engineers like to do to pass on their infinite wisdom to young software engineers is draw a triangle on a chalkboard (a whiteboard would be more apt in these days where agile and its associated whiteboard-philia is all the rage), write 'time' at one point, 'scope' at another point, and 'cost' at the third.&lt;br/&gt;The old software engineer then says &amp;quot;Now, young padawan, you must be firm against the dark client side who will try to sway you away from the truth. Tell them that they may control two of these factors, but that their choice in those two will dictate the third.&amp;quot;&lt;br/&gt;&lt;br/&gt;Apparently that's the extent of the wisdom a software engineer develops in their life. And nobody's quite sure what the point of the triangle is(1). But it's good advice nevertheless.&lt;br/&gt;&lt;br/&gt;There's also a popular misconception that you can add a fourth factor - quality - to the triangle so that it becomes a pyramid, and allow stakeholders to select three of the four. But since all good programmers have hubris(2), that'll never work (although battles have been fought over it).&lt;br/&gt;&lt;br/&gt;(1) OK, in actuality there is a point behind the triangle. The point is that there are three variables on a two dimensional space, which means that your client can pick any point inside the triangle and by doing so selects two of the variables and has the third determined for them.&lt;br/&gt;(2) The three chief virtues of a programmer are: Laziness, Impatience and Hubris - Larry Wall, Programming Perl</description>
      <enclosure url="http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2008/1/31_Balancing_the_Triangle_files/shapeimage_1.jpg" length="20122" type="image/jpeg"/>
    </item>
    <item>
      <title>The Road Less Travelled</title>
      <link>http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2007/12/16_The_Road_Less_Travelled.html</link>
      <guid isPermaLink="false">b948714b-a6be-427e-a577-91dbfc40f813</guid>
      <pubDate>Sun, 16 Dec 2007 20:30:43 +1100</pubDate>
      <description>&lt;a href=&quot;http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2007/12/16_The_Road_Less_Travelled_files/shapeimage_1.jpg&quot;&gt;&lt;img src=&quot;http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Media/object036.png&quot; style=&quot;float:left; padding-right:10px; padding-bottom:10px; width:198px; height:94px;&quot;/&gt;&lt;/a&gt;So my next post was going to be all about the metrics I’d selected, why I’d selected them, and how I was going to go about analysing the results, wasn’t it?&lt;br/&gt;&lt;br/&gt;Well it’s a funny thing. Everyone’s fretting right now because the good Mr. Rudd (our newly-elected Prime Minister) has made a two point something percent reduction in public service expenditure one of his first moves; and unfortunately when our clients were told (yet again) that they’d either need to commit to this project or abandon it, they took the latter option.</description>
      <enclosure url="http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2007/12/16_The_Road_Less_Travelled_files/shapeimage_1.jpg" length="54924" type="image/jpeg"/>
    </item>
    <item>
      <title>Scepticism</title>
      <link>http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2007/11/27_Scepticism.html</link>
      <guid isPermaLink="false">b395f0e5-2508-4748-be9a-fd3577a1f0b9</guid>
      <pubDate>Tue, 27 Nov 2007 20:32:10 +1100</pubDate>
      <description>As I continue reading the PSM Guide I’m continuing to keep the targets of this study in mind - the entire technical services division within my organisation. The problem here is that, if history is anything to go by, what we will need is a methodology that is dead easy to follow and produces quick and easy wins.&lt;br/&gt;&lt;br/&gt;Which is beginning to strike me as problematic, at least when it comes to metrics. The more I take in the less it seems like it can be done without the person/people doing it being willing to invest effort in a few different areas:&lt;br/&gt;    •Understanding the methodology&lt;br/&gt;    •Determining what should be measured&lt;br/&gt;    •Determining how things should be measured&lt;br/&gt;    •Measuring&lt;br/&gt;    •Analysing the measurements&lt;br/&gt;    •Reporting on the measurements&lt;br/&gt;&lt;br/&gt;Don’t get me wrong, this still seems great. But I’m becoming somewhat cynical that it’s a methodology that can be enforced across all projects because, just like any other process, people who don’t care or are insufficiently committed can scrape by with the minimum effort to make it seem that they’re following the methodology and produce no benefit whatsoever.&lt;br/&gt;Of course, if measurement reports are deliverables mandated at regular intervals by the project board, and irregularities or indicators of poor performance investigated when they arise, there is the potential for tremendous benefit.&lt;br/&gt;&lt;br/&gt;The time for measurement selection grows nigh.&lt;br/&gt;Stay tuned...</description>
    </item>
    <item>
      <title>Practical Software Measurement - What Am I Doing?</title>
      <link>http://www.bennettscash.id.au/BennettsCash/Technology_Blog/Entries/2007/11/26_Practical_Software_Measurement_-_What_Am_I_Doing.html</link>
      <guid isPermaLink="false">17c9a925-0288-410f-816b-25b30abbbc76</guid>
      <pubDate>Mon, 26 Nov 2007 20:33:58 +1100</pubDate>
      <description>So I’m in the process of going through the Practical Software and Systems Measurement Guide (&lt;a href=&quot;http://www.psmsc.com/PSMGuide.asp&quot;&gt;http://www.psmsc.com/PSMGuide.asp&lt;/a&gt;) for the first time since university, and now that I’m actually doing it off my own bat I’m realising that there’s a crapload to read if you want to actually take something from it.&lt;br/&gt;It’s quite unfortunate really - I’m reading a guide on how to implement measurement; reading how “measurement is good” is pretty much preaching to the converted.&lt;br/&gt;&lt;br/&gt;But that aside, it’s nice to have a change and get back to my metrics-obsessed roots (see &lt;a href=&quot;Archive.html&quot;&gt;the archive&lt;/a&gt; for my previous articles/rants on estimation).&lt;br/&gt;&lt;br/&gt;Why am I doing this? Well, we’re in the process of ‘redeveloping’ the system development process in my organisation because the one we currently have either doesn’t exist or doesn’t provide any benefit, depending on who you ask. The three options that really exist for a new process are:&lt;br/&gt;    •Define a set of outputs that must be produced (leaving the process up to the team);&lt;br/&gt;    •Define a small set of processes, any of which can (and must) be used; and&lt;br/&gt;    •Leave the process up to the team but define metrics that must be used so we can judge the relative success of different teams and processes.&lt;br/&gt;&lt;br/&gt;Naturally I jumped at the opportunity to delve back into the world of metrics, and so it is that I am reading the PSM Guide, trying to refresh my memory but remain sane.&lt;br/&gt;&lt;br/&gt;My initial thoughts when presented with this opportunity ran something along these lines:&lt;br/&gt;	1.	It’s gotta be the PSM Guide or Humphrey’s &lt;a href=&quot;http://www.amazon.com/Introduction-Team-Software-Process-Engineering/dp/020147719X&quot;&gt;Team Software Process&lt;/a&gt;.&lt;br/&gt;	2.	Maybe this can help kick my dysfunctional project into line.&lt;br/&gt;&lt;br/&gt;After verifying the first thought by a number of open-ended discussions (“if you wanted to collect metrics on how your project was going, what would you use?”) and, of course, Google; I decided that the best way to demonstrate the success (or failure) of a metrics-based approach would be to put them into play in my current project. All things being equal it should tell us that we spend too long making decisions, cannot gather requirements quickly enough to meet our production deadline, and cannot get acceptance testing completed early enough to have results feed into the next incremental release.&lt;br/&gt;&lt;br/&gt;So here I am, trying to select a handful of the most appropriate indicators to use for my project and decide whether I should be measuring them monthly (recommended by PSM) or fortnightly (potentially more useful so I’ll have something to say about the process of collecting and aggregating measures in a month or two’s time).&lt;br/&gt;&lt;br/&gt;Did I mention the time is currently 2359? I’m going to bed so I can claim I went to bed before midnight.&lt;br/&gt;&lt;br/&gt;Stay tuned...</description>
    </item>
  </channel>
</rss>

