<?xml version="1.0"?>
<?xml-stylesheet href="/transform" type="text/xsl"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:bibo="http://purl.org/ontology/bibo/" xmlns:bs="http://purl.org/ontology/bibo/status/" xmlns:ci="https://vocab.methodandstructure.com/content-inventory#" xmlns:dct="http://purl.org/dc/terms/" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xhv="http://www.w3.org/1999/xhtml/vocab#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" lang="en" prefix="bibo: http://purl.org/ontology/bibo/ bs: http://purl.org/ontology/bibo/status/ ci: https://vocab.methodandstructure.com/content-inventory# dct: http://purl.org/dc/terms/ foaf: http://xmlns.com/foaf/0.1/ rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns# xhv: http://www.w3.org/1999/xhtml/vocab# xsd: http://www.w3.org/2001/XMLSchema#" vocab="http://www.w3.org/1999/xhtml/vocab#" xml:lang="en">
  <head>
    <title property="dct:title">The Programmer in Fallow: In Contrast with Incumbent Solutions</title>
    <base href="https://doriantaylor.com/the-programmer-in-fallow-in-contrast-with-incumbent-solutions"/>
    <link href="document-stats#E6g2Xnd4gd8fLrRJwcgMCL" rev="ci:document"/>
    <link href="elsewhere" rel="alternate bookmark" title="Elsewhere"/>
    <link href="this-site" rel="alternate index" title="This Site"/>
    <link href="http://purl.org/ontology/bibo/status/published" rel="bibo:status"/>
    <link href="" rel="ci:canonical" title="The Programmer in Fallow: In Contrast with Incumbent Solutions"/>
    <link href="lexicon/#EzqXIsriaILFcWjXdS7FbI" rel="dct:audience" title="Software Developer"/>
    <link href="person/dorian-taylor#me" rel="dct:creator" title="Dorian Taylor"/>
    <link href="the-programmer-in-fallow-augmenting-productivity-through-selective-idleness" rel="dct:references prev" title="The Programmer in Fallow: Augmenting Productivity Through Selective Idleness"/>
    <link href="person/dorian-taylor" rel="meta" title="Who I Am"/>
    <link about="./" href="3f36c30c-6096-454a-8a22-c062100ae41f" rel="alternate" type="application/atom+xml"/>
    <link about="./" href="f07f5044-01bc-472d-9079-9b07771b731c" rel="alternate" type="application/atom+xml"/>
    <link about="./" href="this-site" rel="alternate"/>
    <link about="./" href="elsewhere" rel="alternate"/>
    <link about="./" href="e341ca62-0387-4cea-b69a-cdabc7656871" rel="alternate" type="application/atom+xml"/>
    <link about="verso/" href="3f36c30c-6096-454a-8a22-c062100ae41f" rel="alternate" type="application/atom+xml"/>
    <link about="verso/" href="this-site" rel="alternate"/>
    <link about="verso/" href="elsewhere" rel="alternate"/>
    <meta content="the-programmer-in-fallow-in-contrast-with-incumbent-solutions" datatype="xsd:token" property="ci:canonical-slug"/>
    <meta content="This note is a cursory, non-scientific inquiry into the application of the concept of crop-rotation, an ancient agricultural technique for preserving the fertility of land, into the implementation phase of a software project. No research as of yet has been performed to ascertain if this adaptation has been attempted in similar environments. This note is one of an upcoming series on software project management." name="description" property="dct:abstract"/>
    <meta content="2008-10-23T08:45:58+00:00" datatype="xsd:dateTime" property="dct:created"/>
    <meta content="the-programmer-in-fallow-in-contrast-with-incumbent-solutions" property="dct:identifier"/>
    <meta content="2008-10-23T08:55:29+00:00" datatype="xsd:dateTime" property="dct:modified"/>
    <meta content="2008-10-29T17:13:32+00:00" datatype="xsd:dateTime" property="dct:modified"/>
    <meta content="2009-03-04T00:43:00+00:00" datatype="xsd:dateTime" property="dct:modified"/>
    <meta content="2022-05-31T04:18:52+00:00" datatype="xsd:dateTime" property="dct:modified"/>
    <meta content="developer" property="dct:subject"/>
    <meta content="development" property="dct:subject"/>
    <meta content="fallow" property="dct:subject"/>
    <meta content="fallow pattern" property="dct:subject"/>
    <meta content="programmer" property="dct:subject"/>
    <meta content="programming" property="dct:subject"/>
    <meta content="project management" property="dct:subject"/>
    <meta content="software" property="dct:subject"/>
    <meta about="person/dorian-taylor#me" content="Dorian Taylor" name="author" property="foaf:name"/>
    <meta content="summary" name="twitter:card"/>
    <meta content="@doriantaylor" name="twitter:site"/>
    <meta content="The Programmer in Fallow: In Contrast with Incumbent Solutions" name="twitter:title"/>
    <meta content="This note is a cursory, non-scientific inquiry into the application of the concept of crop-rotation, an ancient agricultural technique for preserving the fertility of land, into the implementation phase of a software project. No research as of yet has been performed to ascertain if this adaptation has been attempted in similar environments. This note is one of an upcoming series on software project management." name="twitter:description"/>
    <object>
      <nav>
        <ul>
          <li>
            <a href="the-programmer-in-fallow-an-implementation" rev="dct:references" typeof="bibo:Article">
              <span property="dct:title">The Programmer in Fallow: An Implementation</span>
            </a>
          </li>
          <li>
            <a href="the-programmer-in-fallow-augmenting-productivity-through-selective-idleness" rev="dct:references" typeof="bibo:Article">
              <span property="dct:title">The Programmer in Fallow: Augmenting Productivity Through Selective Idleness</span>
            </a>
          </li>
          <li>
            <a href="document-stats#E6g2Xnd4gd8fLrRJwcgMCL" rev="ci:document" typeof="qb:Observation">
              <span>urn:uuid:ea0d979d-de20-477c-b7cb-ad1270720302</span>
            </a>
          </li>
        </ul>
      </nav>
    </object>
  </head>
  <body about="" id="ErnvpObF5pl1Cw_K-9tX6K" typeof="bibo:Article">
    <h2>What about code reviews?</h2>
    <p>The <strong>fallow pattern</strong> is intended to <em>complement</em>, rather than <em>replace</em> code reviews, which are an essential part of the programming process. Rather, it is intended to enforce <a href="lexicon/conceptual-integrity" title="Conceptual Integrity" rel="dct:references">conceptual integrity</a>, good design decisions and best practices <em>during</em> the implementation process. In contrast, code reviews are:</p>
    <ul>
      <li>Asynchronous, often with the original programmer in absentia,</li>
      <li>Antagonistic, and</li>
      <li>Oriented toward <span title="buffer overflows, off-by-ones, brain farts and WTFs">discrete implementation flaws</span>.</li>
    </ul>
    <p>Furthermore, code reviews come in two flavours: <em>before</em> and <em>after</em> a merge. The former case is a terrific source for a productivity bottleneck, and in the latter case, any damage to the project's conceptual integrity is all but irrevocably done: I have yet to meet a software project manager who, with a schedule to keep, would green-light the rewrite of a component that <q>worked</q>, no matter how baroque, inefficient or ugly it was.</p>
    <h2>What about pair programming?</h2>
    <p><a rel="dct:references" href="http://agilemanifesto.org/" title="Manifesto for Agile Software Development">Agile</a> and specifically <a rel="dct:references" href="http://www.extremeprogramming.org/" title="Extreme Programming: A Gentle Introduction"><acronym title="eXtreme Programming">XP</acronym></a> proponents will immediately recognize this pattern as serving the same primary function as <a href="http://en.wikipedia.org/wiki/Pair_programming" title="Pair programming &#x2014; Wikipedia" rel="dct:references">pair programming</a>. My contention is that not only does the <strong>fallow pattern</strong> <em>achieve the same goal</em> as pair programming, it <em>lacks the significant drawbacks</em> of pairing, such as:</p>
    <ul>
      <li>Before you adopt pair programming en masse, you often need to <span class="parenthesis" title="and maintain">invest in</span> <span class="parenthesis" title="pairing stations">additional hardware</span> and/or use <span class="parenthesis" title="You can pry my { Vim, Emacs, TextMate, etc. } from my cold, dead hands.">special code editing software</span>;</li>
      <li>If you're the <em>driver</em>, you incur the frustration of someone constantly nagging you over trivial issues, or worse, <em>dictating code</em>;</li>
      <li>If you're the <em>navigator</em>, you incur the frustration of not being able to just type out the code yourself;</li>
      <li>If you're remote-pairing, you will eventually end up fighting over the same code block, if you aren't already fighting for control of the cursor;</li>
      <li>The path of least resistance degrades to bickering over such issues as the <span class="parenthesis" title="under_score or CamelCase?">naming of variables</span>, <span class="parenthesis" title="line length, braces and indentation">coding style</span> and <span class="parenthesis" title="iteration or recursion? for loop or map function? switch statement or series of if-elses?">semantically equivalent constructs</span>.</li>
    </ul>
    <p>Albeit the intent behind pair programming is perfectly noble, its all-or-nothing disposition yields diminishing returns. I know there have been studies that report mediocre productivity gains through pairing, but I have my doubts about their applicability to real-world situations. The <strong>fallow pattern</strong> can in some ways be compared to a sort of <em>Pairing Lite&#x2122;</em>, insofar as one programmer observes another and offers insight, <em>just not all the time</em>.</p>
    <p>Furthermore, it should be noted that those aforementioned trivial issues are certainly important for the conceptual integrity of the project, but are much better off being tackled in larger swaths, such as <em>just after</em> a visit from a fallow programmer.</p>
    <p>So then, how does one go about <a rel="dct:references xhv:next" href="the-programmer-in-fallow-an-implementation" title="The Programmer in Fallow: An Implementation">implementing this strategy</a>?</p>
  </body>
</html>
