<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>threehv &#187; Managing Successful Projects</title>
	<atom:link href="http://www.3hv.co.uk/blog/category/project-management/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.3hv.co.uk/blog</link>
	<description>precision engineering for your website</description>
	<lastBuildDate>Fri, 13 Jan 2012 16:18:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>How we work</title>
		<link>http://www.3hv.co.uk/blog/2011/02/27/how-we-work/</link>
		<comments>http://www.3hv.co.uk/blog/2011/02/27/how-we-work/#comments</comments>
		<pubDate>Sun, 27 Feb 2011 21:36:26 +0000</pubDate>
		<dc:creator>Rahoul Baruah</dc:creator>
				<category><![CDATA[Beautiful Code]]></category>
		<category><![CDATA[Designing Great Software]]></category>
		<category><![CDATA[Managing Successful Projects]]></category>
		<category><![CDATA[Writing Reliable, Bug-Free Code]]></category>

		<guid isPermaLink="false">http://www.3hv.co.uk/blog/?p=816</guid>
		<description><![CDATA[We have published a bit more information about how we work &#8211; our Beautiful Code doctrine, the process that we follow and how we convert your ideas into tangible features.]]></description>
			<content:encoded><![CDATA[<p>We have published a bit more information about how we work &#8211; our <a href="/blog/beautiful-code">Beautiful Code</a> doctrine, the <a href="/blog/beautiful-code/process-and-engineering/">process that we follow</a> and how we <a href="/blog/beautiful-code/converting-an-idea-into-a-feature/">convert your ideas into tangible features</a>.  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.3hv.co.uk/blog/2011/02/27/how-we-work/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Always write tests</title>
		<link>http://www.3hv.co.uk/blog/2010/09/02/always-write-tests/</link>
		<comments>http://www.3hv.co.uk/blog/2010/09/02/always-write-tests/#comments</comments>
		<pubDate>Thu, 02 Sep 2010 19:50:54 +0000</pubDate>
		<dc:creator>Rahoul Baruah</dc:creator>
				<category><![CDATA[Designing Great Software]]></category>
		<category><![CDATA[Managing Successful Projects]]></category>
		<category><![CDATA[Ruby on Rails and Software Development]]></category>
		<category><![CDATA[Writing Reliable, Bug-Free Code]]></category>

		<guid isPermaLink="false">http://www.3hv.co.uk/blog/?p=710</guid>
		<description><![CDATA[One of the things that stands out about Ruby and Rails developers is that the vast majority obsess over “behaviour-driven-development” (or its similar predecessor “test-driven-development”). At first glance, this allows a suite of automated tests to be run against your code &#8211; the idea being that you have proof that your system does what it [...]]]></description>
			<content:encoded><![CDATA[<p>One of the things that stands out about Ruby and Rails developers is that the vast majority obsess over “behaviour-driven-development” (or its similar predecessor “test-driven-development”).</p>
<p>At first glance, this allows a suite of automated tests to be run against your code &#8211; the idea being that you have proof that your system does what it is supposed to. Bugs are caught early and, most importantly, a new feature cannot break existing features without you knowing about it.</p>
<p>But there is a much bigger advantage to behaviour-driven-development.</p>
<p>The very act of writing your tests before writing your code clarifies what you are trying to achieve and results in designs and code that are actually simpler &#8211; and hence easier to maintain.</p>
<p>I was reminded of this when trying to build a data importer. My colleague wrote a huge piece of code that seemed to work at first. But upon further investigation, it appeared to get some internal references wrong &#8211; and as the import took an hour to run, debugging became a pain.</p>
<p>So I started over. I wrote out a series of names for my specification: it should import a single product, it should import all variations of that product, it should import the images for a product, it should update an existing product.</p>
<p>These bullet points are a simple description for what it was supposed to achieve.</p>
<p>I then implemented the first bullet point in code &#8211; I took a copy of the import file, stripped out most of the data till I found a relevant piece, loaded that and then called the importer. My test just checked the results and ensured that the results were what was expected. The first run failed &#8211; because I didn’t have any code in my importer. But I implemented the simple “import a product” case and the test passed. Then I implemented the second bullet point in code. The first test passed, the second failed. I added the code to get the new test to pass &#8211; two passing tests and a very simple piece of code for the importer. Continue till all the tests were implemented &#8211; fantastic. The importer worked. But the most important thing &#8211; because it was built incrementally, it was simple. Even better, if it did start getting messy I could rewrite and rearrange the code to simplify it &#8211; and still be sure it was working as the tests proved it.</p>
<p>Writing the tests does not take much time &#8211; in fact it saves time as you have to explain to yourself what you are doing before you begin. But even more importantly, it results in clean, simple code. Which saves even more time (and money) in the long run, as that becomes cheaper to maintain.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3hv.co.uk/blog/2010/09/02/always-write-tests/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Making decisions at a startup</title>
		<link>http://www.3hv.co.uk/blog/2009/10/27/making-decisions-at-a-startup/</link>
		<comments>http://www.3hv.co.uk/blog/2009/10/27/making-decisions-at-a-startup/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 17:55:29 +0000</pubDate>
		<dc:creator>Rahoul Baruah</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Managing Successful Projects]]></category>
		<category><![CDATA[decisions]]></category>
		<category><![CDATA[flow charts]]></category>
		<category><![CDATA[startups]]></category>

		<guid isPermaLink="false">http://www.3hv.co.uk/blog/?p=602</guid>
		<description><![CDATA[One of the problems of being at a startup is the overwhelming amount of work. So much to do, so little time! Luckily, this helpful flow-chart helps you decide what to do next.]]></description>
			<content:encoded><![CDATA[<p>One of the problems of being at a startup is the overwhelming amount of work.  So much to do, so little time!</p>
<p>Luckily, this helpful flow-chart helps you decide what to do next.  <img src="http://www.3hv.co.uk/blog/wp-content/uploads/2009/10/Startup-Decision-Maker-193x300.png" alt="Startup Decision Maker" title="Startup Decision Maker" width="193" height="300" class="alignright size-medium wp-image-603" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.3hv.co.uk/blog/2009/10/27/making-decisions-at-a-startup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Play to your strengths</title>
		<link>http://www.3hv.co.uk/blog/2009/10/11/play-to-your-strengths/</link>
		<comments>http://www.3hv.co.uk/blog/2009/10/11/play-to-your-strengths/#comments</comments>
		<pubDate>Sun, 11 Oct 2009 15:28:56 +0000</pubDate>
		<dc:creator>Rahoul Baruah</dc:creator>
				<category><![CDATA[Managing Successful Projects]]></category>
		<category><![CDATA[corporate culture]]></category>
		<category><![CDATA[product positioning]]></category>
		<category><![CDATA[sales]]></category>

		<guid isPermaLink="false">http://www.3hv.co.uk/blog/?p=593</guid>
		<description><![CDATA[I used to work for a company that built a complicated desktop application, let&#8217;s call it Roloduck. The original version was written in about 1999-2000 and subsequent versions (including a total rewrite) were built over the first six years of the new millenium. Over that time my job title varied between developer, senior developer, lead [...]]]></description>
			<content:encoded><![CDATA[<p>I used to work for a company that built a complicated desktop application, let&#8217;s call it Roloduck.  The original version was written in about 1999-2000 and subsequent versions (including a total rewrite) were built over the first six years of the new millenium.  Over that time my job title varied between developer, senior developer, lead architect, project leader, team leader and technical director.  Amongst other things.  </p>
<p>One of the major trends in software development at that time (at least for desktop applications) was to offer options &#8211; make it configurable and you can please everyone.  And you can then sell &#8220;consultancy days&#8221; as it takes two weeks post-installation before the thing is usable, as you tick all the right boxes and choose all the right options.  It also means you can say &#8220;hmm, well, there are eight different ways to do that, each with different pros and cons&#8221; (as opposed to saying &#8220;we can do exactly what you want&#8221; or &#8220;no, sorry, we don&#8217;t do that&#8221;).  </p>
<p>So this was a big complicated software project; large enough that no one person knew it all the way through, with a variety of different architectures in-built (COM objects is how you do this stuff; oh no, now it&#8217;s COM+, now it&#8217;s ADO-disconnected and so on).  </p>
<p>But we were only a small company.  At its largest there were probably ten people working on the product at any one time.  However, if you read the company communications you could never tell &#8211; it was all the bland, marketing-droid, use three-hundred-words-when-one-would-do style.  Our email signatures had the sixteen paragraph disclaimer &#8211; &#8220;this is only intended for the intended recipient and if you are not its intended then wipe your memory immediately and burn your computer to prevent accidental ingestion&#8221;.  This worked so well, some of our customers were amazed when they found out how many people we actually had &#8211; they thought we were a multinational with hundreds of developers across thousands of countries.  </p>
<p>Over the years, we would consistently come across a single competitor &#8211; let&#8217;s call them Crump Builder.  We poached our sales director from them, so we had a pretty good idea of what they were capable of and how they worked.  We were small fry, they had funding and a team several times bigger than ours.  They had also been going longer than us, so they had an even bigger set of preferences, options and modules to choose from.  Most of the time, the sales process would come down to a choice between Roloduck and Crump Builder, and in the vast majority of cases, the prospect would choose Crump Builder.  </p>
<p>At the time, I thought this was because we were behind them.  They had the more polished, more finished product that did more and went further.  But, since the demise of Roloduck (the company went bust recently) I&#8217;ve had to revise that view.  You see, one of Roloduck&#8217;s old customers has chosen Crump Builder as the replacement for their now defunct Roloduck system.  And she said that Crump Builder simply does not do a lot of the stuff that they need, whereas Roloduck does.  </p>
<p>This news amazed me.  Why did we consistently lose out to Crump Builder in those countless sales pitches?  </p>
<p>Having thought about this, the only reason I can come up with is that we were not playing to our strengths.  We were chasing their tails all the time.  &#8220;We know they do X and we don&#8217;t yet; but we will soon&#8221;.  &#8220;Yes, their version is pretty slick and ours is a bit clunky&#8221;.  We were trying to present ourselves as their equals, equivalent in size and structure, in fact bigger than them in size and structure.  But, because we were smaller, we were being found out.  Not once, in our competitive analysis did we say &#8220;they are strong there, but we are strong here, so we should push this instead&#8221;. We should have pitched it as &#8220;we are the small guys &#8211; meaning you will get personalised service&#8221;, &#8220;our bit isn&#8217;t finished yet, so we can tailor it exactly to how you need it&#8221;</p>
<p>This is exactly what we have planned for our new venture.  There are only two of us, so you will have the focussed attention of at least 50% of the company.  We can&#8217;t afford lawyers or committees, so all the personality won&#8217;t be mangled out of our communications (bad jokes and all).  And as we&#8217;re only small we can&#8217;t afford any waste, in either resources or time.  So we will do what you need in the quickest, most efficient way possible.  It will not work for everyone, but it will work fantastically for some.  Those are <em>our</em> strengths and we <em>will</em> play to them.  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.3hv.co.uk/blog/2009/10/11/play-to-your-strengths/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Note to self: comparing two branches in git and squashing several commits into one</title>
		<link>http://www.3hv.co.uk/blog/2009/06/02/note-to-self-comparing-two-branches-in-git-and-squashing-several-commits-into-one/</link>
		<comments>http://www.3hv.co.uk/blog/2009/06/02/note-to-self-comparing-two-branches-in-git-and-squashing-several-commits-into-one/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 19:49:45 +0000</pubDate>
		<dc:creator>Rahoul Baruah</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Managing Successful Projects]]></category>
		<category><![CDATA[Ruby on Rails and Software Development]]></category>
		<category><![CDATA[branches]]></category>
		<category><![CDATA[commits]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[source control]]></category>

		<guid isPermaLink="false">http://www.3hv.co.uk/blog/?p=548</guid>
		<description><![CDATA[I always forget how to do this so I&#8217;m writing it down (especially as it&#8217;s really easy and git, as usual, makes me feel stupid as Linus is so much smarter than me). Suppose you&#8217;ve been working in branch X and you&#8217;re about to merge those changes into branch Y &#8230; work in branch X [...]]]></description>
			<content:encoded><![CDATA[<p>I always forget how to do this so I&#8217;m writing it down (especially as it&#8217;s really easy and git, as usual, makes me feel stupid as Linus is so much smarter than me).  </p>
<p>Suppose you&#8217;ve been working in branch X and you&#8217;re about to merge those changes into branch Y &#8230;</p>
<ul>
<li>work in branch X and make your commits as needed</li>
<li>switch to branch Y <code>git checkout Y</code></li>
<li>compare the differences between X and Y <code>git log Y..X</code> &#8211; the order here is important; it is merge-target..merge-source</li>
<li>merge the changes from X (merge-source) into Y (merge-target) <code>git merge X</code></li>
</ul>
<p>Even better, before doing the merge, while you are still in branch X, you can squash multiple commits into a single one.  This way, branch Y, when you examine the log, has a single entry &#8220;implemented feature X&#8221;, instead of thirty-five entries all related to feature X in some way.  </p>
<ul>
<li>examine the log <code>git log</code> or even better <code>git log --pretty=oneline</code></li>
<li>choose the commit that immediately precedes the one that starts your piece of work (probably the last one before you branched to start work on feature X)</li>
<li>start an interactive rebase session &#8211; this is git-fancy-talk for picking some commits and typing a message &#8211; <code>git rebase -i THE-COMMIT-ID-OF-THE-COMMIT-YOU-SELECTED-ABOVE</code></li>
<li>Your favourite editor (or nano) will open listing the commits for feature X &#8211; edit the word &#8220;pick&#8221; to &#8220;squash&#8221; for all except the top entry, save and exit</li>
<li>Your favourite editor will open again &#8211; again showing your commit messages &#8211; add a line <em>at the top</em> stating something like &#8220;implementation of feature X&#8221; and leave the list of individual commits on separate lines below it (adding in a Fixes #123 or whatever your issue tracker demands as the last line), save and exit</li>
<li>Now if you do a <code>git log</code> you will see a single commit with a nice &#8220;implementation of feature X&#8221; log message</li>
<li>And you&#8217;re all set to merge to your master branch without cluttering its history with a long string of commit messages</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.3hv.co.uk/blog/2009/06/02/note-to-self-comparing-two-branches-in-git-and-squashing-several-commits-into-one/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Using Cucumber to estimate a project</title>
		<link>http://www.3hv.co.uk/blog/2009/05/15/using-cucumber-to-estimate-a-project/</link>
		<comments>http://www.3hv.co.uk/blog/2009/05/15/using-cucumber-to-estimate-a-project/#comments</comments>
		<pubDate>Fri, 15 May 2009 16:39:45 +0000</pubDate>
		<dc:creator>Rahoul Baruah</dc:creator>
				<category><![CDATA[Designing Great Software]]></category>
		<category><![CDATA[Managing Successful Projects]]></category>
		<category><![CDATA[Ruby on Rails and Software Development]]></category>
		<category><![CDATA[Writing Reliable, Bug-Free Code]]></category>
		<category><![CDATA[cucumber]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[estimates]]></category>
		<category><![CDATA[project planning]]></category>
		<category><![CDATA[requirements gathering]]></category>

		<guid isPermaLink="false">http://www.3hv.co.uk/blog/?p=521</guid>
		<description><![CDATA[Writing estimates up-front is a really tricky part of client work. From the customer&#8217;s point of view it&#8217;s pretty essential. You need to know how much you are spending before the work begins so you don&#8217;t get stung. From the developer&#8217;s point of view it&#8217;s pretty difficult to do because you don&#8217;t know how long [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.3hv.co.uk/blog/wp-content/uploads/2009/05/281211_6743jpg-300x225.jpg" alt="Invoice" title="Invoice" width="300" height="225" class="alignright size-medium wp-image-524" style="margin: 4px" />Writing estimates up-front is a really tricky part of client work.  </p>
<p>From the customer&#8217;s point of view it&#8217;s pretty essential.  You need to know how much you are spending before the work begins so you don&#8217;t get stung.    </p>
<p>From the developer&#8217;s point of view it&#8217;s pretty difficult to do because you don&#8217;t know how long things will take until you know what you&#8217;re building.  And you don&#8217;t know the details of what you are building until they become apparent, which is normally while you are doing the work.  </p>
<p>For this particular client I wanted to get this piece of work out of the way as quickly as possible and the requirements were deceptively complicated.  As trying to deal with intangibles is a recipe for disaster, and time was short, I was pretty sure that whatever estimate I came up with would be totally inaccurate.  </p>
<p>So to deal with the intangibles I thought I may as well get stuck in with the actual work.  And what&#8217;s the first thing that I do?  Write a <a href="http://cukes.info">cucumber</a> story.  </p>
<p>I went through the requirements documents (which after weeks of to and fro were actually quite detailed and refined) and broke it down into four features, each with a number of scenarios.  Each scenario was then broken down into individual steps &#8211; however, I did not write any step definition (ruby) files.  This is cucumber as customer documentation, not as integration testing.  </p>
<p>We agreed that the features met the requirements (the client was very impressed with the level of detail and the clarity that cucumber offered) and I simply went through each feature, scenario and step and came up with a price for the step individually.  It&#8217;s still guesswork, but it&#8217;s guesswork on a small scale, so you&#8217;re less likely to be way off.  Total the lot and there&#8217;s your estimate.  </p>
<p>And even better, once the client has agreed the price and you&#8217;ve started development, you&#8217;ve got a development plan, a measure of progress and proof that it all works &#8211; all just a simple <tt>rake features</tt> away.  </p>
<p><small>Image by <a href="http://www.sxc.hu/profile/lemon_drop">lemon drop</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.3hv.co.uk/blog/2009/05/15/using-cucumber-to-estimate-a-project/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Thought for the day: dealing with people</title>
		<link>http://www.3hv.co.uk/blog/2009/04/21/thought-for-the-day-dealing-with-people/</link>
		<comments>http://www.3hv.co.uk/blog/2009/04/21/thought-for-the-day-dealing-with-people/#comments</comments>
		<pubDate>Tue, 21 Apr 2009 17:59:35 +0000</pubDate>
		<dc:creator>Rahoul Baruah</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Managing Successful Projects]]></category>
		<category><![CDATA[people]]></category>
		<category><![CDATA[projects]]></category>

		<guid isPermaLink="false">http://www.3hv.co.uk/blog/2009/04/21/thought-for-the-day-dealing-with-people/</guid>
		<description><![CDATA[When dealing with people (whether friends, family, customers or suppliers), remember: there is an absolute world of difference between &#8220;I think that&#8217;s rubbish&#8221; and &#8220;it is rubbish&#8221;. One is a statement of opinion, the other is likely to get people&#8217;s backs up. Words and phrasing are important to people. It&#8217;s why naming in computer science [...]]]></description>
			<content:encoded><![CDATA[<p>When dealing with people (whether friends, family, customers or suppliers), remember: there is an absolute world of difference between &#8220;I think that&#8217;s rubbish&#8221; and &#8220;it is rubbish&#8221;.  </p>
<p>One is a statement of opinion, the other is likely to get people&#8217;s backs up. Words and phrasing are important to people. </p>
<p>It&#8217;s why naming in computer science is hard. </p>
<p>It&#8217;s why people are better than machines. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.3hv.co.uk/blog/2009/04/21/thought-for-the-day-dealing-with-people/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The five day product launch</title>
		<link>http://www.3hv.co.uk/blog/2009/02/06/the-five-day-product-launch/</link>
		<comments>http://www.3hv.co.uk/blog/2009/02/06/the-five-day-product-launch/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 21:46:27 +0000</pubDate>
		<dc:creator>Rahoul Baruah</dc:creator>
				<category><![CDATA[Designing Great Software]]></category>
		<category><![CDATA[Managing Successful Projects]]></category>

		<guid isPermaLink="false">http://www.3hv.co.uk/blog/?p=384</guid>
		<description><![CDATA[The launch of isitruby1.9.com is exciting for a couple of reasons.  The obvious reasons are that this is something that we, as Ruby developers, needed.  It gets the Brightbox name out there.   And it&#8217;s also nice to get people together and give something to &#8220;the community&#8221;.   But personally, what I like best about it, is that the [...]]]></description>
			<content:encoded><![CDATA[<p>The launch of <a title="Ruby 1.9 gem compatibility" href="http://isitruby19.com" target="_blank">isitruby1.9.com</a> is exciting for a couple of reasons.  The obvious reasons are that this is something that we, as Ruby developers, needed.  It gets the <a title="Serious Rails Hosting" href="http://www.brightbox.co.uk" target="_blank">Brightbox</a> name out there.   And it&#8217;s also nice to get people together and give something to &#8220;the community&#8221;.  </p>
<p>But personally, what I like best about it, is that the entire site was built, from original idea to launch in less than five days.  </p>
<p>Last weekend, <a title="Caius" href="http://caius.name" target="_blank">Caius</a> and I had chatted about how we needed to test our stuff against Ruby 1.9.  <a title="John" href="http://johnleach.co.uk" target="_blank">John</a> suggested automatically downloading and testing gems and reporting the results back to a web-site &#8220;a bit like the wine project does&#8221;.  <a title="David" href="http://davidsmalley.com" target="_blank">David</a> popped up in our Jabber room a couple of hours later saying &#8220;I&#8217;ve had an idea &#8230; isitruby19.com &#8230; list stuff that does and doesn&#8217;t work with ruby 1.9&#8243;.  <a href="http://blog.brightbox.co.uk/posts/author/jeremy" target="_blank">Jeremy</a> liked the idea &#8230; &#8220;I could probably skin it tomorrow night&#8221;.  </p>
<p>And so an evening of hacking by David gets a basic framework in place &#8211; he pulls the gems from Rubyforge and adds a comments model.  I take over on Monday, putting a basic HTML interface together, with gravatars and captchas, which Jeremy then makes look <a href="http://twitter.com/jeremyjarvis/status/1173099600" target="_blank">nice</a>.  A blind alley over user registration, a few problems with Ferret, but by Tuesday we were pretty much done.  Deploy to the live site on Wednesday and then we just needed to test a few gems to seed the display.  Come Thursday and we all <a href="http://twitter.com/xbaz/status/1179815134" target="_blank">tweet</a> <a href="http://twitter.com/johnleach/status/1179808781" target="_blank">about</a> the <a href="http://twitter.com/Caius/status/1179812549" target="_blank">new site</a> &#8230; and <a title="Ruby 1.9 gem compatibility" href="http://isitruby19.com" target="_blank">isitruby1.9.com</a> is <a title="Ruby 1.9" href="http://blog.brightbox.co.uk/posts/announcing-isitruby19com-tracking-gem-compatibility-for-ruby-19" target="_blank">launched</a>.</p>
<p>From our point of view, it was great to do.  We still had our normal &#8220;day&#8221; jobs to deal with, but the excitement of a brand new project (with the added pressure of knowing that there were probably other people with the same idea looking to launch soon) was fantastic.  </p>
<p>And there&#8217;s still loads to do (as you can see from the discussion ongoing on the <a href="http://forum.brightbox.co.uk/forums/isitruby19-com" target="_blank">Brightbox forums</a>) but I have to say I&#8217;m really pleased with how things have worked out so far.  We kept it agile, we kept it focussed and we kept it fun!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3hv.co.uk/blog/2009/02/06/the-five-day-product-launch/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>iPhone prevents irate customer</title>
		<link>http://www.3hv.co.uk/blog/2008/11/03/iphone-prevents-irate-customer/</link>
		<comments>http://www.3hv.co.uk/blog/2008/11/03/iphone-prevents-irate-customer/#comments</comments>
		<pubDate>Mon, 03 Nov 2008 22:47:39 +0000</pubDate>
		<dc:creator>Rahoul Baruah</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Managing Successful Projects]]></category>

		<guid isPermaLink="false">http://www.3hv.co.uk/blog/?p=303</guid>
		<description><![CDATA[I spent this weekend in the Lake District in the wet north-west of England. A beautiful part of the world, but one lacking in 3G connectivity. Not great for browsing (although Mobile Twitter and email were fine) but fantastic for battery life. On Sunday morning, I awoke to find an email from a web-site monitoring [...]]]></description>
			<content:encoded><![CDATA[<p>I spent this weekend in the Lake District in the wet north-west of England.  A beautiful part of the world, but one lacking in 3G connectivity.  Not great for browsing (although Mobile Twitter and email were fine) but fantastic for battery life.  </p>
<p>On Sunday morning, I awoke to find an email from a <a href="http://www.montastic.com/">web-site monitoring service</a> that I use, stating that a client site was down.  The email was sent at 5am.  It was now 10am and I had no computer, a mere GPRS connection and a hangover.  Not good.  </p>
<p>However, I fired up TouchTerm (an SSH client) on my iPhone and connected to the server in question.  Connect OK.  Good.  Then I type <code>sudo monit status</code> to find out what state the server is in.  All services running OK.  Then <code>cat /etc/apache2/sites-enabled/rails-mysite</code>.  This lets me examine the web-server configuration file; and I can prove to myself that I had set up aliases for the site (so that the same site is also available on an alternative web address).  I then used Mobile Safari to connect on the alternative addresses and everything works fine.  Lastly, I write an email to the client stating that the site is down but nothing at my end is wrong &#8211; could it be a DNS problem?  </p>
<p><div class="wp-caption alignleft" style="width: 460px"><img alt="iPhone with TouchTerm" src="http://www.dabbledoo.com/ee/images/uploads/appletell/TouchTerm.png" title="iPhone with TouchTerm" width="450" height="280" /><p class="wp-caption-text">iPhone with TouchTerm</p></div>Of course, there are many phones that can do this.  In fact I have had so-called &#8220;smartphones&#8221; for years &#8211; all of which are capable of connecting over SSH, over the web and over email.  But the iPhone is the first where I have actually used that capability, where it&#8217;s not so painful to use that I want to try it out.  </p>
<p>Later that day I got an email from the monitoring service stating that the site had returned.  And on Monday, the client tells me that their registrar had had a failure and all of their domain names had gone down for the day.  </p>
<p>Still, I think that&#8217;s pretty good; Sunday, with a hangover, pro-actively investigating a fault on a customer&#8217;s server, on a telephone and an antique net connection.  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.3hv.co.uk/blog/2008/11/03/iphone-prevents-irate-customer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Working for Brightbox</title>
		<link>http://www.3hv.co.uk/blog/2008/10/16/working-for-brightbox/</link>
		<comments>http://www.3hv.co.uk/blog/2008/10/16/working-for-brightbox/#comments</comments>
		<pubDate>Thu, 16 Oct 2008 10:05:43 +0000</pubDate>
		<dc:creator>Rahoul Baruah</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Managing Successful Projects]]></category>

		<guid isPermaLink="false">http://www.3hv.co.uk/blog/?p=286</guid>
		<description><![CDATA[  Sometimes you have a moment where you know that you&#8217;re on the right path.   I was hunting through an archive of work done for Brightbox and found this message trail.  I had just tracked down a bug and posted a small screenshot of the fix.   John&#8217;s response let me know that this [...]]]></description>
			<content:encoded><![CDATA[<p> </p>
<div id="attachment_285" class="wp-caption alignright" style="width: 310px"><a href="http://www.3hv.co.uk/blog/wp-content/uploads/2008/10/picture-1.png"><img class="size-medium wp-image-285" title="Brightbox Messages" src="http://www.3hv.co.uk/blog/wp-content/uploads/2008/10/picture-1-300x203.png" alt="Brightbox Messages between myself and John Leach" width="300" height="203" /></a><p class="wp-caption-text">Brightbox Messages between myself and John Leach</p></div>
<p>Sometimes you have a moment where you know that you&#8217;re on the right path.  </p>
<p>I was hunting through an archive of work done for <a href="http://www.brightbox.co.uk/a/dplsk" target="_blank">Brightbox</a> and found this message trail.  I had just tracked down a bug and posted a small screenshot of the fix.  </p>
<p>John&#8217;s response let me know that this would be a great place to work.  </p>
<p>Sometimes, it just <em>feels</em> right.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3hv.co.uk/blog/2008/10/16/working-for-brightbox/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.235 seconds -->

