<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" gd:etag="W/&quot;CkENSH0_eip7ImA9WhRaE0U.&quot;"><id>tag:blogger.com,1999:blog-2744082786940441609</id><updated>2012-02-16T08:24:59.342Z</updated><category term="congratulations" /><category term="flash" /><category term="control" /><category term="GLA" /><category term="protocol" /><category term="solution" /><category term="aaron" /><category term="decode" /><category term="live" /><category term="jony" /><category term="rozin" /><category term="bugs" /><category term="development" /><category term="interesting" /><category term="community" /><category term="maven" /><category term="simplify" /><category term="api" /><category term="resolution" /><category term="listener" /><category term="service" /><category term="war" /><category term="iteration" /><category term="chrome" /><category term="bee" /><category term="sprint" /><category term="ip" /><category term="expectations" /><category term="huggett" /><category term="mouse" /><category term="message" /><category term="xpath" /><category term="video" /><category term="expectation" /><category term="email" /><category term="username" /><category term="interactivity" /><category term="oyster" /><category term="scalable" /><category term="line" /><category term="balance" /><category term="goose" /><category term="facebook" /><category term="amanda" /><category term="trade" /><category term="whiteboard" /><category term="workshop" /><category term="java" /><category term="authentication" /><category term="engineering" /><category term="studies" /><category term="span" /><category term="putty" /><category term="delivery" /><category term="native" /><category term="hewzulla" /><category term="rosshuggett" /><category term="moores" /><category term="ui" /><category term="rooms" /><category term="weaver" /><category term="build" /><category term="churchill" /><category term="practices" /><category term="stability" /><category term="mac" /><category term="soapui" /><category term="design" /><category term="framework" /><category term="content" /><category term="error" /><category term="semi-conductor" /><category term="subversion" /><category term="google" /><category term="hall" /><category term="mail" /><category term="activity" /><category term="roosegaarde" /><category term="red" /><category term="benefits" /><category term="bertrand" /><category term="shoot" /><category term="client" /><category term="quote" /><category term="flight" /><category term="status" /><category term="need" /><category term="feel" /><category term="inversion" /><category term="situation" /><category term="customisation" /><category term="wsdl" /><category term="command" /><category term="snapshot" /><category term="osx" /><category term="application" /><category term="police" /><category term="dominate" /><category term="logo" /><category term="interface" /><category term="f-14" /><category term="ubicomp" /><category term="clutter" /><category term="plugin" /><category term="aggregated" /><category term="systems" /><category term="planning" /><category term="continuum" /><category term="executeprocess" /><category term="uml" /><category term="access" /><category term="code" /><category term="cordys" /><category term="prepare" /><category term="firewall" /><category term="london" /><category term="usability" /><category term="update" /><category term="screen" /><category term="ieee" /><category term="speed" /><category term="finger" /><category term="revision" /><category term="conversational" /><category term="cycle" /><category term="connect" /><category term="sftp" /><category term="engine" /><category term="gym" /><category term="basecamp" /><category term="files" /><category term="ssh" /><category term="high" /><category term="koblin" /><category term="socail" /><category term="minimalistic" /><category term="post" /><category term="properties" /><category term="concentration" /><category term="footy" /><category term="icloud" /><category term="blackberry" /><category term="scrum" /><category term="pervasive" /><category term="sql" /><category term="task" /><category term="twitter" /><category term="server" /><category term="index" /><category term="exception" /><category term="steve" /><category term="standards" /><category term="emergency" /><category term="debt" /><category term="health" /><category term="questions" /><category term="foursquare" /><category term="ftp" /><category term="management" /><category term="problem" /><category term="mobile" /><category term="frank" /><category term="visual" /><category term="suite" /><category term="web" /><category term="sagnier" /><category term="cabinet" /><category term="unit" /><category term="cousin" /><category term="daniel" /><category term="ross" /><category term="daan" /><category term="goal" /><category term="jar" /><category term="product" /><category term="test" /><category term="iphone" /><category term="grumman" /><category term="css" /><category term="spring" /><category term="dependancy" /><category term="keyboard" /><category term="realtime" /><category term="top" /><category term="scp" /><category term="frustration" /><category term="injection" /><category term="promise" /><category term="review" /><category term="alphabet" /><category term="future" /><category term="estimate" /><category term="xml" /><category term="abstract" /><category term="lifecycle" /><category term="business" /><category term="authority" /><category term="technical" /><category term="retrospective" /><category term="refactoring" /><category term="hashtable" /><category term="slow" /><category term="controls" /><category term="local" /><category term="driven" /><category term="esb" /><category term="object" /><category term="datastore" /><category term="com" /><category term="pom" /><category term="trades" /><category term="machine" /><category term="minimal" /><category term="bash" /><category term="gaming" /><category term="user" /><category term="case" /><category term="style" /><category term="photo" /><category term="android" /><category term="dilshat" /><category term="posix" /><category term="people" /><category term="integration" /><category term="city" /><category term="software" /><category term="layton" /><category term="patience" /><category term="html" /><category term="national" /><category term="tweet" /><category term="testing" /><category term="stories" /><category term="release" /><category term="requirements" /><category term="automation" /><category term="architecture" /><category term="frost" /><category term="computing" /><category term="simplicity" /><category term="users" /><category term="rules" /><category term="media" /><category term="wiki" /><category term="javascript" /><category term="gun" /><category term="debugging" /><category term="mule" /><category term="box" /><category term="apple" /><category term="mirror" /><category term="maverick" /><category term="jira" /><category term="environment" /><category term="paul" /><category term="curl" /><category term="complexity" /><category term="museum" /><category term="greater" /><category term="royal" /><category term="processes" /><category term="download" /><category term="find" /><category term="developers" /><category term="agile" /><category term="mig-28" /><category term="payet" /><category term="artifact" /><category term="class" /><category term="windows" /><category term="complicated" /><category term="404" /><category term="port" /><category term="database" /><category term="rfid" /><category term="deploy" /><category term="linux" /><category term="apache" /><category term="run-time" /><category term="pair" /><category term="guide" /><category term="tool" /><category term="law" /><category term="mote" /><category term="process" /><category term="ubiquitous" /><category term="programming" /><category term="experience" /><category term="card" /><category term="goals" /><category term="communication" /><category term="simple" /><category term="first" /><category term="james" /><category term="metropolitian" /><category term="blog" /><category term="orientated" /><category term="time" /><category term="tests" /><category term="winscp" /><category term="jobs" /><category term="conneely" /><category term="nicholson" /><category term="nodes" /><category term="tunnel" /><category term="search" /><category term="house" /><category term="microsoft" /><category term="exit" /><category term="connectivity" /><category term="digital" /><category term="failure" /><category term="ive" /><category term="axis" /><category term="cards" /><category term="data" /><category term="reader" /><category term="password" /><category term="netcat" /><category term="david" /><category term="estimation" /><title>rosshuggett.com</title><subtitle type="html">a blog by ross huggett</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.rosshuggett.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.rosshuggett.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Ross Huggett</name><uri>https://profiles.google.com/107463336886464284752</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-Rni2annsJ3Q/AAAAAAAAAAI/AAAAAAAAAPY/dt78pxzClto/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>35</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/rosshuggett" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="rosshuggett" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;D0YBRno7fyp7ImA9WhRWEEQ.&quot;"><id>tag:blogger.com,1999:blog-2744082786940441609.post-5020187466200570086</id><published>2011-12-28T17:50:00.000Z</published><updated>2011-12-28T17:59:17.407Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-28T17:59:17.407Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="service" /><category scheme="http://www.blogger.com/atom/ns#" term="ive" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="simplicity" /><category scheme="http://www.blogger.com/atom/ns#" term="user" /><category scheme="http://www.blogger.com/atom/ns#" term="minimal" /><category scheme="http://www.blogger.com/atom/ns#" term="dominate" /><category scheme="http://www.blogger.com/atom/ns#" term="experience" /><category scheme="http://www.blogger.com/atom/ns#" term="style" /><category scheme="http://www.blogger.com/atom/ns#" term="apple" /><category scheme="http://www.blogger.com/atom/ns#" term="clutter" /><category scheme="http://www.blogger.com/atom/ns#" term="visual" /><category scheme="http://www.blogger.com/atom/ns#" term="control" /><category scheme="http://www.blogger.com/atom/ns#" term="product" /><category scheme="http://www.blogger.com/atom/ns#" term="simplify" /><category scheme="http://www.blogger.com/atom/ns#" term="jobs" /><category scheme="http://www.blogger.com/atom/ns#" term="simple" /><category scheme="http://www.blogger.com/atom/ns#" term="steve" /><category scheme="http://www.blogger.com/atom/ns#" term="jony" /><category scheme="http://www.blogger.com/atom/ns#" term="minimalistic" /><title>Simplicity is the ultimate sophistication</title><content type="html">I can't take credit for the title of this post. It's one of &lt;a href="http://en.wikipedia.org/wiki/Steve_Jobs"&gt;Steve Jobs&lt;/a&gt; maxims and was used in Apple's first brochure. I also like "less is more" and after reading his autobiography, I liked the fact that he pushed to remove and simplify at every step of product development.&lt;br /&gt;
&lt;br /&gt;
We are constantly told to simplify a product or service but never really told why or how. I&amp;nbsp;particularly liked &lt;a href="http://en.wikipedia.org/wiki/Jonathan_Ive"&gt;Jony Ive&lt;/a&gt;'s philosophy. He said that we like simple products or services because we feel like we can dominate them.&lt;br /&gt;
&lt;br /&gt;
This is a great way to look at it because if we feel like we can dominate them, we are more likely to feel like we are in control and consequently, use them more.&lt;br /&gt;
&lt;br /&gt;
He also said that simplicity isn't just a visual style. It's not just minimalism or the absence of clutter. It involves digging through the depth of complexity. To be really simple, you have to go really deep. You have to understand everything about it and it's essence in order to get rid of the parts which are not essential.&lt;br /&gt;
&lt;br /&gt;
When you look at some of the user experiences in software and the web today, you can immediately tell where the the product or service owner has gone deep and where they haven't.&lt;br /&gt;
&lt;br /&gt;
Can you think of any examples where you can tell? Let me know.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2744082786940441609-5020187466200570086?l=www.rosshuggett.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.rosshuggett.com/feeds/5020187466200570086/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.rosshuggett.com/2011/12/simplicity-is-ultimate-sophistication.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/5020187466200570086?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/5020187466200570086?v=2" /><link rel="alternate" type="text/html" href="http://www.rosshuggett.com/2011/12/simplicity-is-ultimate-sophistication.html" title="Simplicity is the ultimate sophistication" /><author><name>Ross Huggett</name><uri>https://profiles.google.com/107463336886464284752</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-Rni2annsJ3Q/AAAAAAAAAAI/AAAAAAAAAPY/dt78pxzClto/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;A04ASX4zfip7ImA9WhRWEEU.&quot;"><id>tag:blogger.com,1999:blog-2744082786940441609.post-6071036285285514980</id><published>2011-07-17T13:19:00.000+01:00</published><updated>2011-12-28T16:32:28.086Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-28T16:32:28.086Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="rules" /><category scheme="http://www.blogger.com/atom/ns#" term="planning" /><category scheme="http://www.blogger.com/atom/ns#" term="expectations" /><category scheme="http://www.blogger.com/atom/ns#" term="delivery" /><category scheme="http://www.blogger.com/atom/ns#" term="sprint" /><category scheme="http://www.blogger.com/atom/ns#" term="frustration" /><category scheme="http://www.blogger.com/atom/ns#" term="promise" /><category scheme="http://www.blogger.com/atom/ns#" term="estimate" /><category scheme="http://www.blogger.com/atom/ns#" term="client" /><title>If in doubt, under promise and over deliver</title><content type="html">A company I used to work for had 5 fundamental rules which it asked all it's team members to follow, of which number 3 was "Always deliver what we promise. If in doubt, under promise and over deliver".&lt;br /&gt;
&lt;br /&gt;
I always have this rule in the back of my mind during sprint planning as there is always some degree of doubt when you first estimate a task. Therefore, the estimate is usually slightly higher than the amount of time I think it will take me to do the task.&lt;br /&gt;
&lt;br /&gt;
If I come in early, I've exceeded expectations and if I found it was taken me longer than I thought, I come in on time and have matched expectations.&lt;br /&gt;
&lt;br /&gt;
If I didn't follow that rule at all, I would have been late leading to client frustration and loss of trust in the future so I think it's a nice rule to follow sometimes.&lt;br /&gt;
&lt;br /&gt;
What do you think?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2744082786940441609-6071036285285514980?l=www.rosshuggett.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.rosshuggett.com/feeds/6071036285285514980/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.rosshuggett.com/2011/07/if-in-doubt-under-promise-and-over.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/6071036285285514980?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/6071036285285514980?v=2" /><link rel="alternate" type="text/html" href="http://www.rosshuggett.com/2011/07/if-in-doubt-under-promise-and-over.html" title="If in doubt, under promise and over deliver" /><author><name>Ross Huggett</name><uri>https://profiles.google.com/107463336886464284752</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-Rni2annsJ3Q/AAAAAAAAAAI/AAAAAAAAAPY/dt78pxzClto/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CUcFRH84eCp7ImA9WhdTFU0.&quot;"><id>tag:blogger.com,1999:blog-2744082786940441609.post-3094143104955024566</id><published>2011-07-12T21:36:00.000+01:00</published><updated>2011-07-12T21:36:55.130+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-12T21:36:55.130+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="chrome" /><category scheme="http://www.blogger.com/atom/ns#" term="icloud" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><category scheme="http://www.blogger.com/atom/ns#" term="apple" /><title>Thoughts On Native v Cloud Apps a.k.a. UX v Sharing</title><content type="html">With all the recent news of the wonders of the &lt;a href="http://en.wikipedia.org/wiki/Cloud_computing"&gt;cloud&lt;/a&gt; with Apple releasing &lt;a href="http://www.apple.com/icloud"&gt;iCloud&lt;/a&gt; and Google releasing &lt;a href="http://www.google.co.uk/chromebook"&gt;Chromebooks&lt;/a&gt;, I thought I would write a post on my own thoughts on the subject. Feel free to post you own thoughts on this subject by commenting below.&lt;br /&gt;
&lt;br /&gt;
The title of this post could be misleading because it suggests that these are competing technologies, and to some extent, they are. However, they also complement each other in many ways, and when choosing your own strategy, you need to think carefully about what is important to you.&lt;br /&gt;
&lt;br /&gt;
I strongly believe in &lt;a href="http://en.wikipedia.org/wiki/User_experience"&gt;user experience&lt;/a&gt; (UX), it's what I first started off doing in my career and have still have a keen interest in. It's one of the hardest things to get right, but when you do, it's great, and users love it.&lt;br /&gt;
&lt;br /&gt;
In my view, you cannot beat the UX of native apps as they work using the &lt;a href="http://en.wikipedia.org/wiki/Application_programming_interface"&gt;API&lt;/a&gt;'s directly offered to them from the hardware you used to download them from be it a mobile phone, tablet or laptop. They are quick, don't need the internet to run and we have all enjoyed using them for many years before the internet was just a twinkle in Sir &lt;a href="http://www.w3.org/People/Berners-Lee/"&gt;Tim Berners-Lee&lt;/a&gt; eye.&lt;br /&gt;
&lt;br /&gt;
After being very creative on these native apps, the next thing you want to do is share what you've done with others and have their creativity contribute to the success of the work. This is where the cloud comes in and things get complicated. Let me explain.&lt;br /&gt;
&lt;br /&gt;
The cloud let's you share your work easily because it's just a bunch of computers connected to each other and its those connections which makes it possible but by it's very nature, the cloud is a layer of abstraction from the device meaning that the native API's no longer become available and you loose that native UX. You also get ads as the providers have to make their money somehow.&lt;br /&gt;
&lt;br /&gt;
I've found a mixture of native and cloud apps works best for me depending on what I'm doing at the time. What works for you?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2744082786940441609-3094143104955024566?l=www.rosshuggett.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.rosshuggett.com/feeds/3094143104955024566/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.rosshuggett.com/2011/07/thoughts-on-native-v-cloud-apps-aka-ux.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/3094143104955024566?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/3094143104955024566?v=2" /><link rel="alternate" type="text/html" href="http://www.rosshuggett.com/2011/07/thoughts-on-native-v-cloud-apps-aka-ux.html" title="Thoughts On Native v Cloud Apps a.k.a. UX v Sharing" /><author><name>Ross Huggett</name><uri>https://profiles.google.com/107463336886464284752</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-Rni2annsJ3Q/AAAAAAAAAAI/AAAAAAAAAPY/dt78pxzClto/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CUMGSX8yeyp7ImA9WhdTE0U.&quot;"><id>tag:blogger.com,1999:blog-2744082786940441609.post-2325383859864873205</id><published>2011-05-06T08:57:00.002+01:00</published><updated>2011-07-11T12:23:48.193+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-11T12:23:48.193+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="payet" /><category scheme="http://www.blogger.com/atom/ns#" term="bee" /><category scheme="http://www.blogger.com/atom/ns#" term="retrospective" /><category scheme="http://www.blogger.com/atom/ns#" term="bertrand" /><category scheme="http://www.blogger.com/atom/ns#" term="weaver" /><category scheme="http://www.blogger.com/atom/ns#" term="dilshat" /><category scheme="http://www.blogger.com/atom/ns#" term="media" /><category scheme="http://www.blogger.com/atom/ns#" term="hewzulla" /><category scheme="http://www.blogger.com/atom/ns#" term="ross" /><category scheme="http://www.blogger.com/atom/ns#" term="red" /><title>Red Bee Media: A Retrospective</title><content type="html">Today is my last day at &lt;a href="http://www.redbeemedia.com/"&gt;Red Bee Media&lt;/a&gt; so I thought I would write a retrospective of my time here.&lt;br /&gt;
&lt;br /&gt;
The strongest aspect of Red Bee has been the diversity of it's talent. We've had guys working here from places I can only dream of visiting from &lt;a href="http://en.wikipedia.org/wiki/R%C3%A9union"&gt;Réunion&lt;/a&gt; to &lt;a href="http://en.wikipedia.org/wiki/Xinjiang_Uyghur_Autonomous_Region"&gt;Xinjiang&lt;/a&gt;. I hope that, maybe one day, I will visit these places as I regard many people not only as colleagues, but as friends.&lt;br /&gt;
&lt;br /&gt;
While everyone came from different places, we were united in many ways like work ethic, technologies and our ability to deliver projects.&lt;br /&gt;
&lt;br /&gt;
This was reflected by everything we&amp;nbsp;achieved&amp;nbsp;in those years. When I look at the position we are in now and what we have delivered in that time given the people we had, it was been nothing short of remarkable and I think I leave the guys in an excellent position to continue that success.&lt;br /&gt;
&lt;br /&gt;
I have always felt that the team was at it's best when individuals and interactions were favoured over anything else and this reflected in the speed at which we delivered projects. Let's hope this continues in the years to come.&lt;br /&gt;
&lt;br /&gt;
I can honestly say that the learning experiences I have gained here, working with what I considered to be the brightest minds in the industry, has been&amp;nbsp;phenomenal. In particular, many aspects of agile development including test driven development which, if you are a regular reader of this blog, you will notice that I strongly believe in.&lt;br /&gt;
&lt;br /&gt;
My first thank you has to go to &lt;a href="http://www.linkedin.com/in/staceyanklam"&gt;Stacey Anklam&lt;/a&gt; who gave me the job. I never thought it would turn out the way it has. For their leadership, &lt;a href="http://www.linkedin.com/in/shamsu"&gt;Shams Uddin&lt;/a&gt; and &lt;a href="http://www.linkedin.com/in/rossweaver"&gt;Ross Weaver&lt;/a&gt; who have given me advice and support during my time here, and for their technical leadership, &lt;a href="http://www.linkedin.com/pub/dilshat-hewzulla/3/b58/855"&gt;Dilshat Hewzulla&lt;/a&gt; and &lt;a href="http://www.linkedin.com/pub/bertrand-payet/2/643/989"&gt;Bertrand Payet&lt;/a&gt;&amp;nbsp;who's knowledge never fails to impress.&lt;br /&gt;
&lt;br /&gt;
They were the reason why my time here flew by.&lt;br /&gt;
&lt;br /&gt;
I hope that I get the&amp;nbsp;opportunity&amp;nbsp;to work with the guys again sometime soon but in the meantime, I will miss them all.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2744082786940441609-2325383859864873205?l=www.rosshuggett.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.rosshuggett.com/feeds/2325383859864873205/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.rosshuggett.com/2011/05/red-bee-media-retrospective.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/2325383859864873205?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/2325383859864873205?v=2" /><link rel="alternate" type="text/html" href="http://www.rosshuggett.com/2011/05/red-bee-media-retrospective.html" title="Red Bee Media: A Retrospective" /><author><name>Ross Huggett</name><uri>https://profiles.google.com/107463336886464284752</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-Rni2annsJ3Q/AAAAAAAAAAI/AAAAAAAAAPY/dt78pxzClto/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DEQCSX0-fip7ImA9WhZTGE0.&quot;"><id>tag:blogger.com,1999:blog-2744082786940441609.post-1437552162515243813</id><published>2011-03-22T15:06:00.000Z</published><updated>2011-03-22T15:06:08.356Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-22T15:06:08.356Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="first" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="driven" /><category scheme="http://www.blogger.com/atom/ns#" term="test" /><title>Don't spend too long on tests</title><content type="html">If you are a regular reader of this blog, you will know that I strongly believe in &lt;a href="http://en.wikipedia.org/wiki/Test-driven_development"&gt;test driven development&lt;/a&gt;&amp;nbsp;(TDD). However, I wanted to share my experience of learning TDD with you so that if you are learning it for the first time, you don't fall into the same traps I did.&lt;br /&gt;
&lt;br /&gt;
When you are writing your tests first, and find that it is taking some time, stop and ask yourself, why is it taking so long? The tests, like the development, should be simple and quick to do. Don't forget you still have to do the actual development and the project manager will be asking you to demonstrate what you've done before you know it.&lt;br /&gt;
&lt;br /&gt;
So, if they are taking some time, it usually means that you have began to do the following:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Started to test features that you shouldn't be testing. Remember that you should only be testing what you've developed, not what somebody else has. Check your test boundaries, make sure you haven't gone outside them. If your test is something like 'Test call a web service should return back a response', make sure that your not testing 'Test call a web service should return back a response and make another web service call'. Ask yourself, what are my inputs and outputs? In the example before, the input would be the call to the web service, the output, the response. You can then write your assertions on the outputs.&lt;/li&gt;
&lt;li&gt;Asserting things that you should be asserting. If you are spending some time on writing some complex assertions, make sure that they are&amp;nbsp;relevant&amp;nbsp;to your test. Go back to your pass and fail criteria and make sure that they are covered. If they are, finish your assertions.&lt;/li&gt;
&lt;li&gt;Write a test which has too much set up. If you find that you've just spent the last hour just writing the set up data, ask yourself, is this test worth it? This problem is usually a design problem where there is too much tight coupling with means you have to endlessly inject&amp;nbsp;dependency&amp;nbsp;data to get the test running. Take another look at your design and make sure that the components are loosely coupled and can be tested in isolation. TDD forces you to make good design decisions,&amp;nbsp;whether&amp;nbsp;you like it or not! It makes you think about things that you wouldn't normally think about.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
That's all I can think of right now but I'm sure there are more. If I think of any, I'll update this post.&lt;br /&gt;
&lt;br /&gt;
I'm interested to know what your learning experiences have been around TDD. Why not add them as a comment below.&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2744082786940441609-1437552162515243813?l=www.rosshuggett.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.rosshuggett.com/feeds/1437552162515243813/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.rosshuggett.com/2011/03/dont-spend-too-long-on-tests.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/1437552162515243813?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/1437552162515243813?v=2" /><link rel="alternate" type="text/html" href="http://www.rosshuggett.com/2011/03/dont-spend-too-long-on-tests.html" title="Don't spend too long on tests" /><author><name>Ross Huggett</name><uri>https://profiles.google.com/107463336886464284752</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-Rni2annsJ3Q/AAAAAAAAAAI/AAAAAAAAAPY/dt78pxzClto/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CUcFRHgzcCp7ImA9Wx9aEUs.&quot;"><id>tag:blogger.com,1999:blog-2744082786940441609.post-1895299401583529176</id><published>2011-03-03T14:29:00.002Z</published><updated>2011-03-03T14:36:55.688Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-03T14:36:55.688Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="requirements" /><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="tool" /><category scheme="http://www.blogger.com/atom/ns#" term="speed" /><category scheme="http://www.blogger.com/atom/ns#" term="problem" /><category scheme="http://www.blogger.com/atom/ns#" term="complexity" /><category scheme="http://www.blogger.com/atom/ns#" term="need" /><category scheme="http://www.blogger.com/atom/ns#" term="shoot" /><category scheme="http://www.blogger.com/atom/ns#" term="goal" /><category scheme="http://www.blogger.com/atom/ns#" term="goose" /><category scheme="http://www.blogger.com/atom/ns#" term="feel" /><category scheme="http://www.blogger.com/atom/ns#" term="top" /><category scheme="http://www.blogger.com/atom/ns#" term="quote" /><category scheme="http://www.blogger.com/atom/ns#" term="maverick" /><category scheme="http://www.blogger.com/atom/ns#" term="framework" /><category scheme="http://www.blogger.com/atom/ns#" term="gun" /><category scheme="http://www.blogger.com/atom/ns#" term="solution" /><category scheme="http://www.blogger.com/atom/ns#" term="mig-28" /><category scheme="http://www.blogger.com/atom/ns#" term="f-14" /><category scheme="http://www.blogger.com/atom/ns#" term="grumman" /><title>I feel the need, the need for speed!</title><content type="html">If you don't recognise the title of this post, you probably haven't watched &lt;a href="http://en.wikipedia.org/wiki/Top_Gun"&gt;Top Gun&lt;/a&gt;. If you haven't, watch it. It's a great movie. There was a great quote in that movie:&lt;br /&gt;
&lt;i&gt;&lt;a href="http://en.wikiquote.org/wiki/Top_Gun"&gt;&lt;center&gt;I feel the need, the need for speed.&lt;/center&gt;&lt;/a&gt;&lt;/i&gt;&lt;br /&gt;
It's a saying that Maverick and Goose have between each other and the context is when they are flying their &lt;a href="http://en.wikipedia.org/wiki/F-14_Tomcat"&gt;Grumman F-14 Tomcat&lt;/a&gt;. This saying is as relavent to software engineering as it is flying a F-14 believe it or not.&lt;br /&gt;
&lt;br /&gt;
The reason why I say this is because when you are designing and developing software, there is a need for speed, or put another way, don't be slow.&lt;br /&gt;
&lt;br /&gt;
So when you are thinking about a design problem or using a framework or tool during implementation, ask yourself the question, &lt;b&gt;&lt;i&gt;will this slow me down?&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
If your answer is yes, then rethink the problem, or ask yourself should you even being using that framework or tool in the first place? If it's slowing you down from delivering a goal, then don't use it. It's a simple as that.&lt;br /&gt;
&lt;br /&gt;
Too many times I've seen a solution to what appears to be a simple problem, and it's taken a month to develop where is should have taken a week. When you start to look into the reasons for that, you start to see complexity which shouldn't be there. Usually, what has happened, is that complexity has been introduced which has nothing to do with the problem inhand like some future requirement which will never materialise.&lt;br /&gt;
&lt;br /&gt;
For me, &lt;a href="http://en.wikipedia.org/wiki/Agile_software_development"&gt;agile software development&lt;/a&gt; and processess is my F-14. If there's anything slowing down my F-14, I need to quickly address it otherwise a &lt;a href="http://en.wikipedia.org/wiki/Fictional_military_aircraft#MiG-28"&gt;MiG-28&lt;/a&gt; will shoot me down and I'll stop delivering.&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2744082786940441609-1895299401583529176?l=www.rosshuggett.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.rosshuggett.com/feeds/1895299401583529176/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.rosshuggett.com/2011/03/i-feel-need-need-for-speed.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/1895299401583529176?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/1895299401583529176?v=2" /><link rel="alternate" type="text/html" href="http://www.rosshuggett.com/2011/03/i-feel-need-need-for-speed.html" title="I feel the need, the need for speed!" /><author><name>Ross Huggett</name><uri>https://profiles.google.com/107463336886464284752</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-Rni2annsJ3Q/AAAAAAAAAAI/AAAAAAAAAPY/dt78pxzClto/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;AkcEQn46eCp7ImA9Wx9bGUQ.&quot;"><id>tag:blogger.com,1999:blog-2744082786940441609.post-7225368466370445926</id><published>2011-03-01T14:04:00.004Z</published><updated>2011-03-01T16:46:43.010Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-01T16:46:43.010Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="case" /><category scheme="http://www.blogger.com/atom/ns#" term="first" /><category scheme="http://www.blogger.com/atom/ns#" term="processes" /><category scheme="http://www.blogger.com/atom/ns#" term="executeprocess" /><category scheme="http://www.blogger.com/atom/ns#" term="process" /><category scheme="http://www.blogger.com/atom/ns#" term="esb" /><category scheme="http://www.blogger.com/atom/ns#" term="suite" /><category scheme="http://www.blogger.com/atom/ns#" term="cordys" /><category scheme="http://www.blogger.com/atom/ns#" term="test" /><category scheme="http://www.blogger.com/atom/ns#" term="automation" /><category scheme="http://www.blogger.com/atom/ns#" term="soapui" /><category scheme="http://www.blogger.com/atom/ns#" term="wsdl" /><category scheme="http://www.blogger.com/atom/ns#" term="business" /><title>Writing Your Tests First Using Cordys 'ExecuteProcess'</title><content type="html">This post is mainly for &lt;a href="http://www.cordys.com/"&gt;Cordys&lt;/a&gt; users who want to test their &lt;a href="http://en.wikipedia.org/wiki/Business_process_management"&gt;business processes's&lt;/a&gt;&amp;nbsp;first and in isolation.&lt;br /&gt;
&lt;br /&gt;
Before writing your business processes, you can use&amp;nbsp;&lt;a href="http://www.soapui.org/"&gt;soapUI&lt;/a&gt; and the ExecuteProcess &lt;a href="http://www.w3.org/TR/wsdl"&gt;WSDL&lt;/a&gt;&amp;nbsp;to&amp;nbsp;generate&amp;nbsp;&lt;a href="http://www.w3schools.com/WSDL/wsdl_binding.asp"&gt;bindings&lt;/a&gt; and create a&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Test_suite"&gt;test suite&lt;/a&gt;. Next, create a new &lt;a href="http://en.wikipedia.org/wiki/Test_case"&gt;test case&lt;/a&gt; and a new test step which is a soap test request. Select ExecuteProcess as the operation and generate the soap message. It should look something like this:&lt;br /&gt;
&lt;pre class="xml" name="code"&gt;&lt;soapenv:envelope xmlns:ns="http://schemas.cordys.com/bpm/execution/1.0" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"&gt;
   &lt;soapenv:header&gt;
   &lt;soapenv:body&gt;
      &lt;ns:executeprocess&gt;
         &lt;ns:receiver&gt;[YOUR_FLOW_NAME]&lt;/ns:receiver&gt;
         &lt;ns:type&gt;definition&lt;/ns:type&gt;
         &lt;ns:message&gt;
            &amp;lt;[YOUR_FLOW_NAME] xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/"&amp;gt;[YOUR_INPUT_MESSAGE]&amp;lt;/[YOUR_FLOW_NAME]&amp;gt;
         &lt;/ns:message&gt;
      &lt;/ns:executeprocess&gt;
   &lt;/soapenv:body&gt;
