<?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:dc="http://purl.org/dc/elements/1.1/" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
    <title>Obie Fernandez</title>
    
    <link rel="alternate" type="text/html" href="http://blog.obiefernandez.com/content/" />
    <id>tag:typepad.com,2003:weblog-1546920</id>
    <updated>2012-02-03T13:35:39-05:00</updated>
    <subtitle>blog.obiefernandez.com</subtitle>
    <generator uri="http://www.typepad.com/">TypePad</generator>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/obie" /><feedburner:info uri="obie" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><entry>
        <title>Can I Find an Agile, Design-Savvy iPhone Developer?</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/3M50jjOOAJs/can-i-find-an-agile-design-savvy-iphone-developer.html" />
        <link rel="replies" type="text/html" href="http://blog.obiefernandez.com/content/2012/02/can-i-find-an-agile-design-savvy-iphone-developer.html" />
        <id>tag:typepad.com,2003:post-6a00e54fdca91188330167619db268970b</id>
        <published>2012-02-03T13:35:39-05:00</published>
        <updated>2012-02-03T14:00:31-05:00</updated>
        <summary>DueProps has been needing an iPhone app for for a few months now. However, I don't have the time (or frankly, the inclination) to prepare a detailed specification for how it should work. I also lack tens of thousands of...</summary>
        <author>
            <name>Obie Fernandez</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Software Development" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://blog.obiefernandez.com/content/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;DueProps has been needing an iPhone app for for a few months now. However, I don't have the time (or frankly, the inclination) to prepare a detailed specification for how it should work. I also lack tens of thousands of dollars to give to an agency to take care of it for me. The last few times I've searched for the right candidate it's been pure frustration.&lt;/p&gt;&#xD;
