<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6714530</id><updated>2012-02-13T09:20:55.531Z</updated><category term='ruby'/><category term='deliberate practice'/><category term='simplicity'/><category term='think team'/><category term='jokes'/><category term='capacity'/><category term='trust'/><category term='le chatelier'/><category term='butter'/><category term='legacy'/><category term='singleton'/><category term='courage'/><category term='visibility'/><category term='change'/><category term='life of brian'/><category term='systems thinking'/><category term='ale'/><category term='accu'/><category term='complexity'/><category term='the princess bride'/><category term='leadership'/><category term='97 things'/><category term='kanban 1&apos;s game'/><category term='c#'/><category term='cyberdojo'/><category term='flow'/><category term='feedback'/><category term='agile'/><category term='humility'/><category term='aye'/><category term='zen'/><category term='video'/><category term='uml'/><category term='shawshank redemption'/><category term='beauty'/><category term='slack'/><category term='congruence'/><category term='learning'/><category term='xp'/><category term='miracles'/><category term='jerry-weinberg'/><category term='silence'/><category term='lean'/><category term='java'/><category term='refactoring'/><category term='patterns'/><category term='culture'/><category term='random'/><category term='games'/><category term='aspergers'/><category term='communication'/><category term='philosophy'/><category term='rubbish technology'/><category term='time'/><category term='listening'/><category term='photo'/><category term='coaching'/><category term='favourites'/><category term='abstraction'/><category term='book review'/><category term='average time to green game'/><category term='fishing'/><category term='dependency'/><category term='unit testing'/><category term='dont rush'/><category term='design'/><category term='coffee'/><category term='fun'/><category term='failure'/><category term='biography'/><category term='writing'/><category term='c and c++'/><title type='text'>Less code, more software</title><subtitle type='html'>Hi, I'm &lt;a href="http://www.jaggersoft.com"&gt;Jon Jagger&lt;/a&gt;, a UK based software coach/consultant.&lt;br&gt;
My passion is helping people improve their effectiveness in &lt;br&gt; this collaborative game we call software development. I built&lt;br&gt; &lt;a href="http://jonjagger.blogspot.com/p/cyberdojo.html"&gt;CyberDojo&lt;/a&gt; to promote &lt;a href="http://www.agilepracticedays.com/"&gt;deliberate practice for software teams&lt;/a&gt;.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default?start-index=101&amp;max-results=100'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>413</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6714530.post-1075398001581830435</id><published>2012-02-09T10:35:00.015Z</published><updated>2012-02-09T19:35:00.243Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='unit testing'/><category scheme='http://www.blogger.com/atom/ns#' term='systems thinking'/><title type='text'>Every teardrop is a waterfall</title><content type='html'>&lt;a href="http://www.waterfall2006.com/"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 151px; height: 200px;" src="http://1.bp.blogspot.com/-HfwLu013240/TzOh1wdETHI/AAAAAAAABIc/1MLvU1YKTao/s200/queen_victoria.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5707083097720507506" /&gt;&lt;/a&gt;

I was listening to &lt;a href="http://www.directlyrics.com/coldplay-every-teardrop-is-a-waterfall-lyrics.html"&gt;Coldplay&lt;/a&gt; the other day and got to thinking about waterfalls.
The classic waterfall diagram is written something like this:&lt;br/&gt;
&lt;br/&gt;
Analysis&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; leading down to...&lt;br/&gt;
Design&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; leading down to...&lt;br/&gt;
Implementation&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; leading down to...&lt;br/&gt;
Testing.&lt;br/&gt;&lt;br/&gt;

The Testing phase at the end of the process is perhaps the biggest giveaway that something is very wrong.
In waterfall, the testing phase at the end is what's known as a euphemism. Or, more technically, a &lt;em&gt;lie&lt;/em&gt;. Testing at the end of waterfall is really Debugging. Debugging at the end of the process is one of the key dynamics that prevents waterfall from working. There are at least two reasons:
&lt;br/&gt;
&lt;br/&gt;
The first is that of all the activities performed in software development, debugging is the one that is the least estimable. And that's saying something!
You don't know how long it's going to take to &lt;em&gt;find&lt;/em&gt; the source of a bug let alone &lt;em&gt;fix&lt;/em&gt; it. I recall listening to a speaker at a conference who polled the audience to see who'd spent the most time tracking down a bug (the word bug is another euphemism). It was just like an auction! Someone called out "3 days". Someone else shouted "2 weeks". Up and up it went. The poor "winner" had spent all day, every day, 9am-5pm for 3 months hunting one bug. And it wasn't even a very large audience. This 'debug it into existence' approach is one of the reasons waterfall projects take 90% of the time to get to 90% "done" (done is another euphemism) and then another 90% of the time to get to 100% done. 
&lt;br/&gt;
&lt;br/&gt;
The second reason is &lt;a href="http://jonjagger.blogspot.com/2011/07/why-do-cars-have-brakes.html"&gt;Why do cars have brakes?&lt;/a&gt;. In waterfall, even if testing was testing rather than debugging, putting it at the end of the process means you'll have been driving around during analysis, design and implementation with no brakes! You won't be able to stop! And again, this tells you why waterfall projects take 90% of the time to get to 90% done and then another 90% of the time to get to 100% done. Assuming of course that they don't crash. &lt;br/&gt;
&lt;br/&gt;
In Test First Development, the testing really is testing and it really is first. 
The tests become an executable specification. Specifying is the opposite of debugging. 
The first 8 letters of specification are S, P, E, C, I, F, I, C. &lt;br/&gt;
A test is specific in exactly the same way a debugging session is not.
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-1075398001581830435?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/1075398001581830435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2012/02/every-teardrop-is-waterfall.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/1075398001581830435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/1075398001581830435'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2012/02/every-teardrop-is-waterfall.html' title='Every teardrop is a waterfall'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-HfwLu013240/TzOh1wdETHI/AAAAAAAABIc/1MLvU1YKTao/s72-c/queen_victoria.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-5345776696268722935</id><published>2012-02-05T12:37:00.024Z</published><updated>2012-02-09T13:47:10.074Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='complexity'/><category scheme='http://www.blogger.com/atom/ns#' term='change'/><category scheme='http://www.blogger.com/atom/ns#' term='systems thinking'/><title type='text'>Coupling, overcrowding, refactoring, and death</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/-VSoANBFN9KI/Ty55dLGkwbI/AAAAAAAABIE/HXxXy5ThuBc/s1600/the-curious-incident-dog-in-night-time-Mark-Haddon.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 129px; height: 200px;" src="http://1.bp.blogspot.com/-VSoANBFN9KI/Ty55dLGkwbI/AAAAAAAABIE/HXxXy5ThuBc/s200/the-curious-incident-dog-in-night-time-Mark-Haddon.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5705631320028529074" /&gt;&lt;/a&gt;

I read &lt;a href="http://en.wikipedia.org/wiki/The_Curious_Incident_of_the_Dog_in_the_Night-Time"&gt;The Curious Incident of the Dog in the Night Time&lt;/a&gt; by Mark Haddon last week. I loved it.
At one point the main character, Christopher, talks about this equation:

&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
P&lt;sub&gt;g+1&lt;/sub&gt; = &amp;alpha; P&lt;sub&gt;g&lt;/sub&gt; (1 - P&lt;sub&gt;g&lt;/sub&gt;)
&lt;/blockquote&gt;

&lt;br/&gt;

This equation was described in the 1970s by Robert May, George Oster, and Jim Yorke. You can read about it &lt;a href="http://members.fortunecity.com/templarser/rhythm.html"&gt;here&lt;/a&gt;.
The gist is it models a population over time,
a population at generation&lt;sub&gt;g+1&lt;/sub&gt; being affected by the population at generation &lt;sub&gt;g&lt;/sub&gt;. 

If there is no overcrowding then each member of the population at generation g, denoted P&lt;sub&gt;g&lt;/sub&gt;, produces &amp;alpha; offspring, all of whom survive.
So the population at generation g+1, denoted P&lt;sub&gt;g+1&lt;/sub&gt; equals &amp;alpha; P&lt;sub&gt;g&lt;/sub&gt;.
The additional term, (1 - P&lt;sub&gt;g&lt;/sub&gt; ) represents &lt;a href="http://jonjagger.blogspot.com/2011/04/feedback.html"&gt;feedback&lt;/a&gt; from overcrowding.
Some interesting things happen depending on the value of &amp;alpha;

&lt;ul&gt;
&lt;li&gt;&amp;alpha; &amp;lt; 1: The population goes extinct.&lt;/li&gt;
&lt;li&gt;1 &amp;lt; &amp;alpha; &amp;lt; 3 : The population rises to a value and then stays there.&lt;/li&gt;
&lt;li&gt;3 &amp;lt; &amp;alpha; &amp;lt; 3.57 : The population alternates between boom and bust.&lt;/li&gt;
&lt;li&gt;3.57 &amp;lt; &amp;alpha; : The population appears to fluctuate randomly. &lt;/li&gt;
&lt;/ul&gt;


In biological systems each generation has a natural lifespan.
The cycle of death naturally helps to reduce overcrowding. 
But even with the inevitable death of each generation, the system's behaviour
is delicately poised.
Once  &amp;alpha; gets into the 3 - 3.57 range the growth starts to outpace the death leading to a rising population, but this leads to overcrowding which reduces the growth leading to a falling population. That reduces overcrowding, and growth rises again.
The population repeats in a stable up/down cycle. But only because of the inevitable death. And only while the rate of death is sufficiently high to maintain the cycle. Once &amp;alpha; gets beyond 3.57 the rate of death can no longer regulate the increased rate of growth and the system destabilises.

&lt;br/&gt;
&lt;br/&gt;

You can think about the process of writing software with this equation. 

&lt;br/&gt;
&lt;br/&gt;

You can think of over-crowding as being analogous to over-coupling.
We feel that a codebase is hard to work with, difficult to live in, if it resists our attempts
to work with it. When it resists it is the coupling that is resisting. 

&lt;br/&gt;
&lt;br/&gt;

You can also think of death as being analogous to refactoring.
Just as death reduces overcrowding, so refactoring reduces coupling.

&lt;br/&gt;
&lt;br/&gt;

Refactoring is a hugely important dynamic in software development.
Without refactoring a codebase can grow without check. 
Growing without check is &lt;em&gt;bad&lt;/em&gt;.
It leads to overcrowding. Overcrowding hinders growth.

&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-5345776696268722935?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/5345776696268722935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2012/02/coupling-overcrowding-refactoring-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5345776696268722935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5345776696268722935'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2012/02/coupling-overcrowding-refactoring-and.html' title='Coupling, overcrowding, refactoring, and death'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-VSoANBFN9KI/Ty55dLGkwbI/AAAAAAAABIE/HXxXy5ThuBc/s72-c/the-curious-incident-dog-in-night-time-Mark-Haddon.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-6100730431899206918</id><published>2012-01-31T16:48:00.005Z</published><updated>2012-01-31T16:51:22.242Z</updated><title type='text'>Incremental development</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/-Qi6sgRgiVZM/Tygbe5s3B2I/AAAAAAAABHI/LlEOzCU-xhM/s1600/calf-icon-16.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 16px; height: 16px;" src="http://1.bp.blogspot.com/-Qi6sgRgiVZM/Tygbe5s3B2I/AAAAAAAABHI/LlEOzCU-xhM/s200/calf-icon-16.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5703839145763735394" /&gt;&lt;/a&gt;

&lt;a href="http://1.bp.blogspot.com/-zdlsBpAf77g/TygbkWjRUKI/AAAAAAAABHU/PAKJoBwY_K4/s1600/calf-icon-32.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 32px; height: 32px;" src="http://1.bp.blogspot.com/-zdlsBpAf77g/TygbkWjRUKI/AAAAAAAABHU/PAKJoBwY_K4/s200/calf-icon-32.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5703839239407489186" /&gt;&lt;/a&gt;

&lt;a href="http://3.bp.blogspot.com/-50Hji4b-Pdk/Tygbp3XpC8I/AAAAAAAABHg/1HWILsdMOvc/s1600/calf-icon-48.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 48px; height: 48px;" src="http://3.bp.blogspot.com/-50Hji4b-Pdk/Tygbp3XpC8I/AAAAAAAABHg/1HWILsdMOvc/s200/calf-icon-48.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5703839334116428738" /&gt;&lt;/a&gt;

&lt;a href="http://1.bp.blogspot.com/-Lcr4yA2OyZw/TygbvJk294I/AAAAAAAABHs/fkD3SOM4snI/s1600/calf-icon-128.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 128px; height: 128px;" src="http://1.bp.blogspot.com/-Lcr4yA2OyZw/TygbvJk294I/AAAAAAAABHs/fkD3SOM4snI/s200/calf-icon-128.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5703839424903051138" /&gt;&lt;/a&gt;

&lt;a href="http://2.bp.blogspot.com/-mkZaG-KSlB8/Tygb0-h0yRI/AAAAAAAABH4/3zVIzenjobE/s1600/calf-icon.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 200px;" src="http://2.bp.blogspot.com/-mkZaG-KSlB8/Tygb0-h0yRI/AAAAAAAABH4/3zVIzenjobE/s200/calf-icon.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5703839525016750354" /&gt;&lt;/a&gt;

&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-6100730431899206918?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/6100730431899206918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2012/01/incremental-development.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/6100730431899206918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/6100730431899206918'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2012/01/incremental-development.html' title='Incremental development'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-Qi6sgRgiVZM/Tygbe5s3B2I/AAAAAAAABHI/LlEOzCU-xhM/s72-c/calf-icon-16.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-7665468660887796333</id><published>2012-01-31T16:26:00.003Z</published><updated>2012-01-31T16:28:37.137Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='capacity'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='change'/><category scheme='http://www.blogger.com/atom/ns#' term='systems thinking'/><title type='text'>Out of the crisis</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/-NE2vwgqelDg/TygWRajMf4I/AAAAAAAABG8/xNSPHHHEee8/s1600/OutOfTheCrisis%2B2.jpeg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 134px; height: 200px;" src="http://4.bp.blogspot.com/-NE2vwgqelDg/TygWRajMf4I/AAAAAAAABG8/xNSPHHHEee8/s200/OutOfTheCrisis%2B2.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5703833416505261954" /&gt;&lt;/a&gt;


is an excellent book by W. Edwards Deming (isbn 0-911379-01-0). As usual I'm going to quote from a few pages

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
All industries, manufacturing and service, are subject to the same principles of management.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Quality comes not from inspection, but from improvement of the production process.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Today, 19 foreman out of 20 were never on the job that they supervise.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Fear amongst salaried workers may be attributed in large part to the annual rating of performance.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Absenteeism is largely a function of supervision. If people feel important to a job, they will come to work.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
He that would run his company on visible figures alone will in time have neither company nor figures.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
There has never been a definitive study of quality in the dental profession; nor is there likely to be one. Partly because they tend to work alone, dentists resist the idea of being evaluated, or even observed, by others.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Where there is fear, there will be wrong figures.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
It is well known that rework piles up: no one wishes to tackle it.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
This company had been sending a letter to every driver at every mistake. It made no
difference whether this was the one mistake of the year for this driver, or the 15th:
the letter was exactly the same.
What does the driver who has received 15 warnings, all alike, think of the management?
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-7665468660887796333?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/7665468660887796333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2012/01/out-of-crisis.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/7665468660887796333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/7665468660887796333'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2012/01/out-of-crisis.html' title='Out of the crisis'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-NE2vwgqelDg/TygWRajMf4I/AAAAAAAABG8/xNSPHHHEee8/s72-c/OutOfTheCrisis%2B2.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-5165514448405634039</id><published>2012-01-17T10:16:00.003Z</published><updated>2012-01-17T15:17:38.783Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='jerry-weinberg'/><category scheme='http://www.blogger.com/atom/ns#' term='systems thinking'/><title type='text'>Cause is effect and effect is cause and vice versa</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/-6nUZqqosJhY/TxRqYJI2DrI/AAAAAAAABGc/mY55umHnsfg/s1600/Dancers.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 182px; height: 200px;" src="http://1.bp.blogspot.com/-6nUZqqosJhY/TxRqYJI2DrI/AAAAAAAABGc/mY55umHnsfg/s200/Dancers.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5698296391532940978" /&gt;&lt;/a&gt;

&lt;br/&gt;

&lt;blockquote&gt;
Defects cause lateness.
&lt;/blockquote&gt;

&lt;br/&gt;
&lt;br/&gt;

&lt;p&gt;
The more defects code has the more time and effort it takes to get it to done.
This seems a self-evident truth.
But beware! The 
&lt;a href="http://jonjagger.blogspot.com/2010/08/quality-software-management-vol-1.html"&gt;Causation Fallacy&lt;/a&gt;
says it is not easy to know what is cause and what is effect.
If a feature misses its deadline pressure often builds to ensure it &lt;a href="http://jonjagger.blogspot.com/2010/12/one-month-next-wednesday.html"&gt;doesn't miss the next deadline&lt;/a&gt;. And under pressure people don't think faster. Extra pressure usually increases the likelihood of defects. This suggests
&lt;/p&gt;

&lt;br/&gt;

&lt;blockquote&gt;
Lateness causes defects.
&lt;/blockquote&gt;

&lt;br/&gt;
&lt;br/&gt;

&lt;p&gt;
So do defects cause lateness, or does lateness cause defects? 
Or do they rotate around each other like partners on a dance floor?
&lt;/p&gt;

&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-5165514448405634039?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/5165514448405634039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2012/01/cause-is-effect-and-effect-is-cause-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5165514448405634039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5165514448405634039'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2012/01/cause-is-effect-and-effect-is-cause-and.html' title='Cause is effect and effect is cause and vice versa'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-6nUZqqosJhY/TxRqYJI2DrI/AAAAAAAABGc/mY55umHnsfg/s72-c/Dancers.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-1275155962931389107</id><published>2012-01-16T09:04:00.003Z</published><updated>2012-01-16T09:59:12.017Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='culture'/><category scheme='http://www.blogger.com/atom/ns#' term='courage'/><category scheme='http://www.blogger.com/atom/ns#' term='capacity'/><title type='text'>Sprints, time-boxing, and capacity</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/-G1wTctO1nhg/TxBaWH_CpQI/AAAAAAAABFI/iR6TwIDwr7k/s1600/3Weeks.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 100px; height: 70px;" src="http://1.bp.blogspot.com/-G1wTctO1nhg/TxBaWH_CpQI/AAAAAAAABFI/iR6TwIDwr7k/s200/3Weeks.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5697152864770761986" /&gt;&lt;/a&gt;

&lt;p&gt;
A team is doing Scrum with 3 week sprints. 
Suppose at the end of a sprint they've got nothing to &lt;em&gt;done&lt;/em&gt;.
What should they do?
There's a strong temptation to ask for more time. To make this sprint a 4 week sprint. Most of the work in progress
is 90% done they say. Another week and things will have got to done, they say. It seems reasonable.
&lt;/p&gt;

&lt;br/&gt;

&lt;p&gt;
Trying to run systems 
&lt;a href="http://jonjagger.blogspot.com/2011/09/flow-speed-x-density.html"&gt;beyond their capacity&lt;/a&gt; is not a good idea.
In this situation Scrum's fixed-duration time-box constraint has served it's purpose admirably. The problem is &lt;em&gt;not&lt;/em&gt; the choice of 3 weeks. Changing 3 weeks into 4 weeks is &lt;em&gt;not&lt;/em&gt; addressing the problem. The problem is the team planned to pull in an amount of work and get it to done in 3 weeks. But they're not yet in control of their process - they don't know what their capacity is. They pulled in &lt;em&gt;more&lt;/em&gt; than 3 weeks worth of work. 
Probably a lot more. But we just don't know!
&lt;/p&gt;
&lt;br/&gt;

&lt;p&gt;
In &lt;a href="http://jonjagger.blogspot.com/2011/11/toyota-way.html"&gt;The Toyota Way&lt;/a&gt;, Jeffrey Liker writes:
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Taiichi Ohno considered the fundamental waste to be overproduction, since it causes most of the other wastes.
&lt;/blockquote&gt;
&lt;br/&gt;
Advice from a genius with a lifetime's experience.
Toyota manufactures cars. It makes cars. Its production line is an actual line. If manufacturers are prone to overproduction imagine how much more prone software developers are! The things we make are not even physical things. In software, things are &lt;em&gt;mostly invisible&lt;/em&gt;. It's difficult to manage what you can't see. 
In &lt;a href="http://jonjagger.blogspot.com/2011/11/quality-software-management-vol-2-first.html"&gt;Quality Software Management volume 2, First-Order Measurement&lt;/a&gt;, &lt;a href="http://jonjagger.blogspot.com/p/jerry-weinberg.html"&gt;Jerry Weinberg&lt;/a&gt; writes:
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Without visibility, control is not possible.&lt;br/&gt;
If you can't see, you can't steer.
&lt;/blockquote&gt;
&lt;br/&gt;
Rather than asking for another week, the team should really be thinking about addressing their real problem. Their real problem is that they're pulling in too much work. They have to somehow learn to pull in less work. So they can start to be in control of their process rather than their process being in control of them. 
&lt;/p&gt;

&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-1275155962931389107?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/1275155962931389107/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2012/01/sprints-time-boxing-and-capacity.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/1275155962931389107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/1275155962931389107'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2012/01/sprints-time-boxing-and-capacity.html' title='Sprints, time-boxing, and capacity'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-G1wTctO1nhg/TxBaWH_CpQI/AAAAAAAABFI/iR6TwIDwr7k/s72-c/3Weeks.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-5216264248996990067</id><published>2012-01-14T10:28:00.004Z</published><updated>2012-01-14T10:22:55.525Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='culture'/><title type='text'>Culture quotes</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/-lGZJZVrTaMw/TxFU1jRYnQI/AAAAAAAABFg/3tUiLATkUGA/s1600/CupOfTea.jpeg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 149px; height: 109px;" src="http://2.bp.blogspot.com/-lGZJZVrTaMw/TxFU1jRYnQI/AAAAAAAABFg/3tUiLATkUGA/s200/CupOfTea.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5697428282578345218" /&gt;&lt;/a&gt;

I've collected together some culture quotes from previous book snippets:

&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
Culture makes its presence known through patterns that persist over time.
&lt;a href="http://jonjagger.blogspot.com/2011/11/quality-software-management-vol-2-first.html"&gt;(from here)&lt;/a&gt;
&lt;br/&gt;
Jerry Weinberg
&lt;/blockquote&gt;

&lt;br/&gt;

&lt;blockquote&gt;
Building a culture takes years of applying a consistent approach with consistent principles.
&lt;a href="http://jonjagger.blogspot.com/2011/11/toyota-way.html"&gt;(from here)&lt;/a&gt;
&lt;br/&gt;
Jeffrey Liker
&lt;/blockquote&gt;

&lt;br/&gt;

&lt;blockquote&gt;
Culture makes language, then language makes culture.
&lt;a href="http://jonjagger.blogspot.com/2010/08/quality-software-management-vol-3.html"&gt;(from here)&lt;/a&gt;
&lt;br/&gt;
Jerry Weinberg
&lt;/blockquote&gt;

&lt;br/&gt;

&lt;blockquote&gt;
Culture is what we do when we do not consciously decide what to do.
&lt;a href="http://jonjagger.blogspot.com/2010/11/beating-system.html"&gt;(from here)&lt;/a&gt;
&lt;br/&gt;
Russell Ackoff
&lt;/blockquote&gt;

&lt;br/&gt;

&lt;blockquote&gt;
Consultants who see culture change as something distinct from the work and, as a corollary, something that can be the subject of an intervention, miss the point. When you change the way work is designed and managed, and make those who do the work the central part of the intervention, the culture changes dramatically as a consequence.
&lt;a href="http://jonjagger.blogspot.com/2011/03/freedom-from-command-and-control.html"&gt;(from here)&lt;/a&gt;
&lt;br/&gt;
John Seddon
&lt;/blockquote&gt;

&lt;br/&gt;

&lt;blockquote&gt;
One aspect of almost every culture is the belief in the utter superiority of that culture.
&lt;a href="http://jonjagger.blogspot.com/2010/11/leverage-points.html"&gt;(from here)&lt;/a&gt;
&lt;br/&gt;
Donella Meadows
&lt;/blockquote&gt;

&lt;br/&gt;

&lt;blockquote&gt;
Culture change is free [because] it's a product of the system.
&lt;a href="http://www.bristol.ac.uk/eng-systems-centre/events/2011/john-seddon.html"&gt;(from here)&lt;/a&gt;
&lt;br/&gt;
John Seddon
&lt;/blockquote&gt;

&lt;br/&gt;

&lt;blockquote&gt;
Culture is changing faster than it has ever changed before...what once took many generations of gradual development is now attempted by a single individual.
&lt;a href="http://jonjagger.blogspot.com/2010/08/notes-on-synthesis-of-form.html"&gt;(from here)&lt;/a&gt;
&lt;br/&gt;
Christopher Alexander
&lt;/blockquote&gt;

&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-5216264248996990067?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/5216264248996990067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/11/culture-quotes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5216264248996990067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5216264248996990067'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/11/culture-quotes.html' title='Culture quotes'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-lGZJZVrTaMw/TxFU1jRYnQI/AAAAAAAABFg/3tUiLATkUGA/s72-c/CupOfTea.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-3806588633755123657</id><published>2012-01-13T09:27:00.008Z</published><updated>2012-01-13T16:27:04.620Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='favourites'/><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><category scheme='http://www.blogger.com/atom/ns#' term='communication'/><category scheme='http://www.blogger.com/atom/ns#' term='failure'/><title type='text'>Hunger is the best source</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/-kuHqaY9OKHk/Tw9Kjl8GlII/AAAAAAAABE8/JzgxDeSFMXw/s1600/HungerIsTheBestSource.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 234px; height: 290px;" src="http://2.bp.blogspot.com/-kuHqaY9OKHk/Tw9Kjl8GlII/AAAAAAAABE8/JzgxDeSFMXw/s320/HungerIsTheBestSource.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5696854028987044994" /&gt;&lt;/a&gt;

I've &lt;a href="http://jonjagger.blogspot.com/2010/07/time-wounds-all-heels.html"&gt;previously blogged&lt;/a&gt; about being taught &lt;a href="http://en.wikipedia.org/wiki/Initial_Teaching_Alphabet"&gt;ITA&lt;/a&gt; spelling at primary school. About how it  causes me spelling problems. I was reminded of this when speaking to Geir Amdal at the excellent &lt;a href="http://www.agilecoachcamp.no/"&gt;Agile Coach Camp&lt;/a&gt; in Oslo.
Geir showed me this &lt;a href="http://jaequery.stiqr.com/france-is-bacon"&gt;wonderful blog post&lt;/a&gt; with lovely twist on the famous quote:

&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
Knowledge is power. &lt;br/&gt;Francis Bacon
&lt;/blockquote&gt;

&lt;br/&gt;

It reminded me of something my Mum used to say to me when I was little:

&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
Hunger is the best source.
&lt;/blockquote&gt;

&lt;br/&gt;

For many many years I didn't understand what she was saying. 
I was seeing the word &lt;em&gt;sauce&lt;/em&gt; as &lt;em&gt;source&lt;/em&gt;. She was actually saying:

&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
Hunger is the best sauce.
&lt;/blockquote&gt;

&lt;br/&gt;

Food tastes better when you're hungry. Reflecting on my confusion I realize I'm actually quite proud of 
this mistake. This was a long time ago remember. I was a small boy at the time. 
Even then, it seems, software was calling me.

&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-3806588633755123657?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/3806588633755123657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2012/01/hunger-is-best-source.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/3806588633755123657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/3806588633755123657'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2012/01/hunger-is-best-source.html' title='Hunger is the best source'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-kuHqaY9OKHk/Tw9Kjl8GlII/AAAAAAAABE8/JzgxDeSFMXw/s72-c/HungerIsTheBestSource.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-1051815199607584379</id><published>2012-01-12T17:37:00.011Z</published><updated>2012-01-13T14:01:26.257Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='culture'/><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='favourites'/><category scheme='http://www.blogger.com/atom/ns#' term='slack'/><category scheme='http://www.blogger.com/atom/ns#' term='coffee'/><category scheme='http://www.blogger.com/atom/ns#' term='change'/><category scheme='http://www.blogger.com/atom/ns#' term='think team'/><title type='text'>Smoking cigarettes, eating sweets, dropping litter, and drinking coffee</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/-9RkcIxzuBOM/Tw8aT1KhfaI/AAAAAAAABEw/ukY2I580xJs/s1600/NoSmoking.jpeg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 100px; height: 100px;" src="http://2.bp.blogspot.com/-9RkcIxzuBOM/Tw8aT1KhfaI/AAAAAAAABEw/ukY2I580xJs/s200/NoSmoking.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5696800981638020514" /&gt;&lt;/a&gt;

&lt;p&gt;
I was speaking to Olaf Lewitz at the awesome &lt;a href="http://www.agilecoachcamp.no/"&gt;Oslo coach camp&lt;/a&gt; last week.
We were discussing why drinking coffee doesn't create the same social dynamic as smoking cigarettes.
I chatted with Geir Amdal too and quite by chance he mentioned he's given up smoking. And how approaching
a work colleague and asking if they want to go outside for
a smoke is not the same as asking if they want to go outside for a talk.
&lt;/p&gt;

&lt;br/&gt;

&lt;p&gt;
Then I remembered something Olve Maudal said to me recently.
He said that kids being allowed to eat sweets on Sundays was not really
about kids being allowed to eat sweets on Sundays at all. It was really about
kids &lt;em&gt;not&lt;/em&gt; being allowed to eat sweets on any day &lt;em&gt;except&lt;/em&gt; 
Sunday. Similarly, apparently in the USA when you're driving along you sometimes 
see a big sign at the side of the road saying "Litter here" and then another 
sign a mile or so later saying "Stop littering".
These signs are also not really about littering. They're about 
&lt;em&gt;not&lt;/em&gt; littering in the places &lt;em&gt;outside&lt;/em&gt; the designated littering 
zones.
&lt;/p&gt;

&lt;br/&gt;

&lt;p&gt;
There's a crucial difference between smoking and drinking coffee.
Smokers tend to smoke in groups in designated areas because smoking is not allowed 
except in those areas. 
Coffee is different. Drinking coffee is, by default, allowed everywhere.
When you want a coffee you walk to the coffee machine and make a cup of coffee. 
There's often no one else at the coffee machine so you take your
cup of coffee back to your work desk. It is precisely this take-it-back-to-your-desk
default which is &lt;em&gt;why&lt;/em&gt; there is only rarely someone else at the coffee machine.
It is a self-fulfilling dynamic.
&lt;/p&gt;

&lt;br/&gt;

&lt;p&gt;
If you want to encourage more social interaction between your team
members here's what you might do:
&lt;ul&gt;
&lt;li&gt;Buy machines that make really good coffee.&lt;/li&gt;
&lt;li&gt;Put them in a nice area with lots of space to congregate in.&lt;/li&gt;
&lt;li&gt;Ban drinking coffee at work-desks.&lt;/li&gt;
&lt;/ul&gt;
The third step might seem a bit draconian. But it's vital. You could justify
it on the grounds that spilling coffee onto expensive computers will waste money. 
But the real reason it to encourage developers to drink their coffee
near coffee machine. Together. To encourage communication.  
&lt;/p&gt;

&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-1051815199607584379?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/1051815199607584379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2012/01/smoking-cigarettes-eating-sweets.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/1051815199607584379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/1051815199607584379'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2012/01/smoking-cigarettes-eating-sweets.html' title='Smoking cigarettes, eating sweets, dropping litter, and drinking coffee'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-9RkcIxzuBOM/Tw8aT1KhfaI/AAAAAAAABEw/ukY2I580xJs/s72-c/NoSmoking.jpeg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-3927480494986906763</id><published>2012-01-09T12:44:00.012Z</published><updated>2012-01-16T17:19:41.673Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='shawshank redemption'/><category scheme='http://www.blogger.com/atom/ns#' term='favourites'/><category scheme='http://www.blogger.com/atom/ns#' term='simplicity'/><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>My kindle book-case</title><content type='html'>Here's a photo of the kindle I bought myself for Xmas.

&lt;br/&gt;
&lt;br/&gt;
&lt;a href="http://2.bp.blogspot.com/-YFX_XN0jnl4/TwyOe12M56I/AAAAAAAABDY/yEZuoG2-5Jo/s1600/1-KindleWithBookInBackground.JPG"&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 153px;" src="http://2.bp.blogspot.com/-YFX_XN0jnl4/TwyOe12M56I/AAAAAAAABDY/yEZuoG2-5Jo/s200/1-KindleWithBookInBackground.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5696084289218471842" /&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;br/&gt;

When I bought my kindle I forgot to get a case to protect it. I searched around on a few sites looking for a case but didn't find anything I particularly liked. Before I knew it, it was time to head off to the awesome &lt;a href="http://www.agilecoachcamp.no/"&gt;Agile Coach Camp Norway 2012&lt;/a&gt;. I wanted to take my kindle but needed a case to protect it. It was too late too order a case via the internet. But I had an idea. I could use a book! A regular old-fashioned hardback book. 

&lt;br/&gt;
&lt;br/&gt;

&lt;a href="http://4.bp.blogspot.com/-17auO4fxqb0/TwyOo75emEI/AAAAAAAABDk/aTYY8o7K1ls/s1600/2-HardbackBookInHand.JPG"&gt;&lt;img style="margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 196px;" src="http://4.bp.blogspot.com/-17auO4fxqb0/TwyOo75emEI/AAAAAAAABDk/aTYY8o7K1ls/s200/2-HardbackBookInHand.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5696084462641518658" /&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;br/&gt;

 I simply cut out a kindle-sized panel from the middle of about 100 pages and then glued the holed pages all together:

&lt;br/&gt;
&lt;br/&gt;
&lt;a href="http://2.bp.blogspot.com/-mf1LIapDZ2w/TwyPNQ1eI7I/AAAAAAAABDw/3w4FxplNl3g/s1600/3-BookShowingInnerSpace.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://2.bp.blogspot.com/-mf1LIapDZ2w/TwyPNQ1eI7I/AAAAAAAABDw/3w4FxplNl3g/s200/3-BookShowingInnerSpace.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5696085086737146802" /&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;br/&gt;

