<?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: An Implementation</title>
    <base href="https://doriantaylor.com/the-programmer-in-fallow-an-implementation"/>
    <link href="document-stats#E0B7zKi7e95A2qxV0eqYRI" 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: An Implementation"/>
    <link href="lexicon/#EzqXIsriaILFcWjXdS7FbI" rel="dct:audience" title="Software Developer"/>
    <link href="person/dorian-taylor#me" rel="dct:creator" title="Dorian Taylor"/>
    <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-an-implementation" 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-an-implementation" property="dct:identifier"/>
    <meta content="2008-10-23T17:14:50+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="2022-05-31T15:10:50+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: An Implementation" 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-in-contrast-with-incumbent-solutions" rev="dct:references" typeof="bibo:Article">
              <span property="dct:title">The Programmer in Fallow: In Contrast with Incumbent Solutions</span>
            </a>
          </li>
          <li>
            <a href="document-stats#E0B7zKi7e95A2qxV0eqYRI" rev="ci:document" typeof="qb:Observation">
              <span>urn:uuid:d01ef32a-2ede-4f79-8036-ab15747aa611</span>
            </a>
          </li>
        </ul>
      </nav>
    </object>
  </head>
  <body about="" id="EO5V48hgyiEaEX0MT9dAPL" typeof="bibo:Article">
    <p>Having <a rel="dct:references xhv:first" href="the-programmer-in-fallow-augmenting-productivity-through-selective-idleness" title="The Programmer in Fallow: Augmenting Productivity Through Selective Idleness">made a business case</a> for the <strong>fallow pattern</strong> and <a rel="dct:references xhv:prev" href="the-programmer-in-fallow-in-contrast-with-incumbent-solutions" title="The Programmer in Fallow: In Contrast with Incumbent Solutions">compared it to similar strategies</a>, it is appropriate to explore how such a thing might work.</p>
    <p><a rel="dct:references xhv:first" href="the-programmer-in-fallow-augmenting-productivity-through-selective-idleness" title="The Programmer in Fallow: Augmenting Productivity Through Selective Idleness">The principal purpose</a> of the <strong>fallow pattern</strong> is to <a href="lexicon/affordance" title="Affordance" rel="dct:references">afford</a> an environment for informal, up-front, <em>cooperative</em> peer review without <a rel="dct:references xhv:prev" href="the-programmer-in-fallow-in-contrast-with-incumbent-solutions" title="The Programmer in Fallow: In Contrast with Incumbent Solutions">the distractions or intensity</a> of pair programming. The motivation is to reinforce the <a href="lexicon/conceptual-integrity" title="Conceptual Integrity" rel="dct:references">conceptual integrity</a> and hygiene of the product, as well as expose programmers to each other's work. A secondary purpose is to formally guarantee programmers on-the-clock time for maintenance activities conducive to keeping a tidy operation, as well as additional valuable metrics.</p>
    <h2>Ground Rules and Assumptions</h2>
    <p>The <strong>fallow pattern</strong> <em>only</em> considers <a href="lexicon/programmer" title="Programmer" rel="dct:references">programmers</a>, and <em>only</em> during the <em>implementation phase</em> &#x2014; in which the code the programmers are producing is that which is <em>shipped</em> &#x2014; however that may occur in a larger methodology. It may well apply to other workers and processes, but this article does not address them.</p>
    <p>The <strong>fallow pattern</strong> assumes that the process of implementing production code is some variation on the following theme:</p>
    <blockquote id="EI2XqZlIrXpOHzi8ijyQSL">A conceptual <em>hopper</em>, a bug tracker for example, is loaded with tasks. These tasks are then queued and disseminated to each programmer, according to an <span class="parenthesis" title="domain expertise, difficulty level, urgency/dependency, etc.">arbitrary rule set</span>. When a programmer completes one of these tasks, the result is tested, likely generating more tasks which get fed back into the hopper and the process repeats. When more tasks are being removed from the hopper than those added, the project is likely advancing. When the hopper nears empty, the product approaches completion.</blockquote>
    <p>Necessary to the process is the decomposition of discrete coding tasks such that they be expected to take a single programmer less than <span class="parenthesis" title="note, business weeks can be four or even three days">one business week</span> to complete. As programming essentially <em>is</em> the fine-grained decomposition of tasks, this should be a natural process; it already occurs to some extent in Agile circles. The purpose of the week limit is to <em>punctuate</em> the development with off-time, eliciting a sense of completion. It is in this process that perhaps the <strong>fallow pattern</strong> is of greatest value. The decomposition technique itself will be addressed elsewhere.</p>
    <h2>Partitioning and Selecting Fallow Programmers</h2>
    <p>The fallow period ought to manifest as a contiguous block of either one half-day for very small teams or a full day. When another programmer completes a coding task, they switch positions, and the fallow programmer resumes a normal work-flow. The ratio of fallow programmers to coding programmers should be such that the former could comfortably visit each of the latter in a single period &#x2014; realistically about <var>1:3</var> to <var>1:6</var>. The total amount of time spent in fallow for any one programmer should not exceed 1/<var>P</var> where <var>P</var> is the aforementioned denominator.</p>
    <p>Fallow programmers should be selected on a semi-regular rotation, accounting for meetings, absences, dependencies and emergencies. It may be desirable, in some extraordinary circumstances, to not have a programmer in fallow. To avoid slippage, however, the discipline should be retained. Therefore, schedule the fallow period anyway, and if it turns out it isn't needed, the programmer in question can just resume coding.</p>
    <h2>The Visit</h2>
    <h2>The Report</h2>
    <aside role="note" id="EGmpQusfbVcduwzxDtc_UI">This segment is currently in progress (2008-10-29).</aside>
  </body>
</html>