&lt;p&gt;If I could wave a magic wand to produce my ideal iphone developer, I'd conjure someone who:&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;...could start to come up with a workable design for the app after spending a few hours talking to me and familiarizing themselves with the way that DueProps works&lt;/li&gt;&#xD;
&lt;li&gt;Understands iterative development. I don't need the app to be perfect or include all possible functionality all at once. The core of what I need is super simple. Login. Choose a prop. Give it to a colleague on your DueProps network or to a new user via their email address. View latest activity. The backend for all that is already there.&lt;/li&gt;&#xD;
&lt;li&gt;Speaks fluent English&lt;/li&gt;&#xD;
&lt;li&gt;Works independent (of an agency) for a reasonable hourly rate, say $30-50/hour&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;Does such a person exist? I can't be the only person wondering...&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; If the rates I mentioned are too low and a proper rate for (as one commenter put it) a "multi-faceted pro" freelance is more like $100/hour then is it possible to get a simple, finished product in 2-3 weeks at most? Because otherwise it's seriously blowing my budget.&lt;/p&gt;&#xD;
&lt;p&gt;I guess I could approach this as wanting a fixed-bid contract for my budget amount, which is $10-15k, but fixed bids have always scared the hell out of me.&lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/obie?a=3M50jjOOAJs:Dd7rsxT_9dI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=3M50jjOOAJs:Dd7rsxT_9dI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=3M50jjOOAJs:Dd7rsxT_9dI:RJU-JkLLmTY"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=3M50jjOOAJs:Dd7rsxT_9dI:RJU-JkLLmTY" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=3M50jjOOAJs:Dd7rsxT_9dI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=3M50jjOOAJs:Dd7rsxT_9dI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=3M50jjOOAJs:Dd7rsxT_9dI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=3M50jjOOAJs:Dd7rsxT_9dI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=3M50jjOOAJs:Dd7rsxT_9dI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    <feedburner:origLink>http://blog.obiefernandez.com/content/2012/02/can-i-find-an-agile-design-savvy-iphone-developer.html</feedburner:origLink></entry>
    <entry>
        <title>Rendering Collections of Heterogeneous Objects in Rails 3.2</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/HqmUy5WI5LM/rendering-collections-of-heterogeneous-objects-in-rails-32.html" />
        <link rel="replies" type="text/html" href="http://blog.obiefernandez.com/content/2012/01/rendering-collections-of-heterogeneous-objects-in-rails-32.html" />
        <id>tag:typepad.com,2003:post-6a00e54fdca91188330168e661f9b8970c</id>
        <published>2012-01-30T19:10:46-05:00</published>
        <updated>2012-01-30T19:13:27-05:00</updated>
        <summary>This commit by Grant Hutchins &amp; Peter Jaros back in July 2011 gives ActiveModels the ability to define their own partial paths by implementing a to_partial_path method. (You can find a great explanation of this killer new feature on José...</summary>
        <author>
            <name>Obie Fernandez</name>
        </author>
        
        
<content type="html" xml:lang="en-US" xml:base="http://blog.obiefernandez.com/content/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;This &lt;a href="https://github.com/rails/rails/commit/bf812074fd55e7dcfa426d6c9bfd4d8d68922194" target="_blank"&gt;commit&lt;/a&gt; by Grant Hutchins &amp;amp; Peter Jaros back in July 2011 gives ActiveModels the ability to define their own partial paths by implementing a &lt;strong&gt;to_partial_path&lt;/strong&gt; method. (You can find a great explanation of this killer new feature on &lt;a href="http://blog.plataformatec.com.br/2012/01/my-five-favorite-hidden-features-in-rails-3-2/" target="_blank"&gt;José Valim's blog post about it&lt;/a&gt;. Just scroll down to #4 Custom Partial Paths.)&lt;/p&gt;&#xD;
&lt;p&gt;I'm blogging about it here, because it impacts a technique that I described in May 2011 as &lt;a href="http://blog.obiefernandez.com/content/2011/05/rending-collections-of-heterogeneous-objects-in-rails.html" target="_self"&gt;Rendering Heterogeneous Collections of Objects in Rails&lt;/a&gt;. If you happen to be using that technique or anything like it involving the use of ActiveModel's &lt;strong&gt;partial_path&lt;/strong&gt; method, you'll get deprecation warnings like this when upgrading to Rails 3.2:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;DEPRECATION WARNING: partial_path is deprecated and will be removed from Rails 3.2 (ActiveModel::Name#partial_path is deprecated. Call #to_partial_path on model instances directly instead.). (called from partial_path at .../config/initializers/partial_path.rb:12)&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;In this blog post I describe how to update my technique and get rid of the deprecation warning.&lt;/p&gt;&#xD;
&lt;p&gt;The &lt;em&gt;heterogeneous&lt;/em&gt; aspect of my technique had to do with rendering collections of STI objects that all inherited from a single &lt;strong&gt;Event&lt;/strong&gt; base class. For organizational reasons, I wanted to put all my disparate event partials in a single &lt;strong&gt;app/view/events&lt;/strong&gt; directory. Without the hack, they'd need to be in their own &lt;strong&gt;view/foo_events/_foo_event.html.erb&lt;/strong&gt; partials. Ugh.&lt;/p&gt;&#xD;
&lt;p&gt;In Rails 3.2, instead of having to monkey patch the framework to fix that crap, I can just implement &lt;strong&gt;to_partial_path&lt;/strong&gt; on the &lt;strong&gt;Event&lt;/strong&gt; base class like this:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;class Event&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;  def to_partial_path&lt;/span&gt;&lt;br&gt;&lt;span style="font-family: 'andale mono', times;"&gt;    "events/#{self.class.name.underscore}"&lt;/span&gt;&lt;br&gt;&lt;span style="font-family: 'andale mono', times;"&gt;  end &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;end&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Ahh, that's much cleaner. Unfortunately, there's still a catch, but only if you use controller namespaces.&lt;/p&gt;&#xD;
&lt;p&gt;Rails 3.2 keeps the annoying merge of the namespace prefix as part of the generated partial path even if you override it using &lt;strong&gt;to_partial_path&lt;/strong&gt;. The good news is that it is easier to get rid of it in Rails 3.2 than before. The monkeypatch in my earlier blog post now becomes:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;ActionView::PartialRenderer.class_eval do&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt; &lt;/span&gt;&lt;span style="font-family: 'andale mono', times;"&gt; private&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;  def merge_prefix_into_object_path(pfx, path)&lt;br&gt;    path&lt;br&gt;&lt;/span&gt;&lt;span style="font-family: 'andale mono', times;"&gt;  end &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;end&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;What this little bit of duck punching does is to ensure that when you try to render a collection of objects, it will always return the same partial path regardless of whether you are inside a controller namespace or not. I feel that behavior should be default or at least optional (which is why I describe the feature as annoying.) Let me know if you think it's worth submitting a patch.&lt;/p&gt;&#xD;
&lt;p&gt;Incidentally, in his &lt;a href="http://blog.plataformatec.com.br/2012/01/my-five-favorite-hidden-features-in-rails-3-2/" target="_blank"&gt;blog post mentioned above&lt;/a&gt; Jose mentions needing to add an &lt;strong&gt;as: &lt;/strong&gt;parameter to your call to render, like this:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;render :partial =&amp;gt; @activities, :as =&amp;gt; :activity&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;In my testing and examination of the underlying Rails code, it is clear that the &lt;strong&gt;:as&lt;/strong&gt; option is not necessary. The &lt;strong&gt;PartialRenderer&lt;/strong&gt; object always checks for the existence of a &lt;strong&gt;to_partial_path&lt;/strong&gt; method on the object being rendered and calls it if present. &lt;/p&gt;&#xD;
&lt;p&gt;One more thing. &lt;a href="https://github.com/rails/rails/blob/efed2d56e22069fc142016f398625588684ce008/actionpack/lib/action_view/renderer/partial_renderer.rb" target="_blank"&gt;Currently&lt;/a&gt; the documentation states the following (italics mine):&lt;/p&gt;&#xD;
&lt;blockquote&gt;&#xD;
&lt;p&gt;Instead of explicitly naming the location of a partial, you can also let PartialRenderer do the work and pick the proper path by checking `to_proper_path` method. If the object passed to render is a collection, &lt;em&gt;all objects must return the same path&lt;/em&gt;.&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;I'm not quite sure why it says that all objects must return the same path, or why that would even be considered desirable behavior (it's really not!) The good news is that I can verify for you that it does work to return different partial paths within the collection, in other words, you can still do the rendering heterogeneous objects trick. In fact, depending on your naming convention, you may even get correctly name local variables in your partial for free.&lt;/p&gt;&#xD;
&lt;p&gt;The following method determines what to call your partial's automatic local variable corresponding to the current item of the collection being rendered:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;def retrieve_variable(path)&lt;br&gt;&lt;/span&gt;&lt;span style="font-family: 'andale mono', times;"&gt;  variable =&lt;br&gt;    @options[:as].try(:to_sym) || path[%r'_?(\w+)(\.\w+)*$', 1].to_sym&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;  variable_counter = :"#{variable}_counter" if @collection&lt;br&gt;  [variable, variable_counter]&lt;br&gt;end&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;That regex is a little tricky, but whether it's the intentional behavior or not, it's going to grab whatever is between the last underscore of your partial name and the dot to use as the variable name. In the case of my own Event hierarchy, that means each partial will get its own &lt;strong&gt;event&lt;/strong&gt; local variable, even though the partials are named _user_created_event, _nomination_event, etc.&lt;/p&gt;&#xD;
&lt;p&gt;Perfect. Now to hope someone doesn't fuck it up in a future release thinking it's a bug :)&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 'andale mono', times;"&gt;&lt;br&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/obie?a=HqmUy5WI5LM:S7ALpJ9tmRc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=HqmUy5WI5LM:S7ALpJ9tmRc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=HqmUy5WI5LM:S7ALpJ9tmRc:RJU-JkLLmTY"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=HqmUy5WI5LM:S7ALpJ9tmRc:RJU-JkLLmTY" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=HqmUy5WI5LM:S7ALpJ9tmRc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=HqmUy5WI5LM:S7ALpJ9tmRc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=HqmUy5WI5LM:S7ALpJ9tmRc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=HqmUy5WI5LM:S7ALpJ9tmRc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=HqmUy5WI5LM:S7ALpJ9tmRc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    <feedburner:origLink>http://blog.obiefernandez.com/content/2012/01/rendering-collections-of-heterogeneous-objects-in-rails-32.html</feedburner:origLink></entry>
    <entry>
        <title>RSA (Retained Services Agreement)</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/harehAGR9Yc/rsa-retained-services-agreement.html" />
        <link rel="replies" type="text/html" href="http://blog.obiefernandez.com/content/2011/12/rsa-retained-services-agreement.html" />
        <id>tag:typepad.com,2003:post-6a00e54fdca911883301675f70525c970b</id>
        <published>2011-12-26T20:50:56-05:00</published>
        <updated>2012-01-05T12:27:44-05:00</updated>
        <summary>MSAs are by no means the end-all, be-all of consulting contracts. In fact, if you have the reputation and marketing saavy to get away with using it, I think you should consider instead relying on a Retained Services Agreement or RSA.</summary>
        <author>
            <name>Obie Fernandez</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Business" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://blog.obiefernandez.com/content/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;Over the years I've &lt;a href="http://blog.obiefernandez.com/content/2008/09/master-services-agreement-part-1.html" target="_self"&gt;blogged extensively&lt;/a&gt; about Master Service Agreements (known as MSA documents) and I even &lt;a href="http://blog.obiefernandez.com/content/msa-master-services-agreement-statement-of-work.html" target="_self"&gt;sell them via this blog&lt;/a&gt;. MSAs are a useful tool for consultants wanting to contract individual chunks of work as separate statements of work (via SOW addendums to the MSA). Those SOWs can specify either hourly or deliverable-based pricing.&lt;/p&gt;&#xD;