&lt;/soapenv:header&gt;&lt;/soapenv:envelope&gt;&lt;/pre&gt;You can see from this example that inside the message element, you can drop your input message for your business process. When you submit the request to the endpoint, Cordys will find the business process and invoke it with your message. Sadly, the response you get back isn't the output of the process so you can't do some nice assertions, but it's goes someway to &lt;a href="http://en.wikipedia.org/wiki/Test_automation"&gt;test automation&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
If your flow is just orchestrating other services, you could call that service to assert that whatever it is that your flow is doing, that it did it properly.&lt;br /&gt;
&lt;br /&gt;
When you come to write you business processes, now that you have your test cases, it should be breeze!&lt;br /&gt;
&lt;br /&gt;
For me, ExecuteProcess is the &lt;a href="http://en.wikipedia.org/wiki/Enterprise_service_bus"&gt;ESB&lt;/a&gt; part of Cordys. It can be used for many other &lt;a href="http://en.wikipedia.org/wiki/Use_case"&gt;use cases&lt;/a&gt;, not just for testing. It offers a layer of abstraction between the caller and the underlying business processes. Do you agree? Let me know by commenting.&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2744082786940441609-7225368466370445926?l=www.rosshuggett.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.rosshuggett.com/feeds/7225368466370445926/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.rosshuggett.com/2011/03/using-cordys-executeprocess-for-testing.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/7225368466370445926?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/7225368466370445926?v=2" /><link rel="alternate" type="text/html" href="http://www.rosshuggett.com/2011/03/using-cordys-executeprocess-for-testing.html" title="Writing Your Tests First Using Cordys 'ExecuteProcess'" /><author><name>Ross Huggett</name><uri>https://profiles.google.com/107463336886464284752</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-Rni2annsJ3Q/AAAAAAAAAAI/AAAAAAAAAPY/dt78pxzClto/s512-c/photo.jpg" /></author><thr:total>4</thr:total></entry><entry gd:etag="W/&quot;CkcGR3w9eCp7ImA9WhRWEEQ.&quot;"><id>tag:blogger.com,1999:blog-2744082786940441609.post-1544312752275722688</id><published>2011-02-20T09:10:00.001Z</published><updated>2011-12-28T16:33:46.260Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-28T16:33:46.260Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="files" /><category scheme="http://www.blogger.com/atom/ns#" term="control" /><category scheme="http://www.blogger.com/atom/ns#" term="spring" /><category scheme="http://www.blogger.com/atom/ns#" term="properties" /><category scheme="http://www.blogger.com/atom/ns#" term="injection" /><category scheme="http://www.blogger.com/atom/ns#" term="inversion" /><category scheme="http://www.blogger.com/atom/ns#" term="dependancy" /><category scheme="http://www.blogger.com/atom/ns#" term="mule" /><category scheme="http://www.blogger.com/atom/ns#" term="snapshot" /><title>What they don't teach you about properties files in school</title><content type="html">&lt;a href="http://en.wikipedia.org/wiki/.properties"&gt;Properties&lt;/a&gt; files. There seems to be very little written about these files. When you are taught programming at school, you are told that they are a way to configure your application.&lt;br /&gt;
&lt;br /&gt;
When I was told this, it didn't mean too much to me and I didn't explore it anymore. When I started to use &lt;a href="http://www.springsource.org/"&gt;spring&lt;/a&gt;, and learnt about &lt;a href="http://martinfowler.com/bliki/InversionOfControl.html"&gt;inversion of control&lt;/a&gt; and &lt;a href="http://martinfowler.com/articles/injection.html"&gt;dependancy injection&lt;/a&gt;, it started to mean more but I was still developing code which was tightly &lt;a href="http://en.wikipedia.org/wiki/Coupling_(computer_programming)"&gt;coupled&lt;/a&gt; with the environment I was deploying it to.&lt;br /&gt;
&lt;br /&gt;
For example, I would create artifacts called mock-service-1.0-development.zip and mock-service-1.0-test.zip. The only difference would be an ip address or a url. This approach is okay if there are only a few environments, but as soon as you add more environments, your service can get complicated and difficult to maintain.&lt;br /&gt;
&lt;br /&gt;
When I started developing in &lt;a href="http://www.mulesoft.org/"&gt;Mule&lt;/a&gt;, I started to use properties much more for environmental configuration and found the advantages that it brought.&lt;br /&gt;
&lt;br /&gt;
I created a single artifact called mock-service-1.0.zip and a properties file for my local environment. It looked something like this:&lt;br /&gt;
&lt;pre class="xml" name="code"&gt;mule.host=localhost
mule.service.port=8081&lt;/pre&gt;
I then gave these to the environment manager and explained what each of the properties meant. I told him that he could generate a properties file for any new environment, or if there was a change to the existing environment, he could just change an existing file and I didn't have to get involved.&lt;br /&gt;
&lt;br /&gt;
We started off in a development environment with a &lt;a href="http://maven.apache.org/guides/getting-started"&gt;SNAPSHOT&lt;/a&gt; version which gave us the ability to flesh out any integration issues or identify any properties that he wanted that I didn't include. Once we got it working in development, I would then release it and he would deploy to any another environment he liked in exactly the same way. This made deployments seamless.&lt;br /&gt;
&lt;br /&gt;
I hope this example goes someway in explaining a good use case for properties files. I intend use them as much as I can in the future for deployments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2744082786940441609-1544312752275722688?l=www.rosshuggett.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.rosshuggett.com/feeds/1544312752275722688/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.rosshuggett.com/2011/02/what-they-dont-teach-you-about.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/1544312752275722688?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/1544312752275722688?v=2" /><link rel="alternate" type="text/html" href="http://www.rosshuggett.com/2011/02/what-they-dont-teach-you-about.html" title="What they don't teach you about properties files in school" /><author><name>Ross Huggett</name><uri>https://profiles.google.com/107463336886464284752</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-Rni2annsJ3Q/AAAAAAAAAAI/AAAAAAAAAPY/dt78pxzClto/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CkIFQnc7fSp7ImA9Wx9UF08.&quot;"><id>tag:blogger.com,1999:blog-2744082786940441609.post-7738228899078466944</id><published>2011-02-14T13:22:00.001Z</published><updated>2011-02-14T21:55:13.905Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-14T21:55:13.905Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="emergency" /><category scheme="http://www.blogger.com/atom/ns#" term="problem" /><category scheme="http://www.blogger.com/atom/ns#" term="time" /><category scheme="http://www.blogger.com/atom/ns#" term="estimation" /><category scheme="http://www.blogger.com/atom/ns#" term="management" /><category scheme="http://www.blogger.com/atom/ns#" term="jira" /><category scheme="http://www.blogger.com/atom/ns#" term="whiteboard" /><category scheme="http://www.blogger.com/atom/ns#" term="box" /><category scheme="http://www.blogger.com/atom/ns#" term="situation" /><category scheme="http://www.blogger.com/atom/ns#" term="tunnel" /><category scheme="http://www.blogger.com/atom/ns#" term="exit" /><category scheme="http://www.blogger.com/atom/ns#" term="expectation" /><category scheme="http://www.blogger.com/atom/ns#" term="task" /><title>The Time Tunnel and How To Avoid It</title><content type="html">Too often I've found myself in the following situation: &lt;br /&gt;
&lt;br /&gt;
I have a task, so I've followed my admin &lt;a href="http://www.rosshuggett.com/2011/01/software-engineering-admin-reference.html"&gt;reference&lt;/a&gt; and have a card, a Jira issue and it's on the whiteboard. I've &lt;a href="http://en.wikipedia.org/wiki/Timeboxing"&gt;timeboxed&lt;/a&gt; it to say, three hours and I've begun work.&lt;br /&gt;
&lt;br /&gt;
So I'm working away on the task and before I know it, I've burnt two hours and I've got a hour left to complete it. In the last two hours, something strange has happened. The task has got more complicated and is probably going to take longer than the three hours I originally time boxed it at. The problem is, I haven't seen it yet.&lt;br /&gt;
&lt;br /&gt;
So I carry on into the third hour, thinking I'm going to be done at the end of the hour and when I reach it, I realise that maybe it's not going to be done in three hours, but I'm thinking that it's only going to take another thirty minutes.&lt;br /&gt;
&lt;br /&gt;
Thirty minutes pass, and I'm still not done. An hour passes and, guess what, I'm still not done. I'm stuck in what I call, the time tunnel.&lt;br /&gt;
&lt;br /&gt;
This is where your mind is so focused on the problem, that there is very little cognitive capacity left for time planning.&lt;br /&gt;
&lt;br /&gt;
So when you begin a task and you enter the time tunnel, you see the end after three hours and you head towards it. After two and a half hours, you think it's thirty minutes away, but in fact, it's another hour away, so you keep going and before you know it, you've spent five hours on the task and your still not done.&lt;br /&gt;
&lt;br /&gt;
This is a bad situation to be in because there was probably an expectation that you would be done by now and you've failed to deliver the task.&lt;br /&gt;
&lt;br /&gt;
When you're in the time tunnel, the walls don't appear to have an emergency exit. The best advice I can give is that whatever state the task is in halfway through, try to stop and take a step back and look at what you've done. If you think that it's going to take longer, then add more time to the task.&lt;br /&gt;
&lt;br /&gt;
What I've leant is that guys like to be told as early as possible if the task is going to take longer than first estimated, as it gives them more time to plan if it is part of a wider task.&lt;br /&gt;
&lt;br /&gt;
I hope this helps people who have been in this situation before. I know I have and I'm hoping to refer back to this article to remind myself what to do.&lt;br /&gt;
&lt;br /&gt;
Thanks for reading.&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2744082786940441609-7738228899078466944?l=www.rosshuggett.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.rosshuggett.com/feeds/7738228899078466944/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.rosshuggett.com/2011/02/time-tunnel-and-how-to-avoid-it.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/7738228899078466944?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/7738228899078466944?v=2" /><link rel="alternate" type="text/html" href="http://www.rosshuggett.com/2011/02/time-tunnel-and-how-to-avoid-it.html" title="The Time Tunnel and How To Avoid It" /><author><name>Ross Huggett</name><uri>https://profiles.google.com/107463336886464284752</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-Rni2annsJ3Q/AAAAAAAAAAI/AAAAAAAAAPY/dt78pxzClto/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;A0MNSHk6fip7ImA9Wx9UFkU.&quot;"><id>tag:blogger.com,1999:blog-2744082786940441609.post-8931060223259343746</id><published>2011-02-13T16:42:00.004Z</published><updated>2011-02-14T13:18:19.716Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-14T13:18:19.716Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="huggett" /><category scheme="http://www.blogger.com/atom/ns#" term="facebook" /><category scheme="http://www.blogger.com/atom/ns#" term="rosshuggett" /><category scheme="http://www.blogger.com/atom/ns#" term="ross" /><category scheme="http://www.blogger.com/atom/ns#" term="com" /><title>rosshuggett.com now on Facebook</title><content type="html">I'm pleased to announce that &lt;a href="http://rosshuggett.com"&gt;rosshuggett.com&lt;/a&gt; is now on &lt;a href="http://www.facebook.com/pages/rosshuggettcom/141419275923002"&gt;facebook&lt;/a&gt;. So you can enjoy your favourite posts right from your favourite social networking website. Enjoy!&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2744082786940441609-8931060223259343746?l=www.rosshuggett.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.rosshuggett.com/feeds/8931060223259343746/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.rosshuggett.com/2011/02/rosshuggettcom-now-on-facebook.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/8931060223259343746?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/8931060223259343746?v=2" /><link rel="alternate" type="text/html" href="http://www.rosshuggett.com/2011/02/rosshuggettcom-now-on-facebook.html" title="rosshuggett.com now on Facebook" /><author><name>Ross Huggett</name><uri>https://profiles.google.com/107463336886464284752</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-Rni2annsJ3Q/AAAAAAAAAAI/AAAAAAAAAPY/dt78pxzClto/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;C0UNRng_cSp7ImA9Wx9UFUQ.&quot;"><id>tag:blogger.com,1999:blog-2744082786940441609.post-5768534680732492994</id><published>2011-02-13T09:19:00.003Z</published><updated>2011-02-13T10:01:37.649Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-13T10:01:37.649Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="deploy" /><category scheme="http://www.blogger.com/atom/ns#" term="jar" /><category scheme="http://www.blogger.com/atom/ns#" term="plugin" /><category scheme="http://www.blogger.com/atom/ns#" term="artifact" /><category scheme="http://www.blogger.com/atom/ns#" term="pom" /><category scheme="http://www.blogger.com/atom/ns#" term="scp" /><category scheme="http://www.blogger.com/atom/ns#" term="maven" /><title>Using SCP with the Maven Deploy Plugin</title><content type="html">If your using the &lt;a href="http://maven.apache.org/plugins/maven-deploy-plugin/"&gt;Maven Deploy Plugin&lt;/a&gt; and you want to use SCP to deploy your artifact to a maven repository, here's an example you can try:&lt;br /&gt;
&lt;pre name="code" class="xml"&gt;mvn deploy:deploy-file -Durl=scp://[hostname]/[maven_repository_url] -DrepositoryId=[repository_id] -Dfile=[your_jar].jar -DgroupId=[group_id] -DartifactId=[artifact_id] -Dversion=[version] -DgeneratePom=true -Dpackaging=jar&lt;/pre&gt;You need to run this in the same directory as your jar file. Hope you find this useful. Let me know if you have any questions.&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2744082786940441609-5768534680732492994?l=www.rosshuggett.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.rosshuggett.com/feeds/5768534680732492994/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.rosshuggett.com/2011/02/using-scp-with-maven-deploy-plugin.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/5768534680732492994?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/5768534680732492994?v=2" /><link rel="alternate" type="text/html" href="http://www.rosshuggett.com/2011/02/using-scp-with-maven-deploy-plugin.html" title="Using SCP with the Maven Deploy Plugin" /><author><name>Ross Huggett</name><uri>https://profiles.google.com/107463336886464284752</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-Rni2annsJ3Q/AAAAAAAAAAI/AAAAAAAAAPY/dt78pxzClto/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DkEMQ3w_cSp7ImA9Wx9WFk8.&quot;"><id>tag:blogger.com,1999:blog-2744082786940441609.post-8734858449843322067</id><published>2011-01-09T14:38:00.008Z</published><updated>2011-01-21T15:44:42.249Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-21T15:44:42.249Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="goals" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="index" /><category scheme="http://www.blogger.com/atom/ns#" term="community" /><category scheme="http://www.blogger.com/atom/ns#" term="driven" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><category scheme="http://www.blogger.com/atom/ns#" term="activity" /><category scheme="http://www.blogger.com/atom/ns#" term="engineering" /><category scheme="http://www.blogger.com/atom/ns#" term="conversational" /><category scheme="http://www.blogger.com/atom/ns#" term="test" /><category scheme="http://www.blogger.com/atom/ns#" term="sprint" /><category scheme="http://www.blogger.com/atom/ns#" term="communication" /><category scheme="http://www.blogger.com/atom/ns#" term="whiteboard" /><category scheme="http://www.blogger.com/atom/ns#" term="basecamp" /><category scheme="http://www.blogger.com/atom/ns#" term="jira" /><category scheme="http://www.blogger.com/atom/ns#" term="wiki" /><category scheme="http://www.blogger.com/atom/ns#" term="email" /><category scheme="http://www.blogger.com/atom/ns#" term="scrum" /><title>Software Engineering - An admin reference</title><content type="html">Here is another one of those posts which I intend to use as a reference when I start a software engineering task or project (however small) and thought it would be useful for the community.&lt;br /&gt;
&lt;br /&gt;
They aren't involved with the actual design or implementation of the software itself (generally), but are important in the success of the project:&lt;br /&gt;
&lt;br /&gt;
1. &lt;a href="http://www.atlassian.com/software/jira"&gt;Jira&lt;/a&gt; - I have found that using Jira has brought many benefits during the software development process. It is an excellent tool for collaboration as it follows closely with &lt;a href="http://en.wikipedia.org/wiki/Agile_software_development"&gt;agile software development&lt;/a&gt; methodologies like the creation of &lt;a href="http://en.wikipedia.org/wiki/User_story"&gt;user stories&lt;/a&gt;. I have found that it's a better form of conversational communication than email as it allows conversations to be grouped by user story making them easier to refer back to and search. Email conversations can be difficult to follow and tend to get sorted in personal folders and forgotten in time. Another benefit is that it also forces accountability as issues are allocated driving clear ownership.&lt;br /&gt;
&lt;br /&gt;
2. &lt;a href="http://en.wikipedia.org/wiki/Index_card"&gt;Index cards&lt;/a&gt; on a white board - This is the creation of a simplified snapshot of what is going on in jira. Index cards are used to write the detail of the user stories that have been created in Jira. They are then stuck on a whiteboard. The whiteboard is broken down into 3 sections, assigned, in progress and done. The cards are then moved into the different sections as the task progresses. The information on the cards includes the Jira issue number (both &lt;a href="http://www.targetprocess.com/LearnAgile/AgileGlossary/ThemeEpic.aspx"&gt;epic&lt;/a&gt; and story), the environment the task is dependant on, the title of the task, who is responsible for the task and the hours remaining to completion. These cards can then be used in the daily stand up or &lt;a href="http://en.wikipedia.org/wiki/Scrum_(development)"&gt;scrum&lt;/a&gt; to determine how much time is left on the story and if the &lt;a href="http://www.scrumalliance.org/articles/39-glossary-of-scrum-terms#1115"&gt;sprint goals&lt;/a&gt; are to be realised.&lt;br /&gt;
&lt;br /&gt;
3. &lt;a href="http://en.wikipedia.org/wiki/Test-driven_development"&gt;Test first&lt;/a&gt; - I consider creating your tests first to be one of the most important things to do before any code implementation. It forces you into making good design decisions and makes you think about problems up front before it's too late. It's a good idea to split out the tests into separate user stories to ensure there is time for this to be done.&lt;br /&gt;
&lt;br /&gt;
4. Demo - I have been lucky enough in my career to work with some of the brightest minds in software and I've found that the single most effective way to harness this powerful resource is a demo. Getting guys in a room with a whiteboard and &lt;a href="http://en.wikipedia.org/wiki/Show_and_tell_(education)"&gt;showing&lt;/a&gt; what you've done by way of an &lt;a href="http://en.wikipedia.org/wiki/Activity_diagram"&gt;activity diagram&lt;/a&gt; (depending what you've done) or a live demo is a great way of getting immediate feedback on your approach. It makes you think about things that never even crossed your mind and you will find that you barely have time to write everything down. I highly recommend it.&lt;br /&gt;
&lt;br /&gt;
5. &lt;a href="http://en.wikipedia.org/wiki/Wiki"&gt;Wiki&lt;/a&gt; - I've found that certain types of information are useful to have as a webpage and wiki's invite all users to edit and create new pages within the wiki web site. It is an excellent collaborative tool with useful information  like &lt;a href="http://en.wikipedia.org/wiki/Release_notes"&gt;release notes&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Best_practice"&gt;best practices&lt;/a&gt; to name but a few.&lt;br /&gt;
&lt;br /&gt;
6. Document repository - When dealing with external organisations I have found that &lt;a href="http://basecamphq.com/"&gt;Basecamp&lt;/a&gt; is an excellent document repository tool. I haven't used it too much but it has fast become the point of contact when you want the most up to date document on an interface which has been agreed with an external organisation.&lt;br /&gt;
&lt;br /&gt;
I can see this list changing considerably over the days and months to come but that's all I can think of right now. If you know of any more that you use, let me know.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Update&lt;/b&gt;: 10th January 2011 - I've thought of another one already:&lt;br /&gt;
&lt;br /&gt;
7. &lt;a href="http://en.wikipedia.org/wiki/.properties"&gt;Properties file&lt;/a&gt; - Use properties files where possible to store configurable values. I've found that they are particularly useful when  decoupling your software from a deployment environment.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Update&lt;/b&gt;: 21st January 2011 - Here's another one:&lt;br /&gt;
&lt;br /&gt;
8. &lt;a href="http://en.wikipedia.org/wiki/Software_peer_review"&gt;Peer Review&lt;/a&gt; - I really like doing peer reviews but I don't want it to slow down development. I think that the best approach is to have a driver and observer, as in &lt;a href="http://en.wikipedia.org/wiki/Pair_programming"&gt;pair programming&lt;/a&gt;. The driver writes the code, and the observer checks it out, writes in-line comments and commits them. The driver updates, reads them and actions if necessary. I think this is quick and increases quality.&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2744082786940441609-8734858449843322067?l=www.rosshuggett.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.rosshuggett.com/feeds/8734858449843322067/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.rosshuggett.com/2011/01/software-engineering-admin-reference.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/8734858449843322067?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/8734858449843322067?v=2" /><link rel="alternate" type="text/html" href="http://www.rosshuggett.com/2011/01/software-engineering-admin-reference.html" title="Software Engineering - An admin reference" /><author><name>Ross Huggett</name><uri>https://profiles.google.com/107463336886464284752</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-Rni2annsJ3Q/AAAAAAAAAAI/AAAAAAAAAPY/dt78pxzClto/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DUYMSX46fip7ImA9Wx9REko.&quot;"><id>tag:blogger.com,1999:blog-2744082786940441609.post-1696114372493486474</id><published>2010-12-13T21:52:00.001Z</published><updated>2010-12-13T21:53:08.016Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-13T21:53:08.016Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="service" /><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><category scheme="http://www.blogger.com/atom/ns#" term="delivery" /><category scheme="http://www.blogger.com/atom/ns#" term="sprint" /><category scheme="http://www.blogger.com/atom/ns#" term="test" /><category scheme="http://www.blogger.com/atom/ns#" term="goal" /><category scheme="http://www.blogger.com/atom/ns#" term="unit" /><category scheme="http://www.blogger.com/atom/ns#" term="product" /><category scheme="http://www.blogger.com/atom/ns#" term="debt" /><category scheme="http://www.blogger.com/atom/ns#" term="iteration" /><category scheme="http://www.blogger.com/atom/ns#" term="technical" /><category scheme="http://www.blogger.com/atom/ns#" term="refactoring" /><category scheme="http://www.blogger.com/atom/ns#" term="cycle" /><title>Refactoring: Why go back to a product or service you've just delivered?</title><content type="html">This is the second post of a &lt;a href="http://www.rosshuggett.com/2010/10/pair-programming-isnt-it-just-two.html"&gt;two part post&lt;/a&gt; on question answering. The theme for this post is &lt;a href="http://en.wikipedia.org/wiki/Code_refactoring"&gt;refactoring&lt;/a&gt; and the question is:&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;&lt;i&gt;Why go back to a product or service you've just delivered?&lt;/i&gt;&lt;/center&gt;&lt;br /&gt;
This then leads onto other questions like:&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;&lt;i&gt;Why should I pay for you to go back to a product or service I've just paid for?&lt;/i&gt;&lt;/center&gt;&lt;br /&gt;
In answer to the first question, one of the main reasons is &lt;a href="http://martinfowler.com/bliki/TechnicalDebt.html"&gt;technical debt&lt;/a&gt;. As part of any &lt;a href="http://en.wikipedia.org/wiki/Agile_software_development"&gt;agile software development&lt;/a&gt; with short iterations the goal at the end of the cycle (typically two weeks) is to have a workable piece of software which can be run in a production environment.&lt;br /&gt;
&lt;br /&gt;
The developer may have a to work very quickly in order to achieve that goal and subsequently there maybe be areas in the design or implementation where he or she would like to go back to in order to make it easier to work on in the future.&lt;br /&gt;
&lt;br /&gt;
This maybe in the form of &lt;a href="http://en.wikipedia.org/wiki/Comment_(computer_programming)"&gt;comments&lt;/a&gt; like this:&lt;br /&gt;
&lt;pre name="code" class="xml"&gt;/**
 * This class does something. 
 *
 * TODO Remove some parameter from the something method.
 */
&lt;/pre&gt;or a simple note on a &lt;a href="http://en.wikipedia.org/wiki/Unified_Modeling_Language"&gt;UML diagram&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
It could be that &lt;a href="http://www.extremeprogramming.org/rules/unittests.html"&gt;unit tests&lt;/a&gt; levels might have fallen or there maybe not much in the way of documentation for the support team.&lt;br /&gt;
&lt;br /&gt;
During the next &lt;a href="http://en.wikipedia.org/wiki/Sprint_(software_development)"&gt;sprint&lt;/a&gt;, the developer must be given some time to go back to address these areas otherwise you may see  longer sprint cycles (from two to three weeks) and goals rolling forward from one sprint to the next, pushing delivery further and further back.&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2744082786940441609-1696114372493486474?l=www.rosshuggett.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.rosshuggett.com/feeds/1696114372493486474/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.rosshuggett.com/2010/12/refactoring-why-go-back-to-product-or.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/1696114372493486474?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/1696114372493486474?v=2" /><link rel="alternate" type="text/html" href="http://www.rosshuggett.com/2010/12/refactoring-why-go-back-to-product-or.html" title="Refactoring: Why go back to a product or service you've just delivered?" /><author><name>Ross Huggett</name><uri>https://profiles.google.com/107463336886464284752</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-Rni2annsJ3Q/AAAAAAAAAAI/AAAAAAAAAPY/dt78pxzClto/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DEMHRX05eCp7ImA9Wx9REE0.&quot;"><id>tag:blogger.com,1999:blog-2744082786940441609.post-6912028271059721456</id><published>2010-12-10T18:39:00.002Z</published><updated>2010-12-10T18:40:34.320Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-10T18:40:34.320Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="alphabet" /><category scheme="http://www.blogger.com/atom/ns#" term="engine" /><category scheme="http://www.blogger.com/atom/ns#" term="search" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title>My Google Alphabet</title><content type="html">These are the words &lt;a href="http://google.co.uk"&gt;Google&lt;/a&gt; thinks I want to type when I type each letter of the alphabet into it's search engine:&lt;br /&gt;
&lt;br /&gt;
a is for argos.&lt;br /&gt;
b is for bbc.&lt;br /&gt;
c is for currys.&lt;br /&gt;
d is for debenhams.&lt;br /&gt;
e is for ebay.&lt;br /&gt;
f is for facebook.&lt;br /&gt;
g is for google maps.&lt;br /&gt;
h is for hotmail.&lt;br /&gt;
i is for itv.&lt;br /&gt;
j is for john lewis.&lt;br /&gt;
k is for klm.&lt;br /&gt;
l is for lotto.&lt;br /&gt;
m is for msn.&lt;br /&gt;
o is for o2.&lt;br /&gt;
p is for play.&lt;br /&gt;
q is for quidco.&lt;br /&gt;
r is for rightmove.&lt;br /&gt;
s is for sky.&lt;br /&gt;
t is for tesco.&lt;br /&gt;
u is for utube.&lt;br /&gt;
v is for virgin.&lt;br /&gt;
w is for wikipedia.&lt;br /&gt;
x is for x factor.&lt;br /&gt;
y is for youtube.&lt;br /&gt;
z is for zara.&lt;br /&gt;
&lt;br /&gt;
It's got it right in some cases, but in others, it's way off!&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2744082786940441609-6912028271059721456?l=www.rosshuggett.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.rosshuggett.com/feeds/6912028271059721456/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.rosshuggett.com/2010/12/my-google-alphabet.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/6912028271059721456?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/6912028271059721456?v=2" /><link rel="alternate" type="text/html" href="http://www.rosshuggett.com/2010/12/my-google-alphabet.html" title="My Google Alphabet" /><author><name>Ross Huggett</name><uri>https://profiles.google.com/107463336886464284752</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-Rni2annsJ3Q/AAAAAAAAAAI/AAAAAAAAAPY/dt78pxzClto/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CUMMQH89fCp7ImA9Wx5bEEQ.&quot;"><id>tag:blogger.com,1999:blog-2744082786940441609.post-1173381188780088463</id><published>2010-10-26T08:51:00.004+01:00</published><updated>2010-10-26T12:44:41.164+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-26T12:44:41.164+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="process" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><category scheme="http://www.blogger.com/atom/ns#" term="design" /><category scheme="http://www.blogger.com/atom/ns#" term="lifecycle" /><category scheme="http://www.blogger.com/atom/ns#" term="bugs" /><category scheme="http://www.blogger.com/atom/ns#" term="benefits" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="interface" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="studies" /><category scheme="http://www.blogger.com/atom/ns#" term="pair" /><category scheme="http://www.blogger.com/atom/ns#" term="review" /><category scheme="http://www.blogger.com/atom/ns#" term="questions" /><title>Pair programming: Isn't it just two people doing the same task?</title><content type="html">This is the first post of a two-part post on two separate subjects but a similar theme. The theme is question answering and the first subject is &lt;a href="http://en.wikipedia.org/wiki/Pair_programming"&gt;pair programming&lt;/a&gt; and the question is:&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;&lt;i&gt;Isn't it just two people doing the same task?&lt;/i&gt;&lt;/center&gt;&lt;br /&gt;
This then leads onto other questions like:&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;&lt;i&gt;Why should I pay two guys to do the same task when I could be paying for just one?&lt;/i&gt;&lt;/center&gt;and:&lt;br /&gt;
&lt;center&gt;&lt;i&gt;Can you do the task in half the time?&lt;/i&gt;&lt;/center&gt;&lt;br /&gt;
all of which are valid questions which need answering so lets take the first one: &lt;i&gt;Isn't it just two people doing the same task?&lt;/i&gt; Yes, is the short answer but if you have two people working on the same task you get shorter programs, better design and fewer bugs, than one programmer working alone.&lt;br /&gt;
&lt;br /&gt;
Traditionally, these &lt;a href="http://en.wikipedia.org/wiki/Pair_programming#Costs_and_benefits"&gt;benefits&lt;/a&gt; were gained by having a &lt;a href="http://en.wikipedia.org/wiki/Code_review"&gt;code review&lt;/a&gt; after the task has been completed. However in my experience this slows down the &lt;a href="http://en.wikipedia.org/wiki/Software_development_process"&gt;development process&lt;/a&gt; because it takes time for the reviewer to go through the code, identify any issues and feedback to the developer. The developer then has to make the change, retest and deploy the new version. Pair programming could have caught the issue at a much earlier stage preventing this cycle.&lt;br /&gt;
&lt;br /&gt;
If the issue is one of design e.g. a badly designed &lt;a href="http://en.wikipedia.org/wiki/Interface_%28computer_science%29"&gt;interface&lt;/a&gt;, then the problem can be much harder to change once the implementation is complete.&lt;br /&gt;
&lt;br /&gt;
In answer to the second question: &lt;i&gt;Why should I pay two guys to do the same task when I could be paying for just one?&lt;/i&gt; &lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Pair_programming#Scientific_studies"&gt;Studies&lt;/a&gt; have found reduction in defect rates of 15% to 50% depending upon programmer experience and task complexity. So that means you will pay less for testing and debugging later on in the development process.&lt;br /&gt;
&lt;br /&gt;
In answer to the final question: &lt;i&gt;Can you do the task in half the time?&lt;/i&gt; Yes, pairs usually complete work faster than one programmer assigned to the same task. However the total programmer cost can increase so the manager needs to balance faster completion of the task with reduced debugging and testing against the higher cost of coding. Analysis of the task and collaboration with the pair is also required to decide if pair programming is appropriate because some &lt;a href="http://en.wikipedia.org/wiki/Pair_programming#Scientific_studies"&gt;studies&lt;/a&gt; have shown that where the pair have a good understanding of the task, pairing can result in a drop in productivity.&lt;br /&gt;
&lt;br /&gt;
If you did have any of these questions, I hope this post has helped to answer some of them. If you have anymore questions, please post them as a comment and I'll try to answer them.&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2744082786940441609-1173381188780088463?l=www.rosshuggett.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.rosshuggett.com/feeds/1173381188780088463/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.rosshuggett.com/2010/10/pair-programming-isnt-it-just-two.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/1173381188780088463?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/1173381188780088463?v=2" /><link rel="alternate" type="text/html" href="http://www.rosshuggett.com/2010/10/pair-programming-isnt-it-just-two.html" title="Pair programming: Isn't it just two people doing the same task?" /><author><name>Ross Huggett</name><uri>https://profiles.google.com/107463336886464284752</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-Rni2annsJ3Q/AAAAAAAAAAI/AAAAAAAAAPY/dt78pxzClto/s512-c/photo.jpg" /></author><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;CkcMRHg4fSp7ImA9WhRWEEQ.&quot;"><id>tag:blogger.com,1999:blog-2744082786940441609.post-7554093754398771097</id><published>2010-08-27T09:57:00.000+01:00</published><updated>2011-12-28T16:34:45.635Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-28T16:34:45.635Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="amanda" /><category scheme="http://www.blogger.com/atom/ns#" term="tweet" /><category scheme="http://www.blogger.com/atom/ns#" term="trade" /><category scheme="http://www.blogger.com/atom/ns#" term="layton" /><category scheme="http://www.blogger.com/atom/ns#" term="design" /><category scheme="http://www.blogger.com/atom/ns#" term="logo" /><category scheme="http://www.blogger.com/atom/ns#" term="twitter" /><title>tweet-a-trade has a new logo!</title><content type="html">&lt;a href="http://twitter.com/tweetatrade"&gt;tweet-a-trade&lt;/a&gt; has a new &lt;a href="http://www.flickr.com/photos/rosshuggett/4923643045/" title="tweet-a-trade logo by rosshuggett, on Flickr"&gt;logo&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;&lt;img alt="tweet-a-trade logo" height="75" src="http://farm5.static.flickr.com/4100/4923643045_6c286b3c7e_s.jpg" width="75" /&gt;&lt;/center&gt;&lt;br /&gt;
Many thanks to &lt;a href="http://twitter.com/laytondesign"&gt;Amanda Layton&lt;/a&gt; for the design. This is an important step for the tweet-a-trade brand because it shows the partnership with &lt;a href="http://twitter.com/"&gt;Twitter&lt;/a&gt; and also distinguishes itself as a standalone brand.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2744082786940441609-7554093754398771097?l=www.rosshuggett.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.rosshuggett.com/feeds/7554093754398771097/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.rosshuggett.com/2010/08/tweet-trade-has-new-logo.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/7554093754398771097?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/7554093754398771097?v=2" /><link rel="alternate" type="text/html" href="http://www.rosshuggett.com/2010/08/tweet-trade-has-new-logo.html" title="tweet-a-trade has a new logo!" /><author><name>Ross Huggett</name><uri>https://profiles.google.com/107463336886464284752</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-Rni2annsJ3Q/AAAAAAAAAAI/AAAAAAAAAPY/dt78pxzClto/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm5.static.flickr.com/4100/4923643045_6c286b3c7e_t.jpg" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CkYAQnsyeyp7ImA9WhRWEEQ.&quot;"><id>tag:blogger.com,1999:blog-2744082786940441609.post-5992661356073088239</id><published>2010-08-20T13:22:00.002+01:00</published><updated>2011-12-28T16:35:43.593Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-28T16:35:43.593Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="amanda" /><category scheme="http://www.blogger.com/atom/ns#" term="footy" /><category scheme="http://www.blogger.com/atom/ns#" term="socail" /><category scheme="http://www.blogger.com/atom/ns#" term="nicholson" /><category scheme="http://www.blogger.com/atom/ns#" term="frank" /><category scheme="http://www.blogger.com/atom/ns#" term="congratulations" /><category scheme="http://www.blogger.com/atom/ns#" term="layton" /><category scheme="http://www.blogger.com/atom/ns#" term="david" /><category scheme="http://www.blogger.com/atom/ns#" term="sagnier" /><category scheme="http://www.blogger.com/atom/ns#" term="gaming" /><category scheme="http://www.blogger.com/atom/ns#" term="live" /><title>Footy! is Live!</title><content type="html">&lt;a href="http://www.facebook.com/footygame"&gt;Footy!&lt;/a&gt; is Live! Congratulations to &lt;a href="http://www.facebook.com/profile.php?id=745200301"&gt;Amanda Layton&lt;/a&gt;, &lt;a href="http://www.facebook.com/DavidPaulNicholson"&gt;David Nicholson&lt;/a&gt;, &lt;a href="http://www.facebook.com/profile.php?id=706313015"&gt;Frank Sagnier&lt;/a&gt; and all the &lt;a href="http://corporate.powerchallenge.com/"&gt;guys&lt;/a&gt; in Sweden for their pioneering work in &lt;a href="http://en.wikipedia.org/wiki/Social_gaming"&gt;social gaming&lt;/a&gt;. The fusion of technology and art in this game will surely make it a bit hit! Well done again guys.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2744082786940441609-5992661356073088239?l=www.rosshuggett.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.rosshuggett.com/feeds/5992661356073088239/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.rosshuggett.com/2010/08/footy-is-live.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/5992661356073088239?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/5992661356073088239?v=2" /><link rel="alternate" type="text/html" href="http://www.rosshuggett.com/2010/08/footy-is-live.html" title="Footy! is Live!" /><author><name>Ross Huggett</name><uri>https://profiles.google.com/107463336886464284752</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-Rni2annsJ3Q/AAAAAAAAAAI/AAAAAAAAAPY/dt78pxzClto/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CkYDSH04eyp7ImA9WhRWEEQ.&quot;"><id>tag:blogger.com,1999:blog-2744082786940441609.post-7211667718726676969</id><published>2010-08-10T08:00:00.001+01:00</published><updated>2011-12-28T16:36:19.333Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-28T16:36:19.333Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tweet" /><category scheme="http://www.blogger.com/atom/ns#" term="people" /><category scheme="http://www.blogger.com/atom/ns#" term="trade" /><category scheme="http://www.blogger.com/atom/ns#" term="trades" /><category scheme="http://www.blogger.com/atom/ns#" term="twitter" /><category scheme="http://www.blogger.com/atom/ns#" term="local" /><title>tweet-a-trade</title><content type="html">I've created a new service called &lt;a href="http://groups.google.com/group/tweetatrade"&gt;tweet-a-trade&lt;/a&gt;. I'm hoping that it's going to help local people find local tradespeople. The next time you need a local tradesperson, give it go. You might find that it's easier than you think.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2744082786940441609-7211667718726676969?l=www.rosshuggett.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.rosshuggett.com/feeds/7211667718726676969/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.rosshuggett.com/2010/08/tweet-trade.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/7211667718726676969?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/7211667718726676969?v=2" /><link rel="alternate" type="text/html" href="http://www.rosshuggett.com/2010/08/tweet-trade.html" title="tweet-a-trade" /><author><name>Ross Huggett</name><uri>https://profiles.google.com/107463336886464284752</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-Rni2annsJ3Q/AAAAAAAAAAI/AAAAAAAAAPY/dt78pxzClto/s512-c/photo.jpg" /></author><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;DUcFQ3g_cCp7ImA9WhZTF0Q.&quot;"><id>tag:blogger.com,1999:blog-2744082786940441609.post-2297752515851674752</id><published>2010-06-16T20:12:00.001+01:00</published><updated>2011-03-22T12:30:12.648Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-22T12:30:12.648Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="service" /><category scheme="http://www.blogger.com/atom/ns#" term="payet" /><category scheme="http://www.blogger.com/atom/ns#" term="problem" /><category scheme="http://www.blogger.com/atom/ns#" term="post" /><category scheme="http://www.blogger.com/atom/ns#" term="bertrand" /><category scheme="http://www.blogger.com/atom/ns#" term="port" /><category scheme="http://www.blogger.com/atom/ns#" term="exception" /><category scheme="http://www.blogger.com/atom/ns#" term="netcat" /><category scheme="http://www.blogger.com/atom/ns#" term="axis" /><category scheme="http://www.blogger.com/atom/ns#" term="web" /><category scheme="http://www.blogger.com/atom/ns#" term="mule" /><category scheme="http://www.blogger.com/atom/ns#" term="client" /><category scheme="http://www.blogger.com/atom/ns#" term="dilshat" /><category scheme="http://www.blogger.com/atom/ns#" term="apache" /><category scheme="http://www.blogger.com/atom/ns#" term="listener" /><category scheme="http://www.blogger.com/atom/ns#" term="soapui" /><category scheme="http://www.blogger.com/atom/ns#" term="hewzulla" /><category scheme="http://www.blogger.com/atom/ns#" term="message" /><title>Using Netcat for testing web service calls</title><content type="html">I recently found myself in the situation where I was using &lt;a href="http://en.wikipedia.org/wiki/Mule_(software)"&gt;Mule&lt;/a&gt; to invoke a &lt;a href="http://en.wikipedia.org/wiki/Web_service"&gt;web service&lt;/a&gt; but it was failing with an &lt;a href="http://en.wikipedia.org/wiki/Exception_handling"&gt;exception&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
I'm not going to talk about Mule or the exception as it's not the subject of the post but what I am going to talk about is how I solved the problem with the help of &lt;a href="http://twitter.com/bpayet"&gt;Bertrand Payet&lt;/a&gt; and &lt;a href="http://uk.linkedin.com/pub/dilshat-hewzulla/3/b58/855"&gt;Dilshat Hewzulla&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Instead of &lt;a href="http://en.wikipedia.org/wiki/Google_(verb)"&gt;Googling&lt;/a&gt; the exception, I wanted to see how Mule was creating the &lt;a href="http://en.wikipedia.org/wiki/SOAP"&gt;SOAP&lt;/a&gt; message because I had a feeling that it was the message itself that was causing the problem. So what I did was use &lt;a href="http://en.wikipedia.org/wiki/Netcat"&gt;Netcat&lt;/a&gt; as a listener for the SOAP message.&lt;br /&gt;
&lt;br /&gt;
I did this by running Netcat and got it to listen on a &lt;a href="http://en.wikipedia.org/wiki/TCP_and_UDP_port"&gt;port&lt;/a&gt;:&lt;br /&gt;
&lt;pre name="code" class="xml"&gt;macbook:~ rosshuggett$ nc -l 8787&lt;/pre&gt;In this example, the port I've specified is 8787 but you can choose any port you like. I then defined the &lt;a href="http://en.wikipedia.org/wiki/Apache_Axis"&gt;Axis&lt;/a&gt; outbound endpoint address in Mule to point to the listening Netcat:&lt;br /&gt;
&lt;pre name="code" class="xml"&gt;&lt;axis:outbound-endpoint address="http://localhost:8787"/&gt;&lt;/pre&gt;Now when Mule creates the SOAP message, Netcat will consume the message and show it to you on the command line:&lt;br /&gt;
&lt;pre name="code" class="xml"&gt;POST /[you're endpoint] HTTP/1.1
Content-Type: text/xml
X-MULE_ENDPOINT: http://localhost:8787/[you're endpoint]
SOAPAction: http://localhost:8787/[you're endpoint]
[you're parameter]:[you're value]
style: wrapped
use: literal
Authorization: Basic aXR2dXNlcjppdHZ1c2Vy
User-Agent: Jakarta Commons-HttpClient/3.1
Host: localhost:8787
Content-Length: 972

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;
 &lt;soapenv:Header&gt;
  &lt;mule:header xmlns:mule="http://www.muleumo.org/providers/soap/1.0" soapenv:actor="http://www.muleumo.org/providers/soap/1.0" soapenv:mustUnderstand="0"&gt;
   &lt;mule:MULE_CORRELATION_ID&gt;d85554ff-7936-11df-9ca2-eb06d9f0a905&lt;/mule:MULE_CORRELATION_ID&gt;
   &lt;mule:MULE_CORRELATION_GROUP_SIZE&gt;-1&lt;/mule:MULE_CORRELATION_GROUP_SIZE&gt;
   &lt;mule:MULE_CORRELATION_SEQUENCE&gt;-1&lt;/mule:MULE_CORRELATION_SEQUENCE&gt;
  &lt;/mule:header&gt;
 &lt;/soapenv:Header&gt;
 &lt;soapenv:Body&gt;
  [you're soapenv:body]
 &lt;/soapenv:Body&gt;
&lt;/soapenv:Envelope&gt;&lt;/pre&gt;I then used this to check the SOAP message and found it was incorrect causing the exception.&lt;br /&gt;
&lt;br /&gt;
I've used Mule as an example of a client calling a web service, but you can of course use you're own client like &lt;a href="http://www.eviware.com/soapUI"&gt;SoapUI&lt;/a&gt; to generate the web service call and it will work in the same way.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Update&lt;/b&gt; [22nd March 2011] : &lt;a href="http://www.securityfocus.com/tools/139"&gt;Here's&lt;/a&gt; a nice Windows port.&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2744082786940441609-2297752515851674752?l=www.rosshuggett.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.rosshuggett.com/feeds/2297752515851674752/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.rosshuggett.com/2010/06/using-netcat-for-testing-web-service.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/2297752515851674752?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/2297752515851674752?v=2" /><link rel="alternate" type="text/html" href="http://www.rosshuggett.com/2010/06/using-netcat-for-testing-web-service.html" title="Using Netcat for testing web service calls" /><author><name>Ross Huggett</name><uri>https://profiles.google.com/107463336886464284752</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-Rni2annsJ3Q/AAAAAAAAAAI/AAAAAAAAAPY/dt78pxzClto/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;A0MGRHo4fCp7ImA9WxFWE0Q.&quot;"><id>tag:blogger.com,1999:blog-2744082786940441609.post-5650704141132769403</id><published>2010-06-01T14:33:00.004+01:00</published><updated>2010-06-01T14:37:05.434+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-01T14:37:05.434+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="password" /><category scheme="http://www.blogger.com/atom/ns#" term="community" /><category scheme="http://www.blogger.com/atom/ns#" term="subversion" /><category scheme="http://www.blogger.com/atom/ns#" term="error" /><category scheme="http://www.blogger.com/atom/ns#" term="release" /><category scheme="http://www.blogger.com/atom/ns#" term="username" /><category scheme="http://www.blogger.com/atom/ns#" term="maven" /><category scheme="http://www.blogger.com/atom/ns#" term="build" /><category scheme="http://www.blogger.com/atom/ns#" term="line" /><category scheme="http://www.blogger.com/atom/ns#" term="command" /><category scheme="http://www.blogger.com/atom/ns#" term="prepare" /><category scheme="http://www.blogger.com/atom/ns#" term="authentication" /><category scheme="http://www.blogger.com/atom/ns#" term="mac" /><category scheme="http://www.blogger.com/atom/ns#" term="apache" /><category scheme="http://www.blogger.com/atom/ns#" term="failure" /><title>Solution to 'svn: authorization failed: Could not authenticate to server: rejected Basic challenge' error</title><content type="html">Here's another post of something that I wanted to make a note of and decided it would be useful for the community. I kept on getting an error when when trying to do a &lt;a href="http://maven.apache.org"&gt;Maven&lt;/a&gt; &lt;a href="http://maven.apache.org/plugins/maven-release-plugin/"&gt;release&lt;/a&gt;. I was using the command:&lt;br /&gt;
&lt;pre name="code" class="xml"&gt;mvn release:prepare&lt;/pre&gt;and getting the following:&lt;br /&gt;
&lt;pre name="code" class="xml"&gt;[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Unable to commit files
Provider message:
The svn command failed.
Command output:
svn: Commit failed (details follow):
svn: OPTIONS of '[subversion-url]': authorization failed: Could not authenticate to server: rejected Basic challenge (http://[subversion-host])&lt;/pre&gt;I'm not sure where my authentication details were getting lost, but as a workaround, I added the authentication on the command line:&lt;br /&gt;
&lt;pre name="code" class="xml"&gt;mvn release:prepare -Dusername=[username] -Dpassword=[password]&lt;/pre&gt;It took me a while to figure out this one out as there didn't appear to be a straight forward solution on the internet so hopefully if anyone comes across this problem, it will help them out. It only seems to effect &lt;a href="http://www.apple.com/mac"&gt;mac&lt;/a&gt; users.&lt;br /&gt;
&lt;br /&gt;
Let me know if you have any problems.&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2744082786940441609-5650704141132769403?l=www.rosshuggett.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.rosshuggett.com/feeds/5650704141132769403/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.rosshuggett.com/2010/06/solution-to-svn-authorization-failed.html#comment-form" title="12 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/5650704141132769403?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/5650704141132769403?v=2" /><link rel="alternate" type="text/html" href="http://www.rosshuggett.com/2010/06/solution-to-svn-authorization-failed.html" title="Solution to 'svn: authorization failed: Could not authenticate to server: rejected Basic challenge' error" /><author><name>Ross Huggett</name><uri>https://profiles.google.com/107463336886464284752</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-Rni2annsJ3Q/AAAAAAAAAAI/AAAAAAAAAPY/dt78pxzClto/s512-c/photo.jpg" /></author><thr:total>12</thr:total></entry><entry gd:etag="W/&quot;Ck8GSX45eCp7ImA9WxFXGEQ.&quot;"><id>tag:blogger.com,1999:blog-2744082786940441609.post-8190347156598712164</id><published>2010-05-26T17:13:00.010+01:00</published><updated>2010-05-26T17:20:28.020+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-26T17:20:28.020+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="files" /><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="jar" /><category scheme="http://www.blogger.com/atom/ns#" term="bash" /><category scheme="http://www.blogger.com/atom/ns#" term="find" /><category scheme="http://www.blogger.com/atom/ns#" term="dependancy" /><title>Finding classes in jar files</title><content type="html">I've used the following command quite a bit to see if a class file exists as a dependancy in a jar file:&lt;br /&gt;
&lt;pre name="code" class="xml"&gt;find . -name *jar -exec grep [name of you're class file] {} \;&lt;/pre&gt;So an example might look like:&lt;br /&gt;
&lt;pre name="code" class="xml"&gt;find . -name *jar -exec grep AbstractTransformerTestCase {} \;&lt;/pre&gt;If there is a match, you should see something like this:&lt;br /&gt;
&lt;pre name="code" class="xml"&gt;Binary file ./lib/mule/mule-core-2.2.1-tests.jar matches&lt;/pre&gt;You can then verify it:&lt;br /&gt;
&lt;pre name="code" class="xml"&gt;jar tvf lib/mule/mule-core-2.2.1-tests.jar | grep AbstractTransformerTestCase&lt;/pre&gt;and you should see:&lt;br /&gt;
&lt;pre name="code" class="xml"&gt;4270 Tue Mar 24 15:14:12 GMT 2009 org/mule/transformer/AbstractTransformerTestCase.class&lt;/pre&gt;I wanted to make a note of it so that I didn't forget it so I decided to put it on here. Now everyone can enjoy it too! Hope you find it useful. Thanks to &lt;a href="http://twitter.com/bpayet"&gt;Bertrand Payet&lt;/a&gt; for his help.&lt;br /&gt;
&lt;br /&gt;
Let me know if you have any questions.&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2744082786940441609-8190347156598712164?l=www.rosshuggett.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.rosshuggett.com/feeds/8190347156598712164/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.rosshuggett.com/2010/05/finding-java-classes-in-jar-files.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/8190347156598712164?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/8190347156598712164?v=2" /><link rel="alternate" type="text/html" href="http://www.rosshuggett.com/2010/05/finding-java-classes-in-jar-files.html" title="Finding classes in jar files" /><author><name>Ross Huggett</name><uri>https://profiles.google.com/107463336886464284752</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-Rni2annsJ3Q/AAAAAAAAAAI/AAAAAAAAAPY/dt78pxzClto/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DEQDQH84eSp7ImA9Wx9XF0k.&quot;"><id>tag:blogger.com,1999:blog-2744082786940441609.post-714955275846694569</id><published>2010-05-09T11:55:00.004+01:00</published><updated>2011-01-11T11:46:11.131Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-11T11:46:11.131Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="requirements" /><category scheme="http://www.blogger.com/atom/ns#" term="uml" /><category scheme="http://www.blogger.com/atom/ns#" term="class" /><category scheme="http://www.blogger.com/atom/ns#" term="balance" /><category scheme="http://www.blogger.com/atom/ns#" term="conversational" /><category scheme="http://www.blogger.com/atom/ns#" term="abstract" /><category scheme="http://www.blogger.com/atom/ns#" term="complicated" /><category scheme="http://www.blogger.com/atom/ns#" term="hashtable" /><category scheme="http://www.blogger.com/atom/ns#" term="users" /><category scheme="http://www.blogger.com/atom/ns#" term="scalable" /><category scheme="http://www.blogger.com/atom/ns#" term="developers" /><category scheme="http://www.blogger.com/atom/ns#" term="stories" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="interface" /><category scheme="http://www.blogger.com/atom/ns#" term="simple" /><category scheme="http://www.blogger.com/atom/ns#" term="future" /><title>The balance between scalable code and keeping it simple</title><content type="html">It's been a couple of months since my last entry in this blog so I thought I would spend some time to think about an idea which has been on the back burner for while.&lt;br /&gt;
&lt;br /&gt;
I originally thought about this problem back in January but have only just got round to writing about it. The problem is about making software scalable and future proof enough to handle changing &lt;a href="http://martinfowler.com/bliki/ConversationalStories.html"&gt;conversational stories&lt;/a&gt; but also not over complicating the code in order to facilite this mandate.&lt;br /&gt;
&lt;br /&gt;
I've seen architects and developers pour over &lt;a href="http://en.wikipedia.org/wiki/Unified_Modeling_Language"&gt;UML&lt;/a&gt; diagrams trying to think how they can design their software so that it can handle a future requirement that they know nothing about. In my experience, some users don't know what they want now, let alone in the future.&lt;br /&gt;
&lt;br /&gt;
The problem with this approach is that you can end up with code that is wrote to try to satisfy a future requirement but has made it too complicated in the process. So when a real requirement comes along, it can be different to what was originally predicted and can take longer to implement. This could happen for a number of different reasons, there could be a different developer who is trying to understand some complicated code or the developer might have to go back and do some refactoring in order to implement the new change.&lt;br /&gt;
&lt;br /&gt;
A typical example of this might be where a &lt;a href="http://en.wikipedia.org/wiki/Hashtable"&gt;hash table&lt;/a&gt; has been used to abstract the real type in an interface. So if you had an interface which looked like this:&lt;br /&gt;
&lt;pre class="xml" name="code"&gt;public interface Communication() {
  public HashTable getTypes();
}&lt;/pre&gt;you can add Communication types easily without having to change the interface, it does make it more difficult for the developer to read and understand as you don't know what the types are unless you go deeper into the code. It might have been better just to make the interface look like this:&lt;br /&gt;
&lt;pre class="xml" name="code"&gt;public interface Communication() {
  public Letter getLetter();
  public Email getEmail();
}&lt;/pre&gt;This way, you avoid the complexity of having to retrieve the hashtable, iterating round it to find the type you want and then retrieving the data. The operation alone can be heavy, especially if you're hashtable is big.&lt;br /&gt;
&lt;br /&gt;
Another example could be a class which &lt;i&gt;might&lt;/i&gt; share some similarities with another future class you don't know about yet. You can create an abstract class and give it an abstract name and create a light weight class which implements it.&lt;br /&gt;
&lt;br /&gt;
The future class never materialises or another class comes along which turns out doesn't quite fit with you're abstract class, so you can't extend it and you end up with complicated code again.&lt;br /&gt;
&lt;br /&gt;
Whilst these examples are quite simple, when you are faced with more complicated problems it's important to try to strike a balance between making you're code open to future requirements but also keeping it simple enough so that it can be understood.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Edit&lt;/b&gt;: 11th January 2011 - What I'm talking about here or course it &lt;a href="http://en.wikipedia.org/wiki/Type_safety"&gt;type safety&lt;/a&gt;. The hash table is an example of weak &lt;a href="http://en.wikipedia.org/wiki/Weak_typing"&gt;typing&lt;/a&gt;.&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2744082786940441609-714955275846694569?l=www.rosshuggett.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.rosshuggett.com/feeds/714955275846694569/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.rosshuggett.com/2010/05/balance-between-scalable-code-and.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/714955275846694569?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/714955275846694569?v=2" /><link rel="alternate" type="text/html" href="http://www.rosshuggett.com/2010/05/balance-between-scalable-code-and.html" title="The balance between scalable code and keeping it simple" /><author><name>Ross Huggett</name><uri>https://profiles.google.com/107463336886464284752</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-Rni2annsJ3Q/AAAAAAAAAAI/AAAAAAAAAPY/dt78pxzClto/s512-c/photo.jpg" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;A0IFQX8-fip7ImA9WxFWFEs.&quot;"><id>tag:blogger.com,1999:blog-2744082786940441609.post-5940104239447171615</id><published>2010-03-20T12:27:00.009Z</published><updated>2010-06-02T10:05:10.156+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-02T10:05:10.156+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="machine" /><category scheme="http://www.blogger.com/atom/ns#" term="speed" /><category scheme="http://www.blogger.com/atom/ns#" term="firewall" /><category scheme="http://www.blogger.com/atom/ns#" term="posix" /><category scheme="http://www.blogger.com/atom/ns#" term="access" /><category scheme="http://www.blogger.com/atom/ns#" term="port" /><category scheme="http://www.blogger.com/atom/ns#" term="ssh" /><category scheme="http://www.blogger.com/atom/ns#" term="delivery" /><category scheme="http://www.blogger.com/atom/ns#" term="windows" /><category scheme="http://www.blogger.com/atom/ns#" term="osx" /><category scheme="http://www.blogger.com/atom/ns#" term="connect" /><category scheme="http://www.blogger.com/atom/ns#" term="putty" /><category scheme="http://www.blogger.com/atom/ns#" term="connectivity" /><category scheme="http://www.blogger.com/atom/ns#" term="ip" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="protocol" /><category scheme="http://www.blogger.com/atom/ns#" term="tunnel" /><category scheme="http://www.blogger.com/atom/ns#" term="authentication" /><category scheme="http://www.blogger.com/atom/ns#" term="environment" /><category scheme="http://www.blogger.com/atom/ns#" term="microsoft" /><title>SSH tunnels - what they do and how to create one</title><content type="html">Creating &lt;a href="http://en.wikipedia.org/wiki/Tunneling_protocol#Secure_Shell_tunneling"&gt;SSH tunnels&lt;/a&gt; seems to be an area where some developers struggle with so I thought I would write a post on what they do and how to create one.&lt;br /&gt;
&lt;br /&gt;
If you work in an environment where there are lots of firewalls slowing down the speed in which you can deliver, creating an SSH tunnel can be the solution as long as you know a machine which you have &lt;a href="http://en.wikipedia.org/wiki/Secure_Shell"&gt;SSH access&lt;/a&gt; to which has access to the machine and port you want to connect to. The best way to explain this is through a worked example.&lt;br /&gt;
&lt;br /&gt;
So, say you have the machines x, y and z:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;x has an ip address of 192.168.1.100&lt;/li&gt;
&lt;li&gt;y has an ip address of 192.168.1.101 and the authentication details ross:pwross&lt;/li&gt;
&lt;li&gt;z has an ip address of 192.168.1.102&lt;/li&gt;
&lt;/ul&gt;You are on x and you want to connect to z via port 8080 but it's blocked by a firewall. x has SSH access to y but not z. y only has access to z via port 8080. You can test this by ssh'ing to y and running:&lt;br /&gt;
&lt;pre class="xml" name="code"&gt;telnet z 8080&lt;/pre&gt;If you get back an error message like this:&lt;br /&gt;
&lt;pre class="xml" name="code"&gt;Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused
telnet: Unable to connect to remote host&lt;/pre&gt;you don't have connectivity. If you get anything else, you have connectivity. &lt;br /&gt;
&lt;br /&gt;
If you are running a &lt;a href="http://en.wikipedia.org/wiki/POSIX"&gt;POSIX&lt;/a&gt; based operation system like &lt;a href="http://en.wikipedia.org/wiki/Mac_OS_X"&gt;Mac OS X&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/GNU/Linux"&gt;Linux&lt;/a&gt;, you can just use the command line to setup your tunnel:&lt;br /&gt;
&lt;pre class="xml" name="code"&gt;ssh -f -N -g -4 -L 8081:[z]:8080 [username]:[password]@[y]&lt;/pre&gt;So, using the ip address's and authentication details specified above, it would look like this:&lt;br /&gt;
&lt;pre class="xml" name="code"&gt;ssh -f -N -g -4 -L 8081:192.168.1.102:8080 ross:rosspw@192.168.1.101&lt;/pre&gt;Now all you need to do is check that you have connectivity to z from x, so you can run telnet again specifying the port:&lt;br /&gt;
&lt;pre class="xml" name="code"&gt;telnet 127.0.0.1 8081&lt;/pre&gt;Noticed here that I've specified localhost (127.0.0.1). If you want to make this a more recognisable hostname, you'll have to put an entry in your hosts file like so:&lt;br /&gt;
&lt;pre class="xml" name="code"&gt;# 192.168.1.102 z
127.0.0.1 z&lt;/pre&gt;Notice that I've commented out z's real ip address. Now I can run:&lt;br /&gt;
&lt;pre class="xml" name="code"&gt;telnet z 8081&lt;/pre&gt;If you are running &lt;a href="http://en.wikipedia.org/wiki/Microsoft_Windows"&gt;Microsoft Windows&lt;/a&gt;, you can use &lt;a href="http://www.chiark.greenend.org.uk/~sgtatham/putty"&gt;PuTTY&lt;/a&gt; to setup your tunnel.&lt;br /&gt;
&lt;br /&gt;
First, type y into the hostname box (I've put the ip address in for y):&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.flickr.com/photos/rosshuggett/4447774328/" title="putty-hostname by rosshuggett, on Flickr"&gt;&lt;img src="http://farm5.static.flickr.com/4004/4447774328_e0531af2a7_o.jpg" width="456" height="435" alt="putty-hostname" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Navigate down the 'Tunnels' Category in the left hand side box. It's under 'Connection' and 'SSH'. In the destination box, type z:8080. You can see I've put the IP address in again. In the Source port box, type 8081:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.flickr.com/photos/rosshuggett/4446999291/" title="putty-tunnels by rosshuggett, on Flickr"&gt;&lt;img src="http://farm5.static.flickr.com/4051/4446999291_b79bcc2c7c_o.jpg" width="456" height="435" alt="putty-tunnels" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Now click 'Add', and you'll see it in the forwarded ports list:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.flickr.com/photos/rosshuggett/4446999435/" title="putty-add by rosshuggett, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2739/4446999435_ed40d904a2_o.jpg" width="456" height="435" alt="putty-add" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Click 'Open' and it will start up a session where you'll need to authenticate with y's details again. Once the session is established, repeat the hostname entry part above, and you'll have connectivity.&lt;br /&gt;
&lt;br /&gt;
Let me know if you have questions.&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2744082786940441609-5940104239447171615?l=www.rosshuggett.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.rosshuggett.com/feeds/5940104239447171615/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.rosshuggett.com/2010/03/ssh-tunnels-what-they-do-and-how-to.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/5940104239447171615?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/5940104239447171615?v=2" /><link rel="alternate" type="text/html" href="http://www.rosshuggett.com/2010/03/ssh-tunnels-what-they-do-and-how-to.html" title="SSH tunnels - what they do and how to create one" /><author><name>Ross Huggett</name><uri>https://profiles.google.com/107463336886464284752</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-Rni2annsJ3Q/AAAAAAAAAAI/AAAAAAAAAPY/dt78pxzClto/s512-c/photo.jpg" /></author><thr:total>4</thr:total></entry><entry gd:etag="W/&quot;A0IARnw6cCp7ImA9WxFWFEs.&quot;"><id>tag:blogger.com,1999:blog-2744082786940441609.post-4032634409332100628</id><published>2010-03-13T11:25:00.005Z</published><updated>2010-06-02T10:05:47.218+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-02T10:05:47.218+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="service" /><category scheme="http://www.blogger.com/atom/ns#" term="screen" /><category scheme="http://www.blogger.com/atom/ns#" term="speed" /><category scheme="http://www.blogger.com/atom/ns#" term="foursquare" /><category scheme="http://www.blogger.com/atom/ns#" term="patience" /><category scheme="http://www.blogger.com/atom/ns#" term="span" /><category scheme="http://www.blogger.com/atom/ns#" term="slow" /><category scheme="http://www.blogger.com/atom/ns#" term="design" /><category scheme="http://www.blogger.com/atom/ns#" term="concentration" /><category scheme="http://www.blogger.com/atom/ns#" term="ui" /><category scheme="http://www.blogger.com/atom/ns#" term="iphone" /><category scheme="http://www.blogger.com/atom/ns#" term="mobile" /><category scheme="http://www.blogger.com/atom/ns#" term="blackberry" /><category scheme="http://www.blogger.com/atom/ns#" term="keyboard" /><category scheme="http://www.blogger.com/atom/ns#" term="mouse" /><category scheme="http://www.blogger.com/atom/ns#" term="finger" /><category scheme="http://www.blogger.com/atom/ns#" term="interface" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Mobile UI design and patience</title><content type="html">This is a bit off topic for me as I haven't done &lt;a href="http://en.wikipedia.org/wiki/User_interface"&gt;UI&lt;/a&gt; design for a while but I've been looking at how people use mobile UI's and wanted to get some recent observations down.&lt;br /&gt;
&lt;br /&gt;
When I used to do UI design, we used to think a lot about users who sit down in front of a computer with a screen, keyboard and mouse and look at how they use websites.&lt;br /&gt;
&lt;br /&gt;
At first, we had a lot of time to play with, as the expectations were less a few years ago. Users had time, concentration spans lasted longer as users had the patience to wait for pages to load and find their way through complicated UI's to what they wanted to do. &lt;br /&gt;
&lt;br /&gt;
As time went on, expectations on the speed of a service increased and they had less patience for a slow service and a complicated interface.&lt;br /&gt;
&lt;br /&gt;
What I notice now, in the mobile space, is that users aren't sitting down and they don't have a mouse and keyboard. This may sound obvious, but it's relevant. They have a screen and a finger and task to do and that's it.&lt;br /&gt;
&lt;br /&gt;
The amount of time, concentration span and patience they now have to perform a task has been drastically reduced to a few seconds. If you're UI is complicated or you're service slow, it simply won't get used.&lt;br /&gt;
&lt;br /&gt;
A good example of this is a service I've been trying our recently, &lt;a href="http://foursquare.com"&gt;foursquare&lt;/a&gt;. On my mobile (which happens to be an iPhone, but's it's available for &lt;a href="http://foursquare.com/android/"&gt;Android&lt;/a&gt; and &lt;a href="http://foursquare.com/blackberry"&gt;Blackberry&lt;/a&gt;),  the app loads in about second, and you are immediately presented with a big 'Check-in' button:&lt;br /&gt;
&lt;center&gt;&lt;br /&gt;
&lt;a href="http://www.flickr.com/photos/rosshuggett/4419538153/" title="IMG_0343 by rosshuggett, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2755/4419538153_0d6eb5bc1b_o.jpg" width="320" height="480" alt="IMG_0343" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/center&gt;&lt;br /&gt;
This is good because most of the time, this is all I want to do and I want to do it very very quickly. The reason is that if I'm at a new place, I probably want to do something else other than check in, for example, if I checked in at the gym, I want to work out.&lt;br /&gt;
&lt;br /&gt;
In this scenario, I don't want to see who's here or do anything else. I might later want to look at my history and use this data to see if I've been going to gym enough times to warrant carrying on with my gym membership, but for now, I just want to check in.&lt;br /&gt;
&lt;br /&gt;
Other times, if I'm out at a social event, I might want to spend more time to look which of my friends are here and meet up with them.&lt;br /&gt;
&lt;br /&gt;
I hope you enjoyed reading this. What do you think about mobile UI development?&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2744082786940441609-4032634409332100628?l=www.rosshuggett.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.rosshuggett.com/feeds/4032634409332100628/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.rosshuggett.com/2010/03/mobile-ui-design-and-patience.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/4032634409332100628?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/4032634409332100628?v=2" /><link rel="alternate" type="text/html" href="http://www.rosshuggett.com/2010/03/mobile-ui-design-and-patience.html" title="Mobile UI design and patience" /><author><name>Ross Huggett</name><uri>https://profiles.google.com/107463336886464284752</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-Rni2annsJ3Q/AAAAAAAAAAI/AAAAAAAAAPY/dt78pxzClto/s512-c/photo.jpg" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;C0YHR3czeip7ImA9WxFWFE0.&quot;"><id>tag:blogger.com,1999:blog-2744082786940441609.post-7749745068793857746</id><published>2010-02-22T12:25:00.003Z</published><updated>2010-06-01T15:05:36.982+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-01T15:05:36.982+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="curl" /><category scheme="http://www.blogger.com/atom/ns#" term="update" /><category scheme="http://www.blogger.com/atom/ns#" term="simple" /><category scheme="http://www.blogger.com/atom/ns#" term="twitter" /><category scheme="http://www.blogger.com/atom/ns#" term="status" /><title>Simplest way to update Twitter?</title><content type="html">Is this the simplest way to update &lt;a href="http://twitter.com/"&gt;Twitter&lt;/a&gt;?&lt;br /&gt;
&lt;pre name="code" class="xml"&gt;curl -u [username]:[password] -d status="[status]" http://twitter.com/statuses/update.xml&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2744082786940441609-7749745068793857746?l=www.rosshuggett.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.rosshuggett.com/feeds/7749745068793857746/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.rosshuggett.com/2010/02/simplest-way-to-update-twitter.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/7749745068793857746?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2744082786940441609/posts/default/7749745068793857746?v=2" /><link rel="alternate" type="text/html" href="http://www.rosshuggett.com/2010/02/simplest-way-to-update-twitter.html" title="Simplest way to update Twitter?" /><author><name>Ross Huggett</name><uri>https://profiles.google.com/107463336886464284752</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-Rni2annsJ3Q/AAAAAAAAAAI/AAAAAAAAAPY/dt78pxzClto/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry></feed>

