<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;AkQHSHg7cSp7ImA9WhBUEk0.&quot;"><id>tag:blogger.com,1999:blog-19604309</id><updated>2013-04-29T04:05:39.609Z</updated><category term="Lean" /><category term="Code" /><category term="Development" /><category term="XPManchester" /><category term="Retrospective" /><category term="TDD" /><category term="Team Foundation Server" /><category term="Agile" /><category term="XP" /><category term="BDD" /><category term="Kanban" /><category term="Climbing" /><category term="Skiing" /><category term="Test" /><title>Random Software Development &amp; Climbing Thoughts</title><subtitle type="html">I work as a software developer, I&amp;#39;m especially interested in Agile/Lean &amp;amp; XP concepts.  

I&amp;#39;m also keen on the outdoors, with my main hobby being Rock Climbing!</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://datoon.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://datoon.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>David A Toon</name><uri>http://www.blogger.com/profile/00409673195020855202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-cEyTC9oWUSA/TYfU0F0TCYI/AAAAAAAAACU/eX_uK1MJoeo/s220/n623331673_765959_6082.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>54</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/RandomSoftwareDevelopmentClimbingThoughts" /><feedburner:info uri="randomsoftwaredevelopmentclimbingthoughts" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;D0YMQHw-cCp7ImA9WhNSGEk.&quot;"><id>tag:blogger.com,1999:blog-19604309.post-5771441793285849724</id><published>2012-11-02T08:31:00.005Z</published><updated>2012-11-02T08:33:01.258Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-02T08:33:01.258Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Development" /><category scheme="http://www.blogger.com/atom/ns#" term="Test" /><category scheme="http://www.blogger.com/atom/ns#" term="Code" /><title>Test Clean-Up</title><content type="html">I've recently had a massive clean up of dependencies between our Core solution, tests &amp;amp; everything else that comes to mind. &lt;br /&gt;
&lt;br /&gt;
During this time I noticed a number of tests which fell in to the following categories:&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;b&gt;&lt;i&gt;WTF? &amp;nbsp;Are they testing!&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
They've been in our test suite &amp;amp; build server for a long time in there current guise. &amp;nbsp;The first set are similar to:&lt;/div&gt;
&lt;div&gt;
[Test]&lt;/div&gt;
&lt;div&gt;
public void BuildMeAPanda()&lt;/div&gt;
&lt;div&gt;
{&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;var panda = new Panda("Chi Chi");&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;Assert.That("Chi Chi", panda.Name);&lt;/div&gt;
&lt;div&gt;
}&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
As you can see we are simply testing the logic of a constructor. &amp;nbsp;Not too much value in this. &amp;nbsp;Although it looks good on our code coverage stats!!! &amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;i&gt;[Ignored]&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
The second are ignored tests which seem to have been written with a future intend - i.e:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
[Test, Ignore("Really need to work out how to test this!")]&lt;/div&gt;
&lt;div&gt;
public void InteractWithDb()&lt;/div&gt;
&lt;div&gt;
{&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; var panda = new Panda();&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; var repo = new PandaRepository();&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; repo.Save(panda);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; // work out what to do here!&lt;/div&gt;
&lt;div&gt;
}&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;i&gt;Broken &amp;amp; [Ignored]&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
The third are the they broke the build, I must get the build in, quickly ignore the test ones:&lt;/div&gt;
&lt;div&gt;
[Test, Ignore("This breaks the build I'll re-instate it later")]&lt;/div&gt;
&lt;div&gt;
public void Bug52358()&lt;/div&gt;
&lt;div&gt;
{&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; // Arrange&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; ... Lots of code&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp;// Act&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp;... Some more code&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp;// Assert&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp;... Some assertion&lt;/div&gt;
&lt;div&gt;
}&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
My view on these tests is to&amp;nbsp;eradicate&amp;nbsp;them. &amp;nbsp;If they've not been in your build cycle for some time then they are not adding any value. &amp;nbsp;They are simply adding overhead to your build time, your thoughts and general clunk within your solution.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I would also try to re-instate the Broken but ignored tests, however, if they fail and you can't understand them within a time boxed amount of time delete them...&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The only&amp;nbsp;occurrence&amp;nbsp;that I've not done this - is on those integration tests where you use them occasionally - a prime example of this is testing email &amp;amp; sms sends. &amp;nbsp;However, these should appear in a different project called:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;.IntegrationTests&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
They should be clearly labelled with:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;[Ignore("Integration tests!")]&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
And over time you probably want to delete these too!?!&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~4/YOO9Xn9kiAM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://datoon.blogspot.com/feeds/5771441793285849724/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=19604309&amp;postID=5771441793285849724&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/5771441793285849724?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/5771441793285849724?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~3/YOO9Xn9kiAM/test-clean-up.html" title="Test Clean-Up" /><author><name>David A Toon</name><uri>http://www.blogger.com/profile/00409673195020855202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-cEyTC9oWUSA/TYfU0F0TCYI/AAAAAAAAACU/eX_uK1MJoeo/s220/n623331673_765959_6082.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://datoon.blogspot.com/2012/11/test-clean-up.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QNRX0_fyp7ImA9WhRbFk0.&quot;"><id>tag:blogger.com,1999:blog-19604309.post-2983611030113658031</id><published>2012-02-07T09:03:00.000Z</published><updated>2012-02-07T09:03:14.347Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-07T09:03:14.347Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Lean" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><title>Why is Agile/Lean so tough?</title><content type="html">&lt;div class="MsoNormal"&gt;I watched an &lt;a href="http://video.google.co.uk/videoplay?docid=-7230144396191025011" target="_blank"&gt;excellent video by Ken Schwaber&lt;/a&gt; the other day regarding SCRUM.&amp;nbsp; Like all these things certain stuff just resonated with me…&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;One of the key points was how tough SCRUM was to implement and the relative poor success rate in implementing SCRUM.&amp;nbsp; The reason behind this is due to the tough questions that SCRUM highlights, my firm belief is that “Agile methodologies” like SCRUM, Kanban, etc do exactly this on the tin.&amp;nbsp; Highlight your problems – I recall a quote, “It’s like developing software in a room with all the lights full blast, compared to the dark room you’ve been sat in for last 5 years!”&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;People often see “Agile methodologies” as silver bullets – follow some simple rules and this will change your software development process for the better.&amp;nbsp; I mean what else could be simpler?&amp;nbsp; It will make you able to accept changing requirements late in the build process, build better quality and deliver faster.&amp;nbsp; The honest truth is that just following these simple rules won’t help your process.&amp;nbsp; The reason you’re looking for a change is usually because of the three reasons highlighted.&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;ul&gt;&lt;li&gt;You’ve got to accept that there are going to be some really tough questions that are highlighted.&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;You’ve got to accept that you have to answer these questions to be successful.&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Only you can answer these questions, not anybody else.&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;If you’re scared of answering tough questions and having tough conversations then do not engage with these “methodologies”.&amp;nbsp; Or if you do then be prepared to fail.&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;So who is “you” – it’s everyone from the top to the bottom.&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;The answers to these questions will inevitably lead to change, and once again this change has to be done in the correct manner.&amp;nbsp; Embracing change, and ensuring that everyone is happy with the change is extremely hard to do – it needs time and effort from people.&amp;nbsp; It needs people to address people’s concerns, discuss why the change is better than the status quo.&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;There are better articles about managing change at the following locations:&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;a href="http://www.amazon.co.uk/Making-Chapter-Constraints-Handbook-ebook/dp/B003VQQFYK/ref=sr_1_fkmr0_2?ie=UTF8&amp;amp;qid=1328604594&amp;amp;sr=8-2-fkmr0" target="_blank"&gt;Making Change Stick - TOC Handbook &lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;a href="http://www.velocityschedulingsystem.com/overcome-resistance-to-change-here%E2%80%99s-how-using-theory-of-constraints/" target="_blank"&gt;An excellent cartoon - Over Come Resistance to Change&lt;/a&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~4/YrQZb5M7n3w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://datoon.blogspot.com/feeds/2983611030113658031/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=19604309&amp;postID=2983611030113658031&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/2983611030113658031?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/2983611030113658031?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~3/YrQZb5M7n3w/why-is-agilelean-so-tough.html" title="Why is Agile/Lean so tough?" /><author><name>David A Toon</name><uri>http://www.blogger.com/profile/00409673195020855202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-cEyTC9oWUSA/TYfU0F0TCYI/AAAAAAAAACU/eX_uK1MJoeo/s220/n623331673_765959_6082.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://datoon.blogspot.com/2012/02/why-is-agilelean-so-tough.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEBRn48fyp7ImA9WhdbFkw.&quot;"><id>tag:blogger.com,1999:blog-19604309.post-4919259420398805957</id><published>2011-10-14T17:17:00.002Z</published><updated>2011-10-14T17:17:37.077Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-14T17:17:37.077Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Development" /><category scheme="http://www.blogger.com/atom/ns#" term="XPManchester" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><title>Am I a Code Monkey?</title><content type="html">Last night’s XPMan was really good. &amp;nbsp;We did some TDD but with no code – essentially we created tests and then created a sequence diagram to pass the tests. &amp;nbsp;We then applied the RGR (Red, Green, and Refactor) to the sequence diagram as we built up the tests; I found it a really good exercise in returning to the basics of TDD. &amp;nbsp;One key thing for me was that it’s really important to do the simplest thing first and get this to go red before you do anything overly complex. &amp;nbsp;During the second kata and my second pair of the evening this became quite pertinent.&lt;br /&gt;
&lt;br /&gt;
However, there is one discussion which provoked some thought and quite a heated exchange. &amp;nbsp;This came in the form of, “I’m a code monkey and I should just fulfil the requirements given to me by the BA’s/customers.” &amp;nbsp;This provoked quite a debate about if a BA asked you to jump of a build would you do it? &amp;nbsp;Another comment was about reading the Agile Manifesto.&lt;br /&gt;
&lt;br /&gt;
So here’s my 50p worth. &amp;nbsp;Yes I am a code monkey, but professionally I need to question what I’m doing. &amp;nbsp;However, this has to be done in the correct manner – asking what the business value is of a specific requirement/user story is? &amp;nbsp;Rather than just saying no. &amp;nbsp;By asking this question – you are just ensuring that the person asking for the work to be done has considered whether it is valuable. &amp;nbsp;If the answer is yes, then you have to fulfil this obligation to the customer and complete the requirement/user story even if you deem it as spurious. &amp;nbsp;This is the professional thing to do. &amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
It’s really important not to blindly accept what people are telling you what to do, but to ask questions and occasionally say no in the right manner – but the manner in saying no has nothing to do with the Agile Manifesto, more the way you say it.&lt;br /&gt;
&lt;br /&gt;
Maybe an unrelated thing – the Agile Manifesto say’s that we value the things on the left more than the right – but remember the things on the right we still value. &amp;nbsp;Something I sometimes forget about is that we still need a plan, we still need a contract negotiation – it’s just we value the following changing requirements &amp;amp; customer collaboration over the other two.&lt;br /&gt;
&lt;br /&gt;
So yes I am a code monkey, but it’s important to question what you’re doing before committing to it.&lt;img src="http://feeds.feedburner.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~4/soPjR9eVoZ8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://datoon.blogspot.com/feeds/4919259420398805957/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=19604309&amp;postID=4919259420398805957&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/4919259420398805957?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/4919259420398805957?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~3/soPjR9eVoZ8/am-i-code-monkey.html" title="Am I a Code Monkey?" /><author><name>David A Toon</name><uri>http://www.blogger.com/profile/00409673195020855202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-cEyTC9oWUSA/TYfU0F0TCYI/AAAAAAAAACU/eX_uK1MJoeo/s220/n623331673_765959_6082.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://datoon.blogspot.com/2011/10/am-i-code-monkey.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUAR307fSp7ImA9WhdWFU8.&quot;"><id>tag:blogger.com,1999:blog-19604309.post-2515539040112596849</id><published>2011-09-08T22:50:00.000Z</published><updated>2011-09-08T22:50:46.305Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-08T22:50:46.305Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="XPManchester" /><category scheme="http://www.blogger.com/atom/ns#" term="Kanban" /><title>XPMan Introduction to Kanban</title><content type="html">Tonight I facilitated an intro to Kanban at XPMan. &amp;nbsp;This was to run through what Kanban is, and introduce the 5 core properties of Kanban. &lt;br /&gt;
&lt;br /&gt;
The slides for the &lt;a href="http://prezi.com/ana2pfd5uaqx/introduction-to-kanban/"&gt;presentation/discussion points&lt;/a&gt;&amp;nbsp;contained the following: &lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Visualising workflow&lt;/li&gt;
&lt;li&gt;Limit WIP&lt;/li&gt;
&lt;li&gt;Measure &amp;amp; Manage Flow&lt;/li&gt;
&lt;li&gt;Make Process Policies Explicit&lt;/li&gt;
&lt;li&gt;Use Models to Evaluate Improvement Opportunities&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
We didn't cover everything in Kanban, but hopefully people got an idea of what it is and how they can start using it.&lt;br /&gt;
&lt;br /&gt;
I'd like to re-emphasis that you should apply it to your current process - it doesn't replace what you do currently it just overlays it. &amp;nbsp;Look at the stats that you get out of it, and let them drive your incremental change&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Links:&lt;/i&gt;&lt;br /&gt;
&lt;a href="http://finance.groups.yahoo.com/group/kanbandev/"&gt;Kanban Dev mailing group&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.meetup.com/Limited-WIP-Society-Manchester/"&gt;Limited WIP Society, Manchester&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.kanban101.com/"&gt;Kanban 101&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.limitedwipsociety.org/"&gt;Limited WIP society&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Books:&lt;/i&gt;&lt;br /&gt;
&lt;a href="http://www.amazon.com/Kanban-Successful-Evolutionary-Technology-Business/dp/0984521402?ie=UTF8&amp;amp;tag=randomampclim-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Kanban&lt;/a&gt;&amp;nbsp;- written by David Anderson the "creator" of Kanban for software development.&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=randomampclim-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0984521402" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&lt;br /&gt;
&lt;a href="http://www.amazon.com/Personal-Kanban-Mapping-Work-Navigating/dp/1453802266?ie=UTF8&amp;amp;tag=randomampclim-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Personal Kanban&lt;/a&gt;&amp;nbsp;- how to apply Kanban to yourself!&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=randomampclim-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=1453802266" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&lt;br /&gt;
&lt;a href="http://www.amazon.com/Scrumban-Essays-Systems-Software-Development/dp/0578002140?ie=UTF8&amp;amp;tag=randomampclim-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Scrumban&lt;/a&gt;&amp;nbsp;- applying Kanban with SCRUM&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=randomampclim-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0578002140" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&lt;br /&gt;
&lt;a href="http://www.amazon.com/Goal-Process-Ongoing-Improvement/dp/0884271781?ie=UTF8&amp;amp;tag=randomampclim-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;The Goal&lt;/a&gt;&amp;nbsp;- need I say anything?&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=randomampclim-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0884271781" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;XPManchester:&lt;/i&gt;&lt;br /&gt;
&lt;a href="http://xpmanchester.wordpress.com/"&gt;XPManchester&lt;/a&gt;&amp;nbsp;blog&lt;br /&gt;
&lt;a href="https://groups.google.com/group/xp-manchester"&gt;XPManchester group&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Thanks to everyone who turned up and joined in. &amp;nbsp;Hopefully provoked some interesting conversations and more importantly gave you some ideas to take away.&lt;img src="http://feeds.feedburner.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~4/9VcCpv_bQrA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://datoon.blogspot.com/feeds/2515539040112596849/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=19604309&amp;postID=2515539040112596849&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/2515539040112596849?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/2515539040112596849?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~3/9VcCpv_bQrA/xpman-introduction-to-kanban.html" title="XPMan Introduction to Kanban" /><author><name>David A Toon</name><uri>http://www.blogger.com/profile/00409673195020855202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-cEyTC9oWUSA/TYfU0F0TCYI/AAAAAAAAACU/eX_uK1MJoeo/s220/n623331673_765959_6082.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://datoon.blogspot.com/2011/09/xpman-introduction-to-kanban.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYHQXY5cCp7ImA9WhdWEkg.&quot;"><id>tag:blogger.com,1999:blog-19604309.post-4014690807431594825</id><published>2011-09-05T20:19:00.001Z</published><updated>2011-09-05T20:22:10.828Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-05T20:22:10.828Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><category scheme="http://www.blogger.com/atom/ns#" term="Code" /><title>Collective Code Ownership</title><content type="html">I recently asked the following question - What does good team code ownership look like?&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Everyone adding (good) test coverage&lt;/li&gt;
&lt;li&gt;Discussing the code&lt;/li&gt;
&lt;li&gt;Design strategy&lt;/li&gt;
&lt;li&gt;Adhere to code standards&lt;/li&gt;
&lt;li&gt;Tool box of patterns&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;&lt;i&gt;Everyone adding (good) test coverage&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
This is especially important, tests make everyone feel secure when making changes to the code base. &amp;nbsp;Everyone in the team must know the benefits of tests, so must maintain them and add other good tests.&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;b&gt;&lt;i&gt;Discussing the Code&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The code is essentially a living entity, i.e. we add functionality, we have to look after it, it is often sick! &amp;nbsp;So it's important that the team talks about the code base. &amp;nbsp;This is powerful because it gives people are deeper understanding of the code base.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;Design strategy&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
A way to improve the design - most code bases have areas that don't give us the necessary ways to change the code, or they are hard to test. &amp;nbsp;So they need to be refactored &amp;amp; improved upon. &amp;nbsp;We are currently doing this with our UI - using MVP. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;Adhere to code standards&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Currently we don't have any standards, however, I do think we have a good code style. &amp;nbsp;This is mainly garnered from &lt;a href="http://www.cleancoders.com/"&gt;Uncle Bob's clean code videos&lt;/a&gt; - which are excellent by the way - you should watch them if you've not (or read his book &lt;a href="http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882?ie=UTF8&amp;amp;tag=randomampclim-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Clean Code&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=randomampclim-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0132350882" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;)!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;Toolbox of Patterns&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
You've got to be able to change the code, this becomes linked to discussing the code. &amp;nbsp;Patterns can help with discussing the code... &amp;nbsp;Having a design strategy - links to this!&lt;br /&gt;
&lt;br /&gt;
This is not a comprehensive list but it's a good start...&lt;br /&gt;
&lt;br /&gt;
Remember:&lt;br /&gt;
“It's important not to own code you've written in a code base; however it’s important that people respect the way the code was written”&lt;img src="http://feeds.feedburner.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~4/djUjMbe1wpY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://datoon.blogspot.com/feeds/4014690807431594825/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=19604309&amp;postID=4014690807431594825&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/4014690807431594825?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/4014690807431594825?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~3/djUjMbe1wpY/collective-code-ownership.html" title="Collective Code Ownership" /><author><name>David A Toon</name><uri>http://www.blogger.com/profile/00409673195020855202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-cEyTC9oWUSA/TYfU0F0TCYI/AAAAAAAAACU/eX_uK1MJoeo/s220/n623331673_765959_6082.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://datoon.blogspot.com/2011/09/collective-code-ownership.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4ASX4yeCp7ImA9WhdQFks.&quot;"><id>tag:blogger.com,1999:blog-19604309.post-7400664066151404739</id><published>2011-08-18T09:10:00.002Z</published><updated>2011-08-18T10:55:48.090Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-18T10:55:48.090Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Kanban" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><title>Limited WIP Society - Open Space</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;
I attended the second &lt;a href="http://www.meetup.com/Limited-WIP-Society-Manchester/"&gt;Limited WIP Society group&lt;/a&gt; @ &lt;a href="http://laterooms.com/"&gt;LateRooms.com&lt;/a&gt; - this was in the format of an Open Space - essentially this is a conference style half hour time slots on things about Kanban and other systems thinking stuff... &amp;nbsp;The tracks that I attended are below - I've tried to remember as much as possible!!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;MMF’s (Minimum Marketable Feature)&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
This was interesting discussion - the main point was the importance of understanding what value. &amp;nbsp;The definition of value must be shared between the business and development...&lt;br /&gt;
&lt;br /&gt;
Other interesting points:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Capability in order to be able to deliver a MMF – so in essence there has to be the technical ability to deliver something within a day. &amp;nbsp;I.e. can you write code, test it and deploy it easily enough in a day. &amp;nbsp;If you can’t then your transaction cost is too much and you are not going to get the benefit from a MMF. &amp;nbsp;The other interesting discussion was about business capability – the business needs to be in a position where it can receive MMF’s and understand the impact on them. &amp;nbsp;&lt;/li&gt;
&lt;li&gt;MMF’s are all about reducing risk, delivering value, and having a constant feedback cycle.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Someone mentioned a graph in order to decide on whether an item is an MMF – I can’t find it at the moment.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Alkthough it’s important to say “No” – some times its better to give people options to the business users.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;I’ve also heard of people using the following to decide on an MMF or to clear a backlog:&lt;/li&gt;
&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-wiZwFBn9mmE/TkzRSWFNc-I/AAAAAAAAAFc/kVsSKfM8MLs/s1600/urgent.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="184" src="http://4.bp.blogspot.com/-wiZwFBn9mmE/TkzRSWFNc-I/AAAAAAAAAFc/kVsSKfM8MLs/s200/urgent.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Somewhat unrelated but still important:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Kanban doesn’t work with multiple delivery teams. &amp;nbsp;If the team does not deliver the same thing then Kanban can’t work.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;b&gt;&lt;i&gt;Daily Stand-Ups &amp;amp; Retrospectives&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;The focus of the meeting should be unblocking the blocked issues – everything else is unimportant.&lt;/li&gt;
&lt;li&gt;Important that at the stand-up the team is protected. &amp;nbsp;You need to reduce the external pressure.&lt;/li&gt;
&lt;li&gt;Managers have a changed role within Kanban – they have to prioritise and help to unblock issues – rather than manage people.&lt;/li&gt;
&lt;li&gt;The granularity of tasks is important – if the tasks are too big and nothing moves then something is probably wrong. &amp;nbsp;&lt;/li&gt;
&lt;li&gt;The issues within the stand-up are important but the detail of the issue is not important.&lt;/li&gt;
&lt;li&gt;Some retrospectives should focus on analysing data others should be in the normal retrospective style – i.e. what went well, what went not too well, and what can we do better next time. &amp;nbsp;It’s important that during a retrospective that everyone has done the best that they can do.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;b&gt;&lt;i&gt;Coaching&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
This was an interesting talk but unfortunately I didn’t take many notes. &amp;nbsp;It mainly surrounded the fact that the change to Kanban is a cultural one which can be hard to invoke. &amp;nbsp;Somehow we managed to start talking about The Choice by Goldratt! &amp;nbsp;&lt;span class="screen-name screen-name-wisemonkeyash pill"&gt;@wisemonkeyash&lt;/span&gt;&amp;nbsp;talked about the glaze of resistance/layers of resistance and has&lt;a href="http://www.velocityschedulingsystem.com/overcome-resistance-to-change-here%E2%80%99s-how-using-theory-of-constraints/"&gt; posted this awesome link&lt;/a&gt; about why change is difficult. &amp;nbsp;We started to talk about mermaids, and crocodiles! &amp;nbsp;However, the overaching thing for me was that everyone is open to change it is just the way in which you invoke the change that is important. &amp;nbsp;It has certainly highlighted that I need to read &lt;a href="http://www.amazon.com/Choice-Revised-Eliyahu-M-Goldratt/dp/0884271935?ie=UTF8&amp;amp;tag=randomampclim-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;“The Choice”&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=randomampclim-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0884271935" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt; and other books – i.e. &lt;a href="http://www.amazon.com/Driving-Technical-Change-Terrence-Ryan/dp/1934356603?ie=UTF8&amp;amp;tag=randomampclim-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Driving Technical Change&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=randomampclim-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=1934356603" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;Identify Bottlenecks&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
This was mostly inspired by the Theory of Constraints – why and how it is important to find a bottleneck. &amp;nbsp;What to do with a bottleneck and other random thoughts about inventory in software development. &amp;nbsp;I found this talk to be one of the most interesting because it’s a topic that I'm very interested in at the moment - for this reason I'm not going to excessively talk about it! &amp;nbsp;This blog contains enough thoughts about this! &amp;nbsp;It’s highlighted some interesting things about trying to elevate the bottleneck – something we are not doing at the moment. &lt;br /&gt;
&lt;br /&gt;
An excellent night. &amp;nbsp;I know I've probably missed some information!&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~4/9gDMbTg0WTA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://datoon.blogspot.com/feeds/7400664066151404739/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=19604309&amp;postID=7400664066151404739&amp;isPopup=true" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/7400664066151404739?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/7400664066151404739?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~3/9gDMbTg0WTA/limited-wip-society-open-space.html" title="Limited WIP Society - Open Space" /><author><name>David A Toon</name><uri>http://www.blogger.com/profile/00409673195020855202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-cEyTC9oWUSA/TYfU0F0TCYI/AAAAAAAAACU/eX_uK1MJoeo/s220/n623331673_765959_6082.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-wiZwFBn9mmE/TkzRSWFNc-I/AAAAAAAAAFc/kVsSKfM8MLs/s72-c/urgent.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://datoon.blogspot.com/2011/08/limited-wip-society-open-space.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YDSHw8cSp7ImA9WhdSGE0.&quot;"><id>tag:blogger.com,1999:blog-19604309.post-5405265547410147265</id><published>2011-07-27T22:19:00.000Z</published><updated>2011-07-27T22:19:39.279Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-27T22:19:39.279Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Lean" /><category scheme="http://www.blogger.com/atom/ns#" term="Kanban" /><title>Efficient Vs. Effective</title><content type="html">I've been thinking about "The Goal" of Kanban in our organisation for some time.&lt;br /&gt;
&lt;br /&gt;
I believe that there are numerous (side/non) goals - however, the one true goal is to deliver high quality, business value to the customer.&amp;nbsp; However, to enable this to happen a Kaizen (continous improvement) environment is likely to aid &amp;amp; probably help you on this "path" to the goal (you might never get to the goal - it is after all a goal).&amp;nbsp; You also have to accept that life/business/software dev/nothing is never static so you have to be able to adapt your process to ensure that you keep delivering value to your customer.&amp;nbsp; This Kaizen environment helps people to eliminate waste, but also empower people to make changes to a process or system which isn't helping to deliver value to the customer.&amp;nbsp; Anything that doesn't add value is essentially waste.&lt;br /&gt;
&lt;br /&gt;
I think there is a lot of "Non-Value Added" time during software development.&amp;nbsp; In fact maybe the only "Value Added" time is the point in which you push/pull it to live.&amp;nbsp; Everything else might just be "Non-Value Added" time! &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
So what exactly is efficiency within Software Development - well to me now it's clear - thanks to wikipedia &amp;amp; the above mind burb!&amp;nbsp; Efficiency in software development is anything that is not "Value Adding" in your current value stream.&lt;br /&gt;
&lt;br /&gt;
Now you might think - well if you've got Kaizen time (i.e. slack time to improve your process) how is this adding value to your current value stream.&amp;nbsp; Well it might be something to help improve the flow within the value stream.&amp;nbsp; This is as important because you are trying to optimise the current value stream - so essentially you are aiming to add value or remove waste from your value stream (agh confusing!).&amp;nbsp; It's important to accept that these might fail sometimes - but hey people make mistakes and learn from them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I think Effectiveness &amp;amp; Efficiency get confused.&amp;nbsp; I'm certainly confused this late at night!&amp;nbsp; Let me give some arbitrary examples of measuring these two things...&lt;br /&gt;
&lt;br /&gt;
Measuring Effectiveness might be measuring the number of LOC (Lines Of Code) a developer writes.&amp;nbsp; However, this is irrelevant in line with the "Goal".&lt;br /&gt;
&lt;br /&gt;
Measuring Efficiency might be measuring the amount of Business Value a developer delivers to the business.&amp;nbsp; This is more relevant to the "Goal", and to some degree is measurable against the goal.&lt;br /&gt;
&lt;br /&gt;
However, this will promote local optima - promoting selfishness, and definitely promoting a non-kaizen environment.&amp;nbsp; This would lead to a process which is not optimised - you essentially get silos of optimised process, with other areas unoptimised.&amp;nbsp; That's why it is important to look at your full value stream when measuring Efficiency.&lt;br /&gt;
&lt;br /&gt;
Before measuring Effectiveness think about the impact this might have on your overall "Goal".&lt;br /&gt;
&lt;br /&gt;
Thanks to the following for making me think about this stuff way too much:&lt;br /&gt;
&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=randomampclim-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0884271781&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;img src="http://feeds.feedburner.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~4/ojtrxh5wEh4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://datoon.blogspot.com/feeds/5405265547410147265/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=19604309&amp;postID=5405265547410147265&amp;isPopup=true" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/5405265547410147265?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/5405265547410147265?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~3/ojtrxh5wEh4/efficient-vs-effective.html" title="Efficient Vs. Effective" /><author><name>David A Toon</name><uri>http://www.blogger.com/profile/00409673195020855202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-cEyTC9oWUSA/TYfU0F0TCYI/AAAAAAAAACU/eX_uK1MJoeo/s220/n623331673_765959_6082.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://datoon.blogspot.com/2011/07/efficient-vs-effective.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YDQXY9eCp7ImA9WhdTFkg.&quot;"><id>tag:blogger.com,1999:blog-19604309.post-5286457726168036425</id><published>2011-07-14T13:45:00.001Z</published><updated>2011-07-14T13:46:10.860Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-14T13:46:10.860Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Lean" /><category scheme="http://www.blogger.com/atom/ns#" term="Kanban" /><title>Increased WIP = Increase in Lead Time</title><content type="html">I've been viewing our Cumulative Flow Diagram and some interesting stats surrounding the work we are developing, our current flow rate and WIP.&amp;nbsp; Today I was able to see how increasing our WIP directly affects our Lead Time.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-ByJKapySOlE/Th7vkyxntNI/AAAAAAAAAEg/7TQfvAX0pBE/s1600/CumulativeFlow.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="198" src="http://2.bp.blogspot.com/-ByJKapySOlE/Th7vkyxntNI/AAAAAAAAAEg/7TQfvAX0pBE/s400/CumulativeFlow.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Our big spike is due to all the items being placed on the backlog (TODO) - although some of these may never be implemented more on this in the future!&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
To summarize some of the information I can see (and you can't!):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Average Lead Time for any sized item from inception to live:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;35 days - 7 and 11 items in progress&lt;/li&gt;
&lt;li&gt;21 days - 2 and 5 items in progress&lt;/li&gt;
&lt;/ul&gt;There are a number of things to note:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Variability in size has an impact on lead time - large items increase lead time.&lt;/li&gt;
&lt;li&gt;Increase in Work in Progress decreases lead time.&lt;/li&gt;
&lt;/ul&gt;&amp;nbsp;The above ties nicely in to &lt;a href="http://www.factoryphysics.com/Principle/LittlesLaw.htm"&gt;Little's Law&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~4/N-dCQUyGU4c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://datoon.blogspot.com/feeds/5286457726168036425/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=19604309&amp;postID=5286457726168036425&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/5286457726168036425?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/5286457726168036425?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~3/N-dCQUyGU4c/increased-wip-increase-in-lead-time.html" title="Increased WIP = Increase in Lead Time" /><author><name>David A Toon</name><uri>http://www.blogger.com/profile/00409673195020855202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-cEyTC9oWUSA/TYfU0F0TCYI/AAAAAAAAACU/eX_uK1MJoeo/s220/n623331673_765959_6082.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-ByJKapySOlE/Th7vkyxntNI/AAAAAAAAAEg/7TQfvAX0pBE/s72-c/CumulativeFlow.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://datoon.blogspot.com/2011/07/increased-wip-increase-in-lead-time.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYCRHcyfSp7ImA9WhZaFE8.&quot;"><id>tag:blogger.com,1999:blog-19604309.post-245228139601966412</id><published>2011-06-30T09:29:00.000Z</published><updated>2011-06-30T09:29:25.995Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-30T09:29:25.995Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Kanban" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><title>Ye Olde Story</title><content type="html">&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;Back at the start of time, or rather the inception of the company there was a small IT department this had to work closely with the business in order to fulfill the ever changing requirements of the business.&amp;nbsp; The IT department of two had to work this way to ensure that the newly found company always had the competitive advantage.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;Unfortunately, as the company got bigger more things started to flow in to the system (IT team) and slowly the development team of two where overwhelmed with the requests being asked of them.&amp;nbsp; They became the bottleneck in the system.&amp;nbsp; In order to alleviate this bottleneck the company hired two more people, this had the desired affect and the IT team could develop some of the functionality that the business wanted.&amp;nbsp; At the same time the company hired more people with more great ideas of how to improve the business.&amp;nbsp; &lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;As the business grew, the list of items for IT expanded exponentially until it became full of things which added little bits of business value but at high cost, the list of items was not prioritised.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;At this time the IT department decided that it needed to help manage this list of items because the development team couldn’t complete all the work.&amp;nbsp; The company decided on introducing contracts and processes so that when those pesky users could only put something on the list if it was fully thought of – or at least had enough detail to work on.&amp;nbsp; The customer started to gold plate features/products just to ensure they get there idea got through; this meant that the bottleneck which was the development team started to do work on items which added very little value to the business.&lt;br /&gt;
&lt;br /&gt;
Parts of the process was deemed to work well for a period of time, but alas no-one recorded the before and after to see whether the new found processes improved the flow through the system.&amp;nbsp; Even more importantly, no-one measured whether the development team delivered value to the customer. &lt;br /&gt;
&lt;br /&gt;
The IT department started to monitor work it realised that it was slow to deliver change to the business.&amp;nbsp; The processes that had been put in place to manage the work were not delivering value to the customer as quickly as the IT department had envisioned.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
The solution to delivering value was simple but hard to implement.&amp;nbsp; The IT department needed to realise the following:&lt;/span&gt;&lt;/div&gt;&lt;ul style="font-family: inherit;"&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Individuals and interactions&lt;/b&gt; over processes and tools&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Working software &lt;/b&gt;over comprehensive documentation&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Customer collaboration&lt;/b&gt; over contract negotiation&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Responding to change&lt;/b&gt; over following a plan&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;That is, while there is value in the items on the right, we value the items on the left more.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;The “pesky end users” where in fact the customers and needed help to get rid of items which didn’t add value or not have a good ROI – this needed to be done through improved communication – rather than more processes and barriers. &lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family: inherit; font-size: small;"&gt;Fortunately, the IT department realised that it needed to evolve from its current state in to a new state, where it delivered high value software to its customer.&amp;nbsp; This was only going to happen through hard work, and through frank conversations within the team, and by evolving there processes to match their customers’ needs.&lt;/span&gt;&lt;img src="http://feeds.feedburner.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~4/8vGk7sujQsE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://datoon.blogspot.com/feeds/245228139601966412/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=19604309&amp;postID=245228139601966412&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/245228139601966412?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/245228139601966412?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~3/8vGk7sujQsE/ye-olde-story.html" title="Ye Olde Story" /><author><name>David A Toon</name><uri>http://www.blogger.com/profile/00409673195020855202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-cEyTC9oWUSA/TYfU0F0TCYI/AAAAAAAAACU/eX_uK1MJoeo/s220/n623331673_765959_6082.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://datoon.blogspot.com/2011/06/ye-olde-story.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEAQ346cSp7ImA9WhZUF0U.&quot;"><id>tag:blogger.com,1999:blog-19604309.post-2489196402753685800</id><published>2011-06-11T09:12:00.001Z</published><updated>2011-06-11T09:14:02.019Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-11T09:14:02.019Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Development" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><title>How Communities Can Help You</title><content type="html">I was fortunate enough to attend &lt;a href="http://agilenorth.org/"&gt;Agile North Conference&lt;/a&gt; yesterday.&amp;nbsp; I spent all the day in the practitioner based stream of the conference.&amp;nbsp; I came away from yesterday brimming full of ideas of how to deal with some of the problems that we have at work.&amp;nbsp; I’d say that most software development companies have these common problems.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
Most areas where people live and work will have regular user groups for people who are interested in their craft (software development).&amp;nbsp; I regularly attend &lt;a href="https://groups.google.com/group/xp-manchester/web/about?hl=en&amp;amp;pli=1"&gt;XPManchester&lt;/a&gt; which is another great community from which to get ideas about eXtreme Programming, although there are other things which come out.&amp;nbsp; Come along!&lt;br /&gt;
&lt;br /&gt;
After XPManchester I met up with a couple of team members who had attended the BCS event about automated testing.&amp;nbsp; I was slightly late to the pub but could hear the geek conversation going on downstairs – my colleagues were also brimming full of ideas and thoughts from that event.&lt;br /&gt;
&lt;br /&gt;
These community events are really fantastic place to get new ideas from, talk to passionate people and generally get a buzz for development back – if you ever lose it!&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
There are loads of ideas out there, go and read about them.&amp;nbsp; If something isn’t working at work then try to apply an idea to it.&amp;nbsp; If it works then great – if not then don’t get disheartened keep trying different ideas until you find one which works for your environment, and even go back to ideas.&amp;nbsp; If they failed back then it might be just because you didn’t do it in small enough chunks, or you didn’t really implement it properly.&lt;br /&gt;
&lt;br /&gt;
Keep the changes small, and quick to reverse.&lt;br /&gt;
&lt;br /&gt;
Once you’ve found something that works, share it with the community!&amp;nbsp; Most other companies are having similar problems to yours!&lt;br /&gt;
&lt;br /&gt;
Share the communities you find with your fellow colleagues at work - some people will definitely be interested in attending!&lt;img src="http://feeds.feedburner.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~4/GH7Kn6imtFo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://datoon.blogspot.com/feeds/2489196402753685800/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=19604309&amp;postID=2489196402753685800&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/2489196402753685800?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/2489196402753685800?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~3/GH7Kn6imtFo/how-communities-can-help-you.html" title="How Communities Can Help You" /><author><name>David A Toon</name><uri>http://www.blogger.com/profile/00409673195020855202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-cEyTC9oWUSA/TYfU0F0TCYI/AAAAAAAAACU/eX_uK1MJoeo/s220/n623331673_765959_6082.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://datoon.blogspot.com/2011/06/how-communities-can-help-you.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcARHc6eCp7ImA9WhZVEUo.&quot;"><id>tag:blogger.com,1999:blog-19604309.post-945668342633224231</id><published>2011-05-23T19:14:00.000Z</published><updated>2011-05-23T19:14:05.910Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-23T19:14:05.910Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Development" /><category scheme="http://www.blogger.com/atom/ns#" term="XP" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><title>Playing By the Rules</title><content type="html">I’ve been trying to reflect on some of the recent successes we’ve had at work.&amp;nbsp; These successes where highlighted in a recent retrospective we ran last week.&amp;nbsp; Increased teamwork/collaboration, and improved built in quality to a certain degree.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
How over the last couple of months has the team seen such a rapid improvement?&lt;br /&gt;
&lt;br /&gt;
The answer is pretty simple really - we have been playing by the "rules" outlined in eXtreme Programming &amp;amp; SCRUM (to a certain degree):&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Pairing&lt;/li&gt;
&lt;li&gt;Test Driven Development&lt;/li&gt;
&lt;li&gt;Planning Poker&lt;/li&gt;
&lt;li&gt;Retrospection&lt;/li&gt;
&lt;li&gt;Daily Stand Up's&lt;/li&gt;
&lt;li&gt;Continuous Integration (to some degree)&lt;/li&gt;
&lt;li&gt;Reflecting on &lt;a href="http://pragprog.com/titles/olag/agile-in-a-flash"&gt;Agile In A Flash cards&lt;/a&gt;&amp;nbsp; &lt;/li&gt;
&lt;li&gt;Watching &lt;a href="http://www.cleancoders.com/"&gt;Clean Coders&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;As one of the Agile In A Flash cards said the other day - we have been playing by the rules, which is something we must keep doing until as a team we are more mature.&amp;nbsp; Once more mature we can start to review the "rules" and adapt them to our situation if they do not fit.&amp;nbsp; Hopefully this will allow us to further satisfy the needs of our customers.&amp;nbsp; In my opinion the most important part of software development.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As a team we probably need to refine our pairing, and having properly defined roles during pairing.&amp;nbsp; How to ensure that both driver and navigator are working together.&amp;nbsp; A common problem is the navigator is distracted.&amp;nbsp; We could simply do the write a failing test then swap, scenario which I have seen work well at &lt;a href="http://xpmanchester.wordpress.com/"&gt;XPMan&lt;/a&gt;.&amp;nbsp; Another way is to use the&amp;nbsp;&lt;a href="http://www.pomodorotechnique.com/"&gt;Pomodoro Technique&lt;/a&gt;.&amp;nbsp; As I'm writing this it's probably the case that as a team we should decide on a way to pair and follow this for a couple of weeks an retrospect on it!&lt;br /&gt;
&lt;br /&gt;
Test Driven Development is another area that we need to get better at, but I think we know what we need to do - we just need to start doing it!&lt;br /&gt;
&lt;br /&gt;
As you can see there is still much to do, a recent mind map highlighted just how far our team has to go.&amp;nbsp; Some of this is in relation to rules we've not implemented and some of this is just to enusre we keep applying the "rules"&lt;img src="http://feeds.feedburner.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~4/0-bTH52XV0s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://datoon.blogspot.com/feeds/945668342633224231/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=19604309&amp;postID=945668342633224231&amp;isPopup=true" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/945668342633224231?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/945668342633224231?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~3/0-bTH52XV0s/playing-by-rules.html" title="Playing By the Rules" /><author><name>David A Toon</name><uri>http://www.blogger.com/profile/00409673195020855202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-cEyTC9oWUSA/TYfU0F0TCYI/AAAAAAAAACU/eX_uK1MJoeo/s220/n623331673_765959_6082.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://datoon.blogspot.com/2011/05/playing-by-rules.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYFSXcyeyp7ImA9WhZWE08.&quot;"><id>tag:blogger.com,1999:blog-19604309.post-4034979357531928497</id><published>2011-05-13T22:35:00.000Z</published><updated>2011-05-13T22:35:18.993Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-13T22:35:18.993Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Development" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><category scheme="http://www.blogger.com/atom/ns#" term="TDD" /><title>Feeling the Rhythm</title><content type="html">This week has seen our team embark on a major piece of new functionality for our legacy system.&lt;br /&gt;
&lt;br /&gt;
Our progress has been relatively slow up until today, this might be due to the stories being epics, or it might be that we are doing all the right stuff!&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
Test first (although probably not true TDD), pairing, getting existing code under test before modifications, improving the design of the existing code base.&lt;br /&gt;
&lt;br /&gt;
We have two pairs who are working together on two stories.&amp;nbsp; Two of the people have swapped mid-week, Russell and I, have “owned” a story for the week.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
The two stories we are working on are quite different, the first story (which I fortunately picked) was to create a new page for the legacy system.&amp;nbsp; The code for this has been written using TDD; the new page interacts with the legacy system through the Model.&amp;nbsp; You might question why I stated “not true TDD” earlier – the reason is that we are lacking the automated acceptance tests to ensure that the outer ring of the TDD cycle is correct.&amp;nbsp; This is something I’ll be feeding in to the next sprint.&lt;br /&gt;
&lt;br /&gt;
The other story is updating an existing page.&amp;nbsp; Essentially this job is three fold – get the code under test, improve the design (change to MVP), and make the functional changes.&amp;nbsp; This has been a huge job.&amp;nbsp; Unfortunately, we are not going to be able to fit everything in to this sprint; however, we will be able to leave the code in a better state than when we started!&amp;nbsp; We are forcing ourselves to pay back the technical debt that has been accrued – this is quite painful and time consuming!&lt;br /&gt;
&lt;br /&gt;
The pairing has been extremely beneficial – it’s made the team focus on getting the job done.&amp;nbsp; I can’t say whether it’s improved the code quality, my gut feeling is that it’s caused conversations about the design of the code, which has simplified it (the tests also help with this), and also caught some things which are just plain wrong.&amp;nbsp; We even had a CRC session to flesh out some of the details of the classes and to ensure that they had the correct responsibilities (&lt;a href="http://xpmanchester.wordpress.com/2011/05/04/12th-may-crc-cards-with-sam-wessel/"&gt;thanks Sam &amp;amp; XPMan!&lt;/a&gt;).&amp;nbsp; Pairing also seems to add energy to development or maybe that’s the caffeine!&lt;br /&gt;
&lt;br /&gt;
It’s felt like we’ve not moved much for most of the week, but this afternoon the team’s feeling was that we were eventually getting somewhere!&amp;nbsp; The team decided to add a couple of hours to our afternoon – something which I’m not always too keen on – I’m a believer of a sustainable pace.&amp;nbsp; However, I also believe that if the team is agreed then this rule can be bent a little.&amp;nbsp; So we stayed for a couple of hours, and managed to get a couple more tasks off the list, and now we are pretty close to completing the two stories.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
This week has had a really good rhythm to it.&amp;nbsp; The Red-Green-Refactor cycle lets you get in to an amazing flow, of sadness then happiness, then more happiness as the code is refactored.&amp;nbsp; The team has been trying to apply what we’ve learnt from the &lt;a href="http://www.cleancoders.com/"&gt;cleancoders.com webcasts&lt;/a&gt; to the code base.&amp;nbsp; Especially the &lt;a href="http://programmer.97things.oreilly.com/wiki/index.php/The_Boy_Scout_Rule"&gt;Boy Scout rule&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
It’s important that we ensure that we deliver business value, but also improve the code base to work with, and have fun!&lt;img src="http://feeds.feedburner.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~4/rWLdP1nYQbs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://datoon.blogspot.com/feeds/4034979357531928497/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=19604309&amp;postID=4034979357531928497&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/4034979357531928497?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/4034979357531928497?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~3/rWLdP1nYQbs/feeling-rhythm.html" title="Feeling the Rhythm" /><author><name>David A Toon</name><uri>http://www.blogger.com/profile/00409673195020855202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-cEyTC9oWUSA/TYfU0F0TCYI/AAAAAAAAACU/eX_uK1MJoeo/s220/n623331673_765959_6082.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://datoon.blogspot.com/2011/05/feeling-rhythm.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8HQHszfyp7ImA9WhZXFEw.&quot;"><id>tag:blogger.com,1999:blog-19604309.post-7943412805919316285</id><published>2011-05-03T10:00:00.000Z</published><updated>2011-05-03T10:00:31.587Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-03T10:00:31.587Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Retrospective" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><category scheme="http://www.blogger.com/atom/ns#" term="Climbing" /><title>Motivated Individuals - Great Teams</title><content type="html">&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;o:OfficeDocumentSettings&gt;   &lt;o:AllowPNG/&gt;  &lt;/o:OfficeDocumentSettings&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:WordDocument&gt;   &lt;w:View&gt;Normal&lt;/w:View&gt;   &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:TrackMoves/&gt;   &lt;w:TrackFormatting/&gt;   &lt;w:PunctuationKerning/&gt;   &lt;w:ValidateAgainstSchemas/&gt;   &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:DoNotPromoteQF/&gt;   &lt;w:LidThemeOther&gt;EN-GB&lt;/w:LidThemeOther&gt;   &lt;w:LidThemeAsian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:Compatibility&gt;    &lt;w:BreakWrappedTables/&gt;    &lt;w:SnapToGridInCell/&gt;    &lt;w:WrapTextWithPunct/&gt;    &lt;w:UseAsianBreakRules/&gt;    &lt;w:DontGrowAutofit/&gt;    &lt;w:SplitPgBreakAndParaMark/&gt;    &lt;w:EnableOpenTypeKerning/&gt;    &lt;w:DontFlipMirrorIndents/&gt;    &lt;w:OverrideTableStyleHps/&gt;   &lt;/w:Compatibility&gt;   &lt;m:mathPr&gt;    &lt;m:mathFont m:val="Cambria Math"/&gt;    &lt;m:brkBin m:val="before"/&gt;    &lt;m:brkBinSub m:val="&amp;#45;-"/&gt;    &lt;m:smallFrac m:val="off"/&gt;    &lt;m:dispDef/&gt;    &lt;m:lMargin m:val="0"/&gt;    &lt;m:rMargin m:val="0"/&gt;    &lt;m:defJc m:val="centerGroup"/&gt;    &lt;m:wrapIndent m:val="1440"/&gt;    &lt;m:intLim m:val="subSup"/&gt;    &lt;m:naryLim m:val="undOvr"/&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
  DefSemiHidden="true" DefQFormat="false" DefPriority="99"
  LatentStyleCount="267"&gt;   &lt;w:LsdException Locked="false" Priority="0" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Normal"/&gt;   &lt;w:LsdException Locked="false" Priority="9" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="heading 1"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 1"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 2"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 3"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 4"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 5"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 6"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 7"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 8"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 9"/&gt;   &lt;w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/&gt;   &lt;w:LsdException Locked="false" Priority="10" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Title"/&gt;   &lt;w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/&gt;   &lt;w:LsdException Locked="false" Priority="11" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/&gt;   &lt;w:LsdException Locked="false" Priority="22" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Strong"/&gt;   &lt;w:LsdException Locked="false" Priority="20" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/&gt;   &lt;w:LsdException Locked="false" Priority="59" SemiHidden="false"
   UnhideWhenUsed="false" Name="Table Grid"/&gt;   &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/&gt;   &lt;w:LsdException Locked="false" Priority="1" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/&gt;   &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/&gt;   &lt;w:LsdException Locked="false" Priority="34" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/&gt;   &lt;w:LsdException Locked="false" Priority="29" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Quote"/&gt;   &lt;w:LsdException Locked="false" Priority="30" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="19" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/&gt;   &lt;w:LsdException Locked="false" Priority="21" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/&gt;   &lt;w:LsdException Locked="false" Priority="31" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/&gt;   &lt;w:LsdException Locked="false" Priority="32" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/&gt;   &lt;w:LsdException Locked="false" Priority="33" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Book Title"/&gt;   &lt;w:LsdException Locked="false" Priority="37" Name="Bibliography"/&gt;   &lt;w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;
 /* Style Definitions */
 table.MsoNormalTable
 {mso-style-name:"Table Normal";
 mso-tstyle-rowband-size:0;
 mso-tstyle-colband-size:0;
 mso-style-noshow:yes;
 mso-style-priority:99;
 mso-style-parent:"";
 mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
 mso-para-margin-top:0cm;
 mso-para-margin-right:0cm;
 mso-para-margin-bottom:10.0pt;
 mso-para-margin-left:0cm;
 line-height:115%;
 mso-pagination:widow-orphan;
 font-size:11.0pt;
 font-family:"Calibri","sans-serif";
 mso-ascii-font-family:Calibri;
 mso-ascii-theme-font:minor-latin;
 mso-hansi-font-family:Calibri;
 mso-hansi-theme-font:minor-latin;
 mso-bidi-font-family:"Times New Roman";
 mso-bidi-theme-font:minor-bidi;
 mso-fareast-language:EN-US;}
&lt;/style&gt; &lt;![endif]--&gt;  &lt;br /&gt;
Getting up at 4:30am in the morning on your holiday may seem like a bit of a daft thing to be doing; in the end holidays are meant to be relaxing and a time to unwind.&amp;nbsp; Some people enjoy lazing on a beach.&amp;nbsp; Unfortunately, that’s not my idea of a holiday - my ideal holiday is cramming as much “stuff” in to the shortest possible time.&amp;nbsp; “Stuff” is defined as ski touring (where I’ve been), ice climbing, rock climbing, skiing. &lt;br /&gt;
&lt;br /&gt;
So what’s the reason for getting up so early and how does this relate to anything at all!!!&lt;br /&gt;
&lt;br /&gt;
Well the reason for getting up early (especially in huts) – is because the hut guardians generally want you on the hill early so you can be back early.&amp;nbsp; The reasons are probably three fold:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;In winter the afternoons bring a greater chance of avalanches.&lt;/li&gt;
&lt;li&gt;In summer the afternoon brings the possibility of thunderstorms.&lt;/li&gt;
&lt;li&gt;It also gives you the most amount of time to achieve your goal - i.e. go up a hill/mountain!&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
I'm not one for getting up early, however, on holiday it seems even easier to get up than it does on a work day.&amp;nbsp; It is quite simple go to bed a lot earlier than normal so that you can ensure that you are fresh in the morning - there is also not much to do in a hut after dinner!&lt;br /&gt;
&lt;br /&gt;
When you get up in the morning at "silly o'clock", there is an enviable buzz around the hut - people are psyched for the day ahead.&amp;nbsp; This energy is really amazing, you can feel it flowing through the building.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
This is the perfect example of &lt;a href="http://agilemanifesto.org/principles.html"&gt;building teams around motivated individuals&lt;/a&gt; (read principle 5), if a software team had the same buzz as my fellow mountaineers/hut goers then it would probably build kick-ass software.&amp;nbsp; Quite assumptive I know!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
My mind now ponders at how to get this motivation flowing through everyone in a team; is getting people up at 4:30am in the morning reasonable!!!&lt;br /&gt;
&lt;br /&gt;
Having a shared goal would be a good start, and finding out what motivates each individual in the team...&lt;img src="http://feeds.feedburner.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~4/puY9BSUEwzM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://datoon.blogspot.com/feeds/7943412805919316285/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=19604309&amp;postID=7943412805919316285&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/7943412805919316285?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/7943412805919316285?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~3/puY9BSUEwzM/motivated-individuals-great-teams.html" title="Motivated Individuals - Great Teams" /><author><name>David A Toon</name><uri>http://www.blogger.com/profile/00409673195020855202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-cEyTC9oWUSA/TYfU0F0TCYI/AAAAAAAAACU/eX_uK1MJoeo/s220/n623331673_765959_6082.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://datoon.blogspot.com/2011/05/motivated-individuals-great-teams.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUCRX85fyp7ImA9WhZQE04.&quot;"><id>tag:blogger.com,1999:blog-19604309.post-8876222977713975814</id><published>2011-04-20T21:51:00.000Z</published><updated>2011-04-20T21:51:04.127Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-20T21:51:04.127Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Development" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><category scheme="http://www.blogger.com/atom/ns#" term="TDD" /><title>Baby Steps</title><content type="html">We’ve been recently working on moving the legacy UI code to MVP.&amp;nbsp; This week has seen my focus move from doing some of the initial work, to a support role within our team.&amp;nbsp; So the focus has been on fixing live issues that we currently have within our system.&amp;nbsp; I might blog about the reasons I think we have these support issues in the future.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
As the week has progressed (it feels like a long week, maybe because it’s a short week!) – I’ve been getting more involved with a colleague who is now converting the legacy code to MVP.&amp;nbsp; It’s been extremely interesting pairing/mentoring the developer.&amp;nbsp; My colleague is quite new to MVP and test first approach so it has been interesting to see how focus can be lost quite easily – thinking about other sections of the system.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
I think this is to do with focusing on the problem at hand, not getting distracted by other issues and just solving the current red issue – the broken test.&amp;nbsp; Once this is green we can think about things which might be important or not be – i.e. how can we improve the current design and the current code base.&amp;nbsp; Or even add another test to highlight the current hacked – I’m very much of the ilk of doing the simplest thing to green.&amp;nbsp; Maybe I’m just plain lazy or like to KISS.&amp;nbsp; Maybe I want to ensure that my focus is on the smallest possible thing.&amp;nbsp; A former colleague always used to say, “I can only concentrate on one thing at once.”&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
This has made me think about a number of things.&amp;nbsp; Developing software is hard; thinking about an entire system and its interactions is even harder.&amp;nbsp; Sometimes developers struggle to focus on their current problem and get distracted by something completely different (i.e. the entire system!).&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
This is the reason it’s important to write tests first.&amp;nbsp; The act of writing the test focuses the mind on what it is we want the method/SUT to do, we can then focus on doing the simplest thing to get the test green.&amp;nbsp; Once this is done we then focus on refactoring.&amp;nbsp; We then repeat.&amp;nbsp; This ensures that we keep focused as we write the code – it’s a very nice rhythm, and very rewarding (amazing how seeing something go green gives me a thrill!!).&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
I recently sent out the code kata that Roy Osherove put on his blog – the string kata.&amp;nbsp; It's interesting that the notes say ensure you do not rush ahead of yourself and do not scroll down.&amp;nbsp; Something any human being would want to do, we are thirsty animals for information and problem solving!&amp;nbsp; I know that some people might struggle with this!&lt;br /&gt;
&lt;br /&gt;
I suppose this poses a couple of questions for me:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Are we killing the inquisitiveness by stopping people from rushing a head, or just simply focusing the brain power of the individual/pair (I know that in a pair one will concentrate on the code, and the other on the design) on the problem at hand?&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Do we currently struggle to focus on a single thing?&lt;/li&gt;
&lt;li&gt;Can the human brain multithread?!&lt;/li&gt;
&lt;/ol&gt;&lt;img src="http://feeds.feedburner.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~4/T3qdmDtVREA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://datoon.blogspot.com/feeds/8876222977713975814/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=19604309&amp;postID=8876222977713975814&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/8876222977713975814?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/8876222977713975814?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~3/T3qdmDtVREA/baby-steps.html" title="Baby Steps" /><author><name>David A Toon</name><uri>http://www.blogger.com/profile/00409673195020855202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-cEyTC9oWUSA/TYfU0F0TCYI/AAAAAAAAACU/eX_uK1MJoeo/s220/n623331673_765959_6082.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://datoon.blogspot.com/2011/04/baby-steps.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYASHw6eCp7ImA9WhZRF04.&quot;"><id>tag:blogger.com,1999:blog-19604309.post-346898488037657615</id><published>2011-04-13T22:35:00.000Z</published><updated>2011-04-13T22:35:49.210Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-13T22:35:49.210Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Development" /><category scheme="http://www.blogger.com/atom/ns#" term="TDD" /><title>Exposing Code Smells with Tests</title><content type="html">I’ve managed to complete my other project within my original estimates – I will blog about whether visualising the work and the other approaches I took worked/helped next time!&lt;br /&gt;
&lt;br /&gt;
Today’s task has been to start converting the UI layer of the main legacy system that our team maintains to MVP.&amp;nbsp; I’m not going to delve in to the reasons why we chose MVP; well I think we just decided that it would be the easiest path to getting the UI under test.&amp;nbsp; The team probably has more experience with MVP than MVC so it’s probably a wise choice!&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
I’ve taken a relatively simple screen to start with, one that shows the notes on a specific Sales Order, allows some filtering, and allows the user to add an additional note.&amp;nbsp; Instead of delving straight in to the ASP.Net code and slotting tests around the existing functionality, I chose to simply abstract the current functionality in to the presenter.&amp;nbsp; This was all done using tests to drive the code.&amp;nbsp; Essentially the tests are what the code does “as-is”, so I suppose you could say that I let the current implementation drive the tests to a certain degree.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
As I started to increase the number of tests around my newly created notes presenter class, interesting patterns and problems with the existing code emerged.&amp;nbsp; Since I’ve become an advocate of a Test-First approach, I’ve noticed that code not written by tests doesn’t show problems – early in the development cycle.&amp;nbsp; I also think (maybe wrongly) that code doesn’t get refactored if you don’t have good tests – therefore ending up spaghetti-fied or just damn hard to highlight problems.&lt;br /&gt;
&lt;br /&gt;
The existing code does a number of things:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Shows all the notes; Or;&lt;/li&gt;
&lt;li&gt;Allows you to filter notes&lt;/li&gt;
&lt;li&gt;Then displays the count of each of the types of notes&lt;/li&gt;
&lt;/ul&gt;Now as the tests have grown I’ve found the existing code does the following:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Shows filtered notes/all notes&lt;/li&gt;
&lt;li&gt;Then gets all the notes again to display the count of each of the types of notes.&lt;/li&gt;
&lt;/ul&gt;The presenter should just get all the notes then filter based on the current filter criteria.&amp;nbsp; This removes the dependency on multiple calls for the notes.&lt;br /&gt;
&lt;br /&gt;
The other thing I found was that the NHibernate ISession is used at quite a high level – with the Service (essentially the Model that I’ve been using for the Notes – it was in existence already) that I am calling to get the Notes.&amp;nbsp; The problem was that I had to force the ISession in from the Presenter.&amp;nbsp; This has made me feel really uncomfortable –a code smell!&amp;nbsp; I’ve had to mock the ISession object out for all of the tests since I am using constructor injection.&amp;nbsp; Really this dependency should be pushed right in to a Model.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
Thinking about it further (as I write this blog post) – it is probably about time to create a real model.&amp;nbsp; I thought I could have got away with using the existing note service for this purpose.&amp;nbsp; This in essence would be a model/façade so I no longer have to mock the NHibernate ISession.&lt;br /&gt;
&lt;br /&gt;
This is something I will endeavour to do on the next phase of development (i.e. tomorrow!).&lt;br /&gt;
&lt;br /&gt;
I find it interesting that the things above highlight themselves after only writing a dozen or so tests.&amp;nbsp; It definitely backs up my thoughts on test-first development, and makes it even more crucial to write them all the time.&amp;nbsp; There has also been the added benefit that I’ve been able to fix a minor UI bug with the code that I’ve written.&lt;img src="http://feeds.feedburner.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~4/lrZp6d78e7k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://datoon.blogspot.com/feeds/346898488037657615/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=19604309&amp;postID=346898488037657615&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/346898488037657615?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/346898488037657615?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~3/lrZp6d78e7k/exposing-code-smells-with-tests.html" title="Exposing Code Smells with Tests" /><author><name>David A Toon</name><uri>http://www.blogger.com/profile/00409673195020855202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-cEyTC9oWUSA/TYfU0F0TCYI/AAAAAAAAACU/eX_uK1MJoeo/s220/n623331673_765959_6082.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://datoon.blogspot.com/2011/04/exposing-code-smells-with-tests.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEFQn0_eyp7ImA9WhZSFUU.&quot;"><id>tag:blogger.com,1999:blog-19604309.post-3961807923567196071</id><published>2011-03-31T15:48:00.001Z</published><updated>2011-03-31T15:50:13.343Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-31T15:50:13.343Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="BDD" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><title>Visualising Your Own Work</title><content type="html">The project that I’m working on at the moment is pretty small.&amp;nbsp; I’ve been given the freedom, or ability to introduce some of the concepts that I’ve been reading, and thinking about over the last year.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
To summarise – I have my own features for the functionality that I am going to implement.&amp;nbsp; These have been written as acceptance criteria using SpecFlow – and the Given, When, Then syntax.&amp;nbsp; Hopefully, this will ensure that the product that I develop delivers what the user wants (I can’t say what the user wants as this is a confidential product).&amp;nbsp; I’ve found that my customer is extremely positive about using this, although we’ve probably not had as much face-to-face conversation as I would have liked.&amp;nbsp; Maybe I should explain this…&amp;nbsp; I’m convinced that some of the acceptance criteria would be better business aligned if we had a discussion rather than e-mail chain.&amp;nbsp; Ironically, since I’m new, I’m probably a tad nervous or shy to be forcing workshops on people (people who know me might laugh at my shy reference!).&lt;br /&gt;
&lt;br /&gt;
I’ve found the Given, When, Then extremely useful and forces me to think about what is important for the user.&amp;nbsp; I’ve also used BDD/TDD for it as well – I’m more than confident that the design of the component I have written is a lot cleaner than I would have written a couple of years back.&amp;nbsp; I’m pretty happy with the design and lack of duplication in the code.&amp;nbsp; I’ve tried to be extremely hard on the refactoring – something I need to work on more and more.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
The other thing I’ve started as of today is my own visual board.&amp;nbsp; The reason for this is I’ve been struggling to focus on what to work on next.&amp;nbsp; I’m interested in seeing how this works; I can already feel the benefit of having something visual forcing me to think what is next and get on with the work!&amp;nbsp; Therefore, I know have:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-zC6OMExamI0/TZSiFOE5EyI/AAAAAAAAAD0/pNIrz4hD1pY/s1600/IMAG0112.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="191" src="http://3.bp.blogspot.com/-zC6OMExamI0/TZSiFOE5EyI/AAAAAAAAAD0/pNIrz4hD1pY/s320/IMAG0112.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
I’ve had to get rid of what the cards actually say sorry, but they are just succinct pieces of work for this project.&amp;nbsp; The pink items are blocks, or rather problems with the card – these need to be resolved before the card can be moved to “Done”.&lt;br /&gt;
&lt;br /&gt;
I’m not going to apply Work In Progress limits yet, I’m not sure whether I need to apply this to the project – my estimate is that the work will take 10 days, so should fit in a single iteration!? &lt;br /&gt;
&lt;br /&gt;
Really I should have a Continuous Integration environment for the project!&lt;img src="http://feeds.feedburner.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~4/HrgGJ5nbbGQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://datoon.blogspot.com/feeds/3961807923567196071/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=19604309&amp;postID=3961807923567196071&amp;isPopup=true" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/3961807923567196071?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/3961807923567196071?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~3/HrgGJ5nbbGQ/visualising-your-own-work.html" title="Visualising Your Own Work" /><author><name>David A Toon</name><uri>http://www.blogger.com/profile/00409673195020855202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-cEyTC9oWUSA/TYfU0F0TCYI/AAAAAAAAACU/eX_uK1MJoeo/s220/n623331673_765959_6082.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-zC6OMExamI0/TZSiFOE5EyI/AAAAAAAAAD0/pNIrz4hD1pY/s72-c/IMAG0112.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://datoon.blogspot.com/2011/03/visualising-your-own-work.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8BQX0-fyp7ImA9WhZTGEo.&quot;"><id>tag:blogger.com,1999:blog-19604309.post-6964928554465757157</id><published>2011-03-23T10:46:00.000Z</published><updated>2011-03-23T09:00:50.357Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-23T09:00:50.357Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Development" /><category scheme="http://www.blogger.com/atom/ns#" term="XP" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><title>What's in a Role Anyway?</title><content type="html">We recently had a discussion about what the state of the development community at the moment. I've also had a blog post with a comment, where I stated is there a need for a BA!? This centred mainly around the make up of the team and who or what key skills you need in a team. As I’ve become accustomed to being just a developer over the past couple of years which has included either of the following: writing code, or supporting production code. Although this has been my primary role over the last couple of years I’ve come to realise – probably since discussing and studying Agile &amp;amp; XP especially that this is simply cannot be the case anymore. &lt;br /&gt;
&lt;br /&gt;
The main reason for this is due to the fact that XP &amp;amp; SCRUM just has a concept of a team – this includes everyone who is needed to deliver a product or rather something of value to the customer. The idea that when the time comes to deliver everyone needs to be able to help to deliver the product – this is mainly because there is not one person responsible for the delivery – the team is responsible. So this means that if there are tests to complete before the iteration completion date and no development work – then everyone needs to “muck in” to complete the tests.&lt;br /&gt;
&lt;br /&gt;
This leads to teams of individuals with multiple skillsets – as an individual you might for one day have your developer “hat” on – the next day your “hat” is firmly in the “test” ring. Traditional role definitions are probably not well used here and are probably redundant. You are essentially just a team member who has more experience in development than testing, BUT you must be able to help with testing if the needs arise. If there is a bottle neck you must be able to relieve the pressure on the bottle neck – otherwise the “team” will not deliver.&lt;br /&gt;
&lt;br /&gt;
This ability to learn different skills leads me to another important asset of any team member – you must be willing to learn. I think Agile especially encourages this, since everything is an experiment? I was listening to a &lt;a href="http://www.se-radio.net/?s=Agile+Testing"&gt;Podcast with Lisa Crispin &lt;/a&gt;and a couple of her final thoughts centred on the need to learn and willingness to learn. It must have struck a chord - because I was skiing at the time! I believe these are key skills for anybody working within in an Agile team. &lt;br /&gt;
&lt;br /&gt;
For me this leads to a couple of core things to look for in team members: &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Willingness to learn&lt;/li&gt;
&lt;li&gt;Ability to adapt to the needs of the team&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~4/YJMyj-CXo_w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://datoon.blogspot.com/feeds/6964928554465757157/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=19604309&amp;postID=6964928554465757157&amp;isPopup=true" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/6964928554465757157?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/6964928554465757157?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~3/YJMyj-CXo_w/whats-in-role-anyway.html" title="What's in a Role Anyway?" /><author><name>David A Toon</name><uri>http://www.blogger.com/profile/00409673195020855202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-cEyTC9oWUSA/TYfU0F0TCYI/AAAAAAAAACU/eX_uK1MJoeo/s220/n623331673_765959_6082.jpg" /></author><thr:total>4</thr:total><feedburner:origLink>http://datoon.blogspot.com/2011/03/whats-in-role-anyway.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAHR3c9cCp7ImA9WhZTF0k.&quot;"><id>tag:blogger.com,1999:blog-19604309.post-979017442236801768</id><published>2011-03-21T16:19:00.006Z</published><updated>2011-03-21T22:32:16.968Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-21T22:32:16.968Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="BDD" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><title>"Specification By Example" - Initial Thoughts</title><content type="html">&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;EN-GB&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="--"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="35" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable  {mso-style-name:"Table Normal";  mso-tstyle-rowband-size:0;  mso-tstyle-colband-size:0;  mso-style-noshow:yes;  mso-style-priority:99;  mso-style-qformat:yes;  mso-style-parent:"";  mso-padding-alt:0cm 5.4pt 0cm 5.4pt;  mso-para-margin-top:0cm;  mso-para-margin-right:0cm;  mso-para-margin-bottom:10.0pt;  mso-para-margin-left:0cm;  line-height:115%;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:"Calibri","sans-serif";  mso-ascii-font-family:Calibri;  mso-ascii-theme-font:minor-latin;  mso-fareast-font-family:"Times New Roman";  mso-fareast-theme-font:minor-fareast;  mso-hansi-font-family:Calibri;  mso-hansi-theme-font:minor-latin;  mso-bidi-font-family:"Times New Roman";  mso-bidi-theme-font:minor-bidi;} &lt;/style&gt; &lt;![endif]--&gt;I’&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;ve&lt;/span&gt; been reading through the excellent &lt;a href="http://specificationbyexample.com/"&gt;“Specification by Example”&lt;/a&gt; in it’s early form from Manning.  I’&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;ve&lt;/span&gt; often struggled with the upstream &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;practises&lt;/span&gt; of Agile.  Recently I attended a work presentation surrounding capturing requirements and other work which BA’s undertake - it looked very “watefall-isk”!  My concern was how to counter this discussion around sign off and the need for documentation.&lt;br /&gt;&lt;br /&gt;I’m so glad that I was able to get hold of “Specification by Example” – it’s given me plenty of ideas of how to promote a different way to work.  The benefit of living documentation has got to be a good starting/selling point!?&lt;br /&gt;&lt;br /&gt;This lead me to ponder what the role of a BA was within an agile/lean organisation.  It seems to have been an area that has been left behind over the years.  This is primarily due to the fact that most of the original Agile Manifesto &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_6"&gt;signatories&lt;/span&gt; where people from the software development field.&lt;br /&gt;&lt;br /&gt;I’&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;ve&lt;/span&gt; often wondered whether User Stories is all Business Analysts should do; in fact do you need Business Analysts?&lt;br /&gt;&lt;br /&gt;Specification by Example answers a lot of questions around capturing requirements in the early phases of an agile/lean project.  I’&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;ve&lt;/span&gt; tried to map out how I see the process within our organisation – I’m not sure whether it’s what is intended but it’s something that I want to try out in the future:&lt;br /&gt;&lt;br /&gt;&lt;img src="https://docs.google.com/drawings/pub?id=1shn1rhYq8gPli8eCBZvqMh0U-rH4ufIoougnhRxeqoM&amp;amp;w=620&amp;amp;h=620" /&gt;&lt;br /&gt;&lt;br /&gt;I will write more about the book, but my first impressions are that I would recommend this to anybody who is developing software, it is extremely informative and well written.&lt;img src="http://feeds.feedburner.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~4/C0De-tgbLUc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://datoon.blogspot.com/feeds/979017442236801768/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=19604309&amp;postID=979017442236801768&amp;isPopup=true" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/979017442236801768?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/979017442236801768?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~3/C0De-tgbLUc/specification-by-example-initial.html" title="&quot;Specification By Example&quot; - Initial Thoughts" /><author><name>David A Toon</name><uri>http://www.blogger.com/profile/00409673195020855202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-cEyTC9oWUSA/TYfU0F0TCYI/AAAAAAAAACU/eX_uK1MJoeo/s220/n623331673_765959_6082.jpg" /></author><thr:total>4</thr:total><feedburner:origLink>http://datoon.blogspot.com/2011/03/specification-by-example-initial.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QCRXgzfCp7ImA9WhZTE0w.&quot;"><id>tag:blogger.com,1999:blog-19604309.post-9036126148246264905</id><published>2011-03-16T21:32:00.002Z</published><updated>2011-03-16T21:36:04.684Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-16T21:36:04.684Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Development" /><title>What is Strategic vs. Tactical?</title><content type="html">&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;o:officedocumentsettings&gt;   &lt;o:relyonvml/&gt;   &lt;o:allowpng/&gt;  &lt;/o:OfficeDocumentSettings&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;EN-GB&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:enableopentypekerning/&gt;    &lt;w:dontflipmirrorindents/&gt;    &lt;w:overridetablestylehps/&gt;   &lt;/w:Compatibility&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="&amp;#45;-"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="35" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable  {mso-style-name:"Table Normal";  mso-tstyle-rowband-size:0;  mso-tstyle-colband-size:0;  mso-style-noshow:yes;  mso-style-priority:99;  mso-style-parent:"";  mso-padding-alt:0cm 5.4pt 0cm 5.4pt;  mso-para-margin-top:0cm;  mso-para-margin-right:0cm;  mso-para-margin-bottom:10.0pt;  mso-para-margin-left:0cm;  line-height:115%;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:"Calibri","sans-serif";  mso-ascii-font-family:Calibri;  mso-ascii-theme-font:minor-latin;  mso-hansi-font-family:Calibri;  mso-hansi-theme-font:minor-latin;  mso-bidi-font-family:"Times New Roman";  mso-bidi-theme-font:minor-bidi;  mso-fareast-language:EN-US;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;p class="MsoNormal"&gt;Over the last couple of years the term strategic and tactical has become more apparent to me, this is probably because people have talked about the need for strategic software solutions against the need for tactical software solutions.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;I’ve been pondering what this actually means to me!&lt;span style=""&gt;  &lt;/span&gt;What impact does a tactical solution have on the end user?&lt;span style=""&gt;  &lt;/span&gt;What does a strategic solution have on an end user?&lt;span style=""&gt;  &lt;/span&gt;My gut feeling is that the answer would be nothing.&lt;span style=""&gt;  &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;So let’s flip the question around, because I believe the term is coined by developers/management.&lt;span style=""&gt;  &lt;/span&gt;It may even be an excuse for not doing certain practises.&lt;span style=""&gt;  &lt;/span&gt;A tactical solution is a quick fix; with very light weight Project Management around it, there may not be time to do any tests and the whole attitude is doing whatever it takes to deliver with the least amount of effort.&lt;span style=""&gt;  &lt;/span&gt;A strategic solution has PM’s, BA’s and Project Management around the solution.&lt;span style=""&gt;  &lt;/span&gt;This makes it strategic because there is more governance.&lt;span style=""&gt;  &lt;/span&gt;We’d prefer to take our time on this project because of its strategic importance.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;The definition for strategy is:&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;“A word of military origin refers to plan of action designed to achieve a particular goal.” or;&lt;/li&gt;&lt;li&gt;“Highly important to an intended objective”&lt;/li&gt;&lt;/ul&gt;    &lt;p class="MsoNormal"&gt;The definition for tactical is:&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;“Less of a long-term significance than strategic operations”&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal"&gt;From briefly wiki-ing and searching on the web, the terms “strategic” &amp;amp; “tactical” seem to have their history in the military.&lt;span style=""&gt;  &lt;/span&gt;Strange that software development has adopted these words, my view is that there meaning has been modified incorrectly for software development.&lt;span style=""&gt;  &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;If you were to apply these words to software development, maybe they should have a different meaning to what I’ve seen.&lt;span style=""&gt;  &lt;/span&gt;So here is my 50p’s worth.&lt;span style=""&gt;  &lt;/span&gt;The strategy is where the overall “architecture” of the company is going – i.e. we want everything to be SOA.&lt;span style=""&gt;  &lt;/span&gt;The actual implementation – writing of code is tactical – i.e. we will implement this through a RESTFul service using WCF.&lt;span style=""&gt;  &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Both the development of the application and the overall “architecture” of the system should be aimed to align closely with what the customer actually wants.&lt;span style=""&gt;  &lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;The customer probably doesn’t care what the strategy is – they probably only care what the tactical delivery is!?&lt;span style=""&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~4/xVqedvJhdI8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://datoon.blogspot.com/feeds/9036126148246264905/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=19604309&amp;postID=9036126148246264905&amp;isPopup=true" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/9036126148246264905?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/9036126148246264905?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~3/xVqedvJhdI8/what-is-strategic-vs-tactical.html" title="What is Strategic vs. Tactical?" /><author><name>David A Toon</name><uri>http://www.blogger.com/profile/00409673195020855202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-cEyTC9oWUSA/TYfU0F0TCYI/AAAAAAAAACU/eX_uK1MJoeo/s220/n623331673_765959_6082.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://datoon.blogspot.com/2011/03/what-is-strategic-vs-tactical.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ENQ3Y8eCp7ImA9Wx9aGEU.&quot;"><id>tag:blogger.com,1999:blog-19604309.post-738338700766287297</id><published>2011-03-07T16:39:00.008Z</published><updated>2011-03-11T23:21:32.870Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-11T23:21:32.870Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Skiing" /><category scheme="http://www.blogger.com/atom/ns#" term="Climbing" /><title>The Joy of Post Holing</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-m6tSlZbdGEo/TXqrYLOU9DI/AAAAAAAAACM/HLBKuK6X_34/s1600/P3040120.JPG"&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;img src="http://1.bp.blogspot.com/-K8N-lTjysds/TXqqiemvVlI/AAAAAAAAAB0/-UQBCVdKyC0/s320/P3020067.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5582962197386974802" style="float: left; margin-top: 0px; margin-right: 10px; margin-bottom: 10px; margin-left: 0px; cursor: pointer; width: 320px; height: 240px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;We had a really magnificent week away in Italy - this was all part of my dad's rehabilation after he broke his ankle/leg in Switzerland on the Piz &lt;span class="Apple-style-span" style="line-height: 15px; "&gt;&lt;em style="font-style: normal; "&gt;Trubinesca&lt;/em&gt;&lt;/span&gt;.  You may know about this if you've chatted to me - if you don't you can read the over media hyped version @ &lt;a href="http://www.lancashiretelegraph.co.uk/news/8369159.Ex_Chorley_councillor_injured_in_abseiling_fall_in_Swiss_Alps/"&gt;you can see it here&lt;/a&gt;!&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;We stayed in &lt;a href="http://www.livigno.com/"&gt;Livigno&lt;/a&gt; in the &lt;a href="http://www.piccolotibet.it/index.htm"&gt;Picolo Tibet&lt;/a&gt; - which is run by &lt;span class="Apple-style-span" style="line-height: 15px; "&gt;&lt;em style="font-style: normal; "&gt;Ercole (I think that's how you spell it!) - he was a fellow patient&lt;/em&gt;&lt;/span&gt; in the St Moritz hospital that my dad spent 20 days in following the accident.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;We spent the first part of the week skiing - it's really good swishing down the slopes on the skis.  I changed to snowboarding a couple of years back, but have since gone back to skiing.  Due to a damaged board after a big gust in Scotland slightly damaged the board, and also I've got the gear for ski mountaineering now!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline; "&gt;&lt;img src="http://1.bp.blogspot.com/-u7wDFOkAXgA/TXqqiu9ax-I/AAAAAAAAAB8/VXTSEpE23OY/s320/P3030345.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5582962201777063906" style="float: left; margin-top: 0px; margin-right: 10px; margin-bottom: 10px; margin-left: 0px; cursor: pointer; width: 320px; height: 240px; " /&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;The second part of the week was spent ice climbing.  The approaches where pretty awkward due to the depth of the snow - not having snow shoes really tells.  Post holing as the "yanks" call it is really exhausting and time consuming when approaching routes.  It seems to take a quarter of the time to get down after the route!  It may well be time to invest in some snow shoes - the only problem is that they need to be easy to carry and collapsible - it &lt;a href="http://orw.goexposoftware.com/2009/goExpo/public/viewExhibitorProfile.php?__id=2293#32"&gt;seems that there is already a patent pending!&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline; "&gt;The first ice route was a WI 4+ it took about an hour and half to get to the bottom of the route the guide book time for the approach was half an hour!  The Joy of Post Holing!  It was really interesting climbing the top pitch the ice must have been half a metre thick sheet of ice.  It kept thudding as you placed the axes and crampons.  Quite interesting really - I didn't put much protection because the ice wasn't that thick!!!  Both pitches where fantastic.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline; "&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline; "&gt;&lt;img src="http://1.bp.blogspot.com/-m6tSlZbdGEo/TXqrYLOU9DI/AAAAAAAAACM/HLBKuK6X_34/s320/P3040120.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5582963119897244722" style="float: right; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 10px; cursor: pointer; width: 240px; height: 320px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline; "&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline; "&gt;The second ice route was a WI 5 the guidebook says it is only a 90 metre route.  It ended up being more like a 200 metre route.  The gully was quite long to get to the main pitch which is a really nice sustained 5 pitch.  The ice was just good enough to climb on the left - the centre was all rotten out - it had been in the sun too long and was really mushy!!!  It was a really good route to do on the final day before travelling back to Zurich.  Something to get the arms pumped!!!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;A really good trip and a good place for my dad to continue his rehabilitation - to quote after the WI 4+ - "That's the hardest thing I've been on since the accident!".&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;Hopefully Scotland will stay/get in nick again so we can get up there for some more ice climbing in the coming weeks.  Back to training &amp;amp; work for now!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~4/XhC_dbTGWkM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://datoon.blogspot.com/feeds/738338700766287297/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=19604309&amp;postID=738338700766287297&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/738338700766287297?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/738338700766287297?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~3/XhC_dbTGWkM/joy-of-post-holing.html" title="The Joy of Post Holing" /><author><name>David A Toon</name><uri>http://www.blogger.com/profile/00409673195020855202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-cEyTC9oWUSA/TYfU0F0TCYI/AAAAAAAAACU/eX_uK1MJoeo/s220/n623331673_765959_6082.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-K8N-lTjysds/TXqqiemvVlI/AAAAAAAAAB0/-UQBCVdKyC0/s72-c/P3020067.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://datoon.blogspot.com/2011/03/joy-of-post-holing.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMBRXs_fCp7ImA9Wx9bFk8.&quot;"><id>tag:blogger.com,1999:blog-19604309.post-6695242564442277779</id><published>2011-02-25T09:34:00.004Z</published><updated>2011-02-25T10:07:34.544Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-25T10:07:34.544Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Kanban" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><title>Delayed Value</title><content type="html">&lt;span style="color:#333333;"&gt;&lt;span style="font-family:georgia;font-size:85%;"&gt;Having my last look at the board today, I found it interesting that we have work items sat in the "Ready For Production" column. The total items in this has grown over the last couple of weeks - we now have 7 items ready for "Production".&lt;br /&gt;&lt;br /&gt;These items all have a varying level of "Business Value" (value) associated with them - but are sat in the system. They are all blocked by the same thing - the legacy system has a quarterly release cycle.&lt;br /&gt;&lt;br /&gt;This poses a couple of questions:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;Is there a threshold before the amount of value being delivered outweighs the cost of putting that value live?&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;Should every single piece of item developed be pushed live as soon as it is ready - therefore giving you an instance ROI?&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color:#333333;"&gt;&lt;span style="font-family:georgia;font-size:85%;"&gt;Are the items of high enough value to the customer if they can just sit in the "Done" column for a couple of weeks? &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;Do the customers have visibility of what is "Done"?&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;My gut feel is that the first question is a cop out - the cost of pushing things in to a live environment should be minimal because you should really have seemless CI. It should be of no extra cost to put code in to a live environment. If it costs - you need to spend time &amp;amp; money on improving this build &amp;amp; deploy system. This is an &lt;/span&gt;&lt;a href="http://martinfowler.com/bliki/TradableQualityHypothesis.html"&gt;&lt;span style="font-family:georgia;font-size:85%;color:#3333ff;"&gt;Internal Quality as Martin Fowler puts it&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;If you push every single piece of work live you need to have customers who can accept a constantly changing system. This maybe difficult but I think it depends on what you are delivering - i.e. defect fixes, and minor enhancements could be dropped in at any point. With large changes in functionality - it depends on how involved the customer has been with the development. Here we probably can't do it, because the customer is not overly involved.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;The above statement probably answers the last two questions as well. It's all about the customer deciding on what to develop - this way they can decide upon the items with the highest value.  They also know when items are complete.  &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;This is one of the 4 principles in the Agile Manifesto - &lt;strong&gt;"Customer Collaboration"&lt;/strong&gt;.&lt;/span&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~4/Po8qEH3Bb5w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://datoon.blogspot.com/feeds/6695242564442277779/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=19604309&amp;postID=6695242564442277779&amp;isPopup=true" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/6695242564442277779?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/6695242564442277779?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~3/Po8qEH3Bb5w/delayed-value.html" title="Delayed Value" /><author><name>David A Toon</name><uri>http://www.blogger.com/profile/00409673195020855202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-cEyTC9oWUSA/TYfU0F0TCYI/AAAAAAAAACU/eX_uK1MJoeo/s220/n623331673_765959_6082.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://datoon.blogspot.com/2011/02/delayed-value.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MAQXw_cSp7ImA9Wx9bEEk.&quot;"><id>tag:blogger.com,1999:blog-19604309.post-1503031952281279739</id><published>2011-02-18T15:49:00.005Z</published><updated>2011-02-18T16:10:40.249Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-18T16:10:40.249Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Team Foundation Server" /><title>Team Foundation Server - Test Presentation</title><content type="html">Since I joined my current company I've been tasked with learning about Team Foundation Server.  It was seen as key component to future development within the company.  However, previous initiatives have fallen by the way side over the years.  I think these have not worked because they have failed to interact with the larger audience of IT - i.e. outside of just the .Net development teams.&lt;br /&gt;&lt;br /&gt;It has often been seen as a “thing” that was coming but no-one really knew about. &lt;br /&gt;&lt;br /&gt;We finally get a production ready instance of TFS 2010 this week.  After numerable test instances have been used and “toyed” with. &lt;br /&gt;&lt;br /&gt;Weirdly I'm leaving my current company in the next week, and yet this initiative seems to be finally getting some steam behind it; or at least it felt that way today. &lt;br /&gt;&lt;br /&gt;We've been using it within our development team for.Net technologies for the last 5 years or so, more recently we've been starting to use it for User Stories/requirements, work item tracking and general reporting.  CI builds where going to be my next task.&lt;br /&gt;&lt;br /&gt;Today I've given a presentation to the Test team.  After a trial demo to our development team the other week, this seemed to send everyone to sleep!?  I decided to change the format, I hoped it would make it more interactive and actual let me know what people thought about TFS, what they'd heard about for so long - but never really seen.  I also needed some help - since I'm not really a "Tester" (although I'm trying harder to become multi-skilled - I might blog about this separately!!!) - so didn't know what to show them.  I can give a demo to developers easy since I know what they want to do. &lt;br /&gt;&lt;br /&gt;This led me to the following format for the presentation:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Get an understanding of what the group knew about TFS?&lt;/li&gt;&lt;li&gt;What they thought TFS was?&lt;/li&gt;&lt;li&gt;What they thought TFS would do for them?&lt;/li&gt;&lt;/ul&gt;I linked this to another item:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;What are the current problems within "Test"?&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;This gave me a lot of ideas as to what they actually wanted to see, it also highlighted what TFS wasn't going to give them.  I.e. it isn't going to solve World hunger, or poverty!!!&lt;br /&gt;&lt;br /&gt;After this I let the group drive the demo:&lt;br /&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;What do you want to start using?&lt;/li&gt;&lt;li&gt;What do you want to see? &lt;/li&gt;&lt;li&gt;What do you want to explore?&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;I found this helpful, and hopefully they enjoyed it and saw the potential of TFS.  I have to re-emphasis that I am no expert on it from a "Test" perspective - I simply know of its potential to fulfil some of the problems that they currently have.  It's essential that someone takes the time and interest in the tool to try to solve some of their problems.&lt;br /&gt;&lt;br /&gt;It's definitely a tact I'd take with any other presentation/demo I'm giving in the future! &lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~4/zol0ZyW2PS4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://datoon.blogspot.com/feeds/1503031952281279739/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=19604309&amp;postID=1503031952281279739&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/1503031952281279739?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/1503031952281279739?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~3/zol0ZyW2PS4/team-foundation-server-test.html" title="Team Foundation Server - Test Presentation" /><author><name>David A Toon</name><uri>http://www.blogger.com/profile/00409673195020855202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-cEyTC9oWUSA/TYfU0F0TCYI/AAAAAAAAACU/eX_uK1MJoeo/s220/n623331673_765959_6082.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://datoon.blogspot.com/2011/02/team-foundation-server-test.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYARn0-fyp7ImA9Wx9UGEg.&quot;"><id>tag:blogger.com,1999:blog-19604309.post-2852970599407193658</id><published>2011-02-16T10:00:00.006Z</published><updated>2011-02-16T10:29:07.357Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-16T10:29:07.357Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="BDD" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><title>BDD - Initial Experiences</title><content type="html">I've recently discovered &lt;span id="SPELLING_ERROR_0" class="blsp-spelling-error"&gt;BDD&lt;/span&gt; or rather there has been an increase in communication about this topic around me - someone mentioned Cucumber at &lt;span id="SPELLING_ERROR_1" class="blsp-spelling-error"&gt;XPManXL&lt;/span&gt;!&lt;br /&gt;&lt;br /&gt;I found the extremely well written &lt;a href="http://cuke4ninja.com/"&gt;&lt;span id="SPELLING_ERROR_2" class="blsp-spelling-error"&gt;Cuke&lt;/span&gt;4Ninja site&lt;/a&gt;, and started to discuss Specs more with my colleagues.  Jason highlighted that &lt;a href="http://www.specflow.org/"&gt;&lt;span id="SPELLING_ERROR_3" class="blsp-spelling-error"&gt;SpecFlow&lt;/span&gt; &lt;/a&gt;seemed like a good implementation for .Net development. &lt;br /&gt;&lt;br /&gt;This all seemed to align with both &lt;a href="http://gojko.net/"&gt;&lt;span id="SPELLING_ERROR_4" class="blsp-spelling-error"&gt;Gojko&lt;/span&gt; &lt;span id="SPELLING_ERROR_5" class="blsp-spelling-error"&gt;Adzic&lt;/span&gt;&lt;/a&gt; at Agile &lt;span id="SPELLING_ERROR_6" class="blsp-spelling-corrected"&gt;Yorkshire&lt;/span&gt; which I unfortunately missed, but made up for with attending &lt;a href="http://xpmanchester.wordpress.com/2011/01/30/10th-feb-exploring-bdd-with-john-nolan/"&gt;&lt;span id="SPELLING_ERROR_7" class="blsp-spelling-error"&gt;XPManchester&lt;/span&gt;&lt;/a&gt; where &lt;a href="http://johnnosnose.blogspot.com/"&gt;John(no)&lt;/a&gt; gave a presentation/discussion about &lt;span id="SPELLING_ERROR_8" class="blsp-spelling-error"&gt;BDD&lt;/span&gt; for his Masters...  He asked us to implement a Chess Kata using some features which he has developed - these can be &lt;a href="https://github.com/johnnonolan/ChessBoard-Kata"&gt;downloaded from &lt;span id="SPELLING_ERROR_9" class="blsp-spelling-error"&gt;GitHub&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I spent a bit of time trying to implement the features.  My first experience of &lt;span id="SPELLING_ERROR_10" class="blsp-spelling-error"&gt;BDD&lt;/span&gt;!  I found it quite overwhelming initially with all the specs running.  I.e. I had quite a lot of specs/tests running and didn't know where to start. &lt;br /&gt;&lt;br /&gt;Retrospectively I should have included a single feature - implemented it till green and then incrementally added features as I went along.  This is something I am going to do on my second attempt.  I plan to throw away my initial code and start again.  Although I'll probably use a similar design I'm interested to see how after my initial attempt how it will differ - will it be better design?&lt;br /&gt;&lt;br /&gt;Initial thoughts are that features are a way to have a shared vocabulary between developers and business users.  I also think that they are the Acceptance Criteria which are usually written on the back of User Story cards. &lt;br /&gt;&lt;br /&gt;I'm also slightly confused at when to start delving deeper from high level features in to say lower level "Behaviours/Features".  This I'm sure will become apparent as I spend more time using &lt;span id="SPELLING_ERROR_11" class="blsp-spelling-error"&gt;BDD&lt;/span&gt;.&lt;img src="http://feeds.feedburner.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~4/bUBZ4lf9VOE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://datoon.blogspot.com/feeds/2852970599407193658/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=19604309&amp;postID=2852970599407193658&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/2852970599407193658?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/2852970599407193658?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~3/bUBZ4lf9VOE/bdd-initial-experiences.html" title="BDD - Initial Experiences" /><author><name>David A Toon</name><uri>http://www.blogger.com/profile/00409673195020855202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-cEyTC9oWUSA/TYfU0F0TCYI/AAAAAAAAACU/eX_uK1MJoeo/s220/n623331673_765959_6082.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://datoon.blogspot.com/2011/02/bdd-initial-experiences.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04GQ3s4eCp7ImA9Wx9UEko.&quot;"><id>tag:blogger.com,1999:blog-19604309.post-898841554178528867</id><published>2011-02-09T17:10:00.005Z</published><updated>2011-02-09T17:18:42.530Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-09T17:18:42.530Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Retrospective" /><category scheme="http://www.blogger.com/atom/ns#" term="Kanban" /><title>Kanban - Retrospective - Categories for Improvement</title><content type="html">&lt;span class="Apple-style-span"  &gt;We keep having weekly retrospectives about the Kanban board. &lt;br /&gt;&lt;br /&gt;Last week’s retrospective probably went a tad off target, or maybe it produced ideas which don’t improve the process of our team, rather than general ideas about the board.  Note: no idea is wrong or right during these retrospectives – it’s just the focus might have been lost on the purpose of Kanban.&lt;br /&gt;&lt;br /&gt;Last week we looked at things that “went well”, things that “went wrong” and things that we wanted to “improve”.  We then voted on which improvement ideas we wanted to implement.  You can see what we implemented in my last blog post.&lt;br /&gt;This week we invited Andy (our very own Lean/Agile samurai) to the retrospective, partly to see how we should run a retrospective, and partly to get some focus back on Kanban.&lt;br /&gt;&lt;br /&gt;The following was the rough structure of the retrospective.  The first was a discussion between pairs about “Why we wanted to do Kanban?” and also “What we wanted to change?”  These where put on post it’s and stuck to the wall randomly. &lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  &gt; &lt;br /&gt;We silently organised as a team the post-it’s into groups.  I found it especially interesting the commonality between the post-it’s that each of the pairs came up with – probably not very interesting since we all share the same goals &amp;amp; grievances!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  &gt;&lt;br /&gt;The team then came up with the following list of categories for each of the groups of the post-its (in no particular order – I just wrote them down this way!!):&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"  &gt;Teamwork&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  &gt;Customer Satisfaction&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  &gt;Problem Identification&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  &gt;Prioritisation&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  &gt;Predictability&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  &gt;Speed&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  &gt;Transparency&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span"  &gt;&lt;br /&gt;The team scored each of these with either an “x” “–“ or “tick” depending on how we felt things were currently.  We scored the majority with a “-“on some categorices and “x”’s on other categories – as you would expect.  None we scored with a “tick” – we had some small ticks though!!!&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  &gt;&lt;br /&gt;We then paired again (with different pairs) and asked each other how we could improve the process targeting the above categories.&lt;br /&gt; &lt;br /&gt;We fed this all back in to a whiteboard – and came up with a list of things to improve.  We each had 3 votes again and got to vote on an idea we’d like to implement.  The ideas we are going to implement are as follows:&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span"  &gt;Measure cycle time overall and between different work types &amp;amp; stages.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  &gt;Limit number of items coming in to the start of the workflow &amp;amp; each stage.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  &gt;Cut things down into smaller chunks of highest value.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  &gt;We are going to try to implement these this coming week, to see if it improves parts of the process.  The impact might not be immediate but Rome wasn’t built in a day (I’ve used that quote too often recently!). &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  &gt; &lt;br /&gt;An important thing for me is that we start to get some stats about the work we do in our “development system” – i.e. how long it takes for us to complete different work – what is the cycle time for a specific type of work?&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~4/wMlscybwack" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://datoon.blogspot.com/feeds/898841554178528867/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=19604309&amp;postID=898841554178528867&amp;isPopup=true" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/898841554178528867?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/898841554178528867?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~3/wMlscybwack/kanban-retrospective-categories-for.html" title="Kanban - Retrospective - Categories for Improvement" /><author><name>David A Toon</name><uri>http://www.blogger.com/profile/00409673195020855202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-cEyTC9oWUSA/TYfU0F0TCYI/AAAAAAAAACU/eX_uK1MJoeo/s220/n623331673_765959_6082.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://datoon.blogspot.com/2011/02/kanban-retrospective-categories-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUENQHk4fip7ImA9Wx9UEEo.&quot;"><id>tag:blogger.com,1999:blog-19604309.post-4027832685826885871</id><published>2011-02-07T11:18:00.003Z</published><updated>2011-02-07T11:21:31.736Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-07T11:21:31.736Z</app:edited><title>3 Weeks of Kanban</title><content type="html">&lt;span style="color:#000000;"&gt;So we've had the kanban (note the small k!) board for nearly 3 weeks now. It's been quite a learning curve. Especially since a few of us know the theory and some are really new to it.&lt;br /&gt;&lt;br /&gt;The first thing to know is that the daily stand up is a new idea, so quite a few people are alien to what the purpose of the meeting is. This makes it seem quite an arduous task to stand in front of the board for 30 minutes initially (times have come down in recent weeks).&lt;br /&gt;&lt;br /&gt;This is primarily due to a lack of shared knowledge\understanding of the purpose of the daily stand-up. As I will now highlight!!!&lt;br /&gt;&lt;br /&gt;Compared to a SCRUM meeting the Kanban daily meeting is significantly different. My understanding of SCRUM meetings are that they take the following format, each member of the team say’s:&lt;br /&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="color:#000000;"&gt;What they did yesterday. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color:#000000;"&gt;What they plan to do today. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color:#000000;"&gt;What issues you have. &lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;span style="color:#000000;"&gt;Having read about these meetings, my general understanding is that they do not scale – i.e. they start to take longer than the 15 minutes allotted when you have more than 10 team members (note: everyone is involved!).&lt;br /&gt;&lt;br /&gt;My understanding of the format of a Kanban meeting is as follows: &lt;/span&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="color:#000000;"&gt;Highlight anything that is “blocking” a work item – we call this an “Issue”. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color:#000000;"&gt;Pull the next work items in from “Done” columns. &lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;span style="color:#000000;"&gt;I’ve read that mature adoptees of Kanban will actually perform a retrospective during the meeting. I.e. why is this issue preventing this item from moving? How do we prevent this from happening again?&lt;br /&gt;&lt;br /&gt;So you can see that I have a specific understanding of daily stand-ups! How are we going to share this knowledge? &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;Well today I’ve been trying to write the ideas above in to an “explicit policy”. So now we have a “Purpose of Daily Stand-Up” – which ironically has the information highlighted above. This is a single power point slide – the key here is brevity (which I’m not very good at most of the time!).&lt;br /&gt;We also needed a definition of an “Issue” so that people are aware of what we are trying to highlight during the meeting. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;“Solving Issues” also has a definition and ideas of how to solve issues. The most important thing is that anybody can solve the issue. Another important thing is that the issue is taken away from the daily stand-up – otherwise it turns in to a conversation between only a few people; then no progress is made during the stand-up people not involved in the conversation get bored.&lt;br /&gt;All of these lead in to a Retrospective – i.e. “How can we improve flow?”, “How can improve different areas of our process?” These are placed on another slide. So now we have four slides which hopefully outline “explicit policies” or definitions – hopefully these will help over the coming weeks. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000000;"&gt;Other things that we probably need to consider: &lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color:#000000;"&gt;Size items – could we use T-Shirt sizes? &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color:#000000;"&gt;Mark on items when they move – i.e. transition to “Done”, transition to “In Progress”. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color:#000000;"&gt;Mark on items each day they are in a certain area on the board. &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="color:#000000;"&gt;So to summarise some important lessons: &lt;/span&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="color:#000000;"&gt;We are always learning. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color:#000000;"&gt;We have plenty of good ideas from all the team for the board. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color:#000000;"&gt;The board will change. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color:#000000;"&gt;We probably have too much Work In Progress. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color:#000000;"&gt;Meetings need a purpose or goal. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color:#000000;"&gt;Meetings need an agenda.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;img src="http://feeds.feedburner.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~4/g60LPZs4mRk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://datoon.blogspot.com/feeds/4027832685826885871/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=19604309&amp;postID=4027832685826885871&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/4027832685826885871?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19604309/posts/default/4027832685826885871?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RandomSoftwareDevelopmentClimbingThoughts/~3/g60LPZs4mRk/3-weeks-of-kanban.html" title="3 Weeks of Kanban" /><author><name>David A Toon</name><uri>http://www.blogger.com/profile/00409673195020855202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://1.bp.blogspot.com/-cEyTC9oWUSA/TYfU0F0TCYI/AAAAAAAAACU/eX_uK1MJoeo/s220/n623331673_765959_6082.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://datoon.blogspot.com/2011/02/3-weeks-of-kanban.html</feedburner:origLink></entry></feed>