&lt;p&gt;MSAs are by no means the end-all, be-all of consulting contracts. In fact, if you have the reputation and marketing saavy to get away with using it, I think you should consider instead relying on a &lt;a href="http://msabundle.com/products/retained-services-agreement-rsa" target="_self"&gt;Retained Services Agreement&lt;/a&gt; or RSA.&lt;/p&gt;&#xD;
&lt;p&gt;The RSA is different from its cousin the MSA in several ways:&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;You only need to execute it once, there are no SOW addendums.&lt;/li&gt;&#xD;
&lt;li&gt;It specifies a monthly retainer that is paid &lt;em&gt;upfront, every month&lt;/em&gt;&lt;/li&gt;&#xD;
&lt;li&gt;It can easily specify an irrevocable minimum contract length&lt;/li&gt;&#xD;
&lt;li&gt;It can easily mandate a minimum written notice of termination&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;Since you're always paid up-front with an RSA, it's significantly easier to pause work on late payment, which is one of the best, if not the absolute most effective way of making sure that you always get paid for your hard work.&lt;/p&gt;&#xD;
&lt;p&gt;Charging an upfront monthly retainer is an interesting adventure if you're accustomed to billing on an hourly basis. It's also a potential sticking point in client negotiations. In essence, an RSA establishes a minimum spend per month, which is always billed no matter how much work is performed. You can optionally establish that the monthly fee is calculated as a block of hours at an hourly rate, which would allow you to bill for overtime, but many people only specify a monthly rate that is not subject to pro-rating. That takes serious &lt;a href="http://www.urbandictionary.com/define.php?term=testicular%20fortitude" target="_blank"&gt;courage&lt;/a&gt;.&lt;/p&gt;&#xD;
&lt;p&gt;Use of an RSA is not for the faint of heart. You must be confident that you will be able to deliver results that the client wants on a consistent basis. You must be very communicative about the work that you're doing. Most importantly, you must know that you will be able to allot the minimum number of hours committed to that client to them on a monthly basis without stretching yourself too thin. Otherwise, you may be faced with a client that is demanding to see time logs and explanations of where their money went.&lt;/p&gt;&#xD;
&lt;p&gt;Personally, I use an RSA for my consulting contracts nowadays instead of a MSA. As an entrepreneur and independent consultant that's really short on time, I can't afford to constantly renegotiate terms or be chasing after late payments.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Have you signed an RSA before? As a service provider or a client? What is your opinion of RSAs versus MSAs, engagement letters or one-off contracts? Please let me know in the comments.&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://msabundle.com/products/retained-services-agreement-rsa" target="_blank"&gt;Buy my proven RSA template bundle here&lt;/a&gt; for only $99&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/obie?a=harehAGR9Yc:EpC1YSKELGA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=harehAGR9Yc:EpC1YSKELGA:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=harehAGR9Yc:EpC1YSKELGA:RJU-JkLLmTY"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=harehAGR9Yc:EpC1YSKELGA:RJU-JkLLmTY" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=harehAGR9Yc:EpC1YSKELGA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=harehAGR9Yc:EpC1YSKELGA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=harehAGR9Yc:EpC1YSKELGA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=harehAGR9Yc:EpC1YSKELGA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=harehAGR9Yc:EpC1YSKELGA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    <feedburner:origLink>http://blog.obiefernandez.com/content/2011/12/rsa-retained-services-agreement.html</feedburner:origLink></entry>
    <entry>
        <title>My Survey</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/m9udGVu4n0E/my-survey.html" />
        <link rel="replies" type="text/html" href="http://blog.obiefernandez.com/content/2011/12/my-survey.html" />
        <id>tag:typepad.com,2003:post-6a00e54fdca91188330162fe174ff5970d</id>
        <published>2011-12-20T12:07:52-05:00</published>
        <updated>2011-12-20T12:07:52-05:00</updated>
        <summary>Obie's Survey</summary>
        <author>
            <name>Obie Fernandez</name>
        </author>
        
        
<content type="html" xml:lang="en-US" xml:base="http://blog.obiefernandez.com/content/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;script src="https://d39v39m55yawr.cloudfront.net/assets/clr.js" type="text/javascript"&gt;&lt;/script&gt;&#xD;
&lt;p&gt;&lt;a href="https://urtak.com/clr/ldhyl29qg82ngeqsnzzryx48clh9ipwl"&gt;Obie's Survey&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/obie?a=m9udGVu4n0E:mXMjo0cHoS0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=m9udGVu4n0E:mXMjo0cHoS0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=m9udGVu4n0E:mXMjo0cHoS0:RJU-JkLLmTY"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=m9udGVu4n0E:mXMjo0cHoS0:RJU-JkLLmTY" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=m9udGVu4n0E:mXMjo0cHoS0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=m9udGVu4n0E:mXMjo0cHoS0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=m9udGVu4n0E:mXMjo0cHoS0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=m9udGVu4n0E:mXMjo0cHoS0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=m9udGVu4n0E:mXMjo0cHoS0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    <feedburner:origLink>http://blog.obiefernandez.com/content/2011/12/my-survey.html</feedburner:origLink></entry>
    <entry>
        <title>Hiring me as a consultant</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/YVG-ABGgouk/hiring-me-as-a-consultant.html" />
        <link rel="replies" type="text/html" href="http://blog.obiefernandez.com/content/2011/11/hiring-me-as-a-consultant.html" />
        <id>tag:typepad.com,2003:post-6a00e54fdca9118833015437567559970c</id>
        <published>2011-11-24T14:38:54-05:00</published>
        <updated>2011-11-24T16:27:13-05:00</updated>
        <summary>While my web startup DueProps consumes most of my time, I don't make any money from it yet and probably won't for awhile. So I pick up short term consulting gigs from time to time to help replenish my savings....</summary>
        <author>
            <name>Obie Fernandez</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Business" />
        <category scheme="http://www.sixapart.com/ns/types#category" term="Software Development" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://blog.obiefernandez.com/content/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;While my web startup &lt;a href="http://dueprops.com" target="_self"&gt;DueProps&lt;/a&gt; consumes most of my time, I don't make any money from it yet and probably won't for awhile. So I pick up short term consulting gigs from time to time to help replenish my savings.&lt;/p&gt;&#xD;