Viola, I have a case for my kindle. A book-case you might say.

&lt;br/&gt;
&lt;br/&gt;
&lt;a href="http://1.bp.blogspot.com/-niVNlr0sU_Q/TwyPTX3xXMI/AAAAAAAABD8/l877jVHBQKw/s1600/4-KindleInside.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://1.bp.blogspot.com/-niVNlr0sU_Q/TwyPTX3xXMI/AAAAAAAABD8/l877jVHBQKw/s200/4-KindleInside.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5696085191705058498" /&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;br/&gt;

I showed off my new book-case at the coach camp. It was a hit. At dinner one evening Marc Johnson mentioned he too has a kindle and loves it but misses the social aspect of a real book. The simple fact that most real books display the book's title on its front cover. People can see what you're reading. I sat next to a really interesting man on a plane once. He noticed I was reading Jerry Weinberg's &lt;a href="http://jonjagger.blogspot.com/2011/11/quality-software-management-vol-2-first.html"&gt;Quality Software Management, vol 2, First-Order Measurement&lt;/a&gt; and asked me about it. We chatted away the whole flight. 
&lt;br/&gt;
&lt;br/&gt;
My kindle book-case allows me to regain this missing social aspect. I can simply print the cover the publishers use for the real book and stick it to the front.  So now I have something close to my ideal kindle case. It just needs a clear front cover sleeve so I can easily slide a cover in. And some kind of clasp. As a final bonus, I can pay homage to one of my favourite films:

&lt;br/&gt;
&lt;br/&gt;
&lt;a href="http://4.bp.blogspot.com/-FeNvfEhPeBs/TwyPm9sCdPI/AAAAAAAABEU/8TQi2PCALJk/s1600/6-ShawshankHomage.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://4.bp.blogspot.com/-FeNvfEhPeBs/TwyPm9sCdPI/AAAAAAAABEU/8TQi2PCALJk/s200/6-ShawshankHomage.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5696085528273908978" /&gt;&lt;/a&gt;

&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-3927480494986906763?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/3927480494986906763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2012/01/my-kindle-bookcase.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/3927480494986906763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/3927480494986906763'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2012/01/my-kindle-bookcase.html' title='My kindle book-case'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-YFX_XN0jnl4/TwyOe12M56I/AAAAAAAABDY/yEZuoG2-5Jo/s72-c/1-KindleWithBookInBackground.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-4317758262898037497</id><published>2012-01-05T11:01:00.000Z</published><updated>2012-01-05T11:01:00.452Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='learning'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='systems thinking'/><title type='text'>Managing the design factory</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/-ha9n71HFYwU/TwS-PO_P08I/AAAAAAAABDM/HEA9bHPsLS4/s1600/ManagingTheDesignFactory.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://2.bp.blogspot.com/-ha9n71HFYwU/TwS-PO_P08I/AAAAAAAABDM/HEA9bHPsLS4/s200/ManagingTheDesignFactory.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5693884997833839554" /&gt;&lt;/a&gt;

