<?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>Colin&#039;s Blog</title>
	<atom:link href="http://colinsteele.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://colinsteele.org</link>
	<description>Travails of a CTO</description>
	<lastBuildDate>Wed, 13 Jan 2010 05:02:05 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>hiring badass programmers&#8230; or, at least&#8230; trying to</title>
		<link>http://colinsteele.org/2010/01/hiring-badass-programmers-or-at-least-trying-to/</link>
		<comments>http://colinsteele.org/2010/01/hiring-badass-programmers-or-at-least-trying-to/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 04:54:35 +0000</pubDate>
		<dc:creator>Colin Steele</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://colinsteele.org/?p=104</guid>
		<description><![CDATA[I&#8217;d love to say I know a good programmer when I see him (or her).  That would be a lie.  The difficulty in predicting the performance of programmers lies in the fact that programming, as human endeavors go, well&#8230; it&#8217;s a bit odd.  We&#8217;d like to say (as a group that wants to be taken [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/colinsteele/3518903509"><img class="alignright" src="http://farm4.static.flickr.com/3366/3518903509_dc0a70b8a3_m.jpg" alt="" width="240" height="160" /></a>I&#8217;d love to say I know a good programmer when I see him (or her).  That would be a lie.  The difficulty in predicting the performance of programmers lies in the fact that programming, as human endeavors go, well&#8230; it&#8217;s a bit odd.  We&#8217;d like to say (as a group that wants to be taken seriously) that &#8220;programming is engineering.&#8221;  Well, in 2009, even our own beloved luminary Tom DeMarco <a href="http://www2.computer.org/cms/Computer.org/ComputingNow/homepage/2009/0709/rW_SO_Viewpoints.pdf">admits</a>:</p>
<blockquote><p>&#8220;I&#8217;m gradually coming to the conclusion that <em>software engineering is an idea whose time has come and gone</em>.&#8221; &#8212; Tom DeMarco</p>
</blockquote>
<p>Phew, I know I&#8217;m relieved.  Sure as shit, programming never did seem like engineering to me, the last 20 years I&#8217;ve been doing it.  Good thing we don&#8217;t have to carry on that charade.</p>
<p>We&#8217;re left with one other extreme view, that &#8220;programming is art.&#8221;  But I don&#8217;t think many folks want to see source code hanging in galleries.  Even the pinko commie FSF leader agrees, and he&#8217;s right because he&#8217;s an Emacs guy:</p>
<blockquote><p>&#8220;I would describe programming as a craft, which is a kind of art, but not a fine art. Craft means making useful objects with perhaps decorative touches. Fine art means making things purely for their beauty.&#8221; &#8211;Richard Stallman</p>
</blockquote>
<p>So, let&#8217;s split the difference and neatly pigeon-hole the practice of programming as a &#8220;craft&#8221;.  Seems fair enough.  Pete McBreen points in this direction in his book <a href="http://www.amazon.com/Software-Craftsmanship-Imperative-Pete-McBreen/dp/0201733862/ref=pd_sim_b_5">Software Craftsmanship</a>.  Knuth was thinking <a href="http://www.paulgraham.com/knuth.html">along these lines</a> back in 1974, too.  But using the analogy of &#8220;craft&#8221; doesn&#8217;t go very far to predicting programmer aptitude.  Unlike most other crafts (smithing, knitting, ceramics, architecture, furniture, you name it), programming exists in a realm of nearly pure abstraction, doused liberally with a tonic of interpersonal communication and collaboration.  An odd mix.</p>
<p>So how do you pick out the good geeks in a crowd?  Malcolm Gladwell <a href="http://www.gladwell.com/2008/2008_12_15_a_teacher.html">writes about the difficulties</a>, and I think there are strong parallels between finding good QBs, and finding good programmers.  Until you just <em>try them out</em>, you can&#8217;t really know.</p>
<p>Since I&#8217;ve long viewed the practice of programming as a craft, I&#8217;ve tried to apply the notion of a portfolio, a gimmick I learned from my boss back at AOL.  A good programmer should have a <em>body of work</em>, which can be <em>shown</em>, and in it you will find strong clues as to the type of programmer they are.  So unless I&#8217;ve worked with someone before, directly, along with references and resumes, I ask them to provide:</p>
<p><strong><em>A significant code sample which you feel is representative of your best recent work.</em></strong></p>
<p>You might be surprised how that surprises folks.  I&#8217;m not sure if they think I&#8217;m going to poach their code, or rat them out to the employers whom they were working for when they wrote it, or what.  In any case, of those that get over it and send me something, a disheartening number send me what amount to toys &#8211; 100 line incomplete snippets of something-or-other.  Or, just as bad, a swath of user interface callback code, or a class definition that&#8217;s 90% setters and getters.  Sigh.</p>
<p>Once I&#8217;ve settled on the notion that a particular person might be a good hire, I <em>try them out</em>.  That amounts to a six-month &#8220;no fault divorce&#8221; period, where the candidate is brought on board as a 1099 contractor, but in all other ways as a full fledged member of the team.  Most folks need six months to settle in, get embedded in team dynamics, and learn enough of the problem domain to be useful.  During that time, if anything doesn&#8217;t feel right &#8211; and I do this purely based on gut instincts &#8211; I gently end the relationship.</p>
<p>It doesn&#8217;t always work, but it works well enough.  Sometimes it makes me wish that there were true apprenticeships in programming, Programming Guilds whose members (graduates) would come as known quantities, merely through the imprimatur of their Guild Master.  Meantime, we do what we can.</p>
<p> </p>
]]></content:encoded>
			<wfw:commentRss>http://colinsteele.org/2010/01/hiring-badass-programmers-or-at-least-trying-to/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>RubyInline and ImageScience</title>
		<link>http://colinsteele.org/2010/01/rubyinline-and-imagescience/</link>
		<comments>http://colinsteele.org/2010/01/rubyinline-and-imagescience/#comments</comments>
		<pubDate>Sat, 09 Jan 2010 01:18:10 +0000</pubDate>
		<dc:creator>Colin Steele</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://colinsteele.org/?p=102</guid>
		<description><![CDATA[Quick shout-outs for excellent Ruby tools: ImageScience and RubyInline.  We wrestled with RMagic on and off all week and finally punted, moving over to ImageScience with a sigh of relief.  We needed a small enhancement to ImageScience which was easily done using RubyInline.  Voila.  I like it when things are this easy.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/colinsteele/4002576742/"><img class="alignleft" title="Bird Feeder" src="http://farm3.static.flickr.com/2573/4002576742_649a66508d.jpg" alt="" width="200" height="300" /></a>Quick shout-outs for excellent Ruby tools: <a href="http://seattlerb.rubyforge.org/ImageScience.html">ImageScience</a> and <a href="http://www.zenspider.com/ZSS/Products/RubyInline/">RubyInline</a>.  We wrestled with RMagic on and off all week and finally punted, moving over to ImageScience with a sigh of relief.  We needed a small enhancement to ImageScience which was easily done using RubyInline.  Voila.  I like it when things are this easy.</p>
]]></content:encoded>
			<wfw:commentRss>http://colinsteele.org/2010/01/rubyinline-and-imagescience/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Want to write better?  Stop using the verb &#8216;to be&#8217;.</title>
		<link>http://colinsteele.org/2010/01/want-to-write-better-stop-using-the-verb-to-be/</link>
		<comments>http://colinsteele.org/2010/01/want-to-write-better-stop-using-the-verb-to-be/#comments</comments>
		<pubDate>Mon, 04 Jan 2010 05:56:19 +0000</pubDate>
		<dc:creator>Colin Steele</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://colinsteele.org/?p=98</guid>
		<description><![CDATA[Some years ago while studying the occult, I stumbled across Robert Anton Wilson&#8217;s Quantum Psychology, which blew my mind all to pieces.  I still pull out my dog-eared copy every year or two to reinforce my mind-blowness, and it never disappoints.  One major benefit I&#8217;ve realized from it, while prosaic, may be of some use [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://farm4.static.flickr.com/3370/3518925215_0cf661853b.jpg"><img class="alignright" src="http://farm4.static.flickr.com/3370/3518925215_0cf661853b.jpg" alt="" width="233" height="350" /></a>Some years ago while studying the occult, I stumbled across Robert Anton Wilson&#8217;s <a href="http://www.rawilson.com/quantum.html">Quantum Psychology</a>, which blew my mind all to pieces.  I still pull out my dog-eared copy every year or two to reinforce my mind-blowness, and it never disappoints.  One major benefit I&#8217;ve realized from it, while prosaic, may be of some use to you.</p>
<p>Take this simple advice to start writing better:  Stop using the verb &#8216;to be&#8217;.  If you&#8217;re like me, it&#8217;ll take you awhile to get the hang of it.  Even today I lapse back into using &#8216;is&#8217; from time to time, but whenever I put myself in the frame of caring about what I write, the practice returns readily enough.  It couldn&#8217;t save the novel I wrote from being a &#8220;learning experience&#8221;, but at least my prose packs a little punch.</p>
<p>Try it.  If it doesn&#8217;t blow your mind, at least your sentences will sparkle.</p>
]]></content:encoded>
			<wfw:commentRss>http://colinsteele.org/2010/01/want-to-write-better-stop-using-the-verb-to-be/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Metaphor, Storytelling, and Agreement in Software Development</title>
		<link>http://colinsteele.org/2009/12/metaphor-storytelling-and-agreement-in-software-development/</link>
		<comments>http://colinsteele.org/2009/12/metaphor-storytelling-and-agreement-in-software-development/#comments</comments>
		<pubDate>Wed, 30 Dec 2009 04:59:16 +0000</pubDate>
		<dc:creator>Colin Steele</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://colinsteele.org/?p=81</guid>
		<description><![CDATA[A brief essay on meaning, language, mental models, storytelling and metaphors in software development.]]></description>
			<content:encoded><![CDATA[<p><a href="http://colinsteele.org/wp-content/uploads/2009/12/53427681-1.jpg"><img class="alignleft size-medium wp-image-94" title="field from the road" src="http://colinsteele.org/wp-content/uploads/2009/12/53427681-1-225x300.jpg" alt="" width="225" height="300" /></a>How many times have you heard something like this?  You know the drill:</p>
<p>Stakeholder: &#8220;We need to fix sort order.  Let&#8217;s make sure that results we can&#8217;t show an image for are deprioritized.&#8221;</p>
<p>Developer: &#8220;Can do.&#8221;</p>
<p>Time passes.  Software is written.  Then:</p>
<p>Developer: &#8220;I&#8217;m finished.  The results without photos are at the end of the list.&#8221;</p>
<p>Stakeholder: &#8220;I don&#8217;t understand.  Why are they showing at the end of the list?  Shouldn&#8217;t they be in their usual places in the list, but greyed out, like we talked about?&#8221;</p>
<p>Gadzooks, we&#8217;ve fallen into that trap&#8230; AGAIN!  It&#8217;s the mother lode of assumptions:</p>
<p>W<em>hen we agree to <strong>something</strong>, that <strong>something</strong> we&#8217;ve agreed to is the same thing for you as it is for me.</em></p>
<blockquote><p style="text-align: center;">&#8220;One good analogy is worth three hours discussion.&#8221;</p>
<p style="text-align: center;">&#8211; James T Mccay</p>
</blockquote>
<p><em><span style="font-style: normal; ">The problem of creating a shared concept crops up all over software development, from requirements, through testing, implementation, documentation, and on out the door into the hands (and minds) of users.  The problem pops up between stakeholders and developers, developer and other developers, between accounting and customer support and users themselves.  It&#8217;s stamped all over everything.</span></em></p>
<p>I won&#8217;t delve too deeply into the metaphysics of this problem, but trust me, just below the surface seethes a pit of linguistics, semiotics, ontology, questions about quantum mechanics, psychology and the nature of the mind.  Nifty stuff, if you&#8217;re philosophically inclined.</p>
<blockquote><div id="_mcePaste" style="text-align: center;">&#8220;An idea is a feat of association, and the height of it is a good metaphor.&#8221;</div>
<div style="text-align: center;">&#8211; Robert Frost</div>
</blockquote>
<p>I&#8217;ll try to stick to the more pragmatic concerns, here, and start with the notion of a mental model.  Without thinking hard about it, make a note of the very first thing you think of when you read this word:  Apple.</p>
<p>Ok, which was it?  A red fruit?  The computer company?  A particular computer, perhaps the one you&#8217;re using right now?  Or was it a particular apple, the one you shared on the grade school steps after school was over with that blonde girl that you had a crush on?</p>
<p>You have a notion of what &#8220;apple&#8221; means.  I might have a different notion.  That <em>notion</em> &#8211; the set of associations, memories, ideas, and so on, we call a mental model.  It&#8217;s mental because it&#8217;s in your head, and it&#8217;s a model because it <em>isn&#8217;t the thing itself</em>.  So, it&#8217;s a mental construct, a mind-thing that <em>represents</em> some slice of the &#8220;real world&#8221;.  Without even being aware of it, we construct and use mental models all the time, to help us function in the world.  They provide us with information about how something in the world will behave.  What we can expect as we interact with it.  They&#8217;re mind tools that help us understand phenomena, make inferences, and experience events by proxy.</p>
<p>You might view a mental model as a graph.  I imagine it as a web of connections between some notion and a set of associated notions.  For me, apple connects to &#8220;fruit&#8221;, &#8220;red&#8221;, &#8220;an apple a day&#8221;, etc.  Apple also connects to experiences, memories, emotions, and so on.  Some of those connections are strong and some aren&#8217;t so strong.  I label this graph as the &#8220;apple&#8221; graph &#8211; my mental model of &#8220;apple&#8221;.</p>
<blockquote><div id="_mcePaste" style="text-align: center;">&#8220;The world is emblematic. Parts of speech are metaphors because the whole of nature is a metaphor of the human mind.&#8221;</div>
<div style="text-align: center;">&#8211;Ralph Waldo Emerson</div>
</blockquote>
<p>I won&#8217;t delve too much into why our mental models differ (my &#8220;apple&#8221; isn&#8217;t the same as yours) in the first place.  Instead, I&#8217;m intrigued by the problem of how to get the models running around in different people&#8217;s heads to refer more-or-less to the same thing.  One cause of that problem is that mental models they&#8217;re transmitted across a very lossy medium &#8211; human expression via language, be it visual, spoken, etc.</p>
<p>Here&#8217;s where <em>meaning</em> comes in.  When I tell you about &#8220;apple&#8221;, I am trying to move a copy of the &#8220;apple&#8221; in my head into yours.  I do that by trying to create the same set of connections in my head into yours.  I do this by trying to convey connections between my &#8220;apple&#8221; and your &#8220;apple&#8221; by relating my &#8220;apple&#8221; and its associations to your &#8220;apple&#8221; and your associations.  That act of linking bits of experiences and thoughts and sensations and emotions (ie., models) to one another is called <em>meaning</em>.  When I say, &#8220;This is apple: &#8230;&#8221;, I am trying to upload a small piece of my internal representation of the universe into your mind.</p>
<p>Meaning is heavy stuff.  And, as it turns out, difficult to transmit using language.  Why?  Because language (words) sits one level of indirection away from the models themselves.  Follow me, here.</p>
<p>We have the thing itself.  We&#8217;ll stick with &#8220;apple&#8221;.  Out there, somewhere, is the apple we&#8217;re talking about.  Then, one level removed from that, are the sensory experiences associated with that apple.  (Level of indirection: 1).  Aggregated in your head is that sensory input, memories, associations, etc &#8212; the mental model of that apple.  (Indirection now 2.)  Then there is the word I slap onto that model &#8211; &#8220;apple&#8221;.  Note that the word <em>represents</em> the model, but isn&#8217;t the model itself.  (Indirection: 3.)  Phew.  We&#8217;re three hops from the damn piece of fruit, and just getting rolling&#8230;</p>
<p>Now I try to talk about the apple.  I use the word apple, and a bunch of other words that are intended to connect the dots &#8211; make the same associations for your version of &#8220;apple&#8221; as I have attached to mine.  Again, add a level of indirection.  (4.)  You aggregate into your &#8220;apple&#8221; model.  (5.)  You slap the word &#8220;apple&#8221; on that model.  (6.)</p>
<p>Yep.  That&#8217;s lossy.  Your copy of the &#8220;apple&#8221; model that I&#8217;ve tried to convey to you sits about 6 hops away from the thing itself.  Maybe more, I&#8217;m not sure.  And there are no checksums.</p>
<p>If you want to make meaning-making work for you, use this tool called <em>storytelling</em>.</p>
<p>The art of transmitting mental models &#8211; of <em>creating meaning</em> &#8211; is storytelling.  Narrative, if you prefer.  Storytelling is the best practices way of moving a mental model from my head into yours, because it leverages biologically and culturally preset and reinforced mental models.  Stories have a well-known structure (think of XML).  They have conventions of characters and plot.  (Think REST HTTP verbs).  They are easy to persist, which makes them effective at moving mental models.</p>
<p>Which brings us to metaphor.  Compress a story down to its smallest, most compact and elemental form, and you will produce a metaphor.</p>
<p>A metaphor is a zip&#8217;d story.  (And, yes, for those of you still paying attention, that last sentence was a metaphor itself, but probably only useful to geeks.)</p>
<blockquote><p style="text-align: center;">&#8220;But the greatest thing by far is to have a command of metaphor. This alone cannot be imparted by another; it is the mark of genius, for to make good metaphors implies an eye for resemblances.&#8221;</p>
<p style="text-align: center;">&#8211; Aristotle</p>
</blockquote>
<p style="text-align: left;">Which returns us to that pesky problem of &#8220;I thought you meant&#8230;&#8221;.  At our disposal lie a wide array of tools for creating shared mental models: whiteboard diagrams hung in shared spaces, mockups and wireframes, requirements docs, etc.  But if you want to be really effective, use stories and metaphors.  Be shameless in assigning names and personalities to the actors, systems, modules and machines.  Give them personalities.  Talk about what they know and like.  Get to know them as a group.</p>
<p style="text-align: left;">Then, invent a defining, central story.  A system metaphor captures the essence of the system in the most effective communication tool we have &#8211; the story.</p>
<blockquote><p style="text-align: center;">&#8220;The system metaphor is a story that everyone &#8211; customers, programmers, and managers - can tell about how the system works.&#8221; <br />&#8211; Kent Beck, Extreme Programming Explained, p. 179.</p>
</blockquote>
<p> </p>
]]></content:encoded>
			<wfw:commentRss>http://colinsteele.org/2009/12/metaphor-storytelling-and-agreement-in-software-development/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Geek Bucket List</title>
		<link>http://colinsteele.org/2009/12/geek-bucket-list/</link>
		<comments>http://colinsteele.org/2009/12/geek-bucket-list/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 04:10:09 +0000</pubDate>
		<dc:creator>Colin Steele</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://colinsteele.org/?p=70</guid>
		<description><![CDATA[Ok, maybe Bucket List is a bit of a stretch.
But if I had oodles of free time I&#8217;d do the following geeky things:
 

Lisp.  Really learn it this time.  No.  Really.
Smalltalk too.
Build and install an active solar system and a solar hot water heater on my house.
Do an iPhone app.  Yay, Objective-C!

 
What&#8217;s on your list?
]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" style="margin-right:20px;" title="a Lomograph" src="http://farm1.static.flickr.com/29/89354563_3037be0b3e_b.jpg" alt="" width="286" height="430" />Ok, maybe Bucket List is a bit of a stretch.</p>
<p>But if I had oodles of free time I&#8217;d do the following geeky things:</p>
<p> </p>
<ul style="margin-left: 10px;">
<li>Lisp.  Really learn it this time.  No.  Really.</li>
<li>Smalltalk too.</li>
<li>Build and install an active solar system and a solar hot water heater on my house.</li>
<li>Do an iPhone app.  Yay, Objective-C!</li>
</ul>
<p> </p>
<p>What&#8217;s on your list?</p>
]]></content:encoded>
			<wfw:commentRss>http://colinsteele.org/2009/12/geek-bucket-list/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Hiring Internet Talent and the Future of Charlottesville</title>
		<link>http://colinsteele.org/2009/12/hiring-internet-talent-and-the-future-of-charlottesville/</link>
		<comments>http://colinsteele.org/2009/12/hiring-internet-talent-and-the-future-of-charlottesville/#comments</comments>
		<pubDate>Sun, 20 Dec 2009 06:01:26 +0000</pubDate>
		<dc:creator>Colin Steele</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Sustainability]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://colinsteele.org/?p=64</guid>
		<description><![CDATA[ 
 
 
As CTO, I seem to be getting the recurring question, &#8220;Can you (hotelicopter) find the tech-savvy talent you need in Charlottesville?&#8221;  It&#8217;s a valid question.  Long gone are the days of Kesmai, EA, Mr. Goodbucks, and the beloved Value America.  These days, we have influx of spooks, a smattering of biotech companies, and in the [...]]]></description>
			<content:encoded><![CDATA[<p> </p>
<p> </p>
<p> </p>
<p><div class="wp-caption alignleft" style="width: 290px"><a href="http://farm3.static.flickr.com/2536/4001894635_effc8053ae.jpg"><img class="  " title="Charlottesville Downtown Mall At Night" src="http://farm3.static.flickr.com/2536/4001894635_effc8053ae.jpg" alt="Charlottesville Downtown Mall At Night" width="280" height="186" /></a><p class="wp-caption-text">Charlottesville Downtown Mall At Night</p></div>
<p>As CTO, I seem to be getting the recurring question, &#8220;Can you (<a href="http://www.hotelicopter.com">hotelicopter</a>) find the tech-savvy talent you need in Charlottesville?&#8221;  It&#8217;s a valid question.  Long gone are the days of Kesmai, EA, Mr. Goodbucks, and the beloved Value America.  These days, we have influx of spooks, a smattering of biotech companies, and in the IT/Internet world&#8230; a whole buncha nothin&#8217;.</p>
<p> </p>
<p>Usually I give a good new / bad news kind of answer to this question.  I&#8217;ll run through the good part first so we can get to the juicy bad part.</p>
<p>The good news is that you can do alot more cool stuff with a whole lot fewer people than you used to.  And even though we&#8217;ll be quintupling the size of the tech staff at hotelicopter, in absolute numbers, it&#8217;s still a very small number of people.  Armed with the right package of cash compensation, equity, benefits, a really cool place to work, and seriously fun stuff to work on, I&#8217;m very confident we can find the team we want.</p>
<p>The bad news, though, is that once we&#8217;re done cherry picking the local talent, all that&#8217;s left will be tumbleweeds.  (And bookstores and coffee shops.)</p>
<p>I recently had it put to me that Charlottesville stands at a crossroads.  On the one side, the &#8216;Ville could evolve into the next Austin.  You know, the cool Austin: vibrant arts and music scene, burgeoning tech mecca, nifty atmosphere, lots of fusion restaurants.  Sounds pretty good to me.</p>
<p>Or&#8230; Our beloved city could turn into Aspen.  You know, frigid Aspen.  The Aspen where private jets land to deliver out of towners and transplants to their ostentatious homes, and everyone who actually works lives&#8230; somewhere else.  Somewhere cheaper.  Like Waynesboro, Nelson County, Greene and Orange.  Let&#8217;s face it, Charlottesville&#8217;s already looking alot more like Aspen than Austin.  We have a sharp housing gap (the current downturn in home prices not withstanding), a widening income gulf, and with each passing decade, a sharp decline in local industry&#8230; of any kind.  At the current pace we&#8217;ll be left with just fancy restaurants, coffee shops and riding tack boutiques.</p>
<p>Aspen&#8230; Great place if you can afford it.</p>
]]></content:encoded>
			<wfw:commentRss>http://colinsteele.org/2009/12/hiring-internet-talent-and-the-future-of-charlottesville/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Kicking and Screaming into Programming in the Large</title>
		<link>http://colinsteele.org/2009/12/kicking-and-screaming-into-programming-in-the-large/</link>
		<comments>http://colinsteele.org/2009/12/kicking-and-screaming-into-programming-in-the-large/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 03:57:21 +0000</pubDate>
		<dc:creator>Colin Steele</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://colinsteele.org/?p=60</guid>
		<description><![CDATA[I&#8217;m not sure if it&#8217;s a fine line or a broad one between programming-in-the-small and programming-in-the-large, but at hotelicopter, we&#8217;ve definitely stepped over that line.  Along the way, in a very short amount of time (6 months, give or take), we&#8217;ve begun moving to the cloud (aws), adopted distributed source code control (git), automated deployment [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://farm1.static.flickr.com/13/89357696_a0764b4c0b_m.jpg"><img class="alignright" src="http://farm1.static.flickr.com/13/89357696_a0764b4c0b_m.jpg" alt="" width="233" height="240" /></a>I&#8217;m not sure if it&#8217;s a fine line or a broad one between <a href="http://en.wikipedia.org/wiki/Programming_in_the_large_and_programming_in_the_small">programming-in-the-small</a> and <a href="http://home.tiac.net/~cri/2003/durchholz.html">programming-in-the-large</a>, but at <a href="http://www.hotelicopter.com">hotelicopter</a>, we&#8217;ve definitely stepped over that line.  Along the way, in a very short amount of time (6 months, give or take), we&#8217;ve begun moving to the cloud (aws), adopted distributed source code control (git), automated deployment (capistrano), continuous integration (hudson), unit testing, Ruby on Rails, lost a key developer, and hired a new rockstar.</p>
<p>Just to confuse things, the majority of our site - the importantest parts, anyway &#8211; are still written in PHP, on a code base now 2+ years old and about a decade behind the times.  (Can you say &#8220;monolithic&#8221;?  I knew you could!)</p>
<p>The place we&#8217;re aiming for is a highly decoupled (and scalable), cohesive set of services, joined through REST APIs and/or fully reused common business models.  We have multiple &#8220;applications&#8221; now, all operating on a couple of common databases.  We&#8217;ve officially run headlong into one of Ruby on Rails&#8217; deficiencies: programming in the large.  We&#8217;re not interested in computer science-y solutions, only pragmatic ones.</p>
<p>I suspect as we muddle along we&#8217;ll develop a component-level (service level if you prefer) version of the <a href="http://www.cmcrossroads.com/bradapp/docs/demeter-intro.html">Law of Demeter</a>, which will drive us to make the right decisions for decoupling.  I&#8217;m not too worried about that.  However, we definitely have issues with reuse.  Currently the Ruby on Rails state of the art solution for reuse is the gem.  Which, let&#8217;s face it, is a pathetic solution.</p>
<p>We&#8217;ve begun rolling what we call our &#8220;common&#8221; system, composed of a set of models, migrations, configuration artifacts, etc., shared between applications, wedged carefully into the RoR framework, and superglued in.  It supports use standalone, outside of a RoR application environment (though definitely somewhat hobbled in that case), and allows application-specific specialization of common models.</p>
<p>I&#8217;m not sure it will be sufficient in the long run, but thus far it is supporting a large degree of reuse between three RoR apps and our PHP site.</p>
]]></content:encoded>
			<wfw:commentRss>http://colinsteele.org/2009/12/kicking-and-screaming-into-programming-in-the-large/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Geokit</title>
		<link>http://colinsteele.org/2009/12/geokit/</link>
		<comments>http://colinsteele.org/2009/12/geokit/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 22:12:28 +0000</pubDate>
		<dc:creator>Colin Steele</dc:creator>
				<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://colinsteele.org/?p=53</guid>
		<description><![CDATA[Quick shout-out for Geokit for Ruby, which is a most excellent and useful bit of Ruby code.  Installation is a snap, it&#8217;s easy to use, and you&#8217;ll love the expressive power of little things like this:
Store.find(:all, :origin=&#62;'100 Spear st, San Francisco, CA', :within=&#62;10)
]]></description>
			<content:encoded><![CDATA[<p>Quick shout-out for <a href="http://geokit.rubyforge.org/">Geokit for Ruby</a>, which is a most excellent and useful bit of Ruby code.  Installation is a snap, it&#8217;s easy to use, and you&#8217;ll love the expressive power of little things like this:</p>
<pre style="margin-top: 8px; margin-right: 0px; margin-bottom: 8px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 5px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #efffef; background-position: initial initial; background-repeat: initial initial; border: 1px solid #cfefcf;"><code style="font-size: 12px; padding: 0px; margin: 0px;">Store.find(:all, :origin=&gt;'100 Spear st, San Francisco, CA', :within=&gt;10)</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://colinsteele.org/2009/12/geokit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Premature Optimization and the Role of CTO</title>
		<link>http://colinsteele.org/2009/12/premature-optimization-and-the-role-of-cto/</link>
		<comments>http://colinsteele.org/2009/12/premature-optimization-and-the-role-of-cto/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 14:58:38 +0000</pubDate>
		<dc:creator>Colin Steele</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://colinsteele.org/?p=48</guid>
		<description><![CDATA[In system design, generally I believe there&#8217;s no such thing as &#8220;premature optimization&#8220;, but life in a startup demands profound thought into exactly when we implement our optimizations.  Spending time and money up front on making things fast (and/or scalable) comes with a hefty little price tag we like to call &#8220;opportunity cost.&#8221;  We live [...]]]></description>
			<content:encoded><![CDATA[<p>In system design, generally I believe there&#8217;s no such thing as &#8220;<a href="http://en.wikipedia.org/wiki/Program_optimization#When_to_optimize">premature optimization</a>&#8220;, but life in a startup demands profound thought into exactly when we implement our optimizations.  Spending time and money up front on making things fast (and/or scalable) comes with a hefty little price tag we like to call &#8220;opportunity cost.&#8221;  We live in a world where stopping apparent forward motion for a few weeks may have deep implications on market positioning, traction / uptake, and ultimately, our ability to raise capital and execute on our strategic plan.</p>
<p>Partly this situation is a byproduct of having a tiny R&amp;D team, and the &#8216;ole &#8220;10 pounds of shit in a 5 pound sack&#8221; problem.  With access to more resources, we could make progress on multiple fronts.  But, even if we had an army of developers, startup life throws optimization into a stark light.</p>
<p>Wait too long, and we piss off customers and hurt uptake.  Too soon, and we&#8217;ve missed out on implementing features that hurt uptake and also cause us to miss our window for strategic positioning.</p>
<p>As is often the case in the CTO&#8217;s role, if I get the answer right, no one will notice.  I&#8217;m reminded of the Tao Te Ching:</p>
<blockquote><p>The Master doesn&#8217;t talk, he acts.<br />
When his work is done,<br />
the people say, &#8220;Amazing:<br />
we did it, all by ourselves!&#8221;</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://colinsteele.org/2009/12/premature-optimization-and-the-role-of-cto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On The Importance of Momentum</title>
		<link>http://colinsteele.org/2009/12/on-the-importance-of-momentum/</link>
		<comments>http://colinsteele.org/2009/12/on-the-importance-of-momentum/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 03:08:37 +0000</pubDate>
		<dc:creator>Colin Steele</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://colinsteele.org/?p=45</guid>
		<description><![CDATA[We&#8217;re currently investigating a spectrum of new technologies in the NoSQL realm, including Tokyo Tyrant, MongoDB, Amazon&#8217;s SDB, CouchDB, Voldemort, and more.  Tis&#8217; a dizzying mix, and things are popping in the space.  From my point of view, they all end up relatively close to one another in terms of utility and applicability to the [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;re currently investigating a spectrum of new technologies in the <a href="http://www.google.com/search?sourceid=chrome&amp;ie=UTF-8&amp;q=no+sql">NoSQL</a> realm, including Tokyo Tyrant, MongoDB, Amazon&#8217;s SDB, CouchDB, Voldemort, and more.  Tis&#8217; a dizzying mix, and things are <a href="http://www.techcrunch.com/2009/12/10/stealth-startup-relaxed-raises-2-million-from-redpoint-ventures-for-couchdb-support/">popping</a> in the space.  From my point of view, they all end up relatively close to one another in terms of utility and applicability to the problems we need to solve at <a href="http://www.hotelicopter.com">hotelicopter.com</a>.  I&#8217;m waiting to see which one gains the most momentum &#8212; the sum being greater than the total parts of corporate sponsorship, commercial support, market traction, and a thriving community of developers.</p>
]]></content:encoded>
			<wfw:commentRss>http://colinsteele.org/2009/12/on-the-importance-of-momentum/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 1.377 seconds -->
<!-- Cached page served by WP-Cache -->