&lt;p&gt;What I offer is honest and experienced advice, but not deliverables. If you've followed me for awhile, then you know what my areas of expertise are:&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;Growing a consulting operation from scratch&lt;/li&gt;&#xD;
&lt;li&gt;Leadership of web development teams&lt;/li&gt;&#xD;
&lt;li&gt;Adoption of Agile and Lean Startup techniques&lt;/li&gt;&#xD;
&lt;li&gt;Ruby on Rails-related technology (I can pair-program with you or your team)&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;Hiring me as a consultant is really easy. You may purchase my time at an hourly rate or a daily rate. What you get:&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;distilled knowledge and advice&lt;/li&gt;&#xD;
&lt;li&gt;a no bullshit approach&lt;/li&gt;&#xD;
&lt;li&gt;advice on demand&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;I will not try to sell you anything else if you hire me and I’m not interested in ongoing retainers. I might want to give you a free demo of DueProps, but that's just cause I'm so in love with the positive impact it can have on workforces.&lt;/p&gt;&#xD;
&lt;p&gt;To book my time, we just need to have a preliminary conversation about what you want to achieve by hiring me. I don't have problems with signing an NDA, if you require it. Once we officially book our billable time together and execute a simple consulting agreement, I’ll get whatever I need from you to prepare and be available for advice on demand via phone and email.&lt;/p&gt;&#xD;
&lt;p&gt;Getting down to specifics on pricing, if you want to book me hourly, I’m &lt;strong&gt;$300 an hour&lt;/strong&gt;, billed in 15 minute increments.&lt;/p&gt;&#xD;
&lt;p&gt;If you want to book me in person on a daily basis, it's &lt;strong&gt;$10,000 a day plus travel and accommodation expenses&lt;/strong&gt;. Booking a full day of my time is more expensive and involved because of the disruptive nature of travel and the need for more preparation. The precise schedule of a daily engagement doesn’t matter as long as we spend about 8 hours talking or working on your project.&lt;/p&gt;&#xD;
&lt;p&gt;To book a day with me looks like this:&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;We sign a mutual NDA because while I'm on site I may share confidential stuff with you&lt;/li&gt;&#xD;
&lt;li&gt;You share all documents and resources that we’ll be discussing at least a week prior to the trip&lt;/li&gt;&#xD;
&lt;li&gt;We agree in writing on expectations for our time together, so that I can be 100% prepared&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;Since I live in Atlanta and you probably don't, booking me for a day will usually involve me traveling to your location. You will take care of booking the travel and accomodations and cover the cost. I only fly Delta Airlines (first class) and I only stay at Hilton Hotels.&lt;/p&gt;&#xD;
&lt;p&gt;That’s it. The terms are transparent and non-negotiable. My email is &lt;a href="mailto:obiefernandez@gmail.com" target="_self"&gt;obiefernandez@gmail.com&lt;/a&gt; I can help you win.&lt;/p&gt;&#xD;
&lt;p&gt;--&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #888888;"&gt;Hat tip to one of my heroes, &lt;a href="http://www.tincup.com/" target="_self"&gt;Mr. Tincup&lt;/a&gt;, for inspring me to describe&lt;/span&gt;&lt;span style="color: #888888;"&gt; this offer in this way. You should &lt;a href="http://www.tincup.com/2010/07/pricing/" target="_self"&gt;hire him&lt;/a&gt; for marketing advice.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/obie?a=YVG-ABGgouk:9PUPF5G_lSc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=YVG-ABGgouk:9PUPF5G_lSc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=YVG-ABGgouk:9PUPF5G_lSc:RJU-JkLLmTY"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=YVG-ABGgouk:9PUPF5G_lSc:RJU-JkLLmTY" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=YVG-ABGgouk:9PUPF5G_lSc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=YVG-ABGgouk:9PUPF5G_lSc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=YVG-ABGgouk:9PUPF5G_lSc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=YVG-ABGgouk:9PUPF5G_lSc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=YVG-ABGgouk:9PUPF5G_lSc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    <feedburner:origLink>http://blog.obiefernandez.com/content/2011/11/hiring-me-as-a-consultant.html</feedburner:origLink></entry>
    <entry>
        <title>Adding a Counter Cache to Existing Records</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/bHjm3hmPqpA/adding-a-counter-cache-to-existing-records.html" />
        <link rel="replies" type="text/html" href="http://blog.obiefernandez.com/content/2011/08/adding-a-counter-cache-to-existing-records.html" />
        <id>tag:typepad.com,2003:post-6a00e54fdca9118833015434baeded970c</id>
        <published>2011-08-22T11:52:01-04:00</published>
        <updated>2011-08-22T11:52:01-04:00</updated>
        <summary>Adding a counter cache to a has_many/belongs_to ActiveRecord relationship after the underlying records have been around awhile is one of those tasks that tends to trip up Rails newbies. Here's an example migration showing the necessary steps. Add the counter_cache...</summary>
        <author>
            <name>Obie Fernandez</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Ruby on Rails" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://blog.obiefernandez.com/content/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;Adding a counter cache to a has_many/belongs_to ActiveRecord relationship after the underlying records have been around awhile is one of those tasks that tends to trip up Rails newbies.&lt;/p&gt;&#xD;
&lt;p&gt;Here's an example migration showing the necessary steps.&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;Add the &lt;span style="font-family: 'andale mono', times;"&gt;counter_cache&lt;/span&gt; column as an integer. (If following normal rails convention, name the column with the plural name of the has_many association followed by &lt;span style="font-family: 'andale mono', times;"&gt;_count&lt;/span&gt;)&lt;/li&gt;&#xD;
&lt;li&gt;Make sure that the column is set to disallow null values and defaults to 0.&lt;/li&gt;&#xD;
&lt;li&gt;Reset the counters for existing records. The &lt;span style="font-family: 'andale mono', times;"&gt;reset_counters&lt;/span&gt; method is not smart enough to take an array of ids, so you have to call it for each record you want updated.&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;pre&gt;&lt;div id="LC1"&gt;class AddCommentsCountToNominations &amp;lt; ActiveRecord::Migration&lt;/div&gt;&lt;div id="LC2"&gt;  def self.up&lt;/div&gt;&lt;div id="LC3"&gt;    add_column :nominations, :comments_count, :integer, null:false, default: 0&lt;/div&gt;&lt;div id="LC3"&gt;    # reset cached counts for nominations with comments only&lt;/div&gt;&lt;div id="LC4"&gt;    ids = Set.new&lt;/div&gt;&lt;div id="LC5"&gt;    Comment.all.each {|c| ids &amp;lt;&amp;lt; c.nomination_id}&lt;/div&gt;&lt;div id="LC6"&gt;    ids.each do |nomination_id|&lt;/div&gt;&lt;div id="LC7"&gt;      Nomination.reset_counters(nomination_id, :comments)&lt;/div&gt;&lt;div id="LC8"&gt;    end&lt;/div&gt;&lt;div id="LC9"&gt;  end&lt;/div&gt;&lt;div id="LC9"&gt;&lt;/div&gt;&lt;div id="LC11"&gt;  def self.down&lt;/div&gt;&lt;div id="LC12"&gt;    remove_column :nominations, :comments_count&lt;/div&gt;&lt;div id="LC13"&gt;  end&lt;/div&gt;&lt;div id="LC14"&gt;end&lt;/div&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;The &lt;span style="font-family: 'andale mono', times;"&gt;:counter_cache&lt;/span&gt; option is covered in detail on pages 195-196 of my book &lt;a href="http://www.amazon.com/dp/0321601661?tag=obiefernandez-20&amp;amp;camp=213381&amp;amp;creative=390973&amp;amp;linkCode=as4&amp;amp;creativeASIN=0321601661&amp;amp;adid=1HK8D6NFGQD97H8QPF48&amp;amp;" target="_self"&gt;The Rails 3 Way&lt;/a&gt;, including some interesting gotchas.&lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/obie?a=bHjm3hmPqpA:A0kC9sC46gY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=bHjm3hmPqpA:A0kC9sC46gY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=bHjm3hmPqpA:A0kC9sC46gY:RJU-JkLLmTY"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=bHjm3hmPqpA:A0kC9sC46gY:RJU-JkLLmTY" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=bHjm3hmPqpA:A0kC9sC46gY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=bHjm3hmPqpA:A0kC9sC46gY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=bHjm3hmPqpA:A0kC9sC46gY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=bHjm3hmPqpA:A0kC9sC46gY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=bHjm3hmPqpA:A0kC9sC46gY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    <feedburner:origLink>http://blog.obiefernandez.com/content/2011/08/adding-a-counter-cache-to-existing-records.html</feedburner:origLink></entry>
    <entry>
        <title>Deep Integration of Ruby with Semantic Web Ontologies</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/xssAOEeXLxo/deep-integration-of-ruby-with-semantic-web-ontologies.html" />
        <link rel="replies" type="text/html" href="http://blog.obiefernandez.com/content/2011/08/deep-integration-of-ruby-with-semantic-web-ontologies.html" />
        <id>tag:typepad.com,2003:post-6a00e54fdca9118833015434772951970c</id>
        <published>2011-08-12T12:48:16-04:00</published>
        <updated>2011-08-12T12:48:16-04:00</updated>
        <summary>Download Deep Integration of Ruby with Semantic Web Ontologies (PDF, 225k) My presentation file needed a new home since the primary link that comes up in Google when you search for it is a ThoughtWorks server that no longer exists....</summary>
        <author>
            <name>Obie Fernandez</name>
        </author>
        
        