is an excellent book by Don Reinersten (isbn o-684-83991-1). 
This is the second snippet entry for this book (&lt;a href="http://jonjagger.blogspot.com/2010/07/managing-design-factory.html"&gt;here's the first&lt;/a&gt;). It continues my current theme of preferring to re-read a good book many times.
As usual I'm going to quote from a few pages:

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Whenever we see an intense need for communications it is typically a sign that the system has been incorrectly partitioned.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
A complex system can often be built faster when there are stable steps along the way. This is what Nobel laureate Herbert Simon called "stable intermediate forms" in his book The Sciences of Artificial.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
We cannot predict the behaviour of a system simply by understanding the behaviour of its components.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
There are more possible interactions in a system of 150 components than there are atoms in the universe.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The act of partioning the system is extremely important, because it creates interfaces… these interfaces are both the primary source of value within a system and the primary source of complexity.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The nonlinear behaviour of queueing systems will amplify variability within the system.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
We get into an interesting death spiral when we overload our development process.
Overloads cause queues; queues, being nonlinear, raise the variability of our process, and variability raises the size of queues.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The weak cross-functional communication of the functional form sacrifices our other economic objectives.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
In life, we design most processes for repetitive activities because a process is a way of preserving learning that occurs when doing an activity. … We need to find some way to preserve what we have learned without discouraging people from doing new things.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
We get large queues whenever we have large batch transfers in the process.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
There is a strong interaction between the design of our organisation structure, our architecture, and our development process.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-4317758262898037497?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/4317758262898037497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2012/01/managing-design-factory.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/4317758262898037497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/4317758262898037497'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2012/01/managing-design-factory.html' title='Managing the design factory'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-ha9n71HFYwU/TwS-PO_P08I/AAAAAAAABDM/HEA9bHPsLS4/s72-c/ManagingTheDesignFactory.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-8998284187155832859</id><published>2012-01-04T20:38:00.008Z</published><updated>2012-02-09T18:56:00.409Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='jerry-weinberg'/><category scheme='http://www.blogger.com/atom/ns#' term='time'/><category scheme='http://www.blogger.com/atom/ns#' term='systems thinking'/><title type='text'>6000 degree-minutes</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/-Y1jv5QnER-w/TwS41McMdOI/AAAAAAAABDA/a6_oQY_RwYU/s1600/Bread.jpeg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 184px;" src="http://3.bp.blogspot.com/-Y1jv5QnER-w/TwS41McMdOI/AAAAAAAABDA/a6_oQY_RwYU/s200/Bread.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5693879052915209442" /&gt;&lt;/a&gt;

&lt;blockquote&gt;
If you use the same recipe you get the same bread.
&lt;/blockquote&gt;
&lt;br/&gt;

That's the White Bread Warning from &lt;a href="http://jonjagger.blogspot.com/p/jerry-weinberg.html"&gt;Jerry Weinberg's&lt;/a&gt; truly excellent &lt;a href="http://jonjagger.blogspot.com/2011/07/secrets-of-consulting.html"&gt;The Secrets of Consulting&lt;/a&gt;.
&lt;br/&gt;
&lt;br/&gt;

I was thinking about that the other day and I realized something important. I realized that when I read the word recipe I thought about the ingredients but not really about the non-ingredient related instructions in the recipe. About time. A recipe doesn't just tell you what to mix with what, and in what order, it tells you how long to apply heat. And how much heat. These two things matter just as much as the ingredients. If you change the ingredients you'll get different bread. But if you change the time or the amount of heat you'll also get different bread. Although it might not look much like bread. 
&lt;br/&gt;
&lt;br/&gt;

Suppose the recipe says to heat the oven to 200 degrees and then cook for 30 minutes. That's 6000 degree-minutes. 
Now 1200 degrees for 5 minutes is also 6000 degree-minutes. But the bread will be predictably black.
Similarly 1 degree for 6000 minutes is also 6000 degree-minutes. But the bread will still be ingredients.
Or rather it won't. You see 6000 minutes is 100 hours. Which is 4 days as near as makes no difference.
That matters because ingredients are organic. They have a shelf life. A sell-by/eat-by expiry date. They decay. 
And even if baking the ingredients for 4 days at 1 degree did produce something vaguely bread-like the extra time would create extra cost. In lots of ways. Extra time does that.
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-8998284187155832859?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/8998284187155832859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2012/01/if-you-use-same-recipe-you-get-same.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/8998284187155832859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/8998284187155832859'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2012/01/if-you-use-same-recipe-you-get-same.html' title='6000 degree-minutes'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-Y1jv5QnER-w/TwS41McMdOI/AAAAAAAABDA/a6_oQY_RwYU/s72-c/Bread.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-7085490157494777408</id><published>2011-12-25T22:40:00.003Z</published><updated>2011-12-26T22:19:58.989Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='culture'/><category scheme='http://www.blogger.com/atom/ns#' term='coaching'/><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='jerry-weinberg'/><category scheme='http://www.blogger.com/atom/ns#' term='congruence'/><category scheme='http://www.blogger.com/atom/ns#' term='leadership'/><category scheme='http://www.blogger.com/atom/ns#' term='systems thinking'/><title type='text'>Quality software management vol 3, congruent action</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_u9orsdHAiCg/THAxS7fXnnI/AAAAAAAAAfk/JnRWx0s6dZ0/s1600/CongruentAction.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://1.bp.blogspot.com/_u9orsdHAiCg/THAxS7fXnnI/AAAAAAAAAfk/JnRWx0s6dZ0/s200/CongruentAction.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5507956545550786162" /&gt;&lt;/a&gt;

is the title of an excellent book by &lt;a href="http://jonjagger.blogspot.com/p/jerry-weinberg.html"&gt;Jerry Weinberg&lt;/a&gt; (isbn 0-932633-28-5). This is the second snippet review for this book 
(&lt;a href="http://jonjagger.blogspot.com/2010/08/quality-software-management-vol-3.html"&gt;here's the first&lt;/a&gt;). 
As usual I'm going to quote from a few pages: 

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Management is the number one random process element.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
If you cannot manage yourself you have no business managing others.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Congruent behaviours are not stereotyped behaviours - quite the contrary. Congruent behaviours are original, specific behaviours that fit the context, other, and self, as required by the Law of Requisite Variety.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Congruence is contagious.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
It takes a long time and a lot of hard practice to raise your congruence batting average.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
A basic law of perception is that we tend to minimise small differences (tendency toward assimilation) and to exaggerate appreciable differences (tendency toward contrast). Thus, our perceptions make the world more sharply differentiated than it is, and we're a lot more alike than we are different.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The simplest idea about curing addiction is to stop the use of X, under the belief that X causes addiction. X does not cause the addiction, the addiction dynamic causes the addiction.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
To change the addiction you'll have to use something more powerful than logic.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
One of the manager's primary jobs is to set the context in which interactions takes place and work is accomplished.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Management sets the context almost exclusively through the use of language.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Culture makes language, then language makes culture.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
In all Steering (Pattern 3) organisations, the team is the fundamental unit of production.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
I've learned that there's simply no sense trying to solve software engineering problems, or create software engineering organisations, when I'm not able to be congruent. So I work on that first, and that's what I hope you do, too.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-7085490157494777408?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/7085490157494777408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/12/quality-software-management-vol-3.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/7085490157494777408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/7085490157494777408'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/12/quality-software-management-vol-3.html' title='Quality software management vol 3, congruent action'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_u9orsdHAiCg/THAxS7fXnnI/AAAAAAAAAfk/JnRWx0s6dZ0/s72-c/CongruentAction.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-8563194434790025400</id><published>2011-12-19T16:16:00.005Z</published><updated>2011-12-20T09:09:01.624Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='refactoring'/><title type='text'>Fit for any type of sea voyage</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-3U1T2kBYcEI/Tu9jcY5JoYI/AAAAAAAABCo/brqUbmWcWvk/s1600/VikingShip.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://4.bp.blogspot.com/-3U1T2kBYcEI/Tu9jcY5JoYI/AAAAAAAABCo/brqUbmWcWvk/s200/VikingShip.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5687874193761870210" /&gt;&lt;/a&gt;

My beautiful wife Natalie met me here in Norway on Saturday. 
We visited the &lt;a href="http://www.khm.uio.no/"&gt;Viking Ship Museum&lt;/a&gt;.
One of the displays said:

&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
Et skip som må øses 3 ganger på 2 døgn er sjødyktig til all slags ferd.
&lt;/blockquote&gt;

&lt;br/&gt;

which translates as:

&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
A ship that has to be bailed 3 times in 2 days is fit for any type of sea voyage.
&lt;/blockquote&gt;

&lt;br/&gt;

I just love that.

&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-8563194434790025400?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/8563194434790025400/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/12/fit-for-any-type-of-sea-voyage.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/8563194434790025400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/8563194434790025400'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/12/fit-for-any-type-of-sea-voyage.html' title='Fit for any type of sea voyage'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-3U1T2kBYcEI/Tu9jcY5JoYI/AAAAAAAABCo/brqUbmWcWvk/s72-c/VikingShip.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-6490698459257658887</id><published>2011-12-18T18:38:00.017Z</published><updated>2011-12-19T16:09:26.610Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='slack'/><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><category scheme='http://www.blogger.com/atom/ns#' term='capacity'/><category scheme='http://www.blogger.com/atom/ns#' term='butter'/><category scheme='http://www.blogger.com/atom/ns#' term='systems thinking'/><category scheme='http://www.blogger.com/atom/ns#' term='flow'/><title type='text'>Butter sighted at Olve's house</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-U0Gpht00_sg/Tu4zceFmfNI/AAAAAAAABCY/5scMYiLTJgE/s1600/ButterInOslo.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://4.bp.blogspot.com/-U0Gpht00_sg/Tu4zceFmfNI/AAAAAAAABCY/5scMYiLTJgE/s200/ButterInOslo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5687539943621426386" /&gt;&lt;/a&gt;

This is a photo of a pack of butter belonging to my good friend Olve Maudal.
Olve has exactly 157 packs of butter in his house right now. All safely housed in his new super-sized fridge.
Many of his 157 packs have been flown in specially by relatives visiting from abroad.
Olve would only allow one pack out of the fridge for the photo. Even then he insisted it be taken out under the watchful eyes of the two security guards he's specially hired to guard the fridge - Lars by day and the other Lars by night. Well, you can't be too careful right now. Butter is selling for crazy money on the black (or should that be yellow) market. 
&lt;br/&gt;
&lt;br/&gt;
Yes, it's just one small example of the butter shortage here in Norway at the moment. Apparently the cause is a new fat-rich fad-diet sweeping the population combined with the seasonal tradition of making butter-rich Xmas cookies.
&lt;br/&gt;
&lt;br/&gt;
Shortages like this are, as Stephen Fry might put it, quite interesting. At one point there was probably a very mild shortage. Word of the mild shortage started to &lt;em&gt;spread&lt;/em&gt; (sorry) and anyone buying butter bought a few extra packets just to be safe. 
The shortage got a bit worse. Word of the worsening shortage spread further and faster. People bought even more. 
A self-fulfilling dynamic was thus set in place. 
Soon the shelves were stripped of all butter. 
&lt;br/&gt;
&lt;br/&gt;
The shortage the customers are experiencing is, no doubt, fractally mirrored by the shops selling (or rather not selling) butter. Butter wholesalers just don't have enough butter to meet the orders from shops. Shops that get any butter get less than they ordered. Any butter the shops do get is bought in a flash (but only by relatively few people because of the bulk butter buying behaviour) and they're out of stock again. You can imagine the shop keepers pulling their hair out in exasperation. If only they could get more butter they could make a small fortune. But right when there's the most demand they have none on their shelves! They increase the size of their wholesale reorder hoping to cash in.
&lt;br/&gt;
&lt;br/&gt;
What will happen in a few weeks time? One possible (perhaps even likely) outcome, is that the wholesalers will finally get enough butter to meet their over-inflated orders. The shop keepers pile the butter onto their shelves and wait for the Krona to roll in... Some of the butter is sold. But not very much. After all, Xmas is now over. The fat-rich fad-diet has gone the way of all fads and the glossy magazines are now preaching a low-fat diet. And lets not forget that a fair percentage of the population has, like Olve, over 100 packets of butter in their new fridges. They're certainly not going to be buying butter any time soon. 
&lt;br/&gt;
&lt;br/&gt;
The shop keepers then face the daunting prospect of vast butter-walls sitting unsold on their shelves, fast approaching its sell-by date. Lowering the price doesn't help. It all has to be thrown away. Again the same thing will be fractally mirrored at the smaller scale. Lots of people, such as Olve, will have more butter than they can possibly use in time. They too will have to throw out loads of butter as it goes past its use-by date. 
&lt;br/&gt;
&lt;br/&gt;
The same lurching from one extreme to another can happen when the number of people trying to make phone calls starts to approach network capacity. People can't get through. So they try again. And when they do get through the line gets dropped. So when they do get through they stay on a bit longer. 
&lt;a href="http://jonjagger.blogspot.com/2011/09/flow-speed-x-density.html"&gt;It happens on roads too.&lt;/a&gt;
&lt;br/&gt;
&lt;br/&gt;
It's dangerous to run systems at full capacity. They reach a tipping point and topple into a death spiral. Busy work and inventory pile up. That causes even more busy work and even more inventory. But almost no butter is being bought or sold. There is no flow.
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-6490698459257658887?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/6490698459257658887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/12/butter-shortage-in-oslo.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/6490698459257658887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/6490698459257658887'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/12/butter-shortage-in-oslo.html' title='Butter sighted at Olve&apos;s house'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-U0Gpht00_sg/Tu4zceFmfNI/AAAAAAAABCY/5scMYiLTJgE/s72-c/ButterInOslo.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-6131887754435671847</id><published>2011-12-18T09:48:00.002Z</published><updated>2011-12-18T09:56:22.681Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='culture'/><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='simplicity'/><category scheme='http://www.blogger.com/atom/ns#' term='complexity'/><category scheme='http://www.blogger.com/atom/ns#' term='change'/><category scheme='http://www.blogger.com/atom/ns#' term='systems thinking'/><title type='text'>Everyday heroes of the quality movement</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-BHKxzb42HMU/Tu23Jx7KhGI/AAAAAAAABCM/Kb_UEKaBdqs/s1600/EverydayHeroesOfTheQualityMovement.jpeg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 133px; height: 200px;" src="http://1.bp.blogspot.com/-BHKxzb42HMU/Tu23Jx7KhGI/AAAAAAAABCM/Kb_UEKaBdqs/s200/EverydayHeroesOfTheQualityMovement.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5687403283087000674" /&gt;&lt;/a&gt;

is an excellent book by Perry Gluckman and Diana Reynolds Roome,
subtitled From Taylor to Deming : The Journey to Higher Productivity (isbn 0945320078). As usual I'm going to quote from a few pages

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Look for the flaws in the system not in each other.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
When we reduce complexity, we start to see the organism behaving as a whole rather than a series of parts.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The effects of preventative medicine are hard to measure.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Theories are only the beginning. Why do we find it so hard to exercise, or give up smoking, even when we know all the arguments.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Quality and productivity are results, not goals.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Automating complexity is never as effective as removing it.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
I'm not trying to be destructive. I just want to open the doors to some breezes that feel a little chilling to start with.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
If there are problems in the company, we don't borrow money. We solve the problems.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
If you automate without first getting rid of complexity, you cast the complexity in concrete.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
We do almost nothing to control our workers productivity. They are already doing their best without being goaded. What we all try to control is the process itself.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
You need to know your financial direction as far as it can be known, and make sure that you don't hit any big rocks. But something else is more important: to design the ship so that it can withstand the blows when they come.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-6131887754435671847?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/6131887754435671847/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/12/everyday-heroes-of-quality-movement.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/6131887754435671847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/6131887754435671847'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/12/everyday-heroes-of-quality-movement.html' title='Everyday heroes of the quality movement'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-BHKxzb42HMU/Tu23Jx7KhGI/AAAAAAAABCM/Kb_UEKaBdqs/s72-c/EverydayHeroesOfTheQualityMovement.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-9024592201392992010</id><published>2011-12-09T19:38:00.008Z</published><updated>2011-12-12T21:08:44.954Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='c and c++'/><title type='text'>C sequence points</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-_x2cjwyZKaU/TuJrJnpDZ6I/AAAAAAAABCA/pddOQ7l3QyY/s1600/Submarine.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 128px;" src="http://2.bp.blogspot.com/-_x2cjwyZKaU/TuJrJnpDZ6I/AAAAAAAABCA/pddOQ7l3QyY/s200/Submarine.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5684223492699154338" /&gt;&lt;/a&gt;

Olve Maudal and I created a &lt;a href="http://www.slideshare.net/olvemaudal/deep-c"&gt;Deep C/C++ slide-deck&lt;/a&gt; recently. It's been downloaded over 300,000 times
indicating no small appetite for learning some of the deep secrets of C and C++. So...

&lt;br/&gt;
&lt;br/&gt;

In this C fragment &lt;code&gt;z&lt;/code&gt; is initialized to the value of &lt;code&gt;n&lt;/code&gt; &lt;i&gt;&lt;u&gt;after&lt;/u&gt;&lt;/i&gt; 
&lt;code&gt;n += 42&lt;/code&gt; takes place.

&lt;pre class="code"&gt;
if (n += 42)
{
    int z = n;
    ...
}
&lt;/pre&gt;

&lt;br/&gt;

But how do you &lt;em&gt;know&lt;/em&gt; this? For sure?
The answer is perhaps not as obvious as you might think. 
The C standard says:

&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
&lt;b&gt;5.1.2.3 Program execution&lt;/b&gt;&lt;br/&gt;
(paragraph 2)&lt;br/&gt;
Accessing a volatile object, modifying an object, modifying a file, or calling a function that does any of those operations are all &lt;em&gt;side effects&lt;/em&gt;, which are changes in the state of the execution environment. At certain specified points in the execution sequence called &lt;em&gt;sequence points&lt;/em&gt;, all side effects of previous evaluations shall be complete and no side effects of subsequent evaluations shall have taken place.
&lt;/blockquote&gt;

&lt;br/&gt;

In C parlance, &lt;code&gt;n&lt;/code&gt; is an object, and &lt;code&gt;n += 42&lt;/code&gt; modifies &lt;code&gt;n&lt;/code&gt;.
So &lt;code&gt;n += 42&lt;/code&gt; is a side effect.
The &lt;em&gt;only&lt;/em&gt; thing governing the &lt;em&gt;sequencing&lt;/em&gt; of side-effects are sequence points.
And there are a lot &lt;em&gt;less&lt;/em&gt; sequence points in C and C++ code that you might imagine.
There &lt;i&gt;&lt;u&gt;is&lt;/u&gt;&lt;/i&gt; a sequence point between &lt;code&gt;n += 42&lt;/code&gt; and the initialization of 
&lt;code&gt;z&lt;/code&gt;. But where? And why?
The standard says:

&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
&lt;b&gt;6.8 Statements and blocks&lt;/b&gt;&lt;br/&gt;
(paragraph 4)&lt;br/&gt;
A &lt;em&gt;full expression&lt;/em&gt; is an expression that is not part of another expression or of a declarator.  ... The end of a full expression is a sequence point.
&lt;/blockquote&gt;

&lt;br/&gt;

and:

&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
&lt;b&gt;6.8.4 Selection statements&lt;/b&gt;&lt;br/&gt;
&lt;b&gt;Syntax&lt;/b&gt;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&lt;i&gt;selection-statement:&lt;/i&gt;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;if&lt;/b&gt; &lt;b&gt;(&lt;/b&gt; &lt;i&gt;expression&lt;/i&gt; &lt;b&gt;)&lt;/b&gt; &lt;i&gt;statement&lt;/i&gt;
&lt;/blockquote&gt;

&lt;br/&gt;

If we lexically enlarge the expression &lt;code&gt;n += 42&lt;/code&gt; to its left or right we hit the parentheses that form part of the if statement. In other words, the expression stops being an expression and starts to become a statement. That means &lt;code&gt;n += 42&lt;/code&gt; in the fragment is a &lt;em&gt;full expression&lt;/em&gt;. That's why there's a sequence point at the end of &lt;code&gt;n += 42&lt;/code&gt;. In pseudo code it looks like this:

&lt;pre class="code"&gt;
...
n += 42;
&lt;i&gt;sequence-point&lt;/i&gt;
if n != 0 goto __false__;
int z = n;
__false__: 
...
&lt;/pre&gt;

&lt;br/&gt;

&lt;div style="font-size:0.5em"&gt;Photo: http://www.noaanews.noaa.gov/stories2005/images/rov-hercules-titanic.jpg&lt;/div&gt;

&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-9024592201392992010?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/9024592201392992010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/12/c-sequence-points.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/9024592201392992010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/9024592201392992010'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/12/c-sequence-points.html' title='C sequence points'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-_x2cjwyZKaU/TuJrJnpDZ6I/AAAAAAAABCA/pddOQ7l3QyY/s72-c/Submarine.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-8362727036900683911</id><published>2011-11-30T08:25:00.003Z</published><updated>2011-11-30T08:27:40.732Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='culture'/><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='lean'/><title type='text'>The Toyota Way</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-lMkC3nnmcl4/TtXor9JRADI/AAAAAAAABBw/DBCGaqHjQJE/s1600/TheToyotaWay.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://4.bp.blogspot.com/-lMkC3nnmcl4/TtXor9JRADI/AAAAAAAABBw/DBCGaqHjQJE/s200/TheToyotaWay.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5680702346843193394" /&gt;&lt;/a&gt;

is an excellent book by Jeffrey Liker (isbn 978-0-07-139231-0). As usual I'm going to quote from a few pages

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
One day a Ford Taurus mysteriously disappeared. It had been in the factory so they could try fitting it with some prototype mirrors. When it vanished, they even filed a police report. Then it turned up months later. Guess where it was. In the back of the plant, surrounded by inventory.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Extra inventory hides problems...
Ohno considered the fundamental waste to be overproduction, since it causes most of the other wastes… big buffers (inventory between processes) lead to other suboptimal behaviour, like reducing your motivation to continuously improve your operation.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
…was that data was one step removed from the process, merely "indicators" of what was going on.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Building a culture takes years of applying a consistent approach with consistent principles.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
It seems the typical U.S. company regularly alternates between the extremes of stunningly successful and borderline bankrupt.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Flow where you can, pull where you must.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
When I interviewed [Fujio] Cho for this book, I asked him about differences in cultures between what he experienced starting up the Georgetown, Kentucky plant and managing Toyota plants in Japan. He did not hesitate to note that his number-one problem was getting group leaders and team members to stop the assembly line.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Every repair situation is unique.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The more inventory a company has,… the less likely they will have what they need [Taiichi Ohno]
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
I posit here that Toyota has evolved the most effective form of industrial organisation ever devised. At the heart of that organisation is a focus on its own survival. [John Shook]
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
You cannot measure an engineer's value-added productivity by looking at what he or she is doing. You have to follow the progress of an actual product the engineer is working on as it is being transformed into a final product (or service).
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Everyone should tackle some great project at least once in their life. [Sakichi Toyoda]
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-8362727036900683911?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/8362727036900683911/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/11/toyota-way.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/8362727036900683911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/8362727036900683911'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/11/toyota-way.html' title='The Toyota Way'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-lMkC3nnmcl4/TtXor9JRADI/AAAAAAAABBw/DBCGaqHjQJE/s72-c/TheToyotaWay.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-590074415584417971</id><published>2011-11-28T15:56:00.001Z</published><updated>2011-11-28T15:58:29.219Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='learning'/><title type='text'>Sense and respond</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-4H35dj8HEYc/TtOvXpfNuMI/AAAAAAAABBk/Lik8RW0e3LQ/s1600/SenseAndRespond.jpeg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 102px; height: 154px;" src="http://1.bp.blogspot.com/-4H35dj8HEYc/TtOvXpfNuMI/AAAAAAAABBk/Lik8RW0e3LQ/s200/SenseAndRespond.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5680076375852955842" /&gt;&lt;/a&gt;

is an excellent book by Susan Barlow, Stephen Parry, and Mike Faulkner (isbn 1-4039-4573-X). As usual I'm going to quote from a few pages

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Continuous improvement… is not enough… what is needed also is continuous value creation.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
…they continue to create products 'just in case' rather than 'just in time'.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The intelligent business therefore embraces voluntary evolution, designing its own fitness to survive and thrive.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
...measure the value creation to value restoration ratio.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Most fast-food burger chains follow, to a large extent, the batch-and-queue principle… 
Contrast this kind of flow with the one-piece flow achieved by another fast-food company that makes sandwiches and 'subs'…
What has been standardised therefore, is not the &lt;em&gt;product&lt;/em&gt; but the &lt;em&gt;production method&lt;/em&gt;...
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Very often the traditional organisation passes work from one department to another in a batch-and-queue system, and with this approach it is not atypical to discover that a task that could be done in ten minutes may actually take ten days to complete. The reason for this is simple: the process is &lt;em&gt;designed&lt;/em&gt; that way.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Working together in a cross-functional way actually joins up the company, as well as reinforcing and strengthening the value chain. 
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Two options exist for businesses: to make offers to customers or to respond to customers' needs.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Is the customer purchasing an electric drill or holes in the wall?
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Adaptiveness… cannot just be added on to an organisation's existing capabilities: the organisation &lt;em&gt;itself&lt;/em&gt; must become adaptive.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Working together in a cross-functional way actually joins up the company, as well as reinforcing and strengthening the value chain. The result is a critical mass of value creation around &lt;em&gt;flow&lt;/em&gt; instead of around &lt;em&gt;functions&lt;/em&gt;.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-590074415584417971?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/590074415584417971/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/11/sense-and-respond.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/590074415584417971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/590074415584417971'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/11/sense-and-respond.html' title='Sense and respond'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-4H35dj8HEYc/TtOvXpfNuMI/AAAAAAAABBk/Lik8RW0e3LQ/s72-c/SenseAndRespond.jpeg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-5257700744735749232</id><published>2011-11-24T12:56:00.006Z</published><updated>2012-01-17T05:58:07.831Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='deliberate practice'/><category scheme='http://www.blogger.com/atom/ns#' term='cyberdojo'/><title type='text'>Agilis Deliberate Practice</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/-H9PIPpmNRv8/TxUN1CeNIWI/AAAAAAAABGo/Ay8ZpRCtT8Y/s1600/IceCubes.jpeg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 145px;" src="http://1.bp.blogspot.com/-H9PIPpmNRv8/TxUN1CeNIWI/AAAAAAAABGo/Ay8ZpRCtT8Y/s200/IceCubes.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5698476108355019106" /&gt;&lt;/a&gt;

Here's the 
&lt;a href="http://dl.dropbox.com/u/11033193/AgilisDeliberatePractice.pdf"&gt;slide-deck&lt;/a&gt;
I presented at the Agilis conference in Iceland.
It contains numerous examples of the kind of improvements a group of developers typically work through in just a few 
facilitated &lt;a href="http://www.cyber-dojo.com/"&gt;CyberDojo&lt;/a&gt; iterations.

&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-5257700744735749232?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/5257700744735749232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/11/agilis-deliberate-practice.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5257700744735749232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5257700744735749232'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/11/agilis-deliberate-practice.html' title='Agilis Deliberate Practice'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-H9PIPpmNRv8/TxUN1CeNIWI/AAAAAAAABGo/Ay8ZpRCtT8Y/s72-c/IceCubes.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-6163804905642837418</id><published>2011-11-24T09:41:00.007Z</published><updated>2011-11-24T10:00:12.351Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='c and c++'/><title type='text'>Intention revealing #include ?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-bSXhp__lnBk/Ts4UozO7jFI/AAAAAAAABBM/cKiOuzNExjc/s1600/cat-in-the-hat.jpeg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 164px;" src="http://3.bp.blogspot.com/-bSXhp__lnBk/Ts4UozO7jFI/AAAAAAAABBM/cKiOuzNExjc/s200/cat-in-the-hat.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5678498871340928082" /&gt;&lt;/a&gt;


In a 
&lt;a href="http://jonjagger.blogspot.com/2011/11/include-there-is-third-way.html"&gt;previous post&lt;/a&gt;
I described how C and C++ have a third #include mechanism.
It occurs to me that this idea has possibilities beyond simply
using LOCAL(header) as a synonym for "header" and SYSTEM(header) as a synonym for &amp;lt;header&amp;gt;
and then using the resulting seam to gain some leverage for testing.
You could also add intention revealing names.
For example, something like this:

&lt;br/&gt;
&lt;br/&gt;

&lt;pre class="code"&gt;
#include "dice_thrower.hpp"
#include &amp;lt;vector&amp;gt;

class stub_dice_thrower : public dice_thrower
{
...
private:
    std::vector&amp;lt;int&amp;gt; stubbed;
};
&lt;/pre&gt;

&lt;br/&gt;

could be written like this:

&lt;br/&gt;
&lt;br/&gt;

&lt;pre class="code"&gt;
#include REALIZES(dice_thrower.hpp)
#include COMPOSES(vector)

class stub_dice_thrower : public dice_thrower
{
...
private:
    std::vector&amp;lt;int&amp;gt; stubbed;
};
&lt;/pre&gt;

&lt;br/&gt;

Caveat emptor: I don't have any actual examples of this in real code.
It's just an idea.
It feels a bit like a solution looking for a problem.
But I thought I would mention the idea here to see if anyone thinks it has any legs...

&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-6163804905642837418?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/6163804905642837418/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/11/intention-revealing-include.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/6163804905642837418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/6163804905642837418'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/11/intention-revealing-include.html' title='Intention revealing #include ?'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-bSXhp__lnBk/Ts4UozO7jFI/AAAAAAAABBM/cKiOuzNExjc/s72-c/cat-in-the-hat.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-6368809759308044810</id><published>2011-11-22T16:05:00.006Z</published><updated>2011-11-22T16:20:32.753Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='change'/><category scheme='http://www.blogger.com/atom/ns#' term='aspergers'/><title type='text'>Responsibility</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-ExzRTPjAgRA/TsvISX-3xOI/AAAAAAAABBA/8YxjMVSQzI4/s1600/ChristopherAvery.jpeg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 104px; height: 144px;" src="http://2.bp.blogspot.com/-ExzRTPjAgRA/TsvISX-3xOI/AAAAAAAABBA/8YxjMVSQzI4/s200/ChristopherAvery.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5677851973231559906" /&gt;&lt;/a&gt;

I had the pleasure of attending the &lt;a href="http://www.agilis.is/"&gt;Agilis conference&lt;/a&gt; in Iceland recently.
&lt;br/&gt;
&lt;br/&gt;
&lt;a href="http://www.christopheravery.com/"&gt;Christopher Avery&lt;/a&gt; gave an excellent keynote and spoke about the difference between accountability and responsibility; you are accountable to someone else but responsibility is personal. 
&lt;br/&gt;
&lt;br/&gt;
He presented his six step ladder of responsibility:
&lt;br/&gt;
&lt;br/&gt;

&lt;ul&gt;
&lt;li&gt;Responsibility&lt;/li&gt;
&lt;li&gt;Obligation&lt;/li&gt;
&lt;li&gt;Shame&lt;/li&gt;
&lt;li&gt;Justify&lt;/li&gt;
&lt;li&gt;Lay Blame&lt;/li&gt;
&lt;li&gt;Denial&lt;/li&gt;
&lt;/ul&gt;

For example, I'm typing this in TextEdit on my Macbook whilst on a train to 
&lt;a href="http://xpday2011.wordpress.com/"&gt;XP Day&lt;/a&gt;. The font is small and my eyesight is fading. For a moment I struggled to discern the tif in the word Justify. I could almost hear a tiny voice inside my head starting to blame.  But then I jumped to Responsibility because I realised the fault was not with TextEdit but with me. I simply enlarged the font size. 

&lt;br/&gt;
&lt;br/&gt;

Christopher handed out a sheet expanding a little on the six step ladder above. 

&lt;br/&gt;

&lt;ul&gt;
&lt;li&gt;Responsibility is owning your ability and power to create, choose, and attract. It's about your ability to make a response - to respond. &lt;/li&gt;
&lt;li&gt;Obligation is doing what you &lt;em&gt;have&lt;/em&gt; to do instead of what you &lt;em&gt;want&lt;/em&gt; to. As always, if you listen carefully, you can hear this distinction in patterns of speech "… but I have to …". &lt;/li&gt;
&lt;li&gt;Justify where we attempt to rationalise the blame, to use excuses for things being the way they are; we make things just in our mind.&lt;/li&gt;
&lt;li&gt;Shame is laying blame on &lt;em&gt;oneself&lt;/em&gt; (often felt as guilt).&lt;/li&gt;
&lt;li&gt;Lay Blame (which is not a French verb ;-) is holding &lt;em&gt;others&lt;/em&gt; at fault for causing something. &lt;/li&gt;
&lt;/ul&gt;

My son Patrick has Asperger's Syndrome and he has a strong tendency to blame. For example, if he bumps his elbow on the door he gets angry and blames the door. He finds it very difficult to move past this blame, to get inside a positive feedback loop which helps him become less clumsy. So I think laying blame is more than holding other &lt;em&gt;people&lt;/em&gt; at fault, it can take the form of blaming anything - anything except oneself.

&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-6368809759308044810?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/6368809759308044810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/11/responsibility.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/6368809759308044810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/6368809759308044810'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/11/responsibility.html' title='Responsibility'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-ExzRTPjAgRA/TsvISX-3xOI/AAAAAAAABBA/8YxjMVSQzI4/s72-c/ChristopherAvery.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-6096420123172280016</id><published>2011-11-22T09:23:00.002Z</published><updated>2011-11-22T09:28:49.162Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='deliberate practice'/><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><title type='text'>There is no best practice</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-YUwiCwzoybY/TstqUjntIQI/AAAAAAAABA0/eWyfvR244NA/s1600/Brian.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 110px;" src="http://1.bp.blogspot.com/-YUwiCwzoybY/TstqUjntIQI/AAAAAAAABA0/eWyfvR244NA/s200/Brian.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5677748656622346498" /&gt;&lt;/a&gt;

I had the pleasure of speaking at the &lt;a href="http://www.agilis.is/"&gt;Agilis conference&lt;/a&gt; in Iceland recently.
While preparing my slides on Deliberate Practice I was naturally thinking about the word practice.
As far as I can tell, "Best practice" is the most common phrase with the word practice in it.
I searched for "Best practice" on goggle and got over 270 million hits.
I searched for "Better practices" on google and got a paltry 20 million hits.

&lt;br/&gt;
&lt;br/&gt;
Best practice…
&lt;ul&gt;
&lt;li&gt;focuses on achieving &lt;em&gt;someone else's perfect future&lt;/em&gt; state&lt;/li&gt;
&lt;li&gt;assumes there is only &lt;em&gt;one&lt;/em&gt; best practice&lt;/li&gt;
&lt;li&gt;emphasises the &lt;a href="http://jonjagger.blogspot.com/2011/06/gunpowder-and-pudding-driven.html"&gt;noun&lt;/a&gt; practice&lt;/li&gt;
&lt;li&gt;fits with the waterfall-defined-fixed mindset&lt;/li&gt;
&lt;/ul&gt;


Better practises…
&lt;ul&gt;
&lt;li&gt;focuses on &lt;em&gt;improving your own imperfect present&lt;/em&gt; state&lt;/li&gt;
&lt;li&gt;assumes there are &lt;em&gt;many&lt;/em&gt; possible better practices&lt;/li&gt;
&lt;li&gt;emphasises the &lt;a href="http://jonjagger.blogspot.com/2011/06/gunpowder-and-pudding-driven.html"&gt;verb&lt;/a&gt; - to practice&lt;/li&gt;
&lt;li&gt;fits with the agile-empirical-growth mindset&lt;/li&gt;
&lt;/ul&gt;

&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-6096420123172280016?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/6096420123172280016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/11/there-is-no-best-practice.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/6096420123172280016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/6096420123172280016'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/11/there-is-no-best-practice.html' title='There is no best practice'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-YUwiCwzoybY/TstqUjntIQI/AAAAAAAABA0/eWyfvR244NA/s72-c/Brian.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-7219862049217771080</id><published>2011-11-10T08:37:00.000Z</published><updated>2011-11-10T10:22:39.635Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='feedback'/><category scheme='http://www.blogger.com/atom/ns#' term='change'/><category scheme='http://www.blogger.com/atom/ns#' term='fishing'/><title type='text'>Float fishing rivers</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-q46iSFam9Y4/TrlaxTifewI/AAAAAAAABAg/m4T71v9AjbE/s1600/FloatFishingRivers.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 115px; height: 115px;" src="http://4.bp.blogspot.com/-q46iSFam9Y4/TrlaxTifewI/AAAAAAAABAg/m4T71v9AjbE/s200/FloatFishingRivers.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5672665008754883330" /&gt;&lt;/a&gt;

is an excellent (out of print) book by Ken Giles and Dave Harrell (isbn 0-947674-23-3). As usual I'm going to quote from a few pages

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
I always tend to feed the line off the [closed face] spool by hand.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
It is also important, regardless of which brand of line you use, to use them in conjunction with a silicon spray. … it does make a big difference. I always spray it on my spool at the start and even if the wind gets up later on, I find I can still sink the line when I have to and then leave it on the surface again if the wind drops.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
If you are fishing a very slow moving river such as the Nene or the Welland, where there is a strong wind, then you need the float to be loaded, because when you cast, it goes into the water like an arrow, completely burying itself and helps you to sink your line without it being pulled away from the far shelf.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Holding back is generally only used after the first frost of winter.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The most important point that must be covered on stick float fishing is the need to keep the line behind the float at all times. This is a must. It just does not work if the line is allowed to go in front of the float.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
As a line gets older, it has a greater tendency to sink, so by always having fresh line on your reels this problem is easily overcome.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
When I hold back, I do not hold back really hard. 
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Regardless of the method, be it stick float or wagglier, you must keep changing your depth around between being a couple of feet over depth to a couple of feet below the surface. Also, it is important to keep altering your shooting to find and keep in touch with the fish.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
You do not select the float you want, you select the amount of weight you want to reach where you intend to fish and then pick a float to suit that.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
I also feel that it pays to feed two lines like this anyway, to allow you to rest one against the other.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
When waggler fishing I am ringing the changes far more often than I need to with the stick float.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The worst thing you can do… is to feed out of habit, as opposed to in response to the fish.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
I think that work rate is the key to it all.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-7219862049217771080?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/7219862049217771080/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/11/float-fishing-rivers.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/7219862049217771080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/7219862049217771080'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/11/float-fishing-rivers.html' title='Float fishing rivers'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-q46iSFam9Y4/TrlaxTifewI/AAAAAAAABAg/m4T71v9AjbE/s72-c/FloatFishingRivers.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-2568353624823636615</id><published>2011-11-09T08:39:00.004Z</published><updated>2011-11-09T16:55:06.964Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='visibility'/><category scheme='http://www.blogger.com/atom/ns#' term='culture'/><category scheme='http://www.blogger.com/atom/ns#' term='change'/><category scheme='http://www.blogger.com/atom/ns#' term='legacy'/><title type='text'>10,000 warnings</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-c1OOxSooDdI/TrlTm3raOFI/AAAAAAAABAU/sqtycPm8dq0/s1600/lots-of-warnings.jpeg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 154px; height: 200px;" src="http://1.bp.blogspot.com/-c1OOxSooDdI/TrlTm3raOFI/AAAAAAAABAU/sqtycPm8dq0/s200/lots-of-warnings.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5672657132896008274" /&gt;&lt;/a&gt;

&lt;p&gt;
Suppose you are working on a codebase that has 10,000 warnings. Perhaps you have discussed how you can get rid of the warnings. Perhaps you have discussed it more than once. But you still have 10,000 warnings. What can you do? There is no magic bullet. You are not going to be able to buy a magic tool, or wave a magic wand, and with almost no effort, get rid of them all. If there was you would already have waved the wand. 
&lt;/p&gt;
&lt;br/&gt;
&lt;p&gt;
Even if there was such a silver bullet it would create a &lt;em&gt;shallow&lt;/em&gt; improvement, rather than a deep one. It would create no dynamic whatsoever to encourage the developers to learn how not to introduce warnings in the first place. It would do the opposite. 
&lt;/p&gt;
&lt;br/&gt;

&lt;p&gt;
Naturally new warnings keep appearing. Tomorrow there will be 10,001 warnings.
But the 1 new warning gets lost in the sea of 10,000 others.
It's not even noticed. 
The number of warnings is trending relentlessly upwards. 
&lt;/p&gt;
&lt;br/&gt;

&lt;p&gt;
The &lt;em&gt;only&lt;/em&gt; way you can get rid of 10,000 warnings is the same way you
got them in the first place. A little bit at a time. With effort. Effort that shows you care.
&lt;/p&gt;
&lt;br/&gt;

&lt;p&gt;
The first thing to do is put a finger in the hole. Cap the number of warnings. Make &lt;em&gt;new&lt;/em&gt; warnings count as errors from now on. Don't just &lt;em&gt;say&lt;/em&gt; "new warnings count as errors from now on". You said that last time and it didn't work. Actually alter the way you build your software so that new warnings cause a build failure. If module X has 3,663 warnings then 3,663 is the stake in the ground. If it gets more than 3,663 make that a build failure.
&lt;/p&gt;
&lt;br/&gt;

&lt;p&gt;
This creates pressure to remove warnings on the code &lt;em&gt;actually being worked on&lt;/em&gt;. In a culture where warnings are ignored to the extent that they've grown to be 10,000 strong, developers are not likely to see the merits of removing warnings from old code that seems to work and no one has touched for a long time.
&lt;/p&gt;
&lt;br/&gt;

&lt;p&gt;
Once the number of warnings has stabilized, or even started to trend slightly downwards, you can work on reducing the number of warnings. If the maximum number of warnings in the build is currently 10,000 then set a target. Agree that in a weeks time the number will have dropped to 9,900. Or agree to look at the classes of warnings and target the worst one. 
&lt;/p&gt;
&lt;br/&gt;

&lt;p&gt;
You don't have to get to zero. Getting to zero would mean removing warnings from old code that hasn't been touched for ages. That's not as important as changing the dynamics of the how people act so that the number of warnings is going down rather than going up.
&lt;/p&gt;
&lt;br/&gt;

&lt;p&gt;
Once you get to a level your happy with, don't turn the build-checks off. Don't take your finger out of the hole. If you do that warnings can easily start to rise again. Leave them in place.
&lt;/p&gt;
&lt;br/&gt;

&lt;p&gt;
Once you get to a level your happy with, look at ways you can improve further. Buy new tools that detect new warnings. And start again. Focus on improvement not perfection. 
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-2568353624823636615?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/2568353624823636615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/11/10000-warnings.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/2568353624823636615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/2568353624823636615'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/11/10000-warnings.html' title='10,000 warnings'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-c1OOxSooDdI/TrlTm3raOFI/AAAAAAAABAU/sqtycPm8dq0/s72-c/lots-of-warnings.jpeg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-8800039541459034310</id><published>2011-11-07T16:35:00.032Z</published><updated>2012-02-13T09:20:55.539Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='unit testing'/><category scheme='http://www.blogger.com/atom/ns#' term='c and c++'/><category scheme='http://www.blogger.com/atom/ns#' term='refactoring'/><title type='text'>#include - there is a third way</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-4FnmAjkgfuE/TrgL-8YoBJI/AAAAAAAAA_8/DR51f1vTaDM/s1600/cat-in-the-hat.jpeg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 164px;" src="http://2.bp.blogspot.com/-4FnmAjkgfuE/TrgL-8YoBJI/AAAAAAAAA_8/DR51f1vTaDM/s200/cat-in-the-hat.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5672296906662347922" /&gt;&lt;/a&gt;

Isolating legacy code from external dependencies can be awkward. Code naturally resists being isolated if it isn't designed to be isolatable. In C and C++ the transitive nature of #includes is the most obvious and direct reflection of the high-coupling such code exhibits. There is a technique that you can use to isolate a source file by cutting &lt;em&gt;all&lt;/em&gt; it's #includes.
It relies on a little known third way of writing a #include.
From the C standard:
&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
6.10.2 Source file inclusion &lt;br/&gt;
...&lt;/br&gt;
A preprocessing directive of the form:&lt;br/&gt;
&lt;pre class="code"&gt;
&amp;nbsp;&amp;nbsp;#include pp-tokens 
&lt;/pre&gt;
(that does not match one of the two previous forms) is permitted.
The preprocessing tokens after &lt;code&gt;include&lt;/code&gt; in the directive are processed just as in normal text. ... The directive resulting after all replacements shall match one of the two previous forms.
&lt;/blockquote&gt;

&lt;br/&gt;
&lt;br/&gt;

An example. Suppose you have a legacy source file that you want to write some unit tests for. For example:

&lt;pre class="code"&gt;
/* &lt;i&gt; legacy.c &lt;/i&gt; */
#include "wibble.h"
#include &amp;lt;stdio.h&amp;gt;

int legacy(void)
{
    ...
    info = external_dependency(stdout);
    ...
}
&lt;/pre&gt;

&lt;br/&gt;
&lt;br/&gt;

First create a file called &lt;code&gt;nothing.h&lt;/code&gt; as follows:

&lt;pre class="code"&gt;
// nothing!
&lt;/pre&gt;

&lt;code&gt;nothing.h&lt;/code&gt; is a file containing nothing and is an example of the 
&lt;a href="http://www.two-sdg.demon.co.uk/curbralan/papers/europlop/NullObject.pdf"&gt;Null Object Pattern&lt;/a&gt;).
Then refactor legacy.c to this:


&lt;pre class="code"&gt;
/* &lt;i&gt;legacy.c&lt;/i&gt; */
#if defined(UNIT_TEST)
#  define LOCAL(header) "nothing.h"
#  define SYSTEM(header) "nothing.h"
#else
#  define LOCAL(header) #header
#  define SYSTEM(header) &amp;lt;header&amp;gt;
#endif

#include LOCAL(wibble.h)  // &lt;--- 
#include SYSTEM(stdio.h)  // &lt;--- 

int legacy(void)
{
    ...
    info = external_dependency(stdout);
    ...
}
&lt;/pre&gt;

&lt;br/&gt;
&lt;br/&gt;

Now structure your unit-tests for legacy.c as follows:&lt;br/&gt;
First you write the fake implementations of the external dependencies.
Note that the type of &lt;code&gt;stdout&lt;/code&gt; is &lt;em&gt;not&lt;/em&gt; &lt;code&gt;FILE*&lt;/code&gt;.

&lt;pre class="code"&gt;
/* &lt;i&gt;legacy.test.c: Part 1&lt;/i&gt; */

int stdout;

int external_dependency(int stream)
{   
    ...
    return 42;
}
&lt;/pre&gt;

Then #include the &lt;i&gt;source&lt;/i&gt; file.
Note carefully that we're #including &lt;code&gt;legacy.c&lt;/code&gt; here
and not &lt;code&gt;legacy.h&lt;/code&gt;

&lt;pre class="code"&gt;
/* &lt;i&gt;legacy.test.c: Part 2&lt;/i&gt; */
#include "legacy.c" 
&lt;/pre&gt;

Then write your tests:

&lt;pre class="code"&gt;
/* &lt;i&gt;legacy.test.c: Part 3&lt;/i&gt; */

#include &amp;lt;assert.h&amp;gt;

void first_unit_test_for_legacy(void)
{
    ...
    assert(legacy() == expected);
    ...
}

int main(void)
{
    first_unit_test_for_legacy();
    return 0;
}
&lt;/pre&gt;

&lt;br/&gt;
&lt;br/&gt;

Then compile &lt;code&gt;legacy.test.c&lt;/code&gt; with the &lt;code&gt;-D UNIT_TEST&lt;/code&gt; option.

&lt;br/&gt;
&lt;br/&gt;

This is pretty brutal, but it might just allow you to create an initial seam which you
can then gradually prise open. If nothing else it provides a way to create
characterisation tests to familiarize yourself with legacy code.

&lt;br/&gt;
&lt;br/&gt;

The -include compiler option might also prove useful.
&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
-include file&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Process file as if #include "file" appeared as the first line of the primary source file. 
&lt;/blockquote&gt;

&lt;br/&gt;
&lt;br/&gt;

Using this you can create the following file:

&lt;pre class="code"&gt;
/* &lt;i&gt;include_seam.h&lt;/i&gt; */
#ifndef INCLUDE_SEAM
#define INCLUDE_SEAM

#if defined(UNIT_TEST)
#  define LOCAL(header) "nothing.h"
#  define SYSTEM(header) "nothing.h"
#else
#  define LOCAL(header) #header
#  define SYSTEM(header) &amp;lt;header&amp;gt;
#endif

#endif
&lt;/pre&gt;

&lt;br/&gt;

and then compile with the &lt;code&gt;-include include_seam.h&lt;/code&gt; option.

&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-8800039541459034310?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/8800039541459034310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/11/include-there-is-third-way.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/8800039541459034310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/8800039541459034310'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/11/include-there-is-third-way.html' title='#include - there is a third way'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-4FnmAjkgfuE/TrgL-8YoBJI/AAAAAAAAA_8/DR51f1vTaDM/s72-c/cat-in-the-hat.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-7489440476082068622</id><published>2011-11-07T11:54:00.001Z</published><updated>2011-11-07T21:08:19.334Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='deliberate practice'/><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='fishing'/><title type='text'>Fred Foster's Swing Tipping</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/--iRx9vGWxuw/TrZLdBd1UnI/AAAAAAAAA_w/P8zV46_cfK0/s1600/FredFoster.jpeg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 131px; height: 200px;" src="http://2.bp.blogspot.com/--iRx9vGWxuw/TrZLdBd1UnI/AAAAAAAAA_w/P8zV46_cfK0/s200/FredFoster.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5671803742701572722" /&gt;&lt;/a&gt;

is an excellent (out of print) book by Fred Foster (isbn 0-304-29467-5). As usual I'm going to quote from a few pages

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Imagine you are just lifting the hook gently but firmly into the fish
and you've got the idea.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
As soon as the bomb has settled, I tighten up to it in the normal way
and set the swing tip. That's
the starting position. I leave the bait there for one minute and then
twitch it forward for the first
time. ... I give my bait a twitch once every 30 seconds after leaving
it for the opening minute.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
On hard fished waters, my aim is always to fish as far out from the
bank as the prevailing conditions will permit.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
As I see it, the hook is always far more visible to the fish when the
bait is suspended (as it mostly is with the float) than
it is when the bait is on the bottom as it &lt;em&gt;always&lt;/em&gt; is when
swing tipping.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
I prefer a 3 foot hooklength.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
In my experience, accurate casting is more vital when swing tipping
than in any other form of fishing I have known.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
There isn't such a thing as a magic bait and if those who suspected it
spent their time practising their tipping
instead of wasting it on wild goose chases like this they'd start to
give the likes of me a closer run for our money.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Accurate synchronization in the placing of the hookbait in
relationship to the feed is one of &lt;em&gt;the&lt;/em&gt; most
important requirements if you are to achieve any real success.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
It's a case of practice makes perfect until you can drop that bomb on
the same spot every time.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-7489440476082068622?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/7489440476082068622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/11/fred-foster-swing-tipping.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/7489440476082068622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/7489440476082068622'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/11/fred-foster-swing-tipping.html' title='Fred Foster&apos;s Swing Tipping'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/--iRx9vGWxuw/TrZLdBd1UnI/AAAAAAAAA_w/P8zV46_cfK0/s72-c/FredFoster.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-6453353118982131140</id><published>2011-11-06T08:41:00.004Z</published><updated>2011-11-06T09:03:21.626Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='visibility'/><category scheme='http://www.blogger.com/atom/ns#' term='culture'/><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='jerry-weinberg'/><category scheme='http://www.blogger.com/atom/ns#' term='congruence'/><category scheme='http://www.blogger.com/atom/ns#' term='listening'/><category scheme='http://www.blogger.com/atom/ns#' term='communication'/><title type='text'>Quality Software Management. Vol 2. First-Order Measurement</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_u9orsdHAiCg/S9FoaOxytgI/AAAAAAAAASo/8BoFT4CxVdU/s1600/QSMVol2.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://2.bp.blogspot.com/_u9orsdHAiCg/S9FoaOxytgI/AAAAAAAAASo/8BoFT4CxVdU/s200/QSMVol2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5463262622829950466" /&gt;&lt;/a&gt;

is the title of an excellent book by &lt;a href="http://jonjagger.blogspot.com/p/jerry-weinberg.html"&gt;Jerry Weinberg&lt;/a&gt; (isbn 0-932633-24-2). This is the second snippet review for this book 
(&lt;a href="http://jonjagger.blogspot.com/2010/01/quality-software-management-vol-2-first.html"&gt;here's the first&lt;/a&gt;). 
As usual I'm going to quote from a few pages: 

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The update cycle on the project control panel should be scaled to
something less than
&lt;em&gt;the longest period of time the project can afford to be late&lt;/em&gt;.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Large projects always fail when their communication systems fail.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The slowdown of fault removal is a major reason why project times are
underestimated.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
In the end, it's not the observation that counts, it's the
&lt;em&gt;response&lt;/em&gt; to the observation. That's
why Zen masters teach patience in response.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Culture makes its presence known through patterns that persist over time.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
What power corrupts most thoroughly is the ability to make meaning of
observations.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Incongruent behaviour is the number one enemy of quality, because it
disguises what people
truly value.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
If you can see it you can review it.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The switch from cost observation to value observation is the strongest
indication that an organization has made the transition from Pattern 2 [Routine]
to Pattern 3 [Steering].
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
In my consulting, I frequently talk to managers who seem obsessed with
cutting the cost
of software or reducing development time, but I seldom find a manager
obsessed with
improving value.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
No other observational skill may be more important to software
engineering than precision listening.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-6453353118982131140?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/6453353118982131140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/11/quality-software-management-vol-2-first.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/6453353118982131140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/6453353118982131140'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/11/quality-software-management-vol-2-first.html' title='Quality Software Management. Vol 2. First-Order Measurement'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_u9orsdHAiCg/S9FoaOxytgI/AAAAAAAAASo/8BoFT4CxVdU/s72-c/QSMVol2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-8836394943257180933</id><published>2011-11-05T21:12:00.001Z</published><updated>2011-11-05T21:14:35.114Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='fishing'/><title type='text'>Ian Heaps on Fishing</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-oNiZJ3jvYPM/TrWm4aFlEJI/AAAAAAAAA_Y/8Wd3Oa4qga0/s1600/IanHeaps.jpeg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 126px; height: 200px;" src="http://2.bp.blogspot.com/-oNiZJ3jvYPM/TrWm4aFlEJI/AAAAAAAAA_Y/8Wd3Oa4qga0/s200/IanHeaps.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5671622793748615314" /&gt;&lt;/a&gt;

is an excellent (out of print) book by Ian Heaps (isbn 0-907675-02-6). As usual I'm going to quote from a few pages

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The best way to improve is to practice.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
You must feed according to how many fish there are and how they are feeding.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
There was a method though, and that was slowing the bait down… the caster needing fishing in a very different way to the maggot.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
You must keep it as simple as possible: fish as efficiently as you can.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
You must learn to feed on a regular basis so that the fish are charged up, and they get to know exactly when the next amount of food, is going to arrive.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Especially on a river which is flowing, the most important thing is to get a feeding pattern going. Then, there are a thousand and one shooting patterns which will catch them.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
If you see the float lifting up a bit when it should be bullying its way through the swim, it is not big enough to do the job.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
For me, far too many people are obsessed nowadays with fishing light. All too often they do not experiment and put on enough lead.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Generally speaking, I have found that the more lead you can get on the line and still present the bait properly the more, and the bigger, fish you will catch.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Practice makes perfect, and there is no substitute for experimenting yourself.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
If you put on a number of smaller shot and bunch them together, you can soon space them out if the feeding pattern changes.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
John [Dean] did the same thing as everyone else - only he did everything just a little bit better.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-8836394943257180933?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/8836394943257180933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/11/ian-heaps-on-fishing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/8836394943257180933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/8836394943257180933'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/11/ian-heaps-on-fishing.html' title='Ian Heaps on Fishing'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-oNiZJ3jvYPM/TrWm4aFlEJI/AAAAAAAAA_Y/8Wd3Oa4qga0/s72-c/IanHeaps.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-8168919405555544230</id><published>2011-11-02T19:36:00.002Z</published><updated>2011-11-03T06:36:13.535Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='learning'/><category scheme='http://www.blogger.com/atom/ns#' term='failure'/><title type='text'>The lady tasting tea</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-M-cIeb353ok/TrGb-5ksmeI/AAAAAAAAA_M/_-GbjzklQP8/s1600/TheLadyTastingTea.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://3.bp.blogspot.com/-M-cIeb353ok/TrGb-5ksmeI/AAAAAAAAA_M/_-GbjzklQP8/s200/TheLadyTastingTea.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5670484910745098722" /&gt;&lt;/a&gt;

is an excellent book by David Salsburg (isbn 0-8050-7143-2). As usual I'm going to quote from a few pages

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
It was a summer afternoon in Cambridge, England, in the late 1920s. A group of university dons, their wives, and some guests were sitting around an outdoor table for afternoon tea. One of the women was insisting that tea tasted different depending upon whether the tea was poured into the milk or whether the milk was poured into the tea.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
What I discovered working at Pfizer was that very little scientific research can be done alone. It usually requires a combination of minds. This is because it is so easy to make mistakes.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Galton discovered a phenomenon he called "regression to the mean."
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The numbers that identify the distribution are not the same type of "numbers" as the measurements. These numbers can never be observed but can be inferred from the way in which the measurements scatter. These numbers were later to be called parameters - from the Greek for "almost measurements."
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Bliss invented a procedure he called "probate analysis." … The most important parameter his model generated is called the "50 percent lethal dose," usually referred to as the "LD-50." … The further you get from the 50 percent point, the more massive the experiment that is needed to get a good estimate.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
If you are willing to settle for knowing the two parameters of a normal distribution within two significant figures, you need collect only about 50 measurements.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
It is better to do mathematics on a chalkboard than on a piece of paper because chalk is easier to erase, and mathematical research is always filled with mistakes. Very few mathematicians work alone. If you are a mathematician, you need to talk about what you are doing. You need to expose your new ideas to the criticism of others.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
In the deterministic approach, there is a fixed number, the gravitational constant, that describes how things fall to the Earth. In the statistical approach, our measurements of the gravitational constant will always differ from one another, and the scatter of their distribution is what we wish to establish in order to "understand" falling bodies.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
No test can be powerful against all possible alternatives.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
In the near disaster of American nuclear power plant at Three Mile Island power plant in Pennsylvania in the 1980s, the operators of the reactor had a large board of dials and indicators to follow the progress of the reactor. Among these were warning lights, some of which had been faulty and presented false alarms in the past. The prior beliefs of the operators were such that any new pattern of warning lights would be viewed as a false alarm. Even as the pattern of warning lights and associated dials produced a consistent picture of low water in the reactor, they continued to dismiss the evidence. 
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Kolmogorov called a sequence of numbers collected over time with successive values related to previous ones a "stochastic process."
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-8168919405555544230?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/8168919405555544230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/11/lady-tasting-tea.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/8168919405555544230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/8168919405555544230'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/11/lady-tasting-tea.html' title='The lady tasting tea'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-M-cIeb353ok/TrGb-5ksmeI/AAAAAAAAA_M/_-GbjzklQP8/s72-c/TheLadyTastingTea.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-5554886490784992847</id><published>2011-10-29T10:22:00.002Z</published><updated>2011-10-29T10:26:07.822Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='photo'/><title type='text'>Attitude, passion</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-qQ5braLCFXM/TqvUOC2-s9I/AAAAAAAAA-w/iDKMKelg9Fk/s1600/Passion.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://4.bp.blogspot.com/-qQ5braLCFXM/TqvUOC2-s9I/AAAAAAAAA-w/iDKMKelg9Fk/s200/Passion.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5668857893726630866" /&gt;&lt;/a&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-JkCU6GeYR5Q/TqvUEbdhdZI/AAAAAAAAA-k/0gAJcXJnoQU/s1600/Attitude.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://4.bp.blogspot.com/-JkCU6GeYR5Q/TqvUEbdhdZI/AAAAAAAAA-k/0gAJcXJnoQU/s200/Attitude.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5668857728532051346" /&gt;&lt;/a&gt;

Attitude is a shop somewhere in an airport terminal in USA. I forget where exactly. Possibly Chicago.
Passion is a restaurant in Ghent in Belgium.
&lt;/p&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-5554886490784992847?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/5554886490784992847/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/10/attitude-passion.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5554886490784992847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5554886490784992847'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/10/attitude-passion.html' title='Attitude, passion'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-qQ5braLCFXM/TqvUOC2-s9I/AAAAAAAAA-w/iDKMKelg9Fk/s72-c/Passion.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-8924911252515873227</id><published>2011-10-24T17:45:00.001Z</published><updated>2011-10-24T17:47:15.864Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><category scheme='http://www.blogger.com/atom/ns#' term='the princess bride'/><title type='text'>The Princess Bride</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-LGPWyToL-Vk/TqWkfzKwjOI/AAAAAAAAA-Y/KahT6jX9zTQ/s1600/ThePrincessBride.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://3.bp.blogspot.com/-LGPWyToL-Vk/TqWkfzKwjOI/AAAAAAAAA-Y/KahT6jX9zTQ/s200/ThePrincessBride.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5667116572333870306" /&gt;&lt;/a&gt;

is an excellent book by William Goldman (isbn 0-7475-4518-9). As usual I'm going to quote from a few pages

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
It's still my favourite book in all the world. And more than ever, I wish I had written it.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
This is my favourite book in all the world, though I have never read it.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Miracles. Giants. True love.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Eyes like the sea before a storm.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
We are but poor circus performers.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Absolutely, totally, and, in all other ways, inconceivable
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Then one morning, Inigo was gone. In his place were three words: "I must learn" on a note pinned to his pillow.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
I am not left-handed.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
What you do not smell is called iocane powder.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Don't you hurry me, sonny, you hurry a miracle man, you get rotten miracles.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
I AM THE DREAD PIRATE ROBERTS AND THERE WILL BE NO SURVIVORS.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-8924911252515873227?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/8924911252515873227/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/10/princess-bride.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/8924911252515873227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/8924911252515873227'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/10/princess-bride.html' title='The Princess Bride'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-LGPWyToL-Vk/TqWkfzKwjOI/AAAAAAAAA-Y/KahT6jX9zTQ/s72-c/ThePrincessBride.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-8603181092390866988</id><published>2011-10-21T17:57:00.001Z</published><updated>2011-10-21T18:05:02.834Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='listening'/><category scheme='http://www.blogger.com/atom/ns#' term='systems thinking'/><title type='text'>Authentic happiness</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-q9zC_DU_t1k/TqGztCvqlvI/AAAAAAAAA-M/Bq19QLcPMhI/s1600/AuthenticHappiness.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://2.bp.blogspot.com/-q9zC_DU_t1k/TqGztCvqlvI/AAAAAAAAA-M/Bq19QLcPMhI/s200/AuthenticHappiness.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5666007392621074162" /&gt;&lt;/a&gt;

is an excellent book by Martin Seligman (isbn 1-85788-329-2). As usual I'm going to quote from a few pages

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Daddy, do you remember before my fifth birthday? From when I was three until when I was five, I was a whiner. I whined every day. On my fifth birthday, I decided I wasn't going to whine any more. That was the hardest thing I've ever done. And if I can stop whining, you can stop being such a grouch.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
All emotions about the past are completely driven by thinking and interpretation.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
There are, however, no known ways to enhance forgetting and suppressing of memory directly. Indeed explicit attempts to suppress thoughts will backfire and increase the likelihood of imagining the forbidden object.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
If you think about bad things in terms of "always" and "never" and abiding traits, you have a permanent, pessimistic style.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Learned optimism… is about accuracy.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Almost nothing that happens to you has just one cause.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Mindful attention to the present occurs much more readily in a slow state of mind.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Total immersion, in fact, blocks consciousness, and emotions are completely absent.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The mood state Americans are in, on average, when watching television is mildly depressed.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The overarching principle of good listening is validation.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
By encouraging cheap success, it produced a generation of very expensive failures.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Every drug that breaks up depression also blocks dreaming.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-8603181092390866988?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/8603181092390866988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/10/authentic-happiness.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/8603181092390866988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/8603181092390866988'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/10/authentic-happiness.html' title='Authentic happiness'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-q9zC_DU_t1k/TqGztCvqlvI/AAAAAAAAA-M/Bq19QLcPMhI/s72-c/AuthenticHappiness.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-3132596078135329095</id><published>2011-10-14T13:25:00.010Z</published><updated>2011-10-14T14:56:36.496Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='cyberdojo'/><category scheme='http://www.blogger.com/atom/ns#' term='deliberate practice'/><category scheme='http://www.blogger.com/atom/ns#' term='life of brian'/><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='courage'/><category scheme='http://www.blogger.com/atom/ns#' term='the princess bride'/><category scheme='http://www.blogger.com/atom/ns#' term='communication'/><category scheme='http://www.blogger.com/atom/ns#' term='systems thinking'/><category scheme='http://www.blogger.com/atom/ns#' term='miracles'/><category scheme='http://www.blogger.com/atom/ns#' term='feedback'/><category scheme='http://www.blogger.com/atom/ns#' term='dont rush'/><category scheme='http://www.blogger.com/atom/ns#' term='jerry-weinberg'/><category scheme='http://www.blogger.com/atom/ns#' term='xp'/><category scheme='http://www.blogger.com/atom/ns#' term='listening'/><category scheme='http://www.blogger.com/atom/ns#' term='zen'/><category scheme='http://www.blogger.com/atom/ns#' term='think team'/><title type='text'>Agile A-Z Keynote</title><content type='html'>I attended the excellent &lt;a href="http://www.agileminds.be/event/5"&gt;Agile .NET 2011&lt;/a&gt; conference in Ghent, Belgium this week. Jason Gorman pulled out at the last minute and Erik asked me if I'd step in and do the keynote. I said yes of course and prepared this on the train+plane there.

&lt;br/&gt;
&lt;br/&gt;

&lt;div style="width:425px" id="__ss_9697308"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/JonJagger/an-agile-a-to-z" title="An Agile A to Z"&gt;An Agile A to Z&lt;/a&gt;&lt;/strong&gt;&lt;object id="__sse9697308" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=atoz-111014093206-phpapp01&amp;stripped_title=an-agile-a-to-z&amp;userName=JonJagger" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse9697308" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=atoz-111014093206-phpapp01&amp;stripped_title=an-agile-a-to-z&amp;userName=JonJagger" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/JonJagger"&gt;JonJagger&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;

&lt;br/&gt;
&lt;br/&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-pZVq1Z32ZgA/Tpg4yRmXPtI/AAAAAAAAA-A/jOT9LeXGz34/s1600/790.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 74px;" src="http://3.bp.blogspot.com/-pZVq1Z32ZgA/Tpg4yRmXPtI/AAAAAAAAA-A/jOT9LeXGz34/s200/790.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5663338967787323090"&gt;&lt;/a&gt;

&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-3132596078135329095?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=b3ce6110605e7bec&amp;type=video/mp4' length='0'/><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/3132596078135329095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/10/agile-z-keynote.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/3132596078135329095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/3132596078135329095'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/10/agile-z-keynote.html' title='Agile A-Z Keynote'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-pZVq1Z32ZgA/Tpg4yRmXPtI/AAAAAAAAA-A/jOT9LeXGz34/s72-c/790.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-4526322030486403494</id><published>2011-10-13T08:30:00.004Z</published><updated>2011-10-13T08:35:23.360Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='lean'/><category scheme='http://www.blogger.com/atom/ns#' term='think team'/><title type='text'>Waiting work wall</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-MW1XDVYy7lk/Tpah8BcEf-I/AAAAAAAAA90/YVnCH_wjxfc/s1600/LeavesAndBricks.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://1.bp.blogspot.com/-MW1XDVYy7lk/Tpah8BcEf-I/AAAAAAAAA90/YVnCH_wjxfc/s200/LeavesAndBricks.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5662891634015371234" /&gt;&lt;/a&gt;

&lt;p&gt;
One of the things I do a lot when visiting software groups is simply sit with individuals as they work.
Sometimes the person I'm sitting next to is a really superb developer. 
They finish their work fast and to a high standard and hand the work on to the next person downstream.
This next person may also be really skilled but their work might just inherently take longer.
If the amount of work passed on exceeds the capacity of the next person
then a growing batch of work-waiting-to-be-started-by-the-next-person will naturally form and grow.
&lt;/p&gt;
&lt;br/&gt;
&lt;p&gt;
This batch of work-waiting-to-be-started-by-the-next-person is waste. That's well known and well written about. What's not so obvious and not so well written about is how it encourages silos to form. 
It literally forms a barrier between the increasingly separated silos that form on either side of it.
&lt;/p&gt;
&lt;br/&gt;
&lt;p&gt;
Think of each waiting-work-item as a brick in a wall. But not a long, low, queue-shaped wall that's easy to see over. Rather, a short, high wall. One that you can't see over. One that hinders communication. 
&lt;/p&gt;
&lt;br/&gt;
&lt;p&gt;
The amount of waiting-work between two silos is inversely proportional to the lack of communication between the two silos. The more waiting-work, the less the communication. The less communication the more waiting-work. Round and round it goes. 
&lt;/p&gt;
&lt;br/&gt;
&lt;p&gt;
So, if you have some really superb developers then beware. They might be creating a downstream wall of waiting-work around which silos are forming.
&lt;/p&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-4526322030486403494?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/4526322030486403494/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/10/waiting-work-wall.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/4526322030486403494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/4526322030486403494'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/10/waiting-work-wall.html' title='Waiting work wall'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-MW1XDVYy7lk/Tpah8BcEf-I/AAAAAAAAA90/YVnCH_wjxfc/s72-c/LeavesAndBricks.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-7624174973153214414</id><published>2011-10-12T11:28:00.003Z</published><updated>2011-10-12T11:31:07.270Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='deliberate practice'/><category scheme='http://www.blogger.com/atom/ns#' term='zen'/><title type='text'>Zen in the martial arts</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-Ze6mCg5SBUA/TpV6DMXpcFI/AAAAAAAAA9o/gsC_kPchDbI/s1600/ZenInTheMartialArts.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://1.bp.blogspot.com/-Ze6mCg5SBUA/TpV6DMXpcFI/AAAAAAAAA9o/gsC_kPchDbI/s200/ZenInTheMartialArts.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5662566301766873170" /&gt;&lt;/a&gt;

is an excellent book by Joe Hyams (isbn 0-87477-101-3). As usual I'm going to quote from a few pages

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
At least empty your cup and try.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Those who are patient in the trivial things in life and control themselves will one day have the same mastery in great and important things.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The martial artist develops through practice until it becomes mechanical and then spontaneous.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
When you lose your temper, you lose yourself - on the mat as well as in life.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The proper system is to think twice more. Patience is part of it. To avoid being intimidated - think more and react less.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Try softer. When one eye is fixed upon your destination, there is only one eye left with which to find the way.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
To know and to act are one and the same.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Relaxation and concentration go hand in hand. But too much concentration defeats itself.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Most of the time we generate our own fears, and this is especially true when we confront an unfamiliar situation that shatters confidence.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Years ago I thought too much about what I had to do, laboured over it, put off difficult chores, waited for the mood to be right or the creative juices to flow. Now I just do it without conscious effort. It flows because the work and I are one, and not in conflict with each other.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The only reason men fight is because they are insecure; one man needs to prove that he is better or stronger than another. The man who is secure within himself has no need  to prove anything with force, so he can walk away from a fight with dignity and pride.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-7624174973153214414?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/7624174973153214414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/10/zen-in-martial-arts.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/7624174973153214414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/7624174973153214414'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/10/zen-in-martial-arts.html' title='Zen in the martial arts'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-Ze6mCg5SBUA/TpV6DMXpcFI/AAAAAAAAA9o/gsC_kPchDbI/s72-c/ZenInTheMartialArts.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-1702480524752346077</id><published>2011-10-10T10:35:00.004Z</published><updated>2011-12-09T21:36:37.807Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='c and c++'/><title type='text'>C will live forever</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-88NIFADPLdA/TpLKw3V4CvI/AAAAAAAAA9g/HsVnN6G02sI/s1600/CProgrammingLanguage.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://4.bp.blogspot.com/-88NIFADPLdA/TpLKw3V4CvI/AAAAAAAAA9g/HsVnN6G02sI/s200/CProgrammingLanguage.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5661810622396369650" /&gt;&lt;/a&gt;

My good friend Olve Maudal said something the other day that caught my ear. He said C will never be replaced.
I think he's right. 
Languages like Java and Ruby are great languages when you don't need to get near to the metal.
But if you &lt;em&gt;do&lt;/em&gt; need to get near to the metal, then C has already filled that niche so well that it's hard to see it ever being replaced.
You might say that a language like C, but without C's penchant for undefined behaviour, could somehow replace C.
I don't think so. 
The point is that the sweet spot for a language designed to be used close to the metal is a language
 that deliberately does
&lt;em&gt;not&lt;/em&gt; get rid of its undefined behaviour.
Because that is part of it being in the sweet spot.
And besides, C has been around long enough that if a language was going to replace C wouldn't it already have happened?

&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-1702480524752346077?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/1702480524752346077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/10/c-will-live-forever.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/1702480524752346077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/1702480524752346077'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/10/c-will-live-forever.html' title='C will live forever'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-88NIFADPLdA/TpLKw3V4CvI/AAAAAAAAA9g/HsVnN6G02sI/s72-c/CProgrammingLanguage.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-7952899349582328849</id><published>2011-09-29T16:34:00.003Z</published><updated>2011-09-29T16:37:12.983Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='learning'/><category scheme='http://www.blogger.com/atom/ns#' term='change'/><category scheme='http://www.blogger.com/atom/ns#' term='think team'/><title type='text'>Situated learning - Legitimate peripheral participation</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-5-4CRXu6jaY/ToSeM5WhdBI/AAAAAAAAA9Y/F55CgLhWI6s/s1600/SituatedLearning.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://3.bp.blogspot.com/-5-4CRXu6jaY/ToSeM5WhdBI/AAAAAAAAA9Y/F55CgLhWI6s/s200/SituatedLearning.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5657820976275092498" /&gt;&lt;/a&gt;

is an excellent book by Jean Lave and Etienne Wenger (isbn 0-521-42374-0). As usual I'm going to quote from a few pages

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The world carries its own structure so that specificity always implies generality (and in this sense generality is not to be assimilated to abstractness).
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Reversing production steps has the effect of focusing the apprentice's attention first on the broad outlines…
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The fact that the work was done in an interaction between members opened it up to other members of the team.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
There is anecdotal evidence that where the circulation of knowledge among peers and near-peers is possible, it spreads exceedingly rapidly and effectively.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
A learning curriculum is thus characteristic of a community.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Understanding and experience are in constant interaction.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Mirroring the intricate relationship between using and understanding artefacts there is an interesting duality inherent in the concept of transparency. It combines the two characteristics of invisibility and visibility… It might be useful to give a sense of this interplay by analogy to a window. A window's invisibility is what makes it a window, that is, an object through which the outside world becomes visible. The very fact, however, that so many things can be seen through it makes the window itself highly visible, that is, very salient in a room, when compared to, say, a solid wall. Invisibility of mediating technologies is necessary for allowing focus on, and thus supporting visibility of, the subject matter.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-7952899349582328849?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/7952899349582328849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/09/situated-learning-legitimate-peripheral.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/7952899349582328849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/7952899349582328849'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/09/situated-learning-legitimate-peripheral.html' title='Situated learning - Legitimate peripheral participation'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-5-4CRXu6jaY/ToSeM5WhdBI/AAAAAAAAA9Y/F55CgLhWI6s/s72-c/SituatedLearning.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-472248826143774566</id><published>2011-09-29T16:14:00.005Z</published><updated>2011-09-29T16:39:57.129Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='visibility'/><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='change'/><category scheme='http://www.blogger.com/atom/ns#' term='fishing'/><title type='text'>World class match fishing</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-88fDCMs8CIw/ToSZa6UWteI/AAAAAAAAA9Q/2tLa37mxgAo/s1600/WorldClassMatchFishing.jpeg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 200px;" src="http://4.bp.blogspot.com/-88fDCMs8CIw/ToSZa6UWteI/AAAAAAAAA9Q/2tLa37mxgAo/s200/WorldClassMatchFishing.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5657815719494464994" /&gt;&lt;/a&gt;

is an excellent book by Kevin Ashurst (isbn 0-304-29729-1). As usual I'm going to quote from a few pages

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
I always try to visualise what is happening under the water, and the only concrete clues I can count on are the bites, or the lack of them.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
When loose-feeding for roach and dace, it always pays to shuffle the tackle when bites cease. Moving a shot an inch or two, or altering the depth slightly, works so frequently that one has to assume that the fish, as well as becoming wary because of their diminishing numbers, also get shy of baits coming to them in precisely the same way all the time.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Good loose-feeing is one of the key factors affecting success in match angling, and the difficulty of getting it right is one of the reasons why I set so much store by practising for big matches.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The starting point is the knowledge that you cannot scare fish away if they are not there to begin with.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
I always think fish behave a bit like birds. If you scatter breadcrumbs on a lawn the birds begin eating it from the edges, rarely alighting in the middle, and I reckon fish behave the same way.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The trick to drop fishing is to read the signs, and the most important one is getting a caster shelled or a maggot sucked without seeing a bite.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
A stick float is quite heavy in relation to its size, and at any sort of range we can cop for a splashy sort of strike. 
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The fish in shallow water tend to be shy. They usually come into the baited area, pick up a bait and bolt. 
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The original choice of float is obviously dictated by the distance to be cast and the conditions on the day, and the aim should be to achieve whatever distance is required &lt;em&gt;easily&lt;/em&gt;. It is better to overcast  and pull back than to fall short and have to cast again.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
It goes without saying that the kinds of bites we can expect depends entirely on the way the fish are behaving on the day, and how we are shotted in response to that behaviour.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
To be perfectly honest the appearance of my floats has never interested me. I never even thought about them in the artistic sense until Colin brought it up, but I suppose the answer lies under the general heading of ignoring everything which is not essential. I devote a lot of time, thought and energy to my fishing, but only to those departments which require time, thought and energy.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-472248826143774566?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/472248826143774566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/09/world-class-matchfishing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/472248826143774566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/472248826143774566'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/09/world-class-matchfishing.html' title='World class match fishing'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-88fDCMs8CIw/ToSZa6UWteI/AAAAAAAAA9Q/2tLa37mxgAo/s72-c/WorldClassMatchFishing.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-5277345321476524131</id><published>2011-09-29T14:18:00.013Z</published><updated>2011-10-07T14:58:37.112Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='cyberdojo'/><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><title type='text'>More CyberDojos</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-uWN86DDhrq8/ToR_E3WaQLI/AAAAAAAAA84/lX5EJMLSNio/s1600/TampereCyberDojo.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://4.bp.blogspot.com/-uWN86DDhrq8/ToR_E3WaQLI/AAAAAAAAA84/lX5EJMLSNio/s200/TampereCyberDojo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5657786753438335154" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-lg3SooZ6UV0/ToSBMgx-FFI/AAAAAAAAA9I/yM9ny9hdvC4/s1600/EricssonCyberDojo.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 113px;" src="http://3.bp.blogspot.com/-lg3SooZ6UV0/ToSBMgx-FFI/AAAAAAAAA9I/yM9ny9hdvC4/s200/EricssonCyberDojo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5657789083842122834" /&gt;&lt;/a&gt;

&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
I ran a &lt;a href="http://jonjagger.blogspot.com/p/cyberdojo.html"&gt;CyberDojo&lt;/a&gt; at the excellent &lt;a href="http://tamperegoesagile.fi/"&gt;Tampere goes Agile&lt;/a&gt; conference recently (left photo). 
It got a 100% green card vote.
&lt;br/&gt;
&lt;br/&gt;
A few days later I ran another CyberDojo for the devs at 
&lt;a href="http://www.solita.fi/"&gt;Solita Oy&lt;/a&gt;, also in Tampere. A nicer bunch of people you couldn't ask to meet.
&lt;br/&gt;
&lt;br/&gt;
And a few days after that I ran yet another CyberDojo at the Ericsson Agile conference in Helsinki (right photo). @jussikm @htaubert and @karmolis tweeted that it was the most fun they'd had at work in 2011.
&lt;br/&gt;
&lt;br/&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-5277345321476524131?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/5277345321476524131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/09/more-cyberdojos.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5277345321476524131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5277345321476524131'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/09/more-cyberdojos.html' title='More CyberDojos'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-uWN86DDhrq8/ToR_E3WaQLI/AAAAAAAAA84/lX5EJMLSNio/s72-c/TampereCyberDojo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-3231767693220755588</id><published>2011-09-29T14:10:00.006Z</published><updated>2011-10-07T14:57:43.488Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='cyberdojo'/><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='lean'/><title type='text'>ALE CyberDojo Ice Breaker</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-VN-sBkpGQLE/ToR8x48XaDI/AAAAAAAAA8w/m5Wu-C1kfAs/s1600/AleIceBreaker.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 195px;" src="http://1.bp.blogspot.com/-VN-sBkpGQLE/ToR8x48XaDI/AAAAAAAAA8w/m5Wu-C1kfAs/s200/AleIceBreaker.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5657784228425197618" /&gt;&lt;/a&gt;

I ran a mass-participation &lt;a href="http://jonjagger.blogspot.com/p/cyberdojo.html"&gt;CyberDojo&lt;/a&gt; "keynote" at the excellent &lt;a href="http://ale2011.eu/"&gt;ALE conference&lt;/a&gt; in Berlin recently. 10 laptops were setup with a Yahtzee refactoring exercise in Java. Over 200 people participated. The aim was &lt;em&gt;not&lt;/em&gt; to write code - it was to mix people up and get lots of energy into the conference right at the start. I think it worked very well.
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-3231767693220755588?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/3231767693220755588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/09/ale-cyberdojo-ice-breaker.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/3231767693220755588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/3231767693220755588'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/09/ale-cyberdojo-ice-breaker.html' title='ALE CyberDojo Ice Breaker'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-VN-sBkpGQLE/ToR8x48XaDI/AAAAAAAAA8w/m5Wu-C1kfAs/s72-c/AleIceBreaker.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-2938972016259918829</id><published>2011-09-24T09:01:00.004Z</published><updated>2011-09-24T19:08:08.155Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='listening'/><title type='text'>We are what we say</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-qZi1zbe7Psk/Tm9M6p3RZsI/AAAAAAAAA8Y/4IzoiKNwsQ4/s1600/ear.jpeg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 127px; height: 200px;" src="http://1.bp.blogspot.com/-qZi1zbe7Psk/Tm9M6p3RZsI/AAAAAAAAA8Y/4IzoiKNwsQ4/s200/ear.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5651820627927066306" /&gt;&lt;/a&gt;

Steven Fry wrote a piece for Radio Times about his new BBC2 series Fry's Planet Word.
The following snippets caught my attention. 
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Most social groupings of young people have their own private language, catchphrases and nicknames for people and processes.
&lt;/blockquote&gt;

&lt;br/&gt;

&lt;blockquote&gt;
All that bright individual verbal clothing is put away for the workplace and dull, pretentious verbal suits are worn in their place. Never was the word "suit" less... well... suitable. The memos, meetings and conferences of the workplace are couched in    
&lt;span title="agglomoration: jumbled collection or mass"&gt;agglomorations&lt;/span&gt; of phrases as soulless, bloodless, styleless and depressing as they grey carpets, strip lighting and hessian partitions that constitute their physical environment. Sick-building syndrome is now well understood, sick language syndrome perhaps less so.
&lt;/blockquote&gt;

&lt;br/&gt;

&lt;blockquote&gt;
We may be what we eat, but we most certainly are what we say.
&lt;/blockquote&gt;

&lt;br/&gt;
&lt;br/&gt;
They reminded me again of the importance of &lt;a href="http://jonjagger.blogspot.com/2011/09/precision-listening.html"&gt;precision listening&lt;/a&gt;.
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-2938972016259918829?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/2938972016259918829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/09/we-are-what-we-say.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/2938972016259918829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/2938972016259918829'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/09/we-are-what-we-say.html' title='We are what we say'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-qZi1zbe7Psk/Tm9M6p3RZsI/AAAAAAAAA8Y/4IzoiKNwsQ4/s72-c/ear.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-8247199661380570864</id><published>2011-09-21T10:07:00.004Z</published><updated>2011-09-21T10:10:44.742Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='visibility'/><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><title type='text'>Brain rules</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-DZ-5TxdILK0/Tnm3cr4bmEI/AAAAAAAAA8o/8et_6e8-Jis/s1600/BrainRules.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://1.bp.blogspot.com/-DZ-5TxdILK0/Tnm3cr4bmEI/AAAAAAAAA8o/8et_6e8-Jis/s200/BrainRules.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5654752510584002626" /&gt;&lt;/a&gt;

is an excellent book by John Medina (isbn 978-0-9797777-4-5). As usual I'm going to quote from a few pages

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Students learn better from words and pictures than from words alone. 
&lt;br/&gt;
Students learn better when corresponding words and pictures are presented simultaneously rather than successively. 
&lt;br/&gt;
Students learn better when corresponding words and pictures are presented near to each other rather than far apart on the page or screen. 
&lt;br/&gt;
Students learn better when extraneous material is excluded rather than included. 
&lt;br/&gt;
Students learn better from animation and narration than from animation an on-screen text.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
When the brain is fully working, it uses more energy per unit of tissue than a fully exercising quadricep.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Charles Darwin noted… the brains in wild animals were 15 to 30 percent larger than those of their tame, domestic counterparts.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Studies show that a person who is interrupted takes 50 percent longer to accomplish a task. Not only that, he or she makes up to 50 percent more errors.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Spaced learning is greatly superior to massed learning.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
A great deal of research shows that thinking or talking about an event &lt;em&gt;immediately after it has occurred&lt;/em&gt; enhances memory for that event.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Students are expected to known certain things by certain grades. Curiously absent from this model is how durable that learning remains after the student completes the grade.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
When people become sleep-deprived, their ability to utilise the food they are consuming falls by about one-third.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Sleep loss cripples thinking in just about every way you can measure thinking.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Vision is by far our most dominant sense, taking up half of our brain's resources.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-8247199661380570864?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/8247199661380570864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/09/brain-rules.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/8247199661380570864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/8247199661380570864'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/09/brain-rules.html' title='Brain rules'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-DZ-5TxdILK0/Tnm3cr4bmEI/AAAAAAAAA8o/8et_6e8-Jis/s72-c/BrainRules.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-6700759418384025777</id><published>2011-09-17T10:06:00.002Z</published><updated>2011-09-21T17:24:22.608Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='lean'/><category scheme='http://www.blogger.com/atom/ns#' term='systems thinking'/><title type='text'>All I need to know about manufacturing I learned in Joe's garage</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-wPALKVrVoqs/TnRxUBHu8cI/AAAAAAAAA8g/7pfDEYItmm4/s1600/JoesGarage.jpeg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 160px; height: 172px;" src="http://1.bp.blogspot.com/-wPALKVrVoqs/TnRxUBHu8cI/AAAAAAAAA8g/7pfDEYItmm4/s200/JoesGarage.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5653268020969009602" /&gt;&lt;/a&gt;

is an excellent book by William B. Miller and Vicki L. Schenk (isbn 0-9630439-3-5). As usual I'm going to quote from a few pages

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
I mumbled back something equally unintelligible, the traditional response to somebody whom you aren't sure you've met and whose name you aren't certain of.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
"Why is there such a conflict?" he asked. "Both departments are striving for the same thing, the good of the company. Why should they not work together?"
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
With all that volume flowing through his "factory," even the slightest unplanned act will ripple through everything else with a domino effect.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Fanatic: A person who redoubles his effort after having lost his direction.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
If you double the amount of equipment and tools in use, you must halve the failure rate simply to stay even.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Planning can be perfect - it's all theoretical. Execution can never be perfect - it involves real people using real tools on real material.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
People are expected to inspect their own work, both for function and to specification… Statistical and analytical charts are maintained on the production floor by workers, not by Quality Assurance people in a remote office.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Like most computer people would have, he had stayed close to his electronic toy rather than come to the garage to watch the production operation.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The finest carver does the least cutting.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Nobody ever tried harder under pressure.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
"know'why" in addition to "know-how"
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-6700759418384025777?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/6700759418384025777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/09/all-i-need-to-know-about-manufacturing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/6700759418384025777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/6700759418384025777'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/09/all-i-need-to-know-about-manufacturing.html' title='All I need to know about manufacturing I learned in Joe&apos;s garage'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-wPALKVrVoqs/TnRxUBHu8cI/AAAAAAAAA8g/7pfDEYItmm4/s72-c/JoesGarage.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-3453803719932580225</id><published>2011-09-14T12:16:00.006Z</published><updated>2011-09-14T12:49:05.212Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='unit testing'/><category scheme='http://www.blogger.com/atom/ns#' term='c and c++'/><title type='text'>Long test method names</title><content type='html'>&lt;span style="font-size:3em;"&gt;
Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch
&lt;/span&gt;
&lt;br/&gt;
&lt;br/&gt;

Writing good code is hard. For lots of reasons. One reason is the tension you try to balance when choosing identifiers.
On the one hand you want your identifiers to be longer to give you enough space to make them expressive.
But on the other hand you want your identifiers to be shorter so they don't balloon into monsters when combined into expressions.
For example:
&lt;pre class="code"&gt;
// too short
bool is_leap_year(int y)
{
    return y % 4 == 0 &amp;amp;&amp;amp; y % 100 != 0 || y % 400 == 0;
}

// too long
bool is_leap_year(int intYearValue)
{
    return intYearValue % 4 == 0 &amp;amp;&amp;amp; intYearValue % 100 != 0 || intYearValue % 400 == 0;
}

// just right, said Goldilocks
bool is_leap_year(int year)
{
    return year % 4 == 0 &amp;amp;&amp;amp; year % 100 != 0 || year % 400 == 0;
}
&lt;/pre&gt;

However, the names of your test methods are &lt;em&gt;not&lt;/em&gt; subject to this design tension. 
The names of your test methods should never be part of a larger expression. So loosen up! Feel free to use long test method names. Names that reflect the &lt;em&gt;specification&lt;/em&gt; not the implementation.

&lt;pre class="code"&gt;
// not like this
static void test_leap_year()
{
    assert(!is_leap_year(1999));
}

// like this
static void years_not_divisible_by_4_are_not_leap_years()
{
    assert(!is_leap_year(1999));
    assert(!is_leap_year(2001));
}
&lt;/pre&gt;

&lt;/br&gt;
&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-3453803719932580225?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/3453803719932580225/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/09/long-test-method-names.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/3453803719932580225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/3453803719932580225'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/09/long-test-method-names.html' title='Long test method names'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-4524017677393062401</id><published>2011-09-13T16:51:00.007Z</published><updated>2011-09-13T17:12:21.693Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='life of brian'/><category scheme='http://www.blogger.com/atom/ns#' term='ale'/><category scheme='http://www.blogger.com/atom/ns#' term='jerry-weinberg'/><category scheme='http://www.blogger.com/atom/ns#' term='listening'/><category scheme='http://www.blogger.com/atom/ns#' term='jokes'/><title type='text'>THE Secret of Scrum</title><content type='html'>This is another fragment of the ALE conference lightning talk I did. It again follows on from Jerry Weinberg's quote:

&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
No other observation skill may be more important to software engineering than precision listening.
&lt;/blockquote&gt;

&lt;br/&gt;
I've tried to become a much better listener in recent years. An active listener. One of the things I've noticed is that software developers are somewhat prone to treat things as being black and white. True or false. Right or wrong. This is perhaps not so surprising for several reasons. Anyway, the point of the clip is not really to poke fun at Scrum, but to highlight the use of the word &lt;em&gt;THE&lt;/em&gt;.

&lt;br/&gt;
&lt;br/&gt;

&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-b2d98d70c0cc8499" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;
&lt;param name="bgcolor" value="#FFFFFF"&gt;
&lt;param name="allowfullscreen" value="true"&gt;
&lt;param name="flashvars" value="flvurl=http://v3.nonxt3.googlevideo.com/videoplayback?id%3Db2d98d70c0cc8499%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1331471227%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D294A1060520A8DD0185E18E9B4D38D6EAA51A632.33F7A48CEFFA37A7AB330AA98378CC3CC7075FBD%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Db2d98d70c0cc8499%26offsetms%3D5000%26itag%3Dw160%26sigh%3DahLo1b8U_yx1laWB1q4mArCvXeA&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;
&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"
width="320" height="266" bgcolor="#FFFFFF"
flashvars="flvurl=http://v3.nonxt3.googlevideo.com/videoplayback?id%3Db2d98d70c0cc8499%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1331471227%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D294A1060520A8DD0185E18E9B4D38D6EAA51A632.33F7A48CEFFA37A7AB330AA98378CC3CC7075FBD%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Db2d98d70c0cc8499%26offsetms%3D5000%26itag%3Dw160%26sigh%3DahLo1b8U_yx1laWB1q4mArCvXeA&amp;autoplay=0&amp;ps=blogger"
allowFullScreen="true" /&gt;&lt;/object&gt;


&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-4524017677393062401?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=b2d98d70c0cc8499&amp;type=video/mp4' length='0'/><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/4524017677393062401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/09/secret-of-scrum.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/4524017677393062401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/4524017677393062401'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/09/secret-of-scrum.html' title='THE Secret of Scrum'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-4872483427871567854</id><published>2011-09-13T12:14:00.010Z</published><updated>2011-09-13T17:11:47.095Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ale'/><category scheme='http://www.blogger.com/atom/ns#' term='jerry-weinberg'/><category scheme='http://www.blogger.com/atom/ns#' term='listening'/><category scheme='http://www.blogger.com/atom/ns#' term='communication'/><category scheme='http://www.blogger.com/atom/ns#' term='failure'/><title type='text'>Precision Listening</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-qZi1zbe7Psk/Tm9M6p3RZsI/AAAAAAAAA8Y/4IzoiKNwsQ4/s1600/ear.jpeg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 127px; height: 200px;" src="http://1.bp.blogspot.com/-qZi1zbe7Psk/Tm9M6p3RZsI/AAAAAAAAA8Y/4IzoiKNwsQ4/s200/ear.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5651820627927066306" /&gt;&lt;/a&gt;

At the &lt;a href="http://ale2011.eu/"&gt;ALE conference&lt;/a&gt; I did a lightning talk. On my first slide I quoted this from Jerry Weinberg's 
&lt;a href="http://jonjagger.blogspot.com/2010/08/quality-software-management-vol-1.html"&gt;Quality Software Management Volume 1: Systems Thinking&lt;/a&gt;:
&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
As consultants, we've found that the quickest and surest way to classify organizations into similar patterns is by the way people think and communicate.
&lt;/blockquote&gt;
&lt;br/&gt;

On the second slide I quoted Jerry again (from the same book):
&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
No other observation skill may be more important to software engineering than precision listening.
&lt;/blockquote&gt;
&lt;br/&gt;

I was reminded of this a moment ago when someone cold-called me. I honestly don't remember what the person's name was or what they were selling. What I do remember is how the conversation started:

&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
Hello, Jon Jagger speaking.
&lt;/blockquote&gt;

&lt;br/&gt;

&lt;blockquote&gt;
Hello, can I speak to Jon Jagger please.
&lt;/blockquote&gt;


&lt;br/&gt;

Do you recognise this pattern? This response is pure waste. It does nothing but waste my time. After this response the one thing I know for sure is that they're &lt;em&gt;not listening to me&lt;/em&gt;. And if they're not listening to me why should I listen to them?

&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-4872483427871567854?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/4872483427871567854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/09/precision-listening.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/4872483427871567854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/4872483427871567854'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/09/precision-listening.html' title='Precision Listening'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-qZi1zbe7Psk/Tm9M6p3RZsI/AAAAAAAAA8Y/4IzoiKNwsQ4/s72-c/ear.jpeg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-5161767042401612103</id><published>2011-09-13T08:59:00.010Z</published><updated>2011-12-18T20:34:39.827Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='ale'/><category scheme='http://www.blogger.com/atom/ns#' term='systems thinking'/><category scheme='http://www.blogger.com/atom/ns#' term='flow'/><title type='text'>Flow = Speed x Density</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-sZjU_5ezNdM/Tm8bs5gu1SI/AAAAAAAAA8I/R9mdhfMtnhg/s1600/Flow.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/-sZjU_5ezNdM/Tm8bs5gu1SI/AAAAAAAAA8I/R9mdhfMtnhg/s320/Flow.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5651766515539563810" /&gt;&lt;/a&gt;

I attended the ALE conference in Berlin last week. It was excellent in many many ways. Lots of participants have 
&lt;a href="http://ale2011.eu/resources/"&gt;written blog entries&lt;/a&gt; and I thought I would write a short one about just one of the many things I thought was really great. It was the above graph which &lt;a href="http://availagility.co.uk/"&gt;Karl Scotland&lt;/a&gt; drew in his talk, The Science of Kanban.
&lt;br/&gt;
&lt;br/&gt;
Karl used this graph in the context of traffic. 
&lt;ul&gt;
&lt;li&gt;The green line is traffic Speed and it rises (to the right) from zero at the bottom left.&lt;/li&gt;
&lt;li&gt;The red line is traffic Density and it rises (to the left) from zero at the bottom right. &lt;/li&gt;
&lt;li&gt;The black line is traffic Flow and equals Speed x Density.&lt;/li&gt;
&lt;/ul&gt;
Speaking to Karl afterwards we discussed the analogy:
&lt;ul&gt;
&lt;li&gt;Speed = cycle time. The time it takes from the moment a piece of work enters the system to the time it gets to Done.&lt;/li&gt;
&lt;li&gt;Density = work in progress. The amount of work that has entered the system but hasn't yet got to Done.&lt;/li&gt;
&lt;/ul&gt;

Karl also pointed out two feedback loops.
&lt;ul&gt;
&lt;li&gt;
Start on the density line (red) at zero (bottom right) and increase the density (move up and to the left). For a while increasing the density increases the flow. Increasing the flow causes the density to reduce. Thus you have a stabilizing feedback loop helping to increase the flow.&lt;/li&gt;
&lt;li&gt;As you continue to increase the density you drop over the top of the flow-curve. &lt;/li&gt;
&lt;li&gt;Now as the density increases the flow decreases. And decreasing the flow causes the density to further increase. Thus you have a different destabilizing feedback loop helping to decrease the flow.&lt;/li&gt;
&lt;/ul&gt;

Simple and effective. Thank you Karl.
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-5161767042401612103?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/5161767042401612103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/09/flow-speed-x-density.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5161767042401612103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5161767042401612103'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/09/flow-speed-x-density.html' title='Flow = Speed x Density'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-sZjU_5ezNdM/Tm8bs5gu1SI/AAAAAAAAA8I/R9mdhfMtnhg/s72-c/Flow.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-6826705185846412487</id><published>2011-09-03T19:38:00.002Z</published><updated>2011-09-03T19:41:13.273Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='beauty'/><category scheme='http://www.blogger.com/atom/ns#' term='learning'/><title type='text'>The unknown craftsman</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-TY-67yWE_E0/TmKCgdJXfUI/AAAAAAAAA8A/WUDznoRCNXU/s1600/TheUnknownCraftsman.jpeg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 149px; height: 200px;" src="http://1.bp.blogspot.com/-TY-67yWE_E0/TmKCgdJXfUI/AAAAAAAAA8A/WUDznoRCNXU/s200/TheUnknownCraftsman.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5648220376767364418" /&gt;&lt;/a&gt;


is an excellent book by Sōetsu Yanagi
 (isbn 0-87011-948-6). As usual I'm going to quote from a few pages

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The good artist or craftsman has no personal pride.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Seeing relates to the concrete, knowing to the abstract.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
To divine the significance of pattern is the same as to understand beauty itself.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
A pattern is both true to nature and artificial.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
If the material is poor the pattern will suffer.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
By and large, good pattern is of communal parentage.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Beauty must have some room, must be associated with freedom.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The &lt;i&gt;Theologica Germanica&lt;/i&gt;, written in the fourteenth century, tells is: "He would know before he believeth cometh never to true knowledge". Applied to the perception of beauty, this means that if a man employs the function of knowing before seeing, his power is impaired.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Intuition is the power of seeing &lt;em&gt;at this very moment&lt;/em&gt;.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The thing shines, not the maker.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
They are made without obsessive consciousness of beauty; thus we catch a glimpse of what is meant by "no-mindedness", whereby all things become simplified, natural, and without contrivance.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-6826705185846412487?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/6826705185846412487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/09/unknown-craftsman.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/6826705185846412487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/6826705185846412487'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/09/unknown-craftsman.html' title='The unknown craftsman'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-TY-67yWE_E0/TmKCgdJXfUI/AAAAAAAAA8A/WUDznoRCNXU/s72-c/TheUnknownCraftsman.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-5523082747705796099</id><published>2011-08-29T14:14:00.007Z</published><updated>2011-08-30T07:40:51.242Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='fishing'/><title type='text'>Wye Barbel</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-zZ_CLNS2Gsw/Tlu6emhEpoI/AAAAAAAAA74/gOQ3ZBunmnE/s1600/CroppedBiggerBarbel.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 210px;" src="http://4.bp.blogspot.com/-zZ_CLNS2Gsw/Tlu6emhEpoI/AAAAAAAAA74/gOQ3ZBunmnE/s320/CroppedBiggerBarbel.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5646311592737154690" /&gt;&lt;/a&gt;


Just back from two fantastic days fishing on the River Wye with my mate Brian on the 
&lt;a href="http://www.wyeuskfoundation.org/"&gt;Wye and Usk Foundation&lt;/a&gt;
&lt;a href="http://www.wyeuskfoundation.org/fishing/obs/beat_details.php?beat=lowercourtfield"&gt;Wyebank&lt;/a&gt; and 
&lt;a href="http://www.wyeuskfoundation.org/fishing/obs/beat_details.php?beat=courtfield"&gt;Courtfield&lt;/a&gt; beats.
He caught this 11 lb'er - a new personal best.
We can't wait to go back.
&lt;br/&gt;
&lt;br/&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-5523082747705796099?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/5523082747705796099/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/08/wye-barbel.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5523082747705796099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5523082747705796099'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/08/wye-barbel.html' title='Wye Barbel'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-zZ_CLNS2Gsw/Tlu6emhEpoI/AAAAAAAAA74/gOQ3ZBunmnE/s72-c/CroppedBiggerBarbel.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-8796306032331124260</id><published>2011-08-29T06:55:00.004Z</published><updated>2012-01-10T21:44:52.236Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='courage'/><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='feedback'/><category scheme='http://www.blogger.com/atom/ns#' term='failure'/><title type='text'></title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-gwCyIftba4I/Tls4L-JTnCI/AAAAAAAAA7o/L8-YPpkantg/s1600/TheAlchemist.jpeg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 129px; height: 200px;" src="http://4.bp.blogspot.com/-gwCyIftba4I/Tls4L-JTnCI/AAAAAAAAA7o/L8-YPpkantg/s200/TheAlchemist.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5646168336150797346" /&gt;&lt;/a&gt;

is an excellent book by Paulo Coelho (isbn 978-0-7225-3293-5). As usual I'm going to quote from a few pages

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
"This is the first phase of the job," he said. "I have to separate out the sulphur. To do that successfully, I must have no fear of failure. It was my fear of failure that first kept me from attempting the Master Work.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
"But arms cannot be drawn unless they also go into battle. Arms are as capricious as the desert, and, if they are not used, the next time they might not function."
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
"I had to test you courage," the stranger said. "Courage is the quality most essential to understanding the Language of the World."
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
"It is not what enters men's mouths that's evil," said the alchemist. "It is what comes out of their mouths that is."
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
"Tomorrow, sell your camel and buy a horse. Camels are traitorous: they walk thousands of paces and they never seem to tire. Then suddenly, they kneel and die. But horses tire bit by bit. You always know how much you can ask of them, and when it is that they are about to die."
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
"There is only one way to learn," the alchemist answered. "It is through action."
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-8796306032331124260?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/8796306032331124260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/08/is-excellent-book-by-paul-coelho-isbn.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/8796306032331124260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/8796306032331124260'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/08/is-excellent-book-by-paul-coelho-isbn.html' title=''/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-gwCyIftba4I/Tls4L-JTnCI/AAAAAAAAA7o/L8-YPpkantg/s72-c/TheAlchemist.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-2319242564865148603</id><published>2011-08-18T10:28:00.001Z</published><updated>2011-08-18T10:30:38.455Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='feedback'/><category scheme='http://www.blogger.com/atom/ns#' term='jerry-weinberg'/><category scheme='http://www.blogger.com/atom/ns#' term='systems thinking'/><title type='text'>Quality Software Management. Vol 1. Systems Thinking</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_u9orsdHAiCg/TF_jzUwG76I/AAAAAAAAAe8/o74tfp8mXko/s1600/QSMvol1.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://1.bp.blogspot.com/_u9orsdHAiCg/TF_jzUwG76I/AAAAAAAAAe8/o74tfp8mXko/s200/QSMvol1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5503367740553359266" /&gt;&lt;/a&gt;


is an excellent book by &lt;a href="http://jonjagger.blogspot.com/p/jerry-weinberg.html"&gt;Jerry Weinberg&lt;/a&gt; (isbn 0-932633-22-6). This is the second snippet review for this book (&lt;a href="http://jonjagger.blogspot.com/2010/08/quality-software-management-vol-1.html"&gt;here's the first&lt;/a&gt;).
As usual I'm going to quote from a few pages:

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
A locked-on system tends to hold itself to an existing pattern, even against logical reasons to change. … Lock-ons occur in clusters.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
We particularly look for the degree of congruence between what is said and what is done.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The quickest and surest way to classify organisations into similar patterns is by the way people think and communicate.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The feedback model says you can't successfully control anything for very long without information.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
errors - deviations from requirements that give you information to control the system.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The treatment of error as a source of valuable information is precisely what distinguishes the feedback (error-controlled) system from its less capable predecessors and thus distinguishes Steering software cultures from Patterns 1 [Variable] and 2 [Routine].
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
If the technical reviews are not detecting a lot of mistakes it could mean that … the system is working very well.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Late modules tend to be fault prone modules.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The more modular you make the system, the fewer side effects you need to consider. You trade for this effect by creating modularity faults, or faults in the interaction between modules. You never get something for nothing.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Feedback must operate in small increments, at all levels - personal, product, process, and cultural.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
In such a system it is meaningless to ask who is controlling whom?
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;

&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-2319242564865148603?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/2319242564865148603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/08/quality-software-management-vol-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/2319242564865148603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/2319242564865148603'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/08/quality-software-management-vol-1.html' title='Quality Software Management. Vol 1. Systems Thinking'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_u9orsdHAiCg/TF_jzUwG76I/AAAAAAAAAe8/o74tfp8mXko/s72-c/QSMvol1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-1676561820135318646</id><published>2011-08-15T07:00:00.000Z</published><updated>2011-08-15T07:00:01.911Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='jerry-weinberg'/><title type='text'>It's not the event that counts...</title><content type='html'>In Quality Software Management volume 1 Systems Thinking, Jerry Weinberg writes (on page 111)
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
 "It's not the event that counts, it's your reaction to the event". 
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
A bit later, on page 124 Jerry writes something which I've read several times before but for some reason this morning it really spoke to me.
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Tools do not determine how they will be used. Therefore it's not the tool that counts, it's your reaction to the tool. Programming tools can be used to program without understanding, or they can be used to free the programmer's mind and hands for tasks that can't be made routine.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
Jerry finishes the paragraph with:
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Pattern 2 (Routine) managers buy tools to force programmers to work in standard ways.
Pattern 3 (Steering) managers manage tools to empower programmers to work in effective ways.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;

&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-1676561820135318646?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/1676561820135318646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/08/its-not-event-that-counts.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/1676561820135318646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/1676561820135318646'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/08/its-not-event-that-counts.html' title='It&apos;s not the event that counts...'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-4338367037994233872</id><published>2011-08-12T05:59:00.000Z</published><updated>2011-08-12T06:10:43.636Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='feedback'/><category scheme='http://www.blogger.com/atom/ns#' term='jerry-weinberg'/><category scheme='http://www.blogger.com/atom/ns#' term='learning'/><category scheme='http://www.blogger.com/atom/ns#' term='congruence'/><title type='text'>What Did You Say?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_u9orsdHAiCg/TCCgCV2DAgI/AAAAAAAAAbE/HiUO6tHgq6E/s1600/DSC00388.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://3.bp.blogspot.com/_u9orsdHAiCg/TCCgCV2DAgI/AAAAAAAAAbE/HiUO6tHgq6E/s200/DSC00388.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5485560308221280770" /&gt;&lt;/a&gt;

is an excellent book (subtitled The Art of Giving and Receiving Feedback) co-authored by 
&lt;a href="http://jonjagger.blogspot.com/p/jerry-weinberg.html"&gt;Jerry Weinberg&lt;/a&gt;
 (isbn 0-924771-33-X). As usual I'm going to quote from a few pages. I know I've snippeted this book &lt;a href="http://jonjagger.blogspot.com/2010/06/what-did-you-say.html"&gt;before&lt;/a&gt;, but I read it again and a really good book deserves a repeat snippet. For the past year or so I've deliberately been re-reading books I've already read rather than reading new ones.

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Cybernetics tells us that feedback is a relationship between two systems. ... you're a system too.
&lt;/blockquote&gt;

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
A lot of our fear of telling them comes from inexperience, or rather experience at giving feedback poorly and then getting a poor result. But getting a poor result is is such a terrible experience only if we have a perfection rule.
&lt;/blockquote&gt;

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Over time, the process of sorting creates an environment that will not provide feedback that leads to change.
&lt;/blockquote&gt;

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
In other words, it's not so much the feedback that counts, but the struggle to get it - not the feedback, but the feeding-back.
&lt;/blockquote&gt;

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
If you keep doing the same thing why do you expect them to change what they're doing?
&lt;/blockquote&gt;

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Say what you saw and heard.
&lt;/blockquote&gt;

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
If mistakes are not acceptable, learning is not possible.
&lt;/blockquote&gt;

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Learning is what feedback is all about.
&lt;/blockquote&gt;

&lt;br/&gt;
&lt;br/&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-4338367037994233872?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/4338367037994233872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/08/what-did-you-say.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/4338367037994233872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/4338367037994233872'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/08/what-did-you-say.html' title='What Did You Say?'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_u9orsdHAiCg/TCCgCV2DAgI/AAAAAAAAAbE/HiUO6tHgq6E/s72-c/DSC00388.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-4992707561409642450</id><published>2011-08-10T20:52:00.004Z</published><updated>2011-08-10T21:00:48.616Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='deliberate practice'/><category scheme='http://www.blogger.com/atom/ns#' term='visibility'/><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='coaching'/><category scheme='http://www.blogger.com/atom/ns#' term='feedback'/><category scheme='http://www.blogger.com/atom/ns#' term='the princess bride'/><category scheme='http://www.blogger.com/atom/ns#' term='97 things'/><category scheme='http://www.blogger.com/atom/ns#' term='systems thinking'/><title type='text'>QCon Deliberate Practice video</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_u9orsdHAiCg/TJaGwXu1qkI/AAAAAAAAAiQ/wlOFVFI5hTc/s1600/filmreel.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 160px;" src="http://3.bp.blogspot.com/_u9orsdHAiCg/TJaGwXu1qkI/AAAAAAAAAiQ/wlOFVFI5hTc/s200/filmreel.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5518746558951434818" /&gt;&lt;/a&gt;

Videos are like buses. None for ages then two come along at once. I did 
&lt;a href="http://www.infoq.com/presentations/Deliberate-Practice"&gt;this talk, on Deliberate Practice&lt;/a&gt; 
at the QCon conference in London earlier in the year (it's only just been put online).
It's an extension of my &lt;a href="http://jonjagger.blogspot.com/2011/02/deliberate-practice.html"&gt;97 Things Every Programmer Should Know entry&lt;/a&gt;.
&lt;br/&gt;
&lt;br/&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-4992707561409642450?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/4992707561409642450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/08/qcon-deliberate-practice-video.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/4992707561409642450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/4992707561409642450'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/08/qcon-deliberate-practice-video.html' title='QCon Deliberate Practice video'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_u9orsdHAiCg/TJaGwXu1qkI/AAAAAAAAAiQ/wlOFVFI5hTc/s72-c/filmreel.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-6092888272405714157</id><published>2011-08-06T16:10:00.009Z</published><updated>2011-09-12T07:19:51.159Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='visibility'/><category scheme='http://www.blogger.com/atom/ns#' term='feedback'/><category scheme='http://www.blogger.com/atom/ns#' term='time'/><category scheme='http://www.blogger.com/atom/ns#' term='communication'/><category scheme='http://www.blogger.com/atom/ns#' term='97 things'/><category scheme='http://www.blogger.com/atom/ns#' term='fishing'/><category scheme='http://www.blogger.com/atom/ns#' term='think team'/><category scheme='http://www.blogger.com/atom/ns#' term='systems thinking'/><category scheme='http://www.blogger.com/atom/ns#' term='failure'/><title type='text'>In the brain of me</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_u9orsdHAiCg/TJaGwXu1qkI/AAAAAAAAAiQ/wlOFVFI5hTc/s1600/filmreel.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 160px;" src="http://3.bp.blogspot.com/_u9orsdHAiCg/TJaGwXu1qkI/AAAAAAAAAiQ/wlOFVFI5hTc/s200/filmreel.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5518746558951434818" /&gt;&lt;/a&gt;

&lt;a href="http://skillsmatter.com/podcast/agile-testing/wish-id-known" target="_blank"&gt;Here's a video&lt;/a&gt; of the SkillsMatter talk I did on Thursday, titled "Stuff I'm starting to know now that I really wish I'd known 20 years ago".
Its loosely based on the theme of &lt;a href="http://programmer.97things.oreilly.com/wiki/index.php/Make_the_Invisible_More_Visible"&gt;Making The Invisible More Visible&lt;/a&gt;, one of my entries from the book, 97 Things Every Programmer Should Know. I completely botched what I was trying to say about courage. What I was trying to say was that &lt;a href="http://jonjagger.blogspot.com/2011/02/courage.html"&gt;courage is not the absence of fear&lt;/a&gt;.
&lt;br/&gt;
&lt;br/&gt;
My &lt;a href="http://jonjagger.blogspot.com/2010/09/in-brain-of-jon-jagger-deliberate.html"&gt;other SkillsMatter talk&lt;/a&gt; was based on &lt;a href="http://jonjagger.blogspot.com/2011/02/deliberate-practice.html"&gt;Do More Deliberate Practice&lt;/a&gt; my other entry in the 97 Things Book. 
&lt;br/&gt;
&lt;br/&gt;
This was the first run of quite a lot of new material so I was quite nervous, but I felt most of it went very well.
Here's some of the feedback.

&lt;ul&gt;
&lt;li&gt;Fun, informative, useful&lt;/li&gt;
&lt;li&gt;An interesting brain dump&lt;/li&gt;
&lt;li&gt;Entertaining and enlightening&lt;/li&gt;
&lt;li&gt;Very good. Thoughtful and interesting&lt;/li&gt;
&lt;li&gt;Great content - very interesting&lt;/li&gt;
&lt;li&gt;Great laid back presentation&lt;/li&gt;
&lt;li&gt;Interesting ideas and great presentation to go with it&lt;/li&gt;
&lt;li&gt;Well planned presentation, not just your standard powerpoint&lt;/li&gt;
&lt;li&gt;Very good talk. Inspiring&lt;/li&gt;
&lt;li&gt;Very interactive and well explained&lt;/li&gt;
&lt;li&gt;Clear explanations, good analogies, funny&lt;/li&gt;
&lt;li&gt;Fantastic&lt;/li&gt;
&lt;li&gt;Very good. Passionate speaker. Good insights&lt;/li&gt;
&lt;/ul&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-6092888272405714157?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/6092888272405714157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/08/in-brain-of-me.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/6092888272405714157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/6092888272405714157'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/08/in-brain-of-me.html' title='In the brain of me'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_u9orsdHAiCg/TJaGwXu1qkI/AAAAAAAAAiQ/wlOFVFI5hTc/s72-c/filmreel.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-4851753630022978844</id><published>2011-08-05T12:53:00.002Z</published><updated>2011-08-05T13:14:46.557Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='jerry-weinberg'/><category scheme='http://www.blogger.com/atom/ns#' term='learning'/><category scheme='http://www.blogger.com/atom/ns#' term='leadership'/><title type='text'>Becoming a Technical Leader</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_u9orsdHAiCg/S9Fn5Q_0w-I/AAAAAAAAASY/KSCVa1IH0rA/s1600/BecomingATechnicalLeader.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://1.bp.blogspot.com/_u9orsdHAiCg/S9Fn5Q_0w-I/AAAAAAAAASY/KSCVa1IH0rA/s200/BecomingATechnicalLeader.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5463262056489993186" /&gt;&lt;/a&gt;

is an excellent book by Jerry Weinberg (isbn 0-932633-02-1). As usual I'm going to quote from a few pages. I know I've snippeted this book &lt;a href="http://jonjagger.blogspot.com/2009/11/becoming-technical-leader.html"&gt;before&lt;/a&gt;, but I read it again and a really good book deserves a repeat snippet. 

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
From working with systems, I have learned that the process of change is always organic.
&lt;/blockquote&gt;

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Organic models may be characterized by "systems thinking": the belief that event X is the outcome of hundreds of other factors, including the passage of time. 
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
People improve their performance not by amputating their old behaviors, but by adding new ones.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
There are many technical workers who enjoy wandering so much that, like Alice in Wonderland, they don't much care where they go, so long as they get somewhere. Computer programmers call this process "hacking"
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
In front of each plateau is a ravine.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Probably the most widespread and pernicious myth about leadership is that only Leaders can lead, where the capital L indicates that someone has been &lt;em&gt;appointed&lt;/em&gt; to the position of leadership. ... It's only in threat/reward models that leadership and management are synonymous.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
You can develop your ability to see and hear more effectively.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
People aren't used to thinking in terms of relationships.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
I first look for personal power, which can be converted into almost anything.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Break down big learnings into a sequence of little ones, pay attention to the efficiency if your educational strategies, and become aware of your emotional reaction to learning.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-4851753630022978844?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/4851753630022978844/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/08/becoming-technical-leader.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/4851753630022978844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/4851753630022978844'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/08/becoming-technical-leader.html' title='Becoming a Technical Leader'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_u9orsdHAiCg/S9Fn5Q_0w-I/AAAAAAAAASY/KSCVa1IH0rA/s72-c/BecomingATechnicalLeader.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-2265625191388909496</id><published>2011-07-30T07:28:00.005Z</published><updated>2011-07-30T07:42:20.243Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='cyberdojo'/><title type='text'>CyberDojos</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-O5OehY-j5_k/TjO1tDmTA0I/AAAAAAAAA7g/uIZRckERYls/s1600/CyberDojo.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 112px;" src="http://1.bp.blogspot.com/-O5OehY-j5_k/TjO1tDmTA0I/AAAAAAAAA7g/uIZRckERYls/s320/CyberDojo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5635047344435299138" /&gt;&lt;/a&gt;


I've run a couple more CyberDojo's recently. The first was with Kevlin Henney during an onsite run of our 
&lt;a href="http://www.masteringagilepractice.com/"&gt;Mastering Agile Practice&lt;/a&gt; course for commasoft in Bonn, Germany.
&lt;br/&gt;
&lt;br/&gt;
The second was for Mott MacDonald, in Croydon, England. 
Here's some feedback from the sessions:

&lt;ul&gt;
&lt;li&gt;an awesome afternoon!&lt;/li&gt;
&lt;li&gt;It has been the single most useful training exercises I have attended at motts.&lt;/li&gt;
&lt;li&gt;it was an excellent team building exercise and a fun introduction to some development concepts we're not familiar with, in particular pair programming and test driven development, but also the concept of 'deliberate practice'.&lt;/li&gt;
&lt;li&gt;helped improve the cooperation within the team&lt;/li&gt;
&lt;li&gt;Great!&lt;/li&gt;
&lt;li&gt;I want more Dojos&lt;/li&gt;
&lt;/ul&gt;

&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-2265625191388909496?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/2265625191388909496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/07/cyberdojos.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/2265625191388909496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/2265625191388909496'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/07/cyberdojos.html' title='CyberDojos'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-O5OehY-j5_k/TjO1tDmTA0I/AAAAAAAAA7g/uIZRckERYls/s72-c/CyberDojo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-2923709070647459605</id><published>2011-07-28T20:18:00.013Z</published><updated>2011-07-29T08:19:52.615Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='deliberate practice'/><category scheme='http://www.blogger.com/atom/ns#' term='cyberdojo'/><category scheme='http://www.blogger.com/atom/ns#' term='unit testing'/><category scheme='http://www.blogger.com/atom/ns#' term='c and c++'/><title type='text'>Tests as specifications</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-1tjKAlnxh-M/TjHL58O1x0I/AAAAAAAAA7Q/zUzxIW3kMGs/s1600/Yahtzee.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 100px; height: 75px;" src="http://4.bp.blogspot.com/-1tjKAlnxh-M/TjHL58O1x0I/AAAAAAAAA7Q/zUzxIW3kMGs/s200/Yahtzee.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5634508805098555202" /&gt;&lt;/a&gt;


The other day I was doing the yahtzee kata in C in &lt;a href="http://www.cyber-dojo.com"&gt;CyberDojo&lt;/a&gt; and I got caught (not for the first time) by a classic gotcha...
&lt;br/&gt;
&lt;br/&gt;
I wrote my tests very very simply as follows:

&lt;br/&gt;
&lt;br/&gt;
&lt;pre class="code"&gt;

...
static void two_pairs_scored_as_one_pair_is_spots_on_highest_pair(void)
{
    assert(...);
}

static void full_house_scored_as_one_pair_is_spots_on_the_pair(void)
{
    assert(...);
}
...

typedef void test(void);

static test * tests[] =
{
    two_pairs_scored_as_one_pair_is_spots_on_highest_pair,
    full_house_scored_as_one_pair_is_spots_on_the_pair,
    ...,
    NULL,
};

int main(void)
{
    for (int at = 0; tests[at] != NULL; at++)
        tests[at]();
    return 0;
}
&lt;/pre&gt;
&lt;br/&gt;
&lt;br/&gt;
I wrote another test and hit the Run-Tests button. But the new test didn't get run because I'd forgotten to add the name of the function to the &lt;code&gt;tests&lt;/code&gt; array. Ooops. The new test compiled ok, and I'd tripped up thinking the test was passing when it wasn't even being run. 
&lt;br/&gt;
&lt;br/&gt;
I've practised in CyberDojo enough that I don't get "sucked into the code" as much as I used to and when something like that happens there's now a fair chance I'll have enough awareness to notice it as it happens.
&lt;br/&gt;
&lt;br/&gt;
I stopped and thought about what had happened for a moment and I realized something. My problem was that I was writing the test function definition first. I should be writing the &lt;em&gt;name&lt;/em&gt; of the test in the &lt;code&gt;tests&lt;/code&gt; array first. And only once I've done that should I define it. There is a nice echo of the idea of Test &lt;em&gt;First&lt;/em&gt; Design to this. 
&lt;br/&gt;
&lt;br/&gt;
Of course in a language with reflection you only need to write the test function. Be that as it is, I like the the way the contents of the &lt;code&gt;tests&lt;/code&gt; array lists the function names &lt;em&gt;as specifications&lt;/em&gt;. In a language with reflection you don't get that.
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-2923709070647459605?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/2923709070647459605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/07/tests-as-specifications.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/2923709070647459605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/2923709070647459605'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/07/tests-as-specifications.html' title='Tests as specifications'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-1tjKAlnxh-M/TjHL58O1x0I/AAAAAAAAA7Q/zUzxIW3kMGs/s72-c/Yahtzee.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-5536533606929547364</id><published>2011-07-27T10:37:00.001Z</published><updated>2011-07-30T08:16:54.821Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='jerry-weinberg'/><category scheme='http://www.blogger.com/atom/ns#' term='change'/><title type='text'>The Secrets of Consulting</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_u9orsdHAiCg/S9Fnq7W1ZnI/AAAAAAAAASQ/ATTiweMljmI/s1600/TheSecretsOfConsulting.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://4.bp.blogspot.com/_u9orsdHAiCg/S9Fnq7W1ZnI/AAAAAAAAASQ/ATTiweMljmI/s200/TheSecretsOfConsulting.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5463261810162755186" /&gt;&lt;/a&gt;

is an excellent book by Jerry Weinberg (isbn 0-0-932633-01-3). As usual I'm going to quote from a few pages. I know I've snippeted this book &lt;a href="http://jonjagger.blogspot.com/2009/09/secrets-of-consulting.html"&gt;before&lt;/a&gt;, but I read it again and a really good book deserves a repeat snippet. 

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Consultants deal in change.
&lt;/blockquote&gt;

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Consulting is the art of influencing people at their request.
&lt;/blockquote&gt;

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
..there is the problem of balancing certainty now versus uncertainty in the future.
&lt;/blockquote&gt;

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Consultants are less adapted to the present situation, and therefore are potentially more adaptable.
&lt;/blockquote&gt;

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The toughest problems don't come in neatly labelled packages. Or they come in packages with the wrong labels.
&lt;/blockquote&gt;

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The bigness is not the horse.
&lt;/blockquote&gt;

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The true expert can see multiple aspects of a situation, but the novice sees only... whatever is most conspicuous.
&lt;/blockquote&gt;

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
We all know that things tend to fall between cracks and that cracks occur at boundaries, where one system joins another.
&lt;/blockquote&gt;

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
For a trigger to be effective, the timing must be perfect: Too late means you're already committed to the troublesome action, while too early means you may forget again betwixt the cup and the lip.
&lt;/blockquote&gt;

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
There are always opportunities to jiggle.
&lt;/blockquote&gt;

&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-5536533606929547364?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/5536533606929547364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/07/secrets-of-consulting.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5536533606929547364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5536533606929547364'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/07/secrets-of-consulting.html' title='The Secrets of Consulting'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_u9orsdHAiCg/S9Fnq7W1ZnI/AAAAAAAAASQ/ATTiweMljmI/s72-c/TheSecretsOfConsulting.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-3963868083068223496</id><published>2011-07-26T09:41:00.002Z</published><updated>2011-07-26T09:41:00.787Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>Six memos for the next millenium</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-VVwb0w4lxGU/Tik35aqh8tI/AAAAAAAAA64/ldGRxQQHzUE/s1600/SixMemos.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://2.bp.blogspot.com/-VVwb0w4lxGU/Tik35aqh8tI/AAAAAAAAA64/ldGRxQQHzUE/s200/SixMemos.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5632094268553294546" /&gt;&lt;/a&gt;

is an excellent book by Italo Calvino (isbn 0-099-73051-0). As usual I'm going to quote from a few pages

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Lightness for me goes with precision and determination, not with vagueness and the haphazard... (One should be light like a bird and not like a feather)...
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
... even correctness of style is a question of quick adjustment, of agility of both thought and expression.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
... each value or virtue I chose as the subject for my lecture does not exclude its opposite.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Poetry is the great enemy of chance, in spite of also being a daughter of chance.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
On folio 265 of the Codex Atlanticus, Leonardo begins to jot down evidence to prove a theory of the growth of the earth. After giving examples of buried cities swallowed up by the soil, he goes on to the marine fossils found in the mountains and in particular to certain bones that he supposes must have belonged to an antediluvian sea monster. At this moment his imagination must have been caught by a vision of the immense animal as it was swimming among the waves. At any rate, he turns the page upside down and tries to capture the image of the animal, three times attempting a sentence that will convey all the wonder of that evocation.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
It is useless at every circle to invent a new form of metarepresentation.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
What tends to emerge from the great novels of the twentieth century is the idea of an &lt;em&gt;open&lt;/em&gt; encyclopedia, an adjective that certainly contradicts the noun &lt;em&gt;encyclopedia&lt;/em&gt;, which etymologically implies an attempt to exhaust knowledge of the world by enclosing it in a circle.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
There is a type of work that, in the attempt to contain everything possible, does not manage to take on a form, to create outlines for itself, and so remains incomplete by its very nature.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
... the collection of objects of which only one specimen exists.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The classical author who wrote his tragedy observing a certain number of known rules is freer that the poet who writes down whatever comes into his head and is slave to other rules of which he knows nothing.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-3963868083068223496?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/3963868083068223496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/07/six-memos-for-next-millenium.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/3963868083068223496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/3963868083068223496'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/07/six-memos-for-next-millenium.html' title='Six memos for the next millenium'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-VVwb0w4lxGU/Tik35aqh8tI/AAAAAAAAA64/ldGRxQQHzUE/s72-c/SixMemos.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-5420353826520031433</id><published>2011-07-25T09:15:00.001Z</published><updated>2011-07-25T09:15:00.162Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='change'/><category scheme='http://www.blogger.com/atom/ns#' term='failure'/><category scheme='http://www.blogger.com/atom/ns#' term='abstraction'/><title type='text'>Synectics</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-IljU3mnFI9s/Tikx8lhH8gI/AAAAAAAAA6w/uIF6DS-lx-4/s1600/Synectics.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://1.bp.blogspot.com/-IljU3mnFI9s/Tikx8lhH8gI/AAAAAAAAA6w/uIF6DS-lx-4/s200/Synectics.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5632087725936472578" /&gt;&lt;/a&gt;

is an excellent book by William J.J. Gordon (isbn 978-0060324308). As usual I'm going to quote from a few pages

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The word Synectics, from the Greek, means the joining together of different and apparently irrelevant elements.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Abstraction breeds more abstraction and more generality instead of leading to tough yes-no tests.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Words like intuition, empathy, and play are merely names put to complex activities in the hope that the naming of the activity will in fact describe it.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Human beings are heir to a legacy of frozen words and ways of perceiving which wrap their world in comfortable familiarity.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Synectics theory agrees with the conviction that a man does not know even his own science if he knows &lt;em&gt;only&lt;/em&gt; it.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
"All the crappy solutions in the world have been rationalized by deadlines."
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
He refused to recognize the fact that his search for the perfect problem was a way of avoiding failure in solving a less perfect one.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Invention is akin to painting for in practice, the element being constructed has the capacity to tell the builder what the next step should be. In invention this is much more critical than in engineering because the inventor is always attempting to do something new.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
When this forgetfulness is formalized into a methodology, it reinforces the rejection of the commonplace.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Organic functions are unfinished, cylical, and self-reproductive... Synthetic functions are complete and more obviously subject to decay.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Conventions as abstractions from reality constitute a virtually complete and unassailable pattern, whereas the commonplace is infinitely repatternable.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The child who asks: "What's that funny noise?" is told the noise is thunder in such a way that speculation is supposed to stop... But naming the noise does not describe it. It does not answer the question, it kills it.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-5420353826520031433?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/5420353826520031433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/07/synectics.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5420353826520031433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5420353826520031433'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/07/synectics.html' title='Synectics'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-IljU3mnFI9s/Tikx8lhH8gI/AAAAAAAAA6w/uIF6DS-lx-4/s72-c/Synectics.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-3133680669642043373</id><published>2011-07-22T07:25:00.008Z</published><updated>2011-07-22T11:14:39.484Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='unit testing'/><category scheme='http://www.blogger.com/atom/ns#' term='time'/><category scheme='http://www.blogger.com/atom/ns#' term='systems thinking'/><category scheme='http://www.blogger.com/atom/ns#' term='failure'/><title type='text'>Why do car drivers brake?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-IC-JjESGRJg/Thc9LrXxa9I/AAAAAAAAA5Y/ZXnGe1njP7s/s1600/UK_Stop_sign.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 100px; height: 100px;" src="http://1.bp.blogspot.com/-IC-JjESGRJg/Thc9LrXxa9I/AAAAAAAAA5Y/ZXnGe1njP7s/s200/UK_Stop_sign.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5627033530253011922" /&gt;&lt;/a&gt;

Recently I wrote a small blog entry 
&lt;a href="http://jonjagger.blogspot.com/2011/07/why-do-cars-have-brakes.html"&gt;Why to cars have brakes?&lt;/a&gt;
It's getting a lot of hits. Well, a lot for me. So naturally in my quest for even more hits here's a follow up...
&lt;br/&gt;
&lt;br/&gt;
Imagine you're in a car. Driving along. Why do you brake? I'm not asking what happens when you press the brake pedal? That's too easy (the car stops). I'm asking &lt;em&gt;why&lt;/em&gt;…?
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;
Here are two reasons:
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Reason one: because there's danger ahead
&lt;/blockquote&gt;
&lt;br/&gt;
This corresponds to a failing test. More specifically, it's when a test runs and asserts. A red. Perhaps there's a queue of traffic ahead (often a problem on the orbital car park known as the M25). Perhaps the road is closed off because workmen are working on it. Or maybe the local council has been meddling and the road is now a one-way-but-not-the-way-you-want-to-go road. Whatever the reason, something is not as expected.
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Reason two: because you've arrived!
&lt;/blockquote&gt;
&lt;br/&gt;
This corresponds to a passing test. A green. Wherever it is you're going, you've got there. Nothing unexpected happened. No traffic queues. No closed off roads. No meddling local council. Incredible!
&lt;br/&gt;
&lt;br/&gt;
In my entirely unscientific sampling almost everyone answers with the first reason. The second reason is not nearly as common. I find this interesting. 

I think maybe it's a reflection of the thinking statically vs thinking dynamically thing again. A perception that tests are most useful when they fire red. That tests which run to completion without incident are not so useful. But they are. Maybe more so. 
&lt;br/&gt;
&lt;br/&gt;
Brakes help me stop. And stopping implies I'm already moving - I'm already going somewhere. But where? If I don't know where I'm going why am I moving at all? If I don't know where I'm going I'm just as lost as if I don't know where I am.
&lt;br/&gt;
&lt;br/&gt;
Tests are useful not just because of the I-didn't-arrive effect when they fail, they're also useful because of the I-did-arrive effect when they pass. 
&lt;br/&gt;
&lt;br/&gt;
Another reason passing tests are really useful is the elves. But the elves will have to wait for another time.
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-3133680669642043373?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/3133680669642043373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/07/why-do-car-drivers-brake.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/3133680669642043373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/3133680669642043373'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/07/why-do-car-drivers-brake.html' title='Why do car drivers brake?'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-IC-JjESGRJg/Thc9LrXxa9I/AAAAAAAAA5Y/ZXnGe1njP7s/s72-c/UK_Stop_sign.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-5082476523050771670</id><published>2011-07-21T06:03:00.003Z</published><updated>2011-07-21T06:11:53.814Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='trust'/><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='change'/><category scheme='http://www.blogger.com/atom/ns#' term='think team'/><title type='text'>Peopleware</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_u9orsdHAiCg/S9FY0QGcG5I/AAAAAAAAAPo/wGm1mTwElLA/s1600/Peopleware.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://1.bp.blogspot.com/_u9orsdHAiCg/S9FY0QGcG5I/AAAAAAAAAPo/wGm1mTwElLA/s200/Peopleware.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5463245477675539346" /&gt;&lt;/a&gt;


is an excellent book by Tim Lister and Tom DeMarco (isbn 0-932633-43-9). As usual I'm going to quote from a few pages.
I know I've snippeted this book &lt;a href="http://jonjagger.blogspot.com/2010/04/peopleware.html"&gt;before&lt;/a&gt;, but I read it again and a really good book deserves a repeat snippet. 


&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Development is inherently different from production.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The trade-off between price and quality does not exist in Japan. Rather, the idea that high quality brings on cost reduction is widely accepted. [Tajima and Matsubara]
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The manager's function is not to make people work, but to make it possible for people to work.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The trick isn't in the technology; it's in the changing of habits.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
An age-old pattern of interior space is one that has a smooth "intimacy gradient" as you move toward the interior.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Employee turnover costs about twenty percent of all manpower expense. But that's only the &lt;em&gt;visible&lt;/em&gt; cost of turnover. There's an ugly invisible cost that can be far worse.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
It's only the right to be wrong that makes you free.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The structure of a team is a network, not a hierarchy.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Everyone quickly understands that the presence of the posters is a sure sign of the absence of hard work and talent.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The more you improve the way you go about your work, the harder the work will be.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The manager of a large project in Minneapolis has refused to move his people to the new quarters. ("New in this case just meant smaller and noisier.) Administrators were simply stunned at his refusal; they had never considered the possibility.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-5082476523050771670?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/5082476523050771670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/07/peopleware.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5082476523050771670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5082476523050771670'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/07/peopleware.html' title='Peopleware'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_u9orsdHAiCg/S9FY0QGcG5I/AAAAAAAAAPo/wGm1mTwElLA/s72-c/Peopleware.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-8982164020244870507</id><published>2011-07-18T14:58:00.005Z</published><updated>2011-07-18T15:02:16.874Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='jokes'/><title type='text'>Motivation supplements</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-ylvzijLqP3Q/TiRKb27vWAI/AAAAAAAAA6o/y7TWe0YUXk8/s1600/JustAddWater.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 256px; height: 320px;" src="http://1.bp.blogspot.com/-ylvzijLqP3Q/TiRKb27vWAI/AAAAAAAAA6o/y7TWe0YUXk8/s320/JustAddWater.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5630707276582967298" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-8982164020244870507?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/8982164020244870507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/07/motivation-supplements.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/8982164020244870507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/8982164020244870507'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/07/motivation-supplements.html' title='Motivation supplements'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-ylvzijLqP3Q/TiRKb27vWAI/AAAAAAAAA6o/y7TWe0YUXk8/s72-c/JustAddWater.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-2257194778717372914</id><published>2011-07-15T14:57:00.003Z</published><updated>2011-07-15T15:22:39.178Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='jokes'/><category scheme='http://www.blogger.com/atom/ns#' term='biography'/><title type='text'>Just one more thing</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-miTWvF4TqsA/TiBZjGUXfhI/AAAAAAAAA6g/42oEvVx2oTI/s1600/JustOneMoreThing.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 80px; height: 122px;" src="http://2.bp.blogspot.com/-miTWvF4TqsA/TiBZjGUXfhI/AAAAAAAAA6g/42oEvVx2oTI/s200/JustOneMoreThing.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5629597993739451922" /&gt;&lt;/a&gt;

is an excellent book by Peter Falk (isbn 978-0-099-50955-4). As usual I'm going to quote from a few pages

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
My object is to keep you awake.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
I didn't stay in college the full four years. I quit after three months and joined the Merchant Marine. Men with one eye were not drafted and in the Merchant Marine they were not allowed to work on deck or below deck, but they could work in the kitchen. I sailed out as third cook. My specialty was pork chops.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
About the third time I was late, even before I hit my seat, LaGallienne froze me with a question: "Why are you always late?" I said I had to drive down from Hartford. She asked coldly, "What do you do there? There are no theatres in Hartford. How do you make a living?" I told the truth. "I'm not an actor." She snapped back "Well you should be, now sit down."
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
I remember vividly that particular performance when for the first time I was suddenly startled by a new totally unexpected sound - a rich, deep authentic snore. Holy jamolies. There is someone on this stage that is sleeping - &lt;em&gt;really&lt;/em&gt; sleeping.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
I have never been arrested in the United States but I have been arrested in Paris, Moscow, Havana, Genoa, Belgrade, and Trieste. 
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Did he want to be buried or cremated? His answer to them was brief - "Surprise me."
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
"Here and there you'll find a raisin."
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
I was struck very early by the dramatic possibilities of playing a man who housed within himself two opposite traits.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
For me The Princess Bride was a movie without a blemish, perfect for both kids and adults.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-2257194778717372914?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/2257194778717372914/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/07/just-one-more-thing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/2257194778717372914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/2257194778717372914'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/07/just-one-more-thing.html' title='Just one more thing'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-miTWvF4TqsA/TiBZjGUXfhI/AAAAAAAAA6g/42oEvVx2oTI/s72-c/JustOneMoreThing.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-5884044435189772229</id><published>2011-07-15T07:37:00.002Z</published><updated>2011-07-21T06:10:44.925Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='jerry-weinberg'/><category scheme='http://www.blogger.com/atom/ns#' term='systems thinking'/><title type='text'>An Introduction to General Systems Thinking</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_u9orsdHAiCg/S9NghY5E2nI/AAAAAAAAAUo/fjPWlK4xZXo/s1600/AnIntroductionToGeneralSystemsThinking.jpeg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 87px; height: 130px;" src="http://3.bp.blogspot.com/_u9orsdHAiCg/S9NghY5E2nI/AAAAAAAAAUo/fjPWlK4xZXo/s200/AnIntroductionToGeneralSystemsThinking.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5463816899664337522" /&gt;&lt;/a&gt;

is an excellent book by &lt;a href="http://jonjagger.blogspot.com/p/jerry-weinberg.html"&gt;Jerry Weinberg&lt;/a&gt; (isbn 0-932633-49-8). As usual I'm going to quote from a few pages.
&lt;br/&gt;I know I've snippeted this book &lt;a href="http://jonjagger.blogspot.com/2010/04/introduction-to-general-systems.html"&gt;before&lt;/a&gt;, but I read it again and a really good book deserves a repeat snippet. 

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The average scientist is good for at most one revolution.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
"Proof" in its original sense was a test applied to substances to determine if they are of satisfactory quality... Over the centuries, the meaning of the word "prove" began to shift, eliminating the negative possibilities...
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
They know "better" - which is to say that their illusion is stronger.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
We drive more slowly at night to give us more time to observe potentially dangerous situations.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
More probable states are more likely to be observed than less probable states, unless specific constraints exist to keep them from occurring.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Things we see more frequently are more frequent: 1. because there is some &lt;em&gt;physical&lt;/em&gt; reason to favor certain states, or 2. because there is some &lt;em&gt;mental&lt;/em&gt; reason.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The Axiom of Experience can, like all of our principles, be turned around, to become a definition of what we mean by the word "like": Two things are alike if one in the present can be substituted for one in the past.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
a "boundary" may not be infinitely thin, precisely so it &lt;em&gt;can&lt;/em&gt; partake of both system and environment. Rather than separating, such a boundary &lt;em&gt;connects&lt;/em&gt;.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
We can learn, if nothing else, proper caution in our speech, which will inevitably lead to proper caution in our thought...
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-5884044435189772229?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/5884044435189772229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/07/introduction-to-general-systems.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5884044435189772229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5884044435189772229'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/07/introduction-to-general-systems.html' title='An Introduction to General Systems Thinking'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_u9orsdHAiCg/S9NghY5E2nI/AAAAAAAAAUo/fjPWlK4xZXo/s72-c/AnIntroductionToGeneralSystemsThinking.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-6998173653365491717</id><published>2011-07-14T07:57:00.004Z</published><updated>2011-07-14T08:15:02.810Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='unit testing'/><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='c and c++'/><title type='text'>Test-driven development for embedded c</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-EiBq8dXwVNU/Th6kCIU5eCI/AAAAAAAAA6Q/XV12W0Bqfwo/s1600/tdd_embedded_c"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 167px; height: 200px;" src="http://2.bp.blogspot.com/-EiBq8dXwVNU/Th6kCIU5eCI/AAAAAAAAA6Q/XV12W0Bqfwo/s200/tdd_embedded_c" border="0" alt=""id="BLOGGER_PHOTO_ID_5629116940761528354" /&gt;&lt;/a&gt;

is the title of an excellent book by James Grenning (isbn 978-1-93435-662-3). As usual I'm going to quote from a few pages... 
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
A good design is a testable design.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;blockquote&gt;
&lt;a href="http://jonjagger.blogspot.com/2011/07/why-do-cars-have-brakes.html"&gt;TDD helps you go faster&lt;/a&gt;... Slowing down is exactly what is needed to go fast!
&lt;/blockquote&gt;
&lt;br/&gt;

&lt;blockquote&gt;
Like TDD, if testing is hard, do it all the time - it gets easier.
&lt;/blockquote&gt;
&lt;br/&gt;

&lt;blockquote&gt;
Test automation is the gift that keeps on giving.
&lt;/blockquote&gt;
&lt;br/&gt;

&lt;blockquote&gt;
One test result is worth 1,000 expert opinions [Wernher von Braun]
&lt;/blockquote&gt;
&lt;br/&gt;

&lt;blockquote&gt;
You get a shot of testability with a portability chaser.
&lt;/blockquote&gt;
&lt;br/&gt;

&lt;blockquote&gt;
If we can identify a particular code smell, we have a better chance of eliminating the bad smell.
&lt;/blockquote&gt;
&lt;br/&gt;

&lt;blockquote&gt;
Shifting levels of abstraction should happen for a purpose.
&lt;/blockquote&gt;
&lt;br/&gt;

&lt;blockquote&gt;
Refactoring should be part of everyday development. It's not on the schedule, and you don't ask for permission to refactor.
&lt;/blockquote&gt;
&lt;br/&gt;

&lt;blockquote&gt;
The industry norm is for code to incrementally worsen with each change. We need to reverse that.
&lt;/blockquote&gt;
&lt;br/&gt;

&lt;blockquote&gt;
Dual-targetting, like TDD, has another benefit: it influences your design. Paying attention to the boundaries between software and hardware produces more modular designs.
&lt;/blockquote&gt;

&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-6998173653365491717?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/6998173653365491717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/07/test-driven-development-for-embedded-c.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/6998173653365491717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/6998173653365491717'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/07/test-driven-development-for-embedded-c.html' title='Test-driven development for embedded c'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-EiBq8dXwVNU/Th6kCIU5eCI/AAAAAAAAA6Q/XV12W0Bqfwo/s72-c/tdd_embedded_c' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-5506056878875981053</id><published>2011-07-07T15:02:00.014Z</published><updated>2011-07-22T07:58:52.222Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='feedback'/><category scheme='http://www.blogger.com/atom/ns#' term='jerry-weinberg'/><category scheme='http://www.blogger.com/atom/ns#' term='systems thinking'/><category scheme='http://www.blogger.com/atom/ns#' term='failure'/><title type='text'>Why do cars have brakes?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-IC-JjESGRJg/Thc9LrXxa9I/AAAAAAAAA5Y/ZXnGe1njP7s/s1600/UK_Stop_sign.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 100px; height: 100px;" src="http://1.bp.blogspot.com/-IC-JjESGRJg/Thc9LrXxa9I/AAAAAAAAA5Y/ZXnGe1njP7s/s200/UK_Stop_sign.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5627033530253011922" /&gt;&lt;/a&gt;

I don't remember where I was when Kevlin Henney asked me:

&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
Why do cars have brakes?
&lt;/blockquote&gt;

&lt;br/&gt;

but I do remember his answer as a definite light-bulb moment. 
What's your answer? 
&lt;br/&gt;
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;.
&lt;br/&gt;

A very common answer is

&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
to stop
&lt;/blockquote&gt;

&lt;br/&gt;

or some variation thereof. In other words, to brake. It reminds me of the 
&lt;a href="http://jonjagger.blogspot.com/2010/07/we-are-not-nouns-we-are-verbs.html"&gt;noun-verb&lt;/a&gt; thing again. Lights light. Irons iron. Compilers compile. Brakes brake. But that was not Kevlin's answer. Kevlin's answer was:

&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
So you can drive faster.
&lt;/blockquote&gt;

&lt;br/&gt;

His answer feels paradoxical which usually means there's a deep truth.
Brakes allow you to stop &lt;em&gt;when&lt;/em&gt; you want.
Brakes allow you to stop &lt;em&gt;where&lt;/em&gt; you want.
Software tests are like brakes. They help you drive faster.

&lt;br/&gt;
&lt;br/&gt;

I'm also reminded of the P.W.Bridgman quote at start of chapter 6 of &lt;a href="http://jonjagger.blogspot.com/p/jerry-weinberg.html"&gt;Jerry Weinberg's&lt;/a&gt; &lt;a href="http://jonjagger.blogspot.com/2010/04/introduction-to-general-systems.html"&gt;Introduction to General Systems Thinking&lt;/a&gt;:

&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
...it is better to analyze in terms of doings or happenings than in terms of objects or static abstractions.
&lt;/blockquote&gt;

&lt;br/&gt;

Thinking about brakes allowing you to stop is thinking statically. 
Thinking about braking allowing you to drive faster is thinking dynamically.

&lt;br/&gt;
&lt;br/&gt;
If you liked this post you might like the follow up &lt;a href="http://jonjagger.blogspot.com/2011/07/why-do-car-drivers-brake.html"&gt;Why do car drivers brake?&lt;/a&gt;.

&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-5506056878875981053?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/5506056878875981053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/07/why-do-cars-have-brakes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5506056878875981053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5506056878875981053'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/07/why-do-cars-have-brakes.html' title='Why do cars have brakes?'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-IC-JjESGRJg/Thc9LrXxa9I/AAAAAAAAA5Y/ZXnGe1njP7s/s72-c/UK_Stop_sign.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-916933190074216273</id><published>2011-07-06T11:48:00.012Z</published><updated>2011-07-07T11:56:55.769Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='unit testing'/><category scheme='http://www.blogger.com/atom/ns#' term='c and c++'/><category scheme='http://www.blogger.com/atom/ns#' term='singleton'/><category scheme='http://www.blogger.com/atom/ns#' term='refactoring'/><title type='text'>A singleton refactoring</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-FG7PH7BnTnE/ThRTXkBIAFI/AAAAAAAAA5I/FzEHhvV_rts/s1600/singleton.jpeg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 100px; height: 100px;" src="http://1.bp.blogspot.com/-FG7PH7BnTnE/ThRTXkBIAFI/AAAAAAAAA5I/FzEHhvV_rts/s200/singleton.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5626213498763083858" /&gt;&lt;/a&gt;

Here's a refactoring I often teach. It's particularly applicable if you're wanting to refactor legacy code. I'll show it in C++ in honour of the excellent developers at 
&lt;a href="http://www.prometheanworld.com/"&gt;Promethean&lt;/a&gt;.

&lt;br/&gt;
&lt;br/&gt;

I'll start with a typical Singleton:

&lt;br/&gt;
&lt;br/&gt;

&lt;pre class="code"&gt;
class singleton
{
public:
    static singleton &amp; instance();
    void f(int value);
    int g(const std::string &amp; path);
private:
    singleton();
    ~singleton();
};
&lt;/pre&gt;

&lt;br/&gt;

Together with typical piece of client client code that I'm wanting to unit-test:

&lt;br/&gt;
&lt;br/&gt;

&lt;pre class="code"&gt;
int client::eg1()
{
    stuff();
    more_stuff();
    int r = singleton::instance().g("Hello world");
    return yet_more_stuff(r);
}
&lt;/pre&gt;

&lt;br/&gt;

My problem is that singleton leads to one or more external dependencies I'd like my unit-tests to bypass. My first step is to create an interface for the singleton:

&lt;br/&gt;
&lt;br/&gt;

&lt;pre class="code"&gt;
class singleton_interface
{
public:
    virtual void f(int value) = 0;
    virtual int g(const std::string &amp; path) = 0;
    ...
};
&lt;/pre&gt;

&lt;br/&gt;

And then make singleton implement the interface.
(The saving grace of singleton is that its methods are at least instance methods.)

&lt;br/&gt;
&lt;br/&gt;

&lt;pre class="code"&gt;
class singleton : public singleton_interface
{
public:
    static singleton &amp; instance();
    void f(int value);
    int g(const std::string &amp; path);
private:
    singleton();
    ~singleton();
};
&lt;/pre&gt;

&lt;br/&gt;

Now I can overload eg1 as follows:

&lt;br/&gt;
&lt;br/&gt;

&lt;pre class="code"&gt;
int client::eg1(singleton_interface &amp; instance)
{
    stuff();
    more_stuff();
    int r = instance.g("Hello world");
    return yet_more_stuff(r);
}

int client::eg1()
{
    return eg1(singleton::instance());
}
&lt;/pre&gt;

&lt;br/&gt;

And finally, I can create singleton_interface sub-classes and use them in my unit-tests:

&lt;br/&gt;
&lt;br/&gt;

&lt;pre class="code"&gt;
struct my_mock_singleton : singleton_interface
{
    explicit my_mock_singleton(int g_result) 
        : g_result(g_result) 
    {
    }
    void f(int value) 
    {
    }
    int g(const std::string &amp; s) 
    { 
        return g_result; 
    }
    int g_result;
};

void test_client_eg1_hitch_hiker_is_42()
{
    assert(42 == client().eg1(my_mock_singleton(6*9)));
}
&lt;/pre&gt;

&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-916933190074216273?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/916933190074216273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/07/singleton-refactoring.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/916933190074216273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/916933190074216273'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/07/singleton-refactoring.html' title='A singleton refactoring'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-FG7PH7BnTnE/ThRTXkBIAFI/AAAAAAAAA5I/FzEHhvV_rts/s72-c/singleton.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-4830463250904431933</id><published>2011-06-29T07:31:00.007Z</published><updated>2011-06-29T10:07:12.272Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='time'/><category scheme='http://www.blogger.com/atom/ns#' term='refactoring'/><title type='text'>Micro refactoring - from here to there</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-0YibtowZBac/TgriYWmkyqI/AAAAAAAAA44/M4avVEs93OI/s1600/321.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 100px;" src="http://2.bp.blogspot.com/-0YibtowZBac/TgriYWmkyqI/AAAAAAAAA44/M4avVEs93OI/s200/321.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5623555992737598114" /&gt;&lt;/a&gt;

One of my &lt;a href="http://jonjagger.blogspot.com/2011/06/mastery.html"&gt;Mastery&lt;/a&gt; book snippets from a few days ago reads:

&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
Masters ...  are zealots of practice, connoisseurs of the small, incremental step.
&lt;/blockquote&gt;

&lt;br/&gt;

I was doing the roman numerals kata in ruby and something related to &lt;em&gt;small&lt;/em&gt; incremental steps occurred to me.
Here's three tests:

&lt;br/&gt;
&lt;br/&gt;

&lt;pre class="code"&gt;
def test_to_roman
  assert_equal "I", to_roman(1)
  assert_equal "II", to_roman(2)
  assert_equal "III", to_roman(3)
end
&lt;/pre&gt;

&lt;br/&gt;
and here's the first code snippet:
&lt;br/&gt;
&lt;br/&gt;

&lt;pre class="code"&gt;
def to_roman(n) 
  roman = ''
  if n == 3
    roman = 'III' 
  end
  if n == 2
    roman = 'II'
  end
  if n == 1
    roman = 'I'
  end
  roman
end
&lt;/pre&gt;

&lt;br/&gt;
I can refactor these three if statements into a single while statement, in very small steps, as follows:
&lt;br/&gt;
&lt;br/&gt;

&lt;pre class="code"&gt;
def to_roman(n) 
  roman = ''
  if n &gt;= 3
    roman += 'I'
    n -= 1
  end
  if n &gt;= 2
    roman += 'I'
    n -= 1
  end
  if n &gt;= 1
    roman += 'I'
    n -= 1 
  end
  roman
end
&lt;/pre&gt;

&lt;br/&gt;
and then:
&lt;br/&gt;
&lt;br/&gt;

&lt;pre class="code"&gt;
def to_roman(n) 
  roman = ''
  if n &gt;= 1
    roman += 'I'
    n -= 1
  end
  if n &gt;= 1
    roman += 'I'
    n -= 1
  end
  if n &gt;= 1
    roman += 'I'
    n -= 1 
  end
  roman
end
&lt;/pre&gt;

&lt;br/&gt;
and then:
&lt;br/&gt;
&lt;br/&gt;

&lt;pre class="code"&gt;
def to_roman(n) 
  roman = ''
  while n &gt;= 1
    roman += 'I'
    n -= 1
  end
  roman
end
&lt;/pre&gt;

&lt;br/&gt;
Ok. Now here's the original again:
&lt;br/&gt;
&lt;br/&gt;

&lt;pre class="code"&gt;
def to_roman(n) 
  roman = ''
  if n == 3
    roman = 'III'
  end
  if n == 2
    roman = 'II'
  end
  if n == 1
    roman = 'I'
  end
  roman
end
&lt;/pre&gt;

&lt;br/&gt;
And this time I refactor in a different direction, towards an array lookup:
&lt;br/&gt;
&lt;br/&gt;

&lt;pre class="code"&gt;
def to_roman(n) 
  units = [ '', 'I', 'II', 'III' ]
  roman = ''
  if n == 3
    roman = units[3]
  end
  if n == 2
    roman = units[2]
  end
  if n == 1
    roman = units[1]
  end
  roman
end
&lt;/pre&gt;
 
&lt;br/&gt;
And then:
&lt;br/&gt;
&lt;br/&gt;

&lt;pre class="code"&gt;
def to_roman(n) 
  units = [ '', 'I', 'II', 'III' ]
  roman = ''
  if n == 3
    roman = units[n]
  end
  if n == 2
    roman = units[n]
  end
  if n == 1
    roman = units[n]
  end
  roman
end
&lt;/pre&gt;

&lt;br/&gt;
And then:
&lt;br/&gt;
&lt;br/&gt;

&lt;pre class="code"&gt;
def to_roman(n) 
  units = [ '', 'I', 'II', 'III' ]
  roman = ''
  if n == 3
    roman = units[n]
  end
  if n == 2
    roman = units[n]
  end
  if n == 1
    roman = units[n]
  end
  roman
  units[n]
end
&lt;/pre&gt;

&lt;br/&gt;
And then:
&lt;br/&gt;
&lt;br/&gt;

&lt;pre class="code"&gt;
def to_roman(n) 
  units = [ '', 'I', 'II', 'III' ]
  units[n]
end
&lt;/pre&gt;

&lt;br/&gt;
In this case I can refactor from a sequence of if statements in two directions equally easy - towards a while or towards an array lookup. Ok. Now consider the situation if I was starting from a switch instead of a sequence of ifs:
&lt;br/&gt;
&lt;br/&gt;

&lt;pre class="code"&gt;
def to_roman(n) 
  case n
  when 3 then 'III'
  when 2 then 'II'
  when 1 then 'I'
  end
end
&lt;/pre&gt;

&lt;br/&gt;

From this I can easily refactor towards an array lookup but refactoring towards a while is perhaps not quite so straightforward. 
&lt;br/&gt;
&lt;br/&gt;
I'm suggesting that a construct is useful not just in it's own right but also in relation to all the other constructs it might get refactored to or from. 
How easily can I move from one construct to another? Do some constructs live only on one-way roads? Do some lead you down more dead-ends than others?

&lt;br/&gt;
&lt;br/&gt;
I'm reminded of the family on holiday in the West Country who got thoroughly lost. Spotting a farmer leaning on a gate they stop the car, wind down the window and ask 
&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
Excuse me. Can you tell me how to get to &lt;a href="http://en.wikipedia.org/wiki/Nempnett_Thrubwell"&gt;Nempnett Thrubwell&lt;/a&gt;?
&lt;/blockquote&gt;

&lt;br/&gt;

The old farmer looks at them and says

&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
Well.... you don't want to start from here.
&lt;/blockquote&gt;

&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-4830463250904431933?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/4830463250904431933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/06/micro-refactoring-from-here-to-there.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/4830463250904431933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/4830463250904431933'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/06/micro-refactoring-from-here-to-there.html' title='Micro refactoring - from here to there'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-0YibtowZBac/TgriYWmkyqI/AAAAAAAAA44/M4avVEs93OI/s72-c/321.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-5166349324802901229</id><published>2011-06-28T07:59:00.015Z</published><updated>2011-06-28T20:59:20.222Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='unit testing'/><category scheme='http://www.blogger.com/atom/ns#' term='favourites'/><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='feedback'/><category scheme='http://www.blogger.com/atom/ns#' term='time'/><category scheme='http://www.blogger.com/atom/ns#' term='learning'/><category scheme='http://www.blogger.com/atom/ns#' term='change'/><category scheme='http://www.blogger.com/atom/ns#' term='97 things'/><category scheme='http://www.blogger.com/atom/ns#' term='systems thinking'/><category scheme='http://www.blogger.com/atom/ns#' term='failure'/><title type='text'>Test-gunpowder-pudding driven development</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-_4J6ldsU1I0/TgmsXVbGtNI/AAAAAAAAA4w/zQ8nTtUwqn8/s1600/Pudding.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 140px;" src="http://3.bp.blogspot.com/-_4J6ldsU1I0/TgmsXVbGtNI/AAAAAAAAA4w/zQ8nTtUwqn8/s200/Pudding.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5623215126636573906" /&gt;&lt;/a&gt;

I was rereading chapter 3, Systems and Illusion in&lt;a href="http://jonjagger.blogspot.com/p/jerry-weinberg.html"&gt; Jerry Weinberg's&lt;/a&gt; excellent &lt;a href="http://jonjagger.blogspot.com/2010/04/introduction-to-general-systems.html"&gt;An Introduction to General Systems Thinking&lt;/a&gt; yesterday. On page 56-57 Jerry writes:

&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
If I say: "The exception proves the rule" in front of a large class, there will be a division in understanding... Some will believe I have uttered nonsense, while others will understand "The exception puts the rule to the test"
&lt;/blockquote&gt;

&lt;br/&gt;

I've read the book four times. I'm a slow learner but this time something clicked and I immediately understood the earlier passage:

&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
...the exception does not &lt;em&gt;prove&lt;/em&gt; the rule, it teaches it.
&lt;/blockquote&gt;

&lt;br/&gt;

Jerry goes on:

&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
"Proof" in its original sense was "a test applied to substances to determine if they are of satisfactory quality."
&lt;/blockquote&gt;

&lt;br/&gt;

I was struck by two thoughts when I read this. One was the parallel with testing. Of a test as a proof.
The other was the word &lt;em&gt;original&lt;/em&gt;. I realized that when I hear the word "proof" I have a strong association with its noun meaning rather than its verb meaning. I tend to think of a proof as a finished proof that completely proves something.
It's the &lt;a href="http://jonjagger.blogspot.com/2010/07/we-are-not-nouns-we-are-verbs.html"&gt;noun-verb thing&lt;/a&gt; I've blogged about before. I wondered if there were any old dictionaries online so I could get a feel for how the generally accepted meaning of the word proof might have changed over time. There is. 
&lt;a href="http://machaut.uchicago.edu/websters"&gt;http://machaut.uchicago.edu/websters&lt;/a&gt; has two Webster's dictionaries. The 1828 dictionary came back with:

&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
Proof [noun] 1. Trial; essay; experiment; any effort, process or operation that ascertains truth or fact. Thus the quality of spirit is ascertained by proof; the strength of gun-powder, ...
&lt;/blockquote&gt;

&lt;br/&gt;

The 1913 one came back with:

&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
Proof [noun] 1. Any effort, process, or operation designed to establish or discover a fact or truth; an act of testing; a test; a trial.
&lt;/blockquote&gt;

&lt;br/&gt;

and a modern dictionary &lt;a href="http://www.thefreedictionary.com/proof"&gt;http://www.thefreedictionary.com/proof&lt;/a&gt; said:

&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
Proof [noun]. 1. The evidence or argument that compels the mind to accept an assertion as true.
&lt;/blockquote&gt;

&lt;br/&gt;

I find the difference fascinating. The 1828 and the 1913 definitions define the noun as the process whereas the modern one defines the noun as the evidence resulting from the process.

&lt;br/&gt;
&lt;br/&gt;

Jerry continues:

&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
We retain this meaning in the "proofs" of printing and photography, in the "proof" of whiskey, and in "the proof of the pudding." Over the centuries, the meaning of the word "prove" began to shift, eliminating the negative possibilities to take on an additional sense: "To establish, to demonstrate, or to show truth or genuineness."
&lt;/blockquote&gt;

&lt;br/&gt;

At first I didn't understand the bit about "eliminating the negative possibilities". I think it's partly to do with my &lt;a href="http://jonjagger.blogspot.com/2010/07/time-wounds-all-heels.html"&gt;ITA spelling at school&lt;/a&gt;. But I am persistant. Slowly it came to me. The word that did it for me in...

&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
"Proof" in its original sense was "a test applied to substances to determine if they are of satisfactory quality."
&lt;/blockquote&gt;

&lt;br/&gt;

...was the word &lt;em&gt;if&lt;/em&gt;. To determine &lt;em&gt;if&lt;/em&gt; they are of satisfactory quality. The proof was an act. There was the possibility of failure. 

&lt;br/&gt;
&lt;br/&gt;

I started thinking about the word proof a bit more.
I googled the phrase "the proof of the pudding".
If you think this phrase is pretty meaningless then you're right - it's a shortened version of:

&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
The proof of the pudding is in the eating.
&lt;/blockquote&gt;

&lt;br/&gt;

Again it's about the possibility of failure. It reminds me of the scene in the film The Cat in the Hat (another film Patrick and I love watching) where the Cat has just made some cupcakes (with the amazing kupcake-inator). He tries one and says: 

&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
"Yeuch. They're horrible. Who want's some?"
&lt;/blockquote&gt;

&lt;br/&gt;

I love that line. I also googled the word proof as related to alcohol content. 
The history behind the phrase is just wonderful.
In the 18th century spirits were graded with gunpowder.
Imagine you're buying some spirits. How would you know if an unscrupulous merchant had watered it down? You couldn't tell just by looking. What they did was pour a sample of the solution onto a pinch of gunpowder. If the wet gunpowder could still be ignited then the solution had &lt;em&gt;proved&lt;/em&gt; itself. Don't you just love that?

&lt;br/&gt;
&lt;br/&gt;

So let's hear it for pudding and for spirits and for gunpowder and for tests. And for the possibility of failure.

&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-5166349324802901229?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/5166349324802901229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/06/gunpowder-and-pudding-driven.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5166349324802901229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5166349324802901229'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/06/gunpowder-and-pudding-driven.html' title='Test-gunpowder-pudding driven development'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-_4J6ldsU1I0/TgmsXVbGtNI/AAAAAAAAA4w/zQ8nTtUwqn8/s72-c/Pudding.JPG' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-3351298835513546915</id><published>2011-06-26T06:09:00.004Z</published><updated>2011-06-26T11:25:17.679Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='change'/><title type='text'>The timeless way of building</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-ZdlL_3Qyx0Q/TgbNIfKSiXI/AAAAAAAAA4o/4RYLN66MAxs/s1600/TimelessWayOfBuilding.jpeg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 131px; height: 200px;" src="http://4.bp.blogspot.com/-ZdlL_3Qyx0Q/TgbNIfKSiXI/AAAAAAAAA4o/4RYLN66MAxs/s200/TimelessWayOfBuilding.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5622406730505947506" /&gt;&lt;/a&gt;

is an excellent book by  Christopher Alexander (isbn 0-19-502402-8). As usual I'm going to quote from a few pages

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
A thing which has the quality without a name never fit any image exactly. What is exact is its adaptation to the forces which are in it.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The fact is that the elements &lt;em&gt;themselves&lt;/em&gt; are patterns of relationships.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Any thing which lives can only be achieved as the end product of a process, whose force takes over and replaces the willful act of creation.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The mastery of what is made does not lie in the depths of some impenetrable ego; it lies, instead, in the simple mastery of the steps in the process, and in the definition of those steps.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
How does the pattern language, which exists behind this flux, steer it, and enter into it? It hinges on the close relationship between the process of creation and the process of repair.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
As in the organism, there is no sharp difference between the process of construction and the process of repair. Each process of construction helps repair some larger whole, of which it is merely a part. No thing is whole unto itself.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Within this process, every individual act of building is a process in which space gets differentiated. It is not a process of addition, in which pre-formed parts are combined to create a whole: but a process of unfolding, like the evolution of an embryo, in which the whole precedes its parts, and actually gives birth to them, by splitting.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The form of the whole, and the parts, come into being simultaneously.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
This can only happen if the design is represented in an utterly fluid medium; it cannot happen in any medium where there is even the slightest resistance to change.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
No building is ever perfect.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-3351298835513546915?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/3351298835513546915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/06/timeless-way-of-building.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/3351298835513546915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/3351298835513546915'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/06/timeless-way-of-building.html' title='The timeless way of building'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-ZdlL_3Qyx0Q/TgbNIfKSiXI/AAAAAAAAA4o/4RYLN66MAxs/s72-c/TimelessWayOfBuilding.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-3054668531023634169</id><published>2011-06-19T12:42:00.004Z</published><updated>2011-06-26T17:23:12.713Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='deliberate practice'/><category scheme='http://www.blogger.com/atom/ns#' term='cyberdojo'/><title type='text'>Yahtzee in ruby in CyberDojo</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-42WsAeAXIDA/Tf4nJSSQvHI/AAAAAAAAA4Q/fHoWrLQhnI4/s1600/ruby.jpeg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 25px; height: 25px;" src="http://2.bp.blogspot.com/-42WsAeAXIDA/Tf4nJSSQvHI/AAAAAAAAA4Q/fHoWrLQhnI4/s200/ruby.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5619972425485696114" /&gt;&lt;/a&gt;

I've been doing the Yahtzee kata in &lt;a href="http://www.cyber-dojo.com" target="blank"&gt;CyberDojo&lt;/a&gt; to improve my Ruby.

During the 247 increments I learned about... 
&lt;ul&gt;
&lt;li&gt;any?&lt;/li&gt;
&lt;li&gt;send&lt;/li&gt;
&lt;li&gt;[lo...hi]&lt;/li&gt;
&lt;li&gt;reduce&lt;/li&gt;
&lt;li&gt;:+&lt;/li&gt;
&lt;li&gt;module names start with a capital&lt;/li&gt;
&lt;/ul&gt;

It's also on &lt;a href="http://pastie.org/2090650" target="_blank"&gt;pastie&lt;/a&gt; if you like a black background.
You can use CyberDojo to
&lt;a href="http://www.cyber-dojo.com/diff/show?dojo_name=yahtzee-ruby&amp;avatar=elephant&amp;tag=42" target="_blank"&gt;step through the diffs&lt;/a&gt; of every single increment!

&lt;pre class="code"&gt;
module Yahtzee

  def self.score dice, category, n=nil
    return -1 if invalid(dice, category)
    if category == :value
      value(dice, n)
    else
      send(category, dice)
    end
  end

  def self.chance dice
    dice.reduce(:+)
  end

  def self.yahtzee dice
    dice.uniq.length == 1 ? 50 : 0
  end

  def self.value dice, n
    dice.count{|die| die == n } * n
  end

  def self.one_pair dice
    die(tally(dice).find{|n| pair?n }) * 2
  end

  def self.two_pair dice
    score_tally dice, [2,2]
  end

  def self.three_of_a_kind dice
    score_tally dice, [3]
  end

  def self.four_of_a_kind dice
    score_tally dice, [4]
  end

  def self.full_house dice
    score_tally dice, [3,2]
  end
  
  def self.small_straight dice
    dice.sort == [1,2,3,4,5] ? 15 : 0
  end

  def self.large_straight dice
    dice.sort == [2,3,4,5,6] ? 20 : 0
  end

  #- - - - - - - - - - - - - - - - - - - - - - - 

  def self.categories
    [:value, :chance, :yahtzee, :one_pair, :two_pair,
     :three_of_a_kind, :four_of_a_kind, :full_house,
     :small_straight, :large_straight
    ]
  end

  def self.invalid dice, category
    dice == nil \
      or dice.length != 5 \
        or dice.any?{|die| die &lt; 1 or die &gt; 6 } \
          or !categories.include? category
  end

  def self.score_tally dice, pattern
    starts?(pattern, tallies(dice)) \
      ? sum(dice, pattern.length) \
      : 0
  end

  def self.starts? short, long
    long[0...short.length] == short
  end

  def self.tallies dice
    tally(dice).map{|n| count(n) }
  end

  def self.rolls dice
    tally(dice).map{|n| die(n) }
  end

  def self.tally dice
    dice.uniq.map {|die| [dice.count(die),die] }.sort.reverse 
  end

  def self.sum dice, n
    sum2(rolls(dice)[0...n], dice)
  end

  def self.sum2 scorers, dice
    dice.select {|die| scorers.include?die }.reduce(:+)
  end

  def self.pair? n
    count(n) == 2
  end

  def self.count n
    n[0]
  end

  def self.die n
    n ? n[1] : 0
  end

end
&lt;/pre&gt;

I challenged myself to write the code in a functional style with no local variables - it's a bit 'dense' in places as a result.

&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-3054668531023634169?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/3054668531023634169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/06/yahtzee-in-ruby-in-cyberdojo.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/3054668531023634169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/3054668531023634169'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/06/yahtzee-in-ruby-in-cyberdojo.html' title='Yahtzee in ruby in CyberDojo'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-42WsAeAXIDA/Tf4nJSSQvHI/AAAAAAAAA4Q/fHoWrLQhnI4/s72-c/ruby.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-7178616686926509703</id><published>2011-06-18T09:24:00.001Z</published><updated>2011-06-18T11:31:36.966Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><title type='text'>Disabling professions</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-E-FhglIOAfA/Tfu4LlnNYEI/AAAAAAAAA34/OOQ2J42lcqo/s1600/DisablingProfessions.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://1.bp.blogspot.com/-E-FhglIOAfA/Tfu4LlnNYEI/AAAAAAAAA34/OOQ2J42lcqo/s200/DisablingProfessions.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5619287469289463874" /&gt;&lt;/a&gt;

is an excellent book by Ivan Illich et al (isbn 0-7145-2510-3). As usual I'm going to quote from a few pages

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Finally there is is the American valuation on instrumentalism - an emphasis on doing - on doing something, almost anything when confronted with a problem. "Doing nothing in a difficult situation" was interestingly enough an item diagnostic of neuroticism on a popular American psychological test. Sometimes the emphasis on movement became so great that speed itself was emphasised - sometimes for no logical reason.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
It does not strike me as inconsistent, that religion and notions of the hereafter are especially relevant when "the here" is so lousy and so short.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Man has no nature, only a history [Ortega Y Gassett]
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
there seems to be an absence of informal and comfortable places to gather and talk and thus a further reduction in "informal networks of help".
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The business of modern society is service… Thus, &lt;em&gt;service&lt;/em&gt; is to &lt;em&gt;care&lt;/em&gt; which is to &lt;em&gt;love&lt;/em&gt; and love is the universal apolitical value.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The tool defines the problem rather than the problem defining the tool.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
There is no greater power than the right to define the question.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The easiest way to create a monopoly is to invent a language and procedure which will be unintelligible to the layman.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
When we talk about skilled work it is not the nature of the craft, but the social relation of the worker to management that is under discussion. The full expression of the worker's skill conflicts directly with the needs of management.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
One of the real satisfactions of skilled work is that, like an artist, your hands produce what you kind conceives. 
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The frustration of not being able to apply his skills on the job is often the motivation for doing it at home.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-7178616686926509703?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/7178616686926509703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/06/disabling-professions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/7178616686926509703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/7178616686926509703'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/06/disabling-professions.html' title='Disabling professions'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-E-FhglIOAfA/Tfu4LlnNYEI/AAAAAAAAA34/OOQ2J42lcqo/s72-c/DisablingProfessions.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-109587414954483458</id><published>2011-06-16T05:07:00.001Z</published><updated>2011-06-18T08:26:35.488Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='change'/><category scheme='http://www.blogger.com/atom/ns#' term='refactoring'/><title type='text'>Working effectively with legacy code</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-VJYPXEj6Zcw/Tfj0_J3ycyI/AAAAAAAAA3s/l-fGwdwZDVw/s1600/WorkingWithLegacyCode.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://1.bp.blogspot.com/-VJYPXEj6Zcw/Tfj0_J3ycyI/AAAAAAAAA3s/l-fGwdwZDVw/s200/WorkingWithLegacyCode.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5618509900963541794" /&gt;&lt;/a&gt;

is an excellent book by Michael Feathers (isbn 0-13-117705-2). As usual I'm going to quote from a few pages

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
A few years ago, I gave my friend Erik Meade a call after I'd finished work one night. I knew Erik had just started a consulting gig with a new team, so I asked him, "How are they doing?" He said, "They're writing legacy code, man."
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
To me, legacy code is simply code without tests. I've gotten some grief for this definition… I have no problem defining legacy code as code without tests. It is a good working definition, and it points to a solution.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
In nearly every legacy system, what the system does is more important than what it is supposed to do… Frankly, it's very important to have that knowledge of what the system actually does someplace.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
When teams aren't aware of their architecture, it tends to degrade. What gets in the way of this awareness? … The brutal truth is that architecture is too important to be left exclusively to a few people.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
When you have tests around the areas in which you are going to make changes, they act as a software vise [vice]. You can keep most of the behaviour fixed and know that you are changing only what you intended to.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The most subtle bugs that we can inject are bugs related to inheritance. … The language feature that gives us the most possibility for error when we lean is inheritance.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Orthogonality is a fancy word for independence… One of the startling things that you discover when you start removing duplication zealously is that designs emerge.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Sometimes it makes sense to add a variable to a class and use it to sense conditions in the method that we want to refractor.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
…not all behaviours are equal in an application.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Code is pretty fragile material.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
At this point in my career, I think I'm a much better programmer than I used to be, even though I know less about the details of each language I work in.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The primary purpose of a compiler is to translate source code into some other form, but in statically typed languages, you can do much more with a compiler.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-109587414954483458?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/109587414954483458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/06/working-effectively-with-legacy-code.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/109587414954483458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/109587414954483458'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/06/working-effectively-with-legacy-code.html' title='Working effectively with legacy code'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-VJYPXEj6Zcw/Tfj0_J3ycyI/AAAAAAAAA3s/l-fGwdwZDVw/s72-c/WorkingWithLegacyCode.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-1758332141406523254</id><published>2011-06-14T10:16:00.001Z</published><updated>2011-06-14T17:59:57.620Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='deliberate practice'/><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><title type='text'>Mastery</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-l20Fpr0bAJI/TfXjqsooRsI/AAAAAAAAA3k/MVmv3A7AvWA/s1600/Mastery.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://2.bp.blogspot.com/-l20Fpr0bAJI/TfXjqsooRsI/AAAAAAAAA3k/MVmv3A7AvWA/s200/Mastery.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5617646432890144450" /&gt;&lt;/a&gt;



is an excellent book by George Leonard (isbn 0-452-26756-0). As usual I'm going to quote from a few pages

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
You have to be willing to spend most of your time on a plateau, to keep practising even when you seem to be getting nowhere.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Our hyped-up consumerist society is engaged, in fact, in an all-out war on mastery.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Sometimes, when the moment came to go to class, I would be feeling particularly lazy. On those occasions I would be tempted to do almost anything rather than face myself once again on the mat.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Practice, the path of mastery, exists only in the present.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
To see the teacher clearly, look at the students… The best teacher generally strives to point out what the student is doing right at least as frequently as what she or he is doing wrong.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
A doctor practises medicine and an attorney practises law, each each of them also &lt;em&gt;has&lt;/em&gt; a practice.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The master of any game is generally a master of practice.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The courage of a master is measured by his or her willingness to surrender. This means surrendering to your teacher and to the demands of your discipline. It also means surrendering your own hard-won proficiency from time to time in order to reach a higher or different level of proficiency.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The essence of boredom is to be found in the obsessive search for novelty. Satisfaction lies in mindful repetition, the discovery of endless richness in subtle variations on familiar themes.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
For the master, surrender means there are no experts. There are only learners.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
It can be argued that what is most abstract is most fundamental and often most persistent over time.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Those we know as masters are dedicated to the fundamentals of their calling. They are zealots of practice, connoisseurs of the small, incremental step. At the same time - and here's the paradox - these people, these masters, are precisely the ones who are likely to challenge previous limits.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-1758332141406523254?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/1758332141406523254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/06/mastery.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/1758332141406523254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/1758332141406523254'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/06/mastery.html' title='Mastery'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-l20Fpr0bAJI/TfXjqsooRsI/AAAAAAAAA3k/MVmv3A7AvWA/s72-c/Mastery.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-998248619058361221</id><published>2011-06-13T07:29:00.011Z</published><updated>2011-06-13T09:31:33.560Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='cyberdojo'/><title type='text'>NDC CyberDojos</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-i7Ju3zzetXo/TfW8jPwVyTI/AAAAAAAAA3U/ZQrl8brLxCY/s1600/UncleBobAndCoreyGoingBeyondPairProgrammingNDC2011Day1.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 191px;" src="http://1.bp.blogspot.com/-i7Ju3zzetXo/TfW8jPwVyTI/AAAAAAAAA3U/ZQrl8brLxCY/s320/UncleBobAndCoreyGoingBeyondPairProgrammingNDC2011Day1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5617603423925291314" /&gt;&lt;/a&gt;

Last week Olve Maudal and I ran two CyberDojos at the &lt;a href="http://www.ndc2011.no/" target="_blank"&gt;NDC conference&lt;/a&gt; in Oslo. 
The first one attracted only a few people, partly due to some confusion about where it was being held. 
But what it lacked in quantity it more than made up for in quality.
Uncle Bob and Corey Haines seemed to invent a new style of pair programming where Uncle Bob used his left hand and Corey used his right hand!
Several people posted encouraging tweets:

&lt;ul&gt;
&lt;li&gt;@KevlinHenney: If you are at #ndc2011 today, I strongly recommend the CyberDojo with @JonJagger and @olvemaudal this afternoon.&lt;/li&gt;
&lt;li&gt;@UncleBobMartin: #ndc2011 CyberDojo was very cool. Too bad you missed it. Must not be very many programmers here&lt;/li&gt;
&lt;li&gt;@CoreyHaines: Terrific fun at #cyberdojo at #ndc2010 Only 4 of us there today, you should come to the repeat on Friday after lunch!&lt;/li&gt;
&lt;li&gt;@occulto: Best thing today: doing a kata in #cyber-dojo with @sondreb, @unclebobmartin and @coreyhaines #ndc2011 try it on Friday!&lt;/li&gt;
&lt;/ul&gt;

&lt;br/&gt;
&lt;br/&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-F4KrK1yWqk4/TfW9OjYnzRI/AAAAAAAAA3c/yr-4QV-bhVo/s1600/NDC2011FridaySuperCoders.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 191px;" src="http://1.bp.blogspot.com/-F4KrK1yWqk4/TfW9OjYnzRI/AAAAAAAAA3c/yr-4QV-bhVo/s320/NDC2011FridaySuperCoders.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5617604167928892690" /&gt;&lt;/a&gt;

More people attended the second one. Corey was there again, along with Michael Feathers and Jon Skeet. Once again the tweets were very encouraging. 
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;

In the evening Olve created a TurnKey Linux VirtualBox server image to make it super-easy to run your own CyberDojo. It's less than 500MB and downloadable from 
&lt;a href="http://dl.dropbox.com/u/22404698/TurnKey-CyberDojo-20110610.ova" target="_blank"&gt;
http://dl.dropbox.com/u/22404698/TurnKey-CyberDojo-20110610.ova&lt;/a&gt;.
&lt;br/&gt;
&lt;br/&gt;
Mike Long has written
&lt;a href="http://www.jaggersoft.com/CyberDojoTurnKeyLinuxVirtualBoxserverimageInstructions.pdf" target="_blank"&gt;a pdf on how to set it up&lt;/a&gt;.

&lt;br/&gt;
&lt;br/&gt;
Thankyou to Olve and Mike and to everyone who attended.
&lt;br/&gt;
&lt;br/&gt;

&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-998248619058361221?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/998248619058361221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/06/ndc-cyberdojo.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/998248619058361221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/998248619058361221'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/06/ndc-cyberdojo.html' title='NDC CyberDojos'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-i7Ju3zzetXo/TfW8jPwVyTI/AAAAAAAAA3U/ZQrl8brLxCY/s72-c/UncleBobAndCoreyGoingBeyondPairProgrammingNDC2011Day1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-3296507577604028498</id><published>2011-06-10T06:41:00.009Z</published><updated>2011-07-06T12:27:46.364Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='c and c++'/><category scheme='http://www.blogger.com/atom/ns#' term='singleton'/><category scheme='http://www.blogger.com/atom/ns#' term='legacy'/><category scheme='http://www.blogger.com/atom/ns#' term='refactoring'/><title type='text'>Lean on the Compiler by Hiding (C++)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-DvbNnO9kAeo/TedYbObfcgI/AAAAAAAAA2c/2J6qTn-w2WE/s1600/WorkingWithLegacyCode.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 76px; height: 100px;" src="http://1.bp.blogspot.com/-DvbNnO9kAeo/TedYbObfcgI/AAAAAAAAA2c/2J6qTn-w2WE/s200/WorkingWithLegacyCode.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5613552685293728258" /&gt;&lt;/a&gt;

My &lt;a href="http://jonjagger.blogspot.com/2011/06/lean-on-compiler-by-hiding.html"&gt;Lean on the Java Compiler by Hiding &lt;/a&gt; post has proved quite popular so I've been thinking about if it could also work for C++... It can. I'll use Singleton as a example again. Suppose you have a C++ class like this:

&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;

&lt;pre class="code"&gt;
class legacy
{
public:
    legacy();
    void eg1();
    void eg2();
    ...
};
&lt;/pre&gt;


&lt;pre class="code"&gt;
#include "legacy.hpp"
#include "singleton.hpp"

void legacy::eg1()
{
    singleton::instance()-&gt;call();
}

void legacy::eg2()
{
    singleton::instance()-&gt;call();
}
&lt;/pre&gt;

&lt;br/&gt;

Again, you want to create a seam for singleton access. The first step is to introduce the hiding identifier in the header file:

&lt;br/&gt;
&lt;br/&gt;

&lt;pre class="code"&gt;
class legacy
{
public:
    legacy();
    void eg1();
    void eg2();
    ...
private:
    class singleton;  // &lt;-----
};
&lt;/pre&gt;

&lt;br/&gt;
&lt;br/&gt;

Now &lt;em&gt;Lean on the Compiler&lt;/em&gt;. 
All the calls to &lt;code&gt;singleton::instance()&lt;/code&gt; no longer compile because the global &lt;code&gt;singleton&lt;/code&gt; class is now hidden by the local &lt;code&gt;singleton&lt;/code&gt; class just introduced. 

Next, in the source file add a global variable called &lt;code&gt;instance&lt;/code&gt; of type &lt;code&gt;singleton*&lt;/code&gt; and refactor all occurrences of &lt;code&gt;singleton::instance()&lt;/code&gt; to &lt;code&gt;instance&lt;/code&gt;. 

&lt;pre class="code"&gt;
#include "legacy.hpp"
#include "singleton.hpp"

singleton * instance;

void legacy::eg1()
{
    instance-&gt;call();
}

void legacy::eg2()
{
    instance-&gt;call();
}
&lt;/pre&gt;

&lt;br/&gt;
Then &lt;em&gt;Lean on the Compiler&lt;/em&gt; again to make sure there are no typos.
Next remove the global variable called &lt;code&gt;instance&lt;/code&gt; from the source file and refactor the header file to this:

&lt;br/&gt;
&lt;br/&gt;

&lt;pre class="code"&gt;
class singleton; // &lt;-----

class legacy
{
public:
    legacy();
    void eg1();
    void eg2();
    ...
private:
    singleton * instance; // &lt;-----
};
&lt;/pre&gt;

&lt;br/&gt;
Finally, initialize the &lt;code&gt;instance&lt;/code&gt; member in the constructor definition.
&lt;br/&gt;
&lt;br/&gt;

&lt;pre class="code"&gt;
legacy::legacy()
    : instance(singleton::instance())
{
}
&lt;/pre&gt;

&lt;br/&gt;
I haven't tried this on real legacy code either. Caveat emptor!
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-3296507577604028498?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/3296507577604028498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/06/lean-on-compiler-by-hiding-c.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/3296507577604028498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/3296507577604028498'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/06/lean-on-compiler-by-hiding-c.html' title='Lean on the Compiler by Hiding (C++)'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-DvbNnO9kAeo/TedYbObfcgI/AAAAAAAAA2c/2J6qTn-w2WE/s72-c/WorkingWithLegacyCode.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-3135978961536330393</id><published>2011-06-07T07:11:00.011Z</published><updated>2011-07-06T12:28:04.267Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='singleton'/><category scheme='http://www.blogger.com/atom/ns#' term='legacy'/><category scheme='http://www.blogger.com/atom/ns#' term='refactoring'/><title type='text'>Lean on the Compiler by Hiding (Java)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-DvbNnO9kAeo/TedYbObfcgI/AAAAAAAAA2c/2J6qTn-w2WE/s1600/WorkingWithLegacyCode.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 76px; height: 100px;" src="http://1.bp.blogspot.com/-DvbNnO9kAeo/TedYbObfcgI/AAAAAAAAA2c/2J6qTn-w2WE/s200/WorkingWithLegacyCode.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5613552685293728258" /&gt;&lt;/a&gt;

Here's a small trick which might not be out of place in Michael Feather's excellent book. 
I'll use Singleton as a example. Suppose you have a class like this (Java):

&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;

&lt;pre class="code"&gt;
public class Legacy
{
    public void eg1()
    {
        stuff(Singleton.getInstance().call());
    }
    public void eg2()
    {
        more_stuff(Singleton.getInstance().call());
    }
}
&lt;/pre&gt;

&lt;br/&gt;
And you want to create a seam for the singleton access. The first step is to introduce two public fields:

&lt;br/&gt;
&lt;br/&gt;

&lt;pre class="code"&gt;
public class Legacy
{
    public int Singleton;
    public Singleton instance;

    public void eg1()
    {
        stuff(Singleton.getInstance().call());
    }
    public void eg2()
    {
        more_stuff(Singleton.getInstance().call());
    }
}
&lt;/pre&gt;

&lt;br/&gt;
Now &lt;em&gt;Lean on the Compiler&lt;/em&gt;.
All the calls to &lt;code&gt;Singleton.getInstance()&lt;/code&gt; no longer compile because the Singleton class is now &lt;em&gt;hidden&lt;/em&gt; by the &lt;code&gt;int Singleton&lt;/code&gt; just introduced. 
Next refactor all occurences of &lt;code&gt;Singleton.getInstance()&lt;/code&gt; to &lt;code&gt;instance&lt;/code&gt; (the other identifier just introduced, you can pick any name for this one but it's type must be Singleton).
&lt;br/&gt;
&lt;br/&gt;
&lt;pre class="code"&gt;
public class Legacy
{
    public int Singleton;
    public Singleton instance;

    public void eg1()
    {
        stuff(instance.call());
    }
    public void eg2()
    {
        more_stuff(instance.call());
    }
}
&lt;/pre&gt;

&lt;br/&gt;
Then &lt;em&gt;Lean on the Compiler&lt;/em&gt; again to make sure there's no typos.
Finally refactor to this:
&lt;br/&gt;
&lt;br/&gt;

&lt;pre class="code"&gt;
public class Legacy
{
    public Singleton instance = Singleton.getInstance();

    public void eg1()
    {
        stuff(instance.call());
    }
    public void eg2()
    {
        more_stuff(instance.call());
    }
}
&lt;/pre&gt;

&lt;br/&gt;
The name lookup rules for Java allow this to work but I don't think this idea
will work in C++ (for example). I haven't got time to try it now as I'm heading off to the NDC conference in Oslo. I only thought of it yesterday. 
I haven't tried this on real legacy code.
Caveat emptor!
&lt;br/&gt;
&lt;br/&gt;
Update. I have a &lt;a href="http://jonjagger.blogspot.com/2011/06/lean-on-compiler-by-hiding-c.html"&gt;C++ version&lt;/a&gt;  aswell.
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-3135978961536330393?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/3135978961536330393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/06/lean-on-compiler-by-hiding.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/3135978961536330393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/3135978961536330393'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/06/lean-on-compiler-by-hiding.html' title='Lean on the Compiler by Hiding (Java)'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-DvbNnO9kAeo/TedYbObfcgI/AAAAAAAAA2c/2J6qTn-w2WE/s72-c/WorkingWithLegacyCode.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-3523563711171700256</id><published>2011-06-02T09:23:00.011Z</published><updated>2011-06-07T09:14:47.376Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='dependency'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='legacy'/><category scheme='http://www.blogger.com/atom/ns#' term='refactoring'/><title type='text'>Adapt Parameter and Preserve Signature</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-DvbNnO9kAeo/TedYbObfcgI/AAAAAAAAA2c/2J6qTn-w2WE/s1600/WorkingWithLegacyCode.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 76px; height: 100px;" src="http://1.bp.blogspot.com/-DvbNnO9kAeo/TedYbObfcgI/AAAAAAAAA2c/2J6qTn-w2WE/s200/WorkingWithLegacyCode.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5613552685293728258" /&gt;&lt;/a&gt;

Working Effectively With Legacy Code by Michael Feathers (isbn 0-13-117705-2is a great book. The very first dependency breaking technique (p326) is called Adapt Parameter. It uses this Java example:
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;pre class="code"&gt;
public class ARMDispatcher
{
    public void populate(ParameterSource request) {
        String[] values
            = request.getParameters(pageStateName);
        if (values != null &amp;&amp; values.length &gt; 0)
        {
            marketBindings.put( 
                pageStateName + getDateStamp(),
                values[0]);
        }
        ...        
    }
    ...
}
&lt;/pre&gt;
&lt;br/&gt;
&lt;br/&gt;
Michael writes:
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
In this class, the populate method accepts an HttpServletRequest as a parameter. ... It would be great to use &lt;i&gt;Extract Interface&lt; (362)&lt;/i&gt; to make a narrower interface that supplies only the methods we need, but we can't extract an interface from another interface. ...
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
and a bit later...
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
&lt;i&gt;Adapt Parameter&lt;/i&gt; is one case in which we don't &lt;i&gt;Preserve Signatures (312)&lt;/i&gt;. Use extra care.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
Well, here's a variation on &lt;i&gt;Adapt Parameter&lt;/i&gt; where we &lt;b&gt;do&lt;/b&gt; &lt;i&gt;Preserve Signatures&lt;/i&gt;. I'll stick with the Java example, but the idea is broadly applicable...&lt;br/&gt;
&lt;br/&gt;
First we create our ParameterSource interface and fill it with the signatures of the methods in HttpServletRequest that our populate method calls:
&lt;br/&gt;
&lt;br/&gt;
&lt;pre class="code"&gt;
public interface ParameterSource
{
    String[] getParameters(String name);
}
&lt;/pre&gt;

then we implement the adapter for HttpServletRequest:

&lt;pre class="code"&gt;
public class HttpServletRequestParameterSource 
    implements ParameterSource
{
    public HttpServletRequestParameterSource(HttpServletRequest request) {
        this.request = request;
    }

    public String[] getParameters(String name) {
        return request.getParameters(name);
    }

    private HttpServletRequest request;
}
&lt;/pre&gt;

Next we add an overload of populate taking a ParameterSource and implement it with an &lt;em&gt;exact copy-paste&lt;/em&gt;:

&lt;pre class="code"&gt;
public class ARMDispatcher
{
    public void populate(ParameterSource request) {
        String[] values
            = request.getParameters(pageStateName);
        if (values != null &amp;&amp; values.length &gt; 0)
        {
            marketBindings.put(
                pageStateName + getDateStamp(),
                values[0]);
        }
        ...        
    }

    public void populate(HttpServletRequest request) {
        String[] values
            = request.getParameters(pageStateName);
        if (values != null &amp;&amp; values.length &gt; 0)
        {
            marketBindings.put(
                pageStateName + getDateStamp(),
                values[0]);
        }
        ...        
    }
    ...
}
&lt;/pre&gt;

Now we &lt;i&gt;Lean on the Compiler (315)&lt;/i&gt; to make sure we haven't missed any methods in HttpServletRequest that our populate method calls. Add any we missed to the ParameterSource interface. Implement them in HttpServletRequestParameterSource as one liners. When it compiles we can refactor to this:

&lt;pre class="code"&gt;
public class ARMDispatcher
{
    public void populate(ParameterSource request) {
        String[] values
            = request.getParameters(pageStateName);
        if (values != null &amp;&amp; values.length &gt; 0)
        {
            marketBindings.put(
                pageStateName + getDateStamp(),
                values[0]);
        }
        ...        
    }

    public void populate(HttpServletRequest request) {
        populate(new HttpServletRequestParameterSource(request));
    }
   ...
}
&lt;/pre&gt;

And now we have a seam we can pick it at...

&lt;pre class="code"&gt;
public class FakeParameterSource 
    implements ParameterSource
{
    public String[] values;

    public String[] getParameters(String name) {
        return values;
    }
}
&lt;/pre&gt;

I've put together &lt;a href="http://81.31.112.23:443/diff/show?avatar=frog&amp;dojo_name=adapt-parameter-and-preserve-signature&amp;tag=25" target="_blank"&gt;a snippet of the above using CyberDojo&lt;/a&gt;&lt;br/&gt;
&lt;br/&gt;
Good luck!
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-3523563711171700256?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/3523563711171700256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/06/adapt-parameter-and-preserve-signature.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/3523563711171700256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/3523563711171700256'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/06/adapt-parameter-and-preserve-signature.html' title='Adapt Parameter and Preserve Signature'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-DvbNnO9kAeo/TedYbObfcgI/AAAAAAAAA2c/2J6qTn-w2WE/s72-c/WorkingWithLegacyCode.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-4646940805752477678</id><published>2011-06-01T09:37:00.003Z</published><updated>2011-06-01T09:52:13.807Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='favourites'/><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='change'/><category scheme='http://www.blogger.com/atom/ns#' term='zen'/><title type='text'>Tao Te Ching</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-cjixseHZO3c/TeYIi-0gPSI/AAAAAAAAA2Q/NZv88KFU98A/s1600/TheTaoOfPower.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://4.bp.blogspot.com/-cjixseHZO3c/TeYIi-0gPSI/AAAAAAAAA2Q/NZv88KFU98A/s200/TheTaoOfPower.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5613183382635691298" /&gt;&lt;/a&gt;

is an excellent book translated by R.L.Wing (isbn 0-7225-3491-4). As usual I'm going to quote from a few pages

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
In trying to understand a work like the Tao Te Ching, it is important to keep in mind that Chinese characters are not so much representations of words as they are symbols of ideas.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Because of its idea-embedded nature, the Tao Te Ching is a work that brings truth to the adage: It is better to read one book one-hundred times than one-hundred books one time.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
True power is the ability to influence and change the world while living a simple, intelligent, and experientially rich existence.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Simplicity in conduct, in beliefs, and in environment brings an individual very close to the truth of reality.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
When expectations are dropped, the mind expands, and reality expands along with the mind.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Nothing exists without the presence of its opposite.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Practice non-interference.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
A house filled with riches Cannot be defended.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Individuals who master themselves become less egocentric
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Evolved Individuals strive to be intuitive, spontaneous, and simple.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Never fall completely into step with current society.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-4646940805752477678?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/4646940805752477678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/06/tao-te-ching.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/4646940805752477678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/4646940805752477678'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/06/tao-te-ching.html' title='Tao Te Ching'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-cjixseHZO3c/TeYIi-0gPSI/AAAAAAAAA2Q/NZv88KFU98A/s72-c/TheTaoOfPower.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-6280475928935331119</id><published>2011-06-01T09:12:00.007Z</published><updated>2011-06-01T09:34:30.966Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='zen'/><title type='text'>Spot the Tao Te Ching Bug</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-dPbrI1x8glo/TeYC8ompCII/AAAAAAAAA2I/YGlMVvhkwFc/s1600/spotTheBug.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 290px; height: 320px;" src="http://4.bp.blogspot.com/-dPbrI1x8glo/TeYC8ompCII/AAAAAAAAA2I/YGlMVvhkwFc/s320/spotTheBug.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5613177226278799490" /&gt;&lt;/a&gt;

Most mornings I read one of the 81 entries in Tao Te Ching .
My copy is called &lt;a href="http://www.amazon.co.uk/Tao-Power-Leadership-Influence-Excellence/dp/0722534914"&gt;The Tao of Power&lt;/a&gt;, translated by R.L.Wing. Highly recommended.
I use dice together with the chart in the picture (from page 19) to make a random selection.
This morning I happened to notice that I never seem to get certain numbers.
Closer inspection of the chart shows why...
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-6280475928935331119?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/6280475928935331119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/06/spot-tao-te-ching-bug.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/6280475928935331119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/6280475928935331119'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/06/spot-tao-te-ching-bug.html' title='Spot the Tao Te Ching Bug'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-dPbrI1x8glo/TeYC8ompCII/AAAAAAAAA2I/YGlMVvhkwFc/s72-c/spotTheBug.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-100534103728149532</id><published>2011-05-31T15:54:00.007Z</published><updated>2011-05-31T18:31:44.245Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='beauty'/><category scheme='http://www.blogger.com/atom/ns#' term='c and c++'/><category scheme='http://www.blogger.com/atom/ns#' term='complexity'/><title type='text'>Pride and revulsion</title><content type='html'>Here's a bug that bit me recently. I wrote a very small quick and dirty TDD header for C in my &lt;a href="http://www.cyber-dojo.com"&gt;CyberDojo&lt;/a&gt;. It has a macro called CHECK_EQ which you use as follows:

&lt;pre class="code"&gt;
CHECK_EQ(int, 42, 9*6);
&lt;/pre&gt;

Part of the macro looks like this:
&lt;pre class="code"&gt;
#define CHECK_EQ(type, expected, actual) \
    ... \
    type e = expected; \
    type a = actual; \
    ... \
&lt;/pre&gt;
Can you see the problem? Well, suppose it's used like this:
&lt;pre class="code"&gt;
    int e = 42;
    CHECK_EQ(int, e, 9*6);
&lt;/pre&gt;
Can you see it now? The problem is that this line in the macro

&lt;pre class="code"&gt;
    type e = expected; \
&lt;/pre&gt;

gets expanded into this line:

&lt;pre class="code"&gt;
    type e = e; \
&lt;/pre&gt;

Ooops. I thought about choosing a very cryptic name instead of x. Perhaps incorporating __LINE__ as a suffix. But I felt there had to be a solution that would &lt;em&gt;always&lt;/em&gt; work. After some thought I came up with this. Brace yourself...

&lt;pre class="code"&gt;
#define CHECK_EQ(type, expected, actual) \
   ...
   if (#expected[0] != 'x') \
   { \
       type x0 = expected; \
       type x1 = actual; \
       ... \
   } \
   else \
   { \
       type y0 = expected; \
       type y1 = actual; \
       ... \
   } \
   ...
&lt;/pre&gt;

Like &lt;a href="http://en.wikipedia.org/wiki/Duff%27s_device" target="_blank"&gt;Tom Duff&lt;/a&gt;, I feel a mixture of pride and revulsion at this discovery.
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-100534103728149532?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/100534103728149532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/05/pride-and-revulsion.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/100534103728149532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/100534103728149532'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/05/pride-and-revulsion.html' title='Pride and revulsion'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-7096753943308674435</id><published>2011-05-26T04:27:00.001Z</published><updated>2011-05-26T06:15:29.127Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='failure'/><title type='text'>The war of art</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-SbM6T2x4V8c/TcpIjh9C-gI/AAAAAAAAA1E/LagHVzqLwq8/s1600/TheWarOfArt.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://1.bp.blogspot.com/-SbM6T2x4V8c/TcpIjh9C-gI/AAAAAAAAA1E/LagHVzqLwq8/s200/TheWarOfArt.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5605372461463042562" /&gt;&lt;/a&gt;

is an excellent book by Steven Pressfield (isbn 0-446-69143-7). As usual I'm going to quote from a few pages

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Every sun casts a shadow, and genius's shadow is Resistance.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The enemy is a very good teacher [Dalai Lama]
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The human being isn't wired to function as an individual.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The truly free individual is free only to the extent of his own self-mastery.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Rationalization is Resistance's spin doctor.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Nothing is as empowering as real-world validation, even if it's for failure.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
That's when I realized I had become a pro. I had not yet had a success. But I had had a real failure.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The professional knows that by toiling beside the front door of technique, he leaves room for genius to enter by the back.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Whatever you can do, or dream you can, begin it. Boldness has genius, magic, and power in it. Begin it now. [Goethe]
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The Self wishes to create, to evolve. The Ego likes things just the way they are.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
We humans seem to have been wired by our evolutionary past to function most comfortably in a tribe of twenty to, say, eight hundred.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-7096753943308674435?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/7096753943308674435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/05/war-of-art.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/7096753943308674435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/7096753943308674435'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/05/war-of-art.html' title='The war of art'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-SbM6T2x4V8c/TcpIjh9C-gI/AAAAAAAAA1E/LagHVzqLwq8/s72-c/TheWarOfArt.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-5559646458011361220</id><published>2011-05-25T07:12:00.000Z</published><updated>2011-05-25T07:28:26.121Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='rubbish technology'/><title type='text'>Kluge</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-v-OSqH9RyQE/TbmXeuZLWHI/AAAAAAAAA0c/QSR5v-KATp0/s1600/Kluge.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://1.bp.blogspot.com/-v-OSqH9RyQE/TbmXeuZLWHI/AAAAAAAAA0c/QSR5v-KATp0/s200/Kluge.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5600674165717424242" /&gt;&lt;/a&gt;

is an excellent book by Gary Marcus (isbn 978-0-571-23652-7). As usual I'm going to quote from a few pages

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The best science, like the best engineering, often comes from understanding not just how things are, but how else they could have been.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
One molecule of DNA polymerase does its job in a perfectly straight-forward fashion, but the other does so in a back-and-forth, herky-jerky way that would drive any rational engineer insane. Nature is prone to making kluges because it doesn't "care" whether its products are perfect or elegant. If something works, it spreads. If it doesn't, it dies out.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
What can evolve at any given point in time is heavily constrained by what has evolved before.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The vast majority of our genetic material evolved &lt;em&gt;in the context of creatures who didn't have language, didn't have culture, and didn't reason deliberately&lt;/em&gt;.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
What is recent is rarely fully debugged.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
our memory is organized to focus primarily on our own experiences.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
other studies have showed that people are more likely to accept falsehoods if they are distracted or put under time pressure.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
organisms tend to value the present far more than the future.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
That which is clumsy is rarely reliable.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
In physics, they have laws; in biology, we have gadgets [Francis Crick]
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The value of imperfections extends far beyond simple balance, however. Scientifically, every kluge contains a clue to our past; wherever there is a cumbersome solution, there is insight into how nature layered our brain together; it is no exaggeration to say that the history of evolution is a history of overlaid technologies, and kluges help expose the seams.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-5559646458011361220?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/5559646458011361220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/05/kluge.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5559646458011361220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5559646458011361220'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/05/kluge.html' title='Kluge'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-v-OSqH9RyQE/TbmXeuZLWHI/AAAAAAAAA0c/QSR5v-KATp0/s72-c/Kluge.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-1336206345509738593</id><published>2011-05-24T06:40:00.009Z</published><updated>2011-05-24T07:35:25.836Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='favourites'/><category scheme='http://www.blogger.com/atom/ns#' term='failure'/><title type='text'>How do you make toast?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-jT4vIHmwQyA/TdtS_OMLklI/AAAAAAAAA1s/8rPlQhKSg_8/s1600/Toast.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://1.bp.blogspot.com/-jT4vIHmwQyA/TdtS_OMLklI/AAAAAAAAA1s/8rPlQhKSg_8/s200/Toast.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5610169006914507346" /&gt;&lt;/a&gt;

I'm doing two days consultancy in Cornwall. Yesterday for the folks at Research Instruments in Falmouth and today for the folks at Absolute Software in Redruth. Both are really great places to work and it's a joy visiting them.
&lt;br/&gt;
&lt;br/&gt;
I'm staying at the Penventon hotel. My usual breakfast routine is tea, porridge, and toast. They have a big silver toaster. You put your slices of bread into the front, it pulls them in slowly, applies a lot of heat, and then drops them down a shute. 
&lt;br/&gt;
&lt;br/&gt;
Yesterday they came out mostly black.
&lt;br/&gt;
&lt;br/&gt;
I tried scraping them with a knife. I won't bother next time. They never taste good when you do that. All I did was create black dust for someone to waste time cleaning up. They didn't taste good. I didn't eat them. 
&lt;br/&gt;
&lt;br/&gt;
I was reminded of the joke:
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
How do you make toast?
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;blockquote&gt;
You burn bread and scrape the burn off.
&lt;/blockquote&gt;
&lt;br/&gt;
Today I put my toast in the same as before. The toaster slowly pulled them in, applied heat, and dropped them down the chute. The slices were under toasted this time. So I put the slices in again. The toaster pulled them in again, applied heat again, and dropped them down the chute again. Just right. No knives. No scraping. No black dust. No cleaning up. I added marmalade. I ate them. Lovely.
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-1336206345509738593?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/1336206345509738593/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/05/stoastsoftware.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/1336206345509738593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/1336206345509738593'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/05/stoastsoftware.html' title='How do you make toast?'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-jT4vIHmwQyA/TdtS_OMLklI/AAAAAAAAA1s/8rPlQhKSg_8/s72-c/Toast.JPG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-2726281760286509271</id><published>2011-05-19T17:29:00.003Z</published><updated>2011-05-19T17:48:14.314Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='change'/><title type='text'>Free</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-CHr9C_PyWNE/TdVX2A8JkGI/AAAAAAAAA1k/-tGre0_zUFI/s1600/Free.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://1.bp.blogspot.com/-CHr9C_PyWNE/TdVX2A8JkGI/AAAAAAAAA1k/-tGre0_zUFI/s200/Free.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5608485496436658274" /&gt;&lt;/a&gt;

is an excellent book by Chris Anderson (isbn 978-1-9052-1148-7). As usual I'm going to quote from a few pages

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The internet is the first distribution system in history that is as well suited for the niche as for the mass, for the obscure as well as the mainstream.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Just as Moore's Law dictates that a unit of computer processing power halves in price every two years, the price of bandwidth and storage is dropping even faster.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
For most of human history manure has determined how much food we had... Historians often look at the great civilizations of the ancient world through the lens of three grains: rice, wheat, and corn. Rice is protein rich but extremely hard to grow. Wheat is easy to grow but protein poor. Only corn is both easy to grow and plump with protein.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Humans are wired to understand scarcity better than abundance.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
At some point in your life, you may wake up and realize that you have more money than time.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
What [Alan] Kay realized was that a technologist's job is not to figure out what technology is good for. Instead it is to make technology so cheap, easy to use, and ubiquitous that anybody can use it.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Abundant information wants to be free. Scarce information wants to be expensive.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Paradoxes are the opposite of contradictions. Contradictions shut themselves down, but paradoxes keep themselves going, because every time you acknowledge the truth of one side you're going to get caught from behind by the truth on the other side.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Information is what British anthropologist Gregory Bateson described as "a difference that makes a difference."
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The electricity consumed by a server now costs more over the life of that server than the server itself.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Rather than depriving life of purpose, material abundance created a scarcity of meaning.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-2726281760286509271?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/2726281760286509271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/05/free.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/2726281760286509271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/2726281760286509271'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/05/free.html' title='Free'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-CHr9C_PyWNE/TdVX2A8JkGI/AAAAAAAAA1k/-tGre0_zUFI/s72-c/Free.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-96620296234292225</id><published>2011-05-11T08:06:00.004Z</published><updated>2011-05-11T08:25:22.586Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='deliberate practice'/><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='learning'/><title type='text'>Bounce</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-1m10oNVE7Pw/TcpD32sjLmI/AAAAAAAAA08/pIl5SEUFrhA/s1600/bounce.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://3.bp.blogspot.com/-1m10oNVE7Pw/TcpD32sjLmI/AAAAAAAAA08/pIl5SEUFrhA/s200/bounce.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5605367313070239330" /&gt;&lt;/a&gt;

is an excellent book by Matthew Syed, subtitled The myth of talent and the power of practice (isbn 978-0-00-73505404). As usual I'm going to quote from a few pages

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Ericsson also found that there were no exceptions to this pattern: nobody who had reached the elite group without copious practice, and nobody who had worked their socks off but failed to excel.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
It is the quality and quantity of practice, not genes, that is driving progress.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The ascendency of the &lt;em&gt;mental and the acquired&lt;/em&gt; over the &lt;em&gt;physical and the innate&lt;/em&gt; has been confirmed again and again.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
My dad never asked me to play golf. I asked him. [Tiger Woods]
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Child prodigies do not have unusual genes; they have unusual upbringings.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Top skaters fall over more during their practice sessions.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
But while the adaptability of the human body is impressive, it is the plasticity of the brain that has astonished researchers.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
If you don't know what you are doing wrong, you can never know what you are doing right.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
'These were some of the clearest findings I've ever seen,' &lt;a href="http://jonjagger.blogspot.com/2010/12/mindset.html"&gt;Carol Dweck&lt;/a&gt; said. 'Praising children's intelligence harms their motivation, and it harms their performance.'
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Lowering standards just leads to poorly educated students who feel entitled to easy work and lavish praise. [Carol Dweck]
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Many of the contemporaries of Galileo (inventor of the modern telescope) really did think there was something morally dubious about the telescope; that it was taking humanity beyond the powers expressly sanctioned by God.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-96620296234292225?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/96620296234292225/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/05/bounce.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/96620296234292225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/96620296234292225'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/05/bounce.html' title='Bounce'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-1m10oNVE7Pw/TcpD32sjLmI/AAAAAAAAA08/pIl5SEUFrhA/s72-c/bounce.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-4896868029914935391</id><published>2011-05-05T08:08:00.002Z</published><updated>2011-05-05T13:28:07.998Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><title type='text'>JavaScript: The Good Parts</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-WokuvrIO95U/Tb6D1Q8NaBI/AAAAAAAAA0s/3OlYxo_PjbI/s1600/JavascriptTheGoodParts.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://3.bp.blogspot.com/-WokuvrIO95U/Tb6D1Q8NaBI/AAAAAAAAA0s/3OlYxo_PjbI/s200/JavascriptTheGoodParts.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5602059937599285266" /&gt;&lt;/a&gt;

is an excellent book by Douglas Crockford (isbn 978-0-596-51774-8). As usual I'm going to quote from a few pages
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
This is not a book for beginners... This book is small but it is dense. There is a lot of material packed into it. Don't be discouraged if it takes multiple readings to get it. Your efforts will be rewarded.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
JavaScript's popularity is almost completely independent of its qualities as a programming language.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
JavaScript is the first lambda language to go mainstream. Deep down, JavaScript has more in common with Lisp and Scheme than with Java.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
strong typing does not eliminate the need for careful testing.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
despite its deficiencies, JavaScript is really good. 
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Unlike many other languages, blocks in JavaScript do not create a new scope, so variables should be defined at the top of the function, not in blocks.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
An object is a container of properties, where a property has a name and a value. A property name can be any string, including the empty string. A property value can be any JavaScript value except for undefined.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
An inner function also enjoys access to the parameters and variables of the functions it is nested within... This is called &lt;em&gt;closure&lt;/em&gt;. This is the source of enormous expressive power.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
That act of nothingness gives us confidence that the function does not recurse forever.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
What matters about an object is what it can do, not what it is descended from. JavaScript provides a much richer set of code reuse patterns.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Much of the complexity of class hierarchies is motivated by the constraints of static type checking.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;pre&gt;
var memoizer = function(memo, formula) {
    var recur = function(n) {
        var result = memo[n];
        if (typeof result !== 'number') {
            result = formula(recur, n);
            memo[n] = result;
        }
        return result;
    };
    return recur;
};

var fibonacci = memoizer([0, 1], function(recur, n) {
    return recur(n - 1) + recur(n - 2);
});
&lt;/pre&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-4896868029914935391?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/4896868029914935391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/05/javascript-good-parts.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/4896868029914935391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/4896868029914935391'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/05/javascript-good-parts.html' title='JavaScript: The Good Parts'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-WokuvrIO95U/Tb6D1Q8NaBI/AAAAAAAAA0s/3OlYxo_PjbI/s72-c/JavascriptTheGoodParts.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-5351635319705892871</id><published>2011-05-04T08:12:00.000Z</published><updated>2011-05-04T08:12:00.083Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='simplicity'/><category scheme='http://www.blogger.com/atom/ns#' term='complexity'/><title type='text'>Simple and Usable</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-zwF-HdYx1Dg/TbmQnmMVgpI/AAAAAAAAA0U/k9WYdcMplO0/s1600/SimpleAndUsable.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://3.bp.blogspot.com/-zwF-HdYx1Dg/TbmQnmMVgpI/AAAAAAAAA0U/k9WYdcMplO0/s200/SimpleAndUsable.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5600666621553509010" /&gt;&lt;/a&gt;

is an excellent book by Giles Colborne (isbn 0-321-70354-5). As usual I'm going to quote from a few pages

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
If you ask people they'll say everything is important and anything is feasible.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
We tend to keep things, even when they're broken.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Your first design may seem like a solution, but it's usually just an early definition of the problem you are trying to solve. Luke Wroblewski.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Broken gets fixed. Shoddy lasts forever. Jack Moffett.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Feature lists sell so as long customers don't get a chance to use the product.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Mainstreamers want "good enough quickly;" experts want "perfect in as long as it takes."
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
People prefer to be pilots, not passengers.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
"Seven plus or minus two." Many psychologists now believe short-term memory may be rather smaller - perhaps just four items.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Simple organization is about what feels good as you're using the software, not what looks logical in a plan.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Designing simple user experiences often turns out not to be about "How can I make this simple?" but rather "Where should I move the complexity?"
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The secret to creating a simple user experience is to shift complexity into the right place, so that each moment feels simple.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Don't try to fill your user's mind with your design.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-5351635319705892871?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/5351635319705892871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/05/simple-and-usable.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5351635319705892871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5351635319705892871'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/05/simple-and-usable.html' title='Simple and Usable'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-zwF-HdYx1Dg/TbmQnmMVgpI/AAAAAAAAA0U/k9WYdcMplO0/s72-c/SimpleAndUsable.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-8277147167448780540</id><published>2011-05-03T08:12:00.000Z</published><updated>2011-05-03T08:12:00.540Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='book review'/><category scheme='http://www.blogger.com/atom/ns#' term='feedback'/><category scheme='http://www.blogger.com/atom/ns#' term='time'/><category scheme='http://www.blogger.com/atom/ns#' term='learning'/><title type='text'>Nudge</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-aucI-AUr6Uk/TbmZr7EWH4I/AAAAAAAAA0k/nAAl1SURhx8/s1600/Nudge.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://1.bp.blogspot.com/-aucI-AUr6Uk/TbmZr7EWH4I/AAAAAAAAA0k/nAAl1SURhx8/s200/Nudge.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5600676591481266050" /&gt;&lt;/a&gt;


is an excellent book by  Richard Thaler and Cass Sunstein (isbn 978-0-141-04001-1). As usual I'm going to quote from a few pages

&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
School children, like adults, can be greatly influenced by small changes in the context.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
There is no such things as a 'neutral design.'
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Roughly speaking, losing something makes you twice as miserable as gaining the same same thing makes you happy. In more technical language, people are 'loss averse'... Loss aversion helps produce inertia.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Most teachers know that students tend to sit in the same seats in class, even without a seating chart.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Eating turns out to be one of the most mindless activities we do. Many of us simply eat what is put in front of us.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Social scientists generally find less conformity, in the same basic circumstances as Asch's experiments, when people are asked to give anonymous answers.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
On average, those who eat with one other person eat about 35 percent more than they do when they are alone; members of a group of four eat about 75 percent more; those in groups of seven or more eat 96 percent more.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Self-control issues are most likely to arise when choices and their consequences are separated in time.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Even hard problems become easier with practice.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
The best way to help Humans improve their performance is to provide feedback.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
For most of their time on earth, Humans did not have to worry much about saving for retirement, because most people did not live long enough to have much of a retirement period.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-8277147167448780540?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/8277147167448780540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/05/nudge.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/8277147167448780540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/8277147167448780540'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/05/nudge.html' title='Nudge'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-aucI-AUr6Uk/TbmZr7EWH4I/AAAAAAAAA0k/nAAl1SURhx8/s72-c/Nudge.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-6758961597059341380</id><published>2011-05-02T08:12:00.000Z</published><updated>2011-05-02T08:12:00.378Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='c and c++'/><category scheme='http://www.blogger.com/atom/ns#' term='jokes'/><title type='text'>public: footpath</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-kLVg5o57gPU/Tblmi0yCNBI/AAAAAAAAAz8/PC1akHqKKLU/s1600/Walk.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/-kLVg5o57gPU/Tblmi0yCNBI/AAAAAAAAAz8/PC1akHqKKLU/s320/Walk.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5600620360082011154" /&gt;&lt;/a&gt;

You know you know C++ when you see a sign like this and you think, "there's a colon missing after public."
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-6758961597059341380?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/6758961597059341380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/05/public-footpath.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/6758961597059341380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/6758961597059341380'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/05/public-footpath.html' title='public: footpath'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-kLVg5o57gPU/Tblmi0yCNBI/AAAAAAAAAz8/PC1akHqKKLU/s72-c/Walk.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-421643080468684713</id><published>2011-05-01T08:12:00.003Z</published><updated>2011-05-01T11:01:44.578Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='visibility'/><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='dont rush'/><category scheme='http://www.blogger.com/atom/ns#' term='jerry-weinberg'/><category scheme='http://www.blogger.com/atom/ns#' term='xp'/><category scheme='http://www.blogger.com/atom/ns#' term='think team'/><title type='text'>Some rules of thumb</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-jJvrb54WEF8/Tbly22uLp_I/AAAAAAAAA0M/N1dH9OA-dJs/s1600/Thumb.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://2.bp.blogspot.com/-jJvrb54WEF8/Tbly22uLp_I/AAAAAAAAA0M/N1dH9OA-dJs/s200/Thumb.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5600633898339641330" /&gt;&lt;/a&gt;

&lt;h2&gt;Don't rush&lt;/h2&gt;
I don't think I can put it any better than Jerry Weinberg did when 
&lt;a href="http://jonjagger.blogspot.com/2010/09/interview-with-jerry-weinberg.html"&gt;I interviewed him&lt;/a&gt;:
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Things take the time they take, not the time you hope they will take. Pushing for half-time produces half-baked. 
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
As a self-employed software coach/consultant I get to travel a lot and visit a lot of companies. At the best companies there is a palpable sense of not rushing.

&lt;h2&gt;Think team&lt;/h2&gt;
Software development is all about collaborative learning.
I think one of the weakest points of the &lt;a href="http://agilemanifesto.org/"&gt;Agile Manifesto&lt;/a&gt; is it's lack of emphasis on teams. The very first word of the four "X over Y" statements is &lt;em&gt;Individuals&lt;/em&gt; :-(
&lt;a href="http://en.wikipedia.org/wiki/Extreme_Programming"&gt;XP&lt;/a&gt; at least takes a firm step beyond programming as an individual activity by mandating pair programming. I look at Sit Together, a practice from XP1 and I think s/Sit/X/. In other words, whatever X is, X Together.

&lt;h2&gt;Increase visibility&lt;/h2&gt;
Software and the process of developing it can be, to paraphrase Douglas Adams, &lt;em&gt;mostly invisible&lt;/em&gt;.
You think more clearly when you have something concrete to tie your thinking to. You manage things better when you can see them and see them constantly changing. It's no accident that Kanban boards are as popular as they are. 

&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-421643080468684713?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/421643080468684713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/05/some-rules-of-thumb.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/421643080468684713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/421643080468684713'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/05/some-rules-of-thumb.html' title='Some rules of thumb'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-jJvrb54WEF8/Tbly22uLp_I/AAAAAAAAA0M/N1dH9OA-dJs/s72-c/Thumb.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-5746395644928542043</id><published>2011-04-30T08:12:00.002Z</published><updated>2011-04-30T14:10:10.625Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='complexity'/><category scheme='http://www.blogger.com/atom/ns#' term='time'/><title type='text'>Things are the way they are because they got that way</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-EovrtkNuxP8/TblsPMUI7lI/AAAAAAAAA0E/v54vTxP_sbo/s1600/messyKitchen.jpeg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://4.bp.blogspot.com/-EovrtkNuxP8/TblsPMUI7lI/AAAAAAAAA0E/v54vTxP_sbo/s200/messyKitchen.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5600626619871456850" /&gt;&lt;/a&gt;

If you're working on a complex codebase and you're trying to understand the complexity by looking at the codebase then you're looking &lt;em&gt;in the wrong place&lt;/em&gt;. That's like the man in &lt;a href="http://jonjagger.blogspot.com/2010/04/peopleware.html"&gt;Peopleware&lt;/a&gt; who loses his keys in a dark street and looks for them in the adjacent street because, as he explains, "the light is better there". A codebase is the way it is because &lt;em&gt;it got that way&lt;/em&gt;. Slowly. Over time. If you're looking at the code your looking at the effect and not at the cause. It was the developers that did it!
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Things are the way they are because they got that way.
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-5746395644928542043?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/5746395644928542043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/04/things-are-way-they-are-because-they.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5746395644928542043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5746395644928542043'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/04/things-are-way-they-are-because-they.html' title='Things are the way they are because they got that way'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-EovrtkNuxP8/TblsPMUI7lI/AAAAAAAAA0E/v54vTxP_sbo/s72-c/messyKitchen.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-5750494913047954073</id><published>2011-04-29T08:12:00.000Z</published><updated>2011-04-29T09:03:30.460Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='visibility'/><category scheme='http://www.blogger.com/atom/ns#' term='jokes'/><title type='text'>Increase visibility</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-QQULfKfwy0Y/Tbfzdk2qUDI/AAAAAAAAAzU/kPVapVR34pM/s1600/clear_perspex"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 112px; height: 113px;" src="http://2.bp.blogspot.com/-QQULfKfwy0Y/Tbfzdk2qUDI/AAAAAAAAAzU/kPVapVR34pM/s200/clear_perspex" border="0" alt=""id="BLOGGER_PHOTO_ID_5600212351093198898" /&gt;&lt;/a&gt;

My sister Alix and I were chatting about work-related stupidity we'd imagined and experienced.
Strict quotas on how much time you're allowed for going to the toilet for example.
Naturally the time-allowed for no 2's would be longer than the time allowed for no 1s. 
But how would the managers police the quotas? 
The answer, we realized, was specialist plumbing.
Take out the old copper pipes and put in clear perspex pipes instead. 
Plumb them through the managers office, at eye level. 
Purpose built hardware probes, available at reasonable cost, would measure the volume of shit. 
The probes would wirelessly connect to ShitLogger (tm) an app for monitoring the volume of shit against the quotas. 
To log the logs, as it were. 

&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-5750494913047954073?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/5750494913047954073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/04/increase-visibility.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5750494913047954073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/5750494913047954073'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/04/increase-visibility.html' title='Increase visibility'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-QQULfKfwy0Y/Tbfzdk2qUDI/AAAAAAAAAzU/kPVapVR34pM/s72-c/clear_perspex' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-393185464795844531</id><published>2011-04-28T09:37:00.002Z</published><updated>2011-04-28T11:44:37.909Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='time'/><category scheme='http://www.blogger.com/atom/ns#' term='systems thinking'/><category scheme='http://www.blogger.com/atom/ns#' term='accu'/><title type='text'>Recency</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-jGE1uUJssZs/TblL6tjyKKI/AAAAAAAAAzc/w2EqfXuofQY/s1600/ClockHands.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 174px;" src="http://4.bp.blogspot.com/-jGE1uUJssZs/TblL6tjyKKI/AAAAAAAAAzc/w2EqfXuofQY/s200/ClockHands.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5600591083646101666" /&gt;&lt;/a&gt;


I've &lt;a href="http://jonjagger.blogspot.com/2009/09/desert-island-books.html"&gt;written before&lt;/a&gt; that:
&lt;br/&gt;
&lt;br/&gt;
&lt;blockquote&gt;
Human beings have evolved a very strong association that cause and effect are simple and linear; that cause and effect are local in space and time. 
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
One of example of this is when contestants on Who Wants To Be a Millionaire phone a friend. It's easy to think that the friend could simply watch the program and start trying to find the answer before they're called. They can't. What you're watching happened some time in the past. The program is not live.
&lt;br/&gt;
&lt;br/&gt;
Another example is this blog! At the recent &lt;a href="http://accu.org/index.php/conferences/accu_conference_2011"&gt;ACCU conference&lt;/a&gt; several people commented on what a fast reader I was. I often blog three or four &lt;a href="http://jonjagger.blogspot.com/p/book-snippets.html"&gt;book snippets&lt;/a&gt; in a week. And I am learning to increase my reading speed. And I do read a lot. But it's an illusion. I have a stock of hundreds of books I've already read and all the best bits from them are already marked. I simply take a book from my shelf and blog the best of its best bits as a book snippet. And then put the book onto the ACCU charity book-stall pile. 
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-393185464795844531?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/393185464795844531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/04/recency.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/393185464795844531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/393185464795844531'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/04/recency.html' title='Recency'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-jGE1uUJssZs/TblL6tjyKKI/AAAAAAAAAzc/w2EqfXuofQY/s72-c/ClockHands.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-8410304692709734235</id><published>2011-04-27T09:56:00.003Z</published><updated>2011-04-27T10:23:06.222Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='failure'/><title type='text'>Bad captcha</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-iW__RH72Ysk/TbfuhDeSxCI/AAAAAAAAAzM/HmmhAyXb1NY/s1600/BadCaptcha2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 346px; height: 174px;" src="http://4.bp.blogspot.com/-iW__RH72Ysk/TbfuhDeSxCI/AAAAAAAAAzM/HmmhAyXb1NY/s400/BadCaptcha2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5600206913293960226" /&gt;&lt;/a&gt;


I had this yesterday. I doubt any human could read that!
As my friend Niklas Bjornerstedt tweeted
&lt;br/&gt;
&lt;br/&gt;&lt;blockquote&gt;
captchas are getting so hard to read that only robots will be able to solve them soon
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-8410304692709734235?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/8410304692709734235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/04/bad-captcha.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/8410304692709734235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/8410304692709734235'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/04/bad-captcha.html' title='Bad captcha'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-iW__RH72Ysk/TbfuhDeSxCI/AAAAAAAAAzM/HmmhAyXb1NY/s72-c/BadCaptcha2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-4565680218096664273</id><published>2011-04-22T17:48:00.004Z</published><updated>2011-04-27T10:15:12.635Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='aspergers'/><category scheme='http://www.blogger.com/atom/ns#' term='accu'/><title type='text'>Accu conference charity book stall</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-mJOuuX8w51A/TZl9jg_SnzI/AAAAAAAAAxs/HqfY3oo-Kxw/s1600/accu_books_2011.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://4.bp.blogspot.com/-mJOuuX8w51A/TZl9jg_SnzI/AAAAAAAAAxs/HqfY3oo-Kxw/s320/accu_books_2011.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5591638461461471026" /&gt;&lt;/a&gt;


&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_u9orsdHAiCg/S8qhXDS-BcI/AAAAAAAAAIQ/23tWoeLLmNQ/s1600/AccuCharitySafe.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://3.bp.blogspot.com/_u9orsdHAiCg/S8qhXDS-BcI/AAAAAAAAAIQ/23tWoeLLmNQ/s200/AccuCharitySafe.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5461354915534079426" /&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;br/&gt;
Once again a big thanks to everyone at the accu conference who took a book and made a contribution to the two charities - &lt;a href="http://www.wateraid.org/"&gt;Water Aid&lt;/a&gt; and &lt;a href="http://www.autism.org.uk/"&gt;The National Autism Society&lt;/a&gt; this year. The total raised was a smidgen under £600 which will be split equally. Thanks also to my son Patrick (he has Aspergers Syndrome) for lending me the safe. And thankyou too to several people who brought some books for the stall during the conference. I plan to repeat the stall again in 2012.
&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-4565680218096664273?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/4565680218096664273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/04/accu-conference-charity-book-stall_22.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/4565680218096664273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/4565680218096664273'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/04/accu-conference-charity-book-stall_22.html' title='Accu conference charity book stall'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-mJOuuX8w51A/TZl9jg_SnzI/AAAAAAAAAxs/HqfY3oo-Kxw/s72-c/accu_books_2011.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6714530.post-4493990058615520844</id><published>2011-04-12T17:41:00.001Z</published><updated>2011-04-12T17:46:27.257Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='deliberate practice'/><category scheme='http://www.blogger.com/atom/ns#' term='accu'/><title type='text'>Deliberate practice booklist</title><content type='html'>Kevlin and I have just finished the accu pre-conference tutorial. 
A big thankyou to all the participants. The origin of some of the quotes was a little hard to read as the
printed handouts were a little small. Here is a list of the books quoted:

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://jonjagger.blogspot.com/2009/09/fifth-discipline.html"&gt;The Fifth Discipline&lt;/a&gt; by Peter Senge&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jonjagger.blogspot.com/2010/02/talent-is-overrated.html"&gt;Talent is Overrated&lt;/a&gt; by Geoff Colvin&lt;/li&gt;
&lt;li&gt;Surfing the edge of Chaos by Richard Pascale&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jonjagger.blogspot.com/2010/08/quality-software-management-vol-1.html"&gt;Quality Software Management Vol 1: Systems Thinking&lt;/a&gt; by Jerry Weinberg&lt;/li&gt;
&lt;li&gt;Authentic Happiness by Martin Seligman&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jonjagger.blogspot.com/2010/06/implementing-lean-software-development.html"&gt;Implementing Lean Software Development&lt;/a&gt; by Mary and Tom Poppendeick&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jonjagger.blogspot.com/2010/07/switch-how-to-change-things-when-change.html"&gt;Switch: How to change things when change is hard&lt;/a&gt; by Chip and Dan Heath&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jonjagger.blogspot.com/2010/12/mindset.html"&gt;Mindset&lt;/a&gt; by Carol Dweck&lt;/li&gt;
&lt;li&gt;The Princess Bride by Bill Goldman&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jonjagger.blogspot.com/2010/12/autobiography-of-martin-luther-king-jr.html"&gt;The Autobiography of Martin Luther King Jr&lt;/a&gt; edited by Clayborne Carson&lt;/li&gt;
&lt;/ul&gt;

&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6714530-4493990058615520844?l=jonjagger.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonjagger.blogspot.com/feeds/4493990058615520844/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jonjagger.blogspot.com/2011/04/deliberate-practice-booklist.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/4493990058615520844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6714530/posts/default/4493990058615520844'/><link rel='alternate' type='text/html' href='http://jonjagger.blogspot.com/2011/04/deliberate-practice-booklist.html' title='Deliberate practice booklist'/><author><name>Jon Jagger</name><uri>http://www.blogger.com/profile/11560463167349216675</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/-ax1Ro7FGey0/TekpvNX7leI/AAAAAAAAA2k/IpD_JgWlzog/s220/HelloWorld.jpg'/></author><thr:total>0</thr:total></entry></feed>
