<?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>Warren Seen &#187; twitter</title>
	<atom:link href="http://warrenseen.com/blog/category/twitter/feed/" rel="self" type="application/rss+xml" />
	<link>http://warrenseen.com/blog</link>
	<description>freelance software developer</description>
	<lastBuildDate>Wed, 03 Jun 2009 23:54:34 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Bye bye hashjobs.com, it was fun.</title>
		<link>http://warrenseen.com/blog/2009/06/04/bye-bye-hashjobscom-it-was-fun/</link>
		<comments>http://warrenseen.com/blog/2009/06/04/bye-bye-hashjobscom-it-was-fun/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 23:54:34 +0000</pubDate>
		<dc:creator>warren</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[web2.0]]></category>

		<guid isPermaLink="false">http://warrenseen.com/blog/?p=84</guid>
		<description><![CDATA[It&#8217;s funny how things work out. When I made the initial version of hashjobs live back in January, I mentioned that I wasn&#8217;t really sure how or if I could make anything from it. As luck would have it, it turns out that I managed to catch the &#8220;post jobs on Twitter&#8221; trend in its [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s funny how things work out. When I made the initial version of <a href="http://hashjobs.com/">hashjobs</a> live back in January, <a href="http://warrenseen.com/blog/2009/01/22/just-launched-hashjobscom/">I mentioned</a> that I wasn&#8217;t really sure how or if I could make anything from it. As luck would have it, it turns out that I managed to catch the &#8220;post jobs on Twitter&#8221; trend in its infancy. </p>
<p>Almost immediately I started getting offers to buy the domain name. Each inquiry I got, I would knock back as I have always had plans as to what I wanted to work on for future versions of the site. Most of these seemed like tire-kickers who I never heard from again. </p>
<p>But there was one guy who kept coming back asking about the site. Early last month, he forwarded a very specific offer via a 3rd party to me that made me realise he was VERY serious about acquiring HashJobs. After a bit of back and forth negotiating, and consideration of what I could make from the site in the next 12-18 months if I had a serious go at it, I happily accepted his offer.</p>
<p>So I&#8217;m pleased to announce that as of this morning, the final installment of our transaction has cleared, and Jason Davis of <a href="http://recruitingblogs.com/">recruitingblogs.com</a> is the new owner of HashJobs. I&#8217;ve had a sneak peek at Jason&#8217;s plans for the site and I think he is going to do it far more justice than I could have, given his position in the online recruiting community. I wish him all the best.</p>
<p>(As a side note, I am amazed how quickly incoming wire transfers clear, compared to transfers between local banks!)</p>
<p>As for my plans, well at least I&#8217;ve filled a GFC-induced hole in my previous 6 months cashflow. People who I&#8217;ve told about this always ask me, &#8220;Can yo do the same again in a different field?&#8221; The answer is, &#8220;Probably not, it was more luck than good management.&#8221; </p>
<p>I think I&#8217;ll just start another side project (I have a few ideas) and see where the wind takes me&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://warrenseen.com/blog/2009/06/04/bye-bye-hashjobscom-it-was-fun/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Is platform selection premature optimisation?</title>
		<link>http://warrenseen.com/blog/2007/04/16/is-platform-selection-premature-optimisation/</link>
		<comments>http://warrenseen.com/blog/2007/04/16/is-platform-selection-premature-optimisation/#comments</comments>
		<pubDate>Mon, 16 Apr 2007 13:43:06 +0000</pubDate>
		<dc:creator>warren</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[scaling]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://warrenseen.com/blog/2007/04/16/is-platform-selection-premature-optimisation/</guid>
		<description><![CDATA[&#8220;We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.&#8221;
Donald Knuth

Earlier today, I suggested that we should hold language and platform selection to the same standard we do with our code when avoiding premature optimisation. 
The thrust of my argument was that, in relation to [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><em>&#8220;We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.&#8221;</em><br />
<strong>Donald Knuth</strong></p>
</blockquote>
<p>Earlier today, <a href="http://warrenseen.com/blog/2007/04/16/rails-twitter-and-the-800lb-gorilla-in-the-room/">I suggested</a> that we should hold language and platform selection to the same standard we do with our code when avoiding premature optimisation. </p>
<p>The thrust of my argument was that, in relation to scalability, 99% of sites will never become so popular as to require scalability beyond that which is possible with Rails, so worrying about scalability feels like the start of <a href="http://en.wikipedia.org/wiki/Big_Design_Up_Front">big design up front</a>.</p>
<p>We should aim to not be dogmatic about our selection of language or platform, instead choosing the tools to get the job done, so we can <em>get something out there</em>. </p>
<p>After all, I think it was <strong>Fred Brooks</strong> who told us to <em>build a first version and throw it away</em>; the inherent wisdom in this approach is that you learn far more by building something and failing fast, than doggedly sticking to a flawed design that dies a slow, painful death.</p>
<p>If I can return to the example of Twitter, I don&#8217;t have any references, but I think their development time was quoted at something like 4 months? That&#8217;s not a lot of time really, and therefore, it&#8217;s not a lot of time to write off in the case that Twitter doesn&#8217;t get adopted and turned out to be an idea that was DOA. </p>
<p>Happily for the guys at Obvious, this wasn&#8217;t the case, and now they have a scaling issue, but I bet you they know a hell of a lot more about their users and usage patterns than what they ever could have predicted if they had set out to design it up front.</p>
<p>Could they have not followed the same path with J2EE or ASP.Net? Sure, if you ignore the fact that they&#8217;re Rails developers and therefore are more productive with&#8230; Rails. They chose the platform that was right for them, that got out of their way and let them implement the service to see if it would even work.</p>
<p>Another example, Reddit. The first version was written in Lisp before being <a href="http://www.aaronsw.com/weblog/rewritingreddit">rewritten in Python</a> &#8211; rewriting a proof-of-concept application (the cool kids call it <em>beta software</em> these days) into something that is &#8220;commercially ready&#8221; is not a bad thing.</p>
<p>I&#8217;m sure there are plenty of counter-examples where such an approach has failed, but I&#8217;m not getting into <em>reductio ad absurdum</em> arguments like &#8220;if your premise is true, then I could write #{compute_intensive_app} in #{slow_high_level_language}!&#8221;
</p>
<p><!--e6e8716e718d451b48de8222fe05a7ab-->
</p>
<p><!--f92266a2296131e7d8ccdf1ce51c7b51-->
</p>
<p><!--5b4e417bce981b848687706d16f3ff9b--></p>
]]></content:encoded>
			<wfw:commentRss>http://warrenseen.com/blog/2007/04/16/is-platform-selection-premature-optimisation/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Rails, Twitter and the 800lb Gorilla in the Room&#8230;</title>
		<link>http://warrenseen.com/blog/2007/04/16/rails-twitter-and-the-800lb-gorilla-in-the-room/</link>
		<comments>http://warrenseen.com/blog/2007/04/16/rails-twitter-and-the-800lb-gorilla-in-the-room/#comments</comments>
		<pubDate>Mon, 16 Apr 2007 01:24:39 +0000</pubDate>
		<dc:creator>warren</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[scaling]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://warrenseen.com/blog/2007/04/16/rails-twitter-and-the-800lb-gorilla-in-the-room/</guid>
		<description><![CDATA[When you first start using Rails, you quickly find there&#8217;s an 800lb gorilla in the room that no-one really wants to acknowledge. Yes, the &#8217;s&#8217; word: Scaling. Oh, they&#8217;re quick to tell you that it&#8217;s an uninteresting problem (at least for a programmer), if you do Rails right, and you&#8217;ve shared-nothing, then you just throw [...]]]></description>
			<content:encoded><![CDATA[<p>When you first start using Rails, you quickly find there&#8217;s an <a href="http://www.loudthinking.com/arc/000596.html">800lb gorilla</a> in the room that no-one really wants to acknowledge. Yes, the &#8217;s&#8217; word: <a href="http://www.radicalbehavior.com/5-question-interview-with-twitter-developer-alex-payne/">Scaling</a>. Oh, they&#8217;re quick to tell you that it&#8217;s an uninteresting problem (at least for a programmer), if you <a href="http://www.loudthinking.com/arc/000399.html">do Rails right</a>, and you&#8217;ve <a href="http://en.wikipedia.org/wiki/Shared-nothing">shared-nothing</a>, then you just throw more hardware at the problem. That if you have a real bottleneck in your code, just <a href="http://www.loudthinking.com/arc/000598.html">rewrite the performance critical parts of it in C</a>. Oh, and <a href="http://www.atdot.net/yarv/">YARV</a> will be here soon (for certain values of soon), so Ruby will be faster!</p>
<p>And suddenly, that gorilla shrinks; or at least it seems to.</p>
<p>Until <a href="http://obvious.com/">someone</a> goes and <a href="http://twitter.com/">pushes the boundary</a> way beyond <a href="http://penny-arcade.com/">those</a> <a href="http://43things.com/">who&#8217;ve</a> <a href="http://alistapart.com/">come</a> <a href="http://37signals.com">before</a>. Suddenly, the gorilla has grabbed your <a href="http://thebull.macsimumweb.com/2007/04/14/twitter-starting-to-get-de-railed/">girl</a>, climbed to the top of the Empire State and is angrily swatting light aircraft left, right and centre.</p>
<p>Scaling suddenly gets interesting again.</p>
<p><strong>Nay-sayers and trolls cloud the issue</strong><br />
Those who for whatever reason <a href="http://www.loudthinking.com/arc/000610.html#comments">want to see Rails fail</a>, have grabbed ahold of the issue and are casting it as a reason to abandon Rails: &#8220;<a href="http://www.codinghorror.com/blog/archives/000838.html">Behold, the savage beast that cannot be tamed!</a>&#8221; Often, they&#8217;ve got their <a href="http://www.loudthinking.com/arc/000399.html">own agenda</a>, whether it&#8217;s a desire to see their pet platform succeed, or to see DHH kicked to the dirt, these folks don&#8217;t really care about the scaling issue at all. They latch onto these issues not to help improve the platform, in the worst case they want to destroy it.</p>
<p>So forget them. </p>
<p>We&#8217;re here because we want to solve this without changing platforms.</p>
<p><strong>It doesn&#8217;t matter to most of us anyway</strong><br />
The truth is, 99% of Rails projects will *never* hit a performance wall that cannot be solved using existing wisdom. So the issue is a non-issue and certainly not a reason to ditch Rails. </p>
<p>If perchance, you&#8217;re part of the other 1%, you should be <a href="http://laughingmeme.org/2007/04/12/twitter-ruby-and-scaling/">thrilled to have this problem</a>, it means your software has been successful! Fact is, you don&#8217;t <em>accidentally</em> create a site/service which generates 11,000+ requests/sec. You <em>explicitly set out to do so</em>. And presumably, you chose Rails for a reason. Why shouldn&#8217;t we extend the concept of &#8220;no premature optimisation&#8221; to language and platform selection? If Twitter had <a href="http://bobondevelopment.com/2007/04/13/ruby-on-rails-hits-a-wall-twitter-stutters/">chosen an &#8220;enterprise&#8221; class platform</a> and <a href="http://www.codinghorror.com/blog/archives/000838.html">tried to architect</a> for 11k reqs/sec, chances are they would still be building&#8230; </p>
<p><a href="http://obvious.com/">Obvious</a> had a reason to choose Rails; they aren&#8217;t naive, they&#8217;ve been <a href="http://odeo.com/">around the block with Rails</a> before. </p>
<p>Generally, it&#8217;s much better to <a href="http://www.tbray.org/ongoing/When/200x/2007/04/13/Twitter-and-Rails">throw something out there NOW</a>, and let the real problems come out in the wash, rather than sit in a dark room, worrying about what might happen and giving yourself a case of analysis paralysis.</p>
<p><strong>Escalation Sucks</strong><br />
This issue has been blown up by a combination of <a href="http://gettingreal.37signals.com/ch04_Make_Opinionated_Software.php">strong opinions</a>, incomplete information and folks from other camps pouring fuel on the fire. It&#8217;s time this &#8220;conflict&#8221; was de-escalated and the combative nature of the discussion toned down.</p>
<p>The situation itself can be summed up pretty easily</p>
<ul>
<li>We&#8217;re in uncharted waters in terms of this sort of throughput, although others have <a href="http://tomayko.com/weblog/2007/04/13/rails-multiple-connections">suggestions</a> and maybe even <a href="http://drnicwilliams.com/2007/04/12/magic-multi-connections-a-facility-in-rails-to-talk-to-more-than-one-database-at-a-time/">solutions</a>.</li>
<li>The problem didn&#8217;t just suddenly spring up on the Twitter guys, <a href="http://romeda.org/blog/2007/04/scaling-twitter-talk.html">clearly they&#8217;ve been working on it for a while</a> &#8211; implying they&#8217;re now crying to core because Rails is broken for them is disingenuous. (In fact, the whole &#8220;<a href="http://www.loudthinking.com/arc/000608.html">they&#8217;ve forsaken that opportunity for an arms-crossed alternative.</a>&#8221; thing smells like something of a <a href="http://en.wikipedia.org/wiki/Strawman_argument">strawman argument</a> &#8211; I didn&#8217;t get that from the interview, so unless that&#8217;s come out of some backchannel, it seems a peculiar accusation to make.)</li>
<li>Solutions that work for Twitter may not work for other Rails apps. Once you exhaust all of the conventional scaling wisdom, you start to move into application-specific optimisations. Are we there yet? I guess we&#8217;ll wait and see. </li>
</ul>
<p><strong>When the storm is over</strong><br />
This is a learning opportunity for everyone, but those who stand to learn the most are the core team and the Twitter guys. I hope each can continue to be open to the other&#8217;s position. We need to remember at the end of the day, Twitter are under no obligation to release patches, and the core team are under no obligation to accept them &#8211; I hope that doesn&#8217;t happen though, as the community would be the worse for it.</p>
<p><!--1c738554a3f914e9bede627286dc5c4e--></p>
]]></content:encoded>
			<wfw:commentRss>http://warrenseen.com/blog/2007/04/16/rails-twitter-and-the-800lb-gorilla-in-the-room/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