<content type="html" xml:lang="en-US" xml:base="http://blog.obiefernandez.com/content/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;&lt;span class="asset  asset-generic at-xid-6a00e54fdca9118833015390a3af24970b"&gt;&lt;a href="http://blog.obiefernandez.com/files/deep-integration-of-ruby-with-semantic-web-ontologies.pdf"&gt;Download Deep Integration of Ruby with Semantic Web Ontologies&lt;/a&gt; (PDF, 225k)&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;My presentation file needed a new home since the primary link that comes up in Google when you search for it is a ThoughtWorks server that no longer exists.&lt;/p&gt;&#xD;
&lt;p&gt;I'm also hosting a related whitepaper by Dominic Mainz from 2009&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span class="asset  asset-generic at-xid-6a00e54fdca911883301543476f90f970c"&gt;&lt;span class="asset  asset-generic at-xid-6a00e54fdca9118833015434771787970c"&gt;&lt;a href="http://blog.obiefernandez.com/files/deep-integration-of-semantic-web-using-ruby.pdf"&gt;Deep Integration of Semantic Web Using Ruby&lt;/a&gt; (PDF, 7.7mb)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Incidentally, it's been about 6 years since I first took interest in this subject and I still think there's room for significant innovation here. Maybe I've read too much Neal Stephenson, but I can imagine people moonlighting as domain experts and maintaining a global commons ontological library that can be imported to form the foundation of your application's domain model just as easily as we import ruby gems today. A similar intellectual energy drove Wikipedia -- why not make it work for software models?&lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/obie?a=xssAOEeXLxo:Kk1I2CtPCeU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=xssAOEeXLxo:Kk1I2CtPCeU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=xssAOEeXLxo:Kk1I2CtPCeU:RJU-JkLLmTY"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=xssAOEeXLxo:Kk1I2CtPCeU:RJU-JkLLmTY" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=xssAOEeXLxo:Kk1I2CtPCeU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=xssAOEeXLxo:Kk1I2CtPCeU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=xssAOEeXLxo:Kk1I2CtPCeU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=xssAOEeXLxo:Kk1I2CtPCeU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=xssAOEeXLxo:Kk1I2CtPCeU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    <feedburner:origLink>http://blog.obiefernandez.com/content/2011/08/deep-integration-of-ruby-with-semantic-web-ontologies.html</feedburner:origLink></entry>
    <entry>
        <title>where are un-ordered tools?</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/aTJwTCx_WUk/where-are-un-ordered-tools.html" />
        <link rel="replies" type="text/html" href="http://blog.obiefernandez.com/content/2011/08/where-are-un-ordered-tools.html" />
        <id>tag:typepad.com,2003:post-6a00e54fdca9118833014e8a934e81970d</id>
        <published>2011-08-12T00:20:32-04:00</published>
        <updated>2011-08-12T00:20:32-04:00</updated>
        <summary>While digging up some stuff on my old blog I found this post: The new dynamics of strategy: Sense-making in a complex and complicated world that I published back in December of 2004. Almost 7 years later and I'm not...</summary>
        <author>
            <name>Obie Fernandez</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Software Development" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://blog.obiefernandez.com/content/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;While digging up some stuff on my old blog I found this post: &lt;a href="http://www.jroller.com/obie/entry/the_new_dynamics_of_strategy" target="_self"&gt;The new dynamics of strategy: Sense-making in a complex and complicated world&lt;/a&gt; that I published back in December of 2004. Almost 7 years later and I'm not so sure that we've made progress with real-world tools leveraging this research.&lt;/p&gt;&#xD;
&lt;blockquote&gt;The authors coin the term &lt;em&gt;un-order&lt;/em&gt; in much the same sense as &lt;em&gt;undead&lt;/em&gt;, to refer to "emergent order". Not an absence of order, but instead the patterns that emerge from situations which undergo continual change, subject to chaotic influences. This is of particular interest to the agile community and particularly XPers, whose motto is&lt;em&gt;embrace change&lt;/em&gt;, which explains why it seems to be getting a lot of attention from agile bloggers. I see a window of opportunity opening up for a slew of open-source projects that build on this information. While reading &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0385503865/104-7715790-9273555"&gt;Wisdom of Crowds&lt;/a&gt;, I got the strong impression that a far-flung organization (such as the the consulting company that I work for), will benefit by moving agressively on these knowledge management advances. For instance, devise a polling tool with differing modes that match the various identities that we live on a day-to-day basis, namely: consultant, coach, manager, member of our client team, member of the parent company. Within each of these modes, features that allow referendums and continual feedback for all levels: personal, team and organization.&lt;/blockquote&gt;&#xD;
&lt;p&gt;Maybe &lt;a href="http://asana.com/" target="_self"&gt;Asana&lt;/a&gt; is a step in the right direction? I've been using it with my new startup as our project management tool for everything that doesn't fit into &lt;a href="http://pivotaltracker.com" target="_self"&gt;Pivotal Tracker&lt;/a&gt;. Liking it so far.&lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/obie?a=aTJwTCx_WUk:Ff7KPVmd5bM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=aTJwTCx_WUk:Ff7KPVmd5bM:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=aTJwTCx_WUk:Ff7KPVmd5bM:RJU-JkLLmTY"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=aTJwTCx_WUk:Ff7KPVmd5bM:RJU-JkLLmTY" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=aTJwTCx_WUk:Ff7KPVmd5bM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=aTJwTCx_WUk:Ff7KPVmd5bM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=aTJwTCx_WUk:Ff7KPVmd5bM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=aTJwTCx_WUk:Ff7KPVmd5bM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=aTJwTCx_WUk:Ff7KPVmd5bM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    <feedburner:origLink>http://blog.obiefernandez.com/content/2011/08/where-are-un-ordered-tools.html</feedburner:origLink></entry>
    <entry>
        <title>Startup Life Is</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/sdp0JxJ1uRg/startup-life-is.html" />
        <link rel="replies" type="text/html" href="http://blog.obiefernandez.com/content/2011/07/startup-life-is.html" />
        <id>tag:typepad.com,2003:post-6a00e54fdca9118833015433f4d757970c</id>
        <published>2011-07-24T01:18:23-04:00</published>
        <updated>2011-07-24T01:18:23-04:00</updated>
        <summary>Working on raising a half-million dollar seed round. Getting commitments for half of said seed round. Feeling really good about the future. Networking. Making phone calls. Doing demos. Banging out Keynote presos. Booking last minute tickets to San Francisco for...</summary>
        <author>
            <name>Obie Fernandez</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Life" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://blog.obiefernandez.com/content/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;Working on raising a half-million dollar seed round. Getting commitments for half of said seed round. Feeling really good about the future. Networking. Making phone calls. Doing demos. Banging out Keynote presos.&lt;/p&gt;&#xD;
&lt;p&gt;Booking last minute tickets to San Francisco for pitch meetings with a couple of the most legendary personalities in the valley. Feeling proud of yourself and a little scared at the same time.&lt;/p&gt;&#xD;
&lt;p&gt;Having to multitask between coding and emails and phone calls with investors and service providers and customers and potential customers and lawyers and advisors. Signing documents. Emailing documents. Faxing documents. Coding. Managing. Snacking. Somehow keeping everything from falling apart.&lt;/p&gt;&#xD;
&lt;p&gt;Remembering to call kids. Remembering to call mom.&lt;/p&gt;&#xD;
&lt;p&gt;Spending a few minutes adding a message in your app's notification emails telling users to hit reply to add a comment. Routing said replies to your own inbox, as a test to see if anyone will actually use that feature. Realizing that it would probably be really bad if they actually did start using that feature, so biting the bullet and writing incoming email processing. Taking a few hours to get it all tested and working, but mostly because you have trouble getting a reliable SSH tunnel between the outside world and your local development environment. Getting lots of help from &lt;a href="http://search.twitter.com/search?q=%23lazytwitter" target="_self"&gt;#lazytwitter&lt;/a&gt; and singing the praises of modern development tools and web services.&lt;/p&gt;&#xD;
&lt;p&gt;Words with friends.&lt;/p&gt;&#xD;
&lt;p&gt;Realizing you're not sure where you're going to sleep while you're on your trip to San Francisco. Realizing you probably should get a rental car so you can drive yourself down to Mountain View. Kicking yourself for not having more meetings lined up, to make better use of the trip. Rationalizing that the trip was too last minute anyway.&lt;/p&gt;&#xD;
&lt;p&gt;Putting the finishing touches on a major piece of functionality. Beaming with pride. Realizing it's 10:30pm and you had commitments tonight. Rushing home. Dragging yourself out to a cousin's birthday party past midnight even though you're exhausted.&lt;/p&gt;&#xD;
&lt;p&gt;Drinking. Karoekeing. Subwaying. Sleeping.&lt;/p&gt;&#xD;
&lt;p&gt;Waking at 9 even though you went to sleep at 4:30am. Not being able to fall back asleep because you're thinking of great ideas to work on once you get up. Reaching over and grabbing your notebook to start hacking on some ideas while still in bed. Hunger finally gets you out of bed at 10.&lt;/p&gt;&#xD;
&lt;p&gt;Remembering you better pick up your laundry because otherwise you won't have any clean underwear for said trip. Further realizing that you don't have any shoes with you that aren't flip flops or sneakers, because you've been traveling and living out of a suitcase for the last four months and forgot your nice shoes somewhere along the way.&lt;/p&gt;&#xD;
&lt;p&gt;Deciding that since it's Saturday you might as well stop by the barbershop and get a haircut on your way in to the office since it's been a few weeks and you don't want to look shaggy for the upcoming SF trip. Finally getting into the office at noon, to meet up with the rest of your team.&lt;/p&gt;&#xD;
&lt;p&gt;Putting the finishing touches on another major piece of functionality. Beaming with pride again.&lt;/p&gt;&#xD;
&lt;p&gt;Breaking for lunch and deciding to celebrate Saturday by turning left around the corner instead of right. Amazing yourself with a whole new array of lunch options, which you have neglected until now in favor of the same falafel place where you've been buying meals about 75% of the time for weeks.&lt;/p&gt;&#xD;
&lt;p&gt;Going back to the office and banging out yet another major piece of functionality. Beaming with pride again, but celebration is somewhat tempered by your back, which is hurting since you've been sitting all day, everyday, for the past week. Deciding to alleviate said hurt by hanging upside down for several minutes, suspended by ankle shackles. Having your lead engineer hover nervously around you during your suspension, nervous that you might fall and break your neck prior to close of current funding round.&lt;/p&gt;&#xD;
&lt;p&gt;Getting less and less ambitious with coding as energy wanes until eventually you decide to call it a night and go home at 10:30pm. Buying a hummus wrap on the way home, because you realize that you forgot to eat dinner during your exciting all-day coding session. Eating said hummus wrap on the subway.&lt;/p&gt;&#xD;
&lt;p&gt;Walking home from subway stop in 100 degree heat. Smiling at the wide open fire-hydrant flooding the street next to the building where you've been living. Thinking that there were probably a bunch of kids playing in that hydrants cooling stream hours earlier. Feeling nostalgic for simpler times, but realizing you really couldn't ask for things to be any better.&lt;/p&gt;&#xD;
&lt;p&gt;Packing to trip. Turning down offers to go out with friends. Getting into bed at a reasonable hour. Not going to sleep.&lt;/p&gt;&#xD;
&lt;p&gt;Writing a blog post.&lt;/p&gt;&#xD;
&lt;p&gt;Saying goodnight.&lt;/p&gt;&#xD;
&lt;p&gt; &lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/obie?a=sdp0JxJ1uRg:vqs2DLj8-ws:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=sdp0JxJ1uRg:vqs2DLj8-ws:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=sdp0JxJ1uRg:vqs2DLj8-ws:RJU-JkLLmTY"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=sdp0JxJ1uRg:vqs2DLj8-ws:RJU-JkLLmTY" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=sdp0JxJ1uRg:vqs2DLj8-ws:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=sdp0JxJ1uRg:vqs2DLj8-ws:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=sdp0JxJ1uRg:vqs2DLj8-ws:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=sdp0JxJ1uRg:vqs2DLj8-ws:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=sdp0JxJ1uRg:vqs2DLj8-ws:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    <feedburner:origLink>http://blog.obiefernandez.com/content/2011/07/startup-life-is.html</feedburner:origLink></entry>
    <entry>
        <title>The Next Big Leap</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/llH8QcthA28/the-next-big-leap.html" />
        <link rel="replies" type="text/html" href="http://blog.obiefernandez.com/content/2011/07/the-next-big-leap.html" />
        <id>tag:typepad.com,2003:post-6a00e54fdca911883301538ef78643970b</id>
        <published>2011-07-08T17:43:26-04:00</published>
        <updated>2011-07-08T17:47:41-04:00</updated>
        <summary>The question is not "should I test (or spec)", but rather it is "what should I test?" I don't think we're testing the right thing now, with our emphasis on BDD/TDD. When we figure out how to rigorously test for business value it's going to be the next big leap.</summary>
        <author>
            <name>Obie Fernandez</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Agile" />
        <category scheme="http://www.sixapart.com/ns/types#category" term="Lean Startups" />
        <category scheme="http://www.sixapart.com/ns/types#category" term="Software Development" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://blog.obiefernandez.com/content/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;&lt;a href="http://www.flickr.com/photos/obie/500561637/" title="Zed Dive by Obie Fernandez, on Flickr"&gt;&lt;img alt="Zed Dive" height="640" src="http://farm1.static.flickr.com/205/500561637_d0a0f379a5_z.jpg" width="428"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;In my view, FITness, Cucumber and other acceptance test frameworks represented a big leap in software development effectiveness because they allow coders to get intimately involved with (and in some cases replace) Product Management/QA roles. Extreme Programming has developers working directly with product owners and capturing their requirements as "acceptance criteria" on story cards. Eventually, the desire to automate acceptance testing and best practices for how to express acceptance criteria led to GIVEN-WHEN-THEN support baked into actual testing frameworks such as Cucumber.&lt;/p&gt;&#xD;
&lt;p&gt;That's okay, but it's not nearly enough. Let's talk about how the next big leap in effectiveness is going to happen. Assume the following story is true:&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;&lt;strong&gt;Given&lt;/strong&gt; a specification for a feature that has &lt;em&gt;not&lt;/em&gt; been demonstrably linked to business value,&lt;/li&gt;&#xD;
&lt;li&gt;&lt;strong&gt;When&lt;/strong&gt; a developer works to deliver an implementation of that feature,&lt;/li&gt;&#xD;
&lt;li&gt;&lt;strong&gt;Then&lt;/strong&gt; the &lt;em&gt;worth&lt;/em&gt; of the implementation work is indeterminate until some future time when its business value is validated&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;Most feature requests that I've ever worked with in the early stages of a project, are ideations of the product visionary/designers/entrepreneur, based on intuition rather than customer feedback. And that's perfectly normal and acceptable to me. The more innovative a creation, the more work you usually have to do before you put it out in front of customers and get meaningful feedback. But the impact of those features on key business metrics are assumed, if it gets any explicit thought at all.&lt;/p&gt;&#xD;
&lt;p&gt;Aside: As for the implementation of those feature requests, I'm going to assume that being faithful to the specification is &lt;em&gt;implicit&lt;/em&gt;, as it should be when we're talking about &lt;a href="http://www.amazon.com/gp/product/0137081073/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=obiefernandez-20&amp;amp;linkCode=as2&amp;amp;camp=217153&amp;amp;creative=399701&amp;amp;creativeASIN=0137081073"&gt;professional programmers&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0137081073&amp;amp;camp=217153&amp;amp;creative=399701" style="border: none !important; margin: 0px !important;" width="1"&gt;&lt;/img&gt;. (Not working with professional programmers? GIGO)&lt;/p&gt;&#xD;
&lt;p&gt;Given those assumptions, I think what myself and others have realized as a problem with so-called "high-ceremony" adherence to methodologies such as BDD (Behavior-Driven Development) is that by obsessing over &lt;strong&gt;correctness of the implementation as faithful to the spec&lt;/strong&gt;, it becomes easy to lose sight of the true value of our work: to deliver business value, as measured by key business metrics. We may obsess over &lt;a href="http://manifesto.softwarecraftsmanship.org/" target="_self"&gt;crafting&lt;/a&gt; pristine, bulletproof, maintainable code, and yet its worth is indeterminate at best. And why, as developers, would we be satisfied with that!&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 14pt; background-color: #ffffbf;"&gt;"Measure as much as you can - no feedback == no direction"  &lt;a href="http://blog.rodger-brown.com/2011/06/what-agile-means-to-me.html" target="_self"&gt;Hugo Rodger-Brown&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;How can we establish that our work is not a waste of time? One technique that I hope to work on in near future is the &lt;strong&gt;specification validation of business value right in my acceptance criteria&lt;/strong&gt; as part of its test cases. Said differently, I am looking for an easy way to specify non-functional requirements as part of acceptance criteria in such a way that it is automatically tested. It would be an extension or evolution of the current BDD toolset, not a replacement. You can even use de rigeur GWT syntax:&lt;/p&gt;&#xD;
&lt;p&gt;Given the implementation of email notifications,&lt;br&gt;When 100 customer events have been processed,&lt;br&gt;Then the mean time between events metrics should improve by 30%&lt;/p&gt;&#xD;
&lt;p&gt;or better&lt;/p&gt;&#xD;
&lt;p&gt;Then the net revenue per event should improve by 30%&lt;/p&gt;&#xD;
&lt;p&gt;or best&lt;/p&gt;&#xD;
&lt;p&gt;Then the net revenue per event should increase by $100&lt;/p&gt;&#xD;
&lt;p&gt;I care more about business value than faithful adherence to a particular functional requirement. My specifications should reflect that mindset. What makes this whole approach non-trivial is the challenge of establishing credible causal relationships in my acceptance criteria, given the multi-variate nature of dozens of interleaved features in a particular application and the way that key business metrics overlay many features at once.&lt;/p&gt;&#xD;
&lt;p&gt;Despite the challenges, I think the concept I'm describing is the next big leap. The first challenge is to get people talking about it and definition of goals. The second is to design a methodology and technical framework for accomplishing those goals.&lt;/p&gt;&#xD;
&lt;p&gt;What do we call the whole thing? Business-Driven Development? (no) What do we call the specs? Can you write specs against metrics in a tool such as KissMetrics? It's hard (or at least has been for me) to figure out what metrics I need until after I've written the features that yield measurement data used to calculate those metrics. How do I fix or at least improve that workflow? How do I describe the discipline needed to think of the metrics prior to specifying a feature?&lt;/p&gt;&#xD;
&lt;p&gt;Right now all I'm trying to do via this blog post and my public comments is to start a dialogue. I'm not trying to make any blanket statements about the correctness of BDD/TDD or testing in general, just pointing out that there's lots of room outside of that particular box for innovation.&lt;/p&gt;&#xD;
&lt;p&gt;As for my comments at RailsConf and Goruco, it seems to me that at a startup that has not achieved market fit, it's wrong to spend much time ensuring that a given piece of software matches its functional specification. (Specs that often won't exist, because the same person specifying the functionality is the person writing the code, in which case I'm saying don't bother writing the specs. Just "cowboy" it and do a complete rewrite later if it proves necessary.) Once you have your MVP, write specs for how particular code changes will impact key business metrics. Regressions will probably fail to improve key business metrics.&lt;/p&gt;&#xD;
&lt;p&gt;The question is not "should I test (or spec)", but rather it is "what should I test?" As an industry, to the extent that TDD/BDD has caught on at all, I don't think we're testing the right things, with our emphasis on correctness of implementation. When we figure out how to rigorously test for business value it's going to be the next big leap. That's a big green field waiting for all of us to play in and I want to be one of the first.&lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/obie?a=llH8QcthA28:ARpPENBQUXE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=llH8QcthA28:ARpPENBQUXE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=llH8QcthA28:ARpPENBQUXE:RJU-JkLLmTY"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=llH8QcthA28:ARpPENBQUXE:RJU-JkLLmTY" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=llH8QcthA28:ARpPENBQUXE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=llH8QcthA28:ARpPENBQUXE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=llH8QcthA28:ARpPENBQUXE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?i=llH8QcthA28:ARpPENBQUXE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/obie?a=llH8QcthA28:ARpPENBQUXE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/obie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    <feedburner:origLink>http://blog.obiefernandez.com/content/2011/07/the-next-big-leap.html</feedburner:origLink></entry>
 
<entry><title type="text">Links for 2010-08-31 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/MSuSkxH4q-4/obie" /><updated>2010-09-01T00:00:00-07:00</updated><id>http://del.icio.us/obie#2010-08-31</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://news.ycombinator.com/item?id=1649065"&gt;Hacker News | Ask HN: Are there any good online communities for UX design?&lt;/a&gt;&lt;br/&gt;
Links to good UX communities&lt;/li&gt;
&lt;/ul&gt;</content><feedburner:origLink>http://del.icio.us/obie#2010-08-31</feedburner:origLink></entry><entry><title type="text">Links for 2009-09-12 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/kvboVgVqgRE/obie" /><updated>2009-09-13T00:00:00-07:00</updated><id>http://del.icio.us/obie#2009-09-12</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.teehanlax.com/blog/?p=1628"&gt;teehan+lax &amp;raquo; Blog Archive &amp;raquo; iPhone GUI PSD 3.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><feedburner:origLink>http://del.icio.us/obie#2009-09-12</feedburner:origLink></entry><entry><title type="text">Links for 2009-04-25 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/EdavQebPZ3E/obie" /><updated>2009-04-26T00:00:00-07:00</updated><id>http://del.icio.us/obie#2009-04-25</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.snowgiraffe.com/tech/462/rails-devs-for-foreign-keys/"&gt;Rails Devs for Foreign Keys&lt;/a&gt;&lt;br/&gt;
Interesting commentary and plugin from Rails guys who believe in using database constraints.&lt;/li&gt;
&lt;/ul&gt;</content><feedburner:origLink>http://del.icio.us/obie#2009-04-25</feedburner:origLink></entry><entry><title type="text">Links for 2009-03-01 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/n_R3UQgBiQI/obie" /><updated>2009-03-02T00:00:00-08:00</updated><id>http://del.icio.us/obie#2009-03-01</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.erebor.com/2009/01/16/telling-stories-in-nashville/"&gt;Ereblog  &amp;raquo; Blog Archive   &amp;raquo; Telling stories in Nashville&lt;/a&gt;&lt;br/&gt;
Fawesome story about guest-pairing with the OGC guys. I think the guest-pairing meme is catching on.&lt;/li&gt;
&lt;/ul&gt;</content><feedburner:origLink>http://del.icio.us/obie#2009-03-01</feedburner:origLink></entry><entry><title type="text">Links for 2009-02-18 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/yLvaY8nc5bg/obie" /><updated>2009-02-19T00:00:00-08:00</updated><id>http://del.icio.us/obie#2009-02-18</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.digidave.org/adventures_in_freelancing/2009/02/a-journoentrepreneurs-important-relationships.html"&gt;DigiDave | Communication is Key: A Journo-Entrepreneur's Important Relationships&lt;/a&gt;&lt;br/&gt;
Today one of the most important relationships I have is with my developers. The joke goes &amp;quot;developers are the new teamsters.&amp;quot;&lt;/li&gt;
&lt;/ul&gt;</content><feedburner:origLink>http://del.icio.us/obie#2009-02-18</feedburner:origLink></entry><entry><title type="text">Links for 2009-02-17 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/CE3xWgEsAiQ/obie" /><updated>2009-02-18T00:00:00-08:00</updated><id>http://del.icio.us/obie#2009-02-17</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://wevouchfor.org/"&gt;We Vouch For...&lt;/a&gt;&lt;br/&gt;
Interesting take on a &amp;quot;network of excellence&amp;quot; concept by Brian Marick&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.sparkboxx.com/sparkboxx/2009/02/rails-maturity-model-certification-and-the-rails-ecosystem.html"&gt;Sparkboxx - Wilco van Duinkerken: Rails Maturity Model, Certification and the Rails Ecosystem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.akitaonrails.com/2009/2/17/rails-im-maturity-model"&gt;%w(Akita On Rails) * 2.0 / Rails (Im)maturity Model?&lt;/a&gt;&lt;br/&gt;
Fabio&amp;#039;s take on the subject of RMM and CMMi in general. He seems to know what he&amp;#039;s talking about based on experience.&lt;/li&gt;
&lt;/ul&gt;</content><feedburner:origLink>http://del.icio.us/obie#2009-02-17</feedburner:origLink></entry><entry><title type="text">Links for 2009-02-05 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/obie/~3/N91c_E8BXOo/obie" /><updated>2009-02-06T00:00:00-08:00</updated><id>http://del.icio.us/obie#2009-02-05</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://agiletesting.blogspot.com/2009/02/load-balancing-in-amazon-ec2-with.html"&gt;Agile Testing: Load Balancing in Amazon EC2 with HAProxy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><feedburner:origLink>http://del.icio.us/obie#2009-02-05</feedburner:origLink></entry></feed><!-- ph=1 -->

