<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Agile | AkitaOnRails.com</title><link>https://akitaonrails.github.io/en/tags/agile/</link><description>Fabio Akita's blog — tech, career, and assorted geek topics. English edition.</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Mon, 19 Oct 2026 23:20:51 +0000</lastBuildDate><atom:link href="https://akitaonrails.github.io/en/tags/agile/index.xml" rel="self" type="application/rss+xml"/><item><title>ai-memory: Emergent Architecture and Malleable Software</title><link>https://akitaonrails.github.io/en/2026/06/14/ai-memory-emergent-architecture-malleable-software/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2026/06/14/ai-memory-emergent-architecture-malleable-software/</guid><pubDate>Sun, 14 Jun 2026 14:00:00 -0300</pubDate><description>&lt;p&gt;About three weeks ago I published the &lt;a href="https://akitaonrails.github.io/en/2026/05/23/i-built-memory-system-for-coding-agents-ai-memory/"&gt;post explaining ai-memory&lt;/a&gt;, my long-term memory system for coding agents. The core idea, for anyone who missed it: give Claude Code, Codex, OpenCode and the rest a shared brain that persists across sessions, a git-versioned wiki with FTS search, cross-agent handoff, and optional LLM consolidation. Every project isolated, running locally or self-hosted, without shipping your context to anybody&amp;rsquo;s cloud.&lt;/p&gt;
&lt;p&gt;So here&amp;rsquo;s the thing. In three weeks this little project grew in a way that deserves a post about the &lt;strong&gt;process&lt;/strong&gt; alone, because it became a living example of something I&amp;rsquo;ve been preaching for years: real software is grown, like a plant. Nobody builds good software piece by piece the way you snap a Lego together. Let me show you the numbers, and mostly the story they tell.&lt;/p&gt;</description><content:encoded><![CDATA[<p>About three weeks ago I published the <a href="/en/2026/05/23/i-built-memory-system-for-coding-agents-ai-memory/">post explaining ai-memory</a>, my long-term memory system for coding agents. The core idea, for anyone who missed it: give Claude Code, Codex, OpenCode and the rest a shared brain that persists across sessions, a git-versioned wiki with FTS search, cross-agent handoff, and optional LLM consolidation. Every project isolated, running locally or self-hosted, without shipping your context to anybody&rsquo;s cloud.</p>
<p>So here&rsquo;s the thing. In three weeks this little project grew in a way that deserves a post about the <strong>process</strong> alone, because it became a living example of something I&rsquo;ve been preaching for years: real software is grown, like a plant. Nobody builds good software piece by piece the way you snap a Lego together. Let me show you the numbers, and mostly the story they tell.</p>
<h2>The numbers, today<span class="hx:absolute hx:-mt-20" id="the-numbers-today"></span>
    <a href="#the-numbers-today" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>ai-memory has, in 24 days of life (from the first commit on May 21 until now):</p>
<ul>
<li><strong>482 commits</strong> on <code>main</code>, averaging 20 a day.</li>
<li><strong>26 people</strong> committed to the repo.</li>
<li><strong>10 Rust crates</strong> in the workspace.</li>
<li><strong>~62.7k lines</strong> of production Rust, plus <strong>~11k lines</strong> of tests in <code>tests/</code>, more than <strong>1,000 test functions</strong>, and 90 <code>#[cfg(test)]</code> modules scattered through the code.</li>
<li><strong>~19.7k lines</strong> of markdown documentation (<code>docs/</code>).</li>
<li><strong>70 pull requests</strong>, of which <strong>59 merged</strong> (84% acceptance).</li>
<li><strong>27 issues</strong>, <strong>100% closed</strong>.</li>
<li>We cut <code>v1.0.0</code> on June 12 and we&rsquo;re already on <code>v1.0.6</code>.</li>
</ul>
<p>Twenty-four days. Hold onto that number, because the interesting part isn&rsquo;t the final size, it&rsquo;s the way it got here.</p>
<h2>How it started: one of everything<span class="hx:absolute hx:-mt-20" id="how-it-started-one-of-everything"></span>
    <a href="#how-it-started-one-of-everything" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>ai-memory was born small and dumb on purpose. In the first two days I nailed down the whole skeleton: workspace bootstrap, MCP server, hook capture, cross-agent handoff, git wiki versioning, an LLM provider trait, embeddings. All of it running for <strong>one user, one machine, one workspace, one architecture</strong> (Linux, basically). No multi-user, no permissions, no scopes, no Windows or macOS support. It was my agent brain, on my machine, for me.</p>
<p>On day 3, when the <a href="https://github.com/akitaonrails/ai-memory"target="_blank" rel="noopener">first external contribution landed</a> (a fix from Lucas Oliveira for OpenAI-compatible provider URLs, PR #6), the project had <strong>102 commits and around 22.9k lines</strong> of source. Already the same 10 crates as today, but with a fraction of the functionality. It was a one-of-everything MVP that worked for me and nobody else.</p>
<p>And this is where most projects die, or worse, where most inexperienced programmers get it wrong.</p>
<h2>The Lego fallacy<span class="hx:absolute hx:-mt-20" id="the-lego-fallacy"></span>
    <a href="#the-lego-fallacy" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>There&rsquo;s a widespread belief, especially among people starting out, that you can design everything a piece of software <strong>will be</strong> before writing the first line. You sit down, plan the entire architecture, break it into neat little pieces with all the folders and layers and interfaces mapped out, and then build it piece by piece. When the last Lego brick clicks in, the software is done. Beautiful on paper.</p>
<p>In practice, it&rsquo;s the fastest road to rotting code. The sooner you crystallize a structure, the sooner it becomes a straitjacket. You predicted an elaborate permission system before having any users? Congrats, now you carry the weight of maintaining an abstraction nobody uses, and that&rsquo;s almost always wrong, because you designed it guessing the future instead of answering a real need. The inexperienced programmer over-engineers at the start, and no matter how much they plan, the result starts to rot fast, because they&rsquo;re solving problems that don&rsquo;t exist yet and getting wrong the ones that do.</p>
<p>I don&rsquo;t believe in software that finishes. I already wrote about this in <a href="/en/2026/03/01/software-is-never-done-4-projects-life-after-deploy-one-shot-prompt-myth/">&ldquo;Software Is Never Done&rdquo;</a>, and it connects straight to the original Agile methodologies, the real ones, before they turned into a corporate post-it ritual. Good software is a clay sculpture: malleable, always wet, that you keep adjusting and reshaping, and that never gets finished. It&rsquo;s clay you mold while it&rsquo;s being used. The Lego tower that one day clicks into place and is done is a fantasy.</p>
<h2>What the contributors built<span class="hx:absolute hx:-mt-20" id="what-the-contributors-built"></span>
    <a href="#what-the-contributors-built" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>And this is where the best part of open-sourcing it comes in. That one-of-everything MVP became a cross-platform, multi-user system because <strong>a lot of people</strong> put their hands on it. I want to thank them by name, because without these people the project would be a fraction of what it is:</p>
<p><a href="https://github.com/djalmajr"target="_blank" rel="noopener"><strong>Djalma Júnior</strong></a> drove a big chunk of the heavy architecture (multi-user, admin, cross-project recall), with 25 merged PRs. <a href="https://github.com/wblech"target="_blank" rel="noopener"><strong>wlech</strong></a> with dozens of commits. <a href="https://github.com/pedrofjr"target="_blank" rel="noopener"><strong>Pedro de Freitas Jr</strong></a> on embeddings and web fixes. <a href="https://github.com/mrpaiva"target="_blank" rel="noopener"><strong>Mauro Couto de Paiva</strong></a> and <a href="https://github.com/CaTeIM"target="_blank" rel="noopener"><strong>Gustavo Cateim</strong></a> drove a big part of the Windows support. <a href="https://github.com/pablowinck"target="_blank" rel="noopener"><strong>Pablo Winter</strong></a>, <a href="https://github.com/lucasliet"target="_blank" rel="noopener"><strong>Lucas Oliveira</strong></a> (author of the first external PR), and <strong>Said Rodrigues</strong>, among many others. Thank you so much, folks.</p>
<p>What those contributions added, the highlights:</p>
<ul>
<li><strong>Real Windows, macOS, and Linux support.</strong> What was Linux-only got macOS bash 3.2 compatibility, an NTFS file index for tracking inodes on Windows, and native per-platform hook commands.</li>
<li><strong>Frontend API (<code>/api/v1</code>) and a customizable web UI.</strong> It stopped being only MCP + CLI and got a real HTTP surface, with clickable wiki links and search by file path.</li>
<li><strong>Multi-user with attribution.</strong> A <code>users</code> table, writer/reader commands, and write attribution in the same SQL transaction as the data (<code>pages.author_id</code> + frontmatter).</li>
<li><strong>Multi-workspace and cross-project recall.</strong> Global search, links between wikis of different projects, and active-project isolation per session and per actor.</li>
<li><strong>More providers and more agents.</strong> Gemini, Copilot via OAuth, OpenAI-compat strict mode; plus support for Antigravity, Grok, and VS Code Copilot on top of the originals.</li>
<li><strong>Operational robustness.</strong> Checkpoint recovery, <code>reindex-from-wiki</code> to rebuild the index from the markdown, self-describing <code>_meta.md</code> manifests.</li>
</ul>
<p>Notice something: none of this was in the original plan. There was no original plan. Each of these features landed because someone needed it, opened an issue or a PR, and the structure gave way to make room. Multi-user wasn&rsquo;t predicted: it emerged.</p>
<h2>And only now did we stop to consolidate<span class="hx:absolute hx:-mt-20" id="and-only-now-did-we-stop-to-consolidate"></span>
    <a href="#and-only-now-did-we-stop-to-consolidate" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Here&rsquo;s the central point of the post. Over these three weeks, the code grew a little messy on purpose. When multi-user support came in, the logic for &ldquo;which workspace and project is this request aiming at&rdquo; ended up <strong>embedded right in the middle</strong> of several handlers in the MCP server, the web API, the admin, scattered and duplicated. Each spot resolved scope its own way. There was duplication. There was code that wasn&rsquo;t pretty. And that&rsquo;s fine, because it was working, and working for a lot of people.</p>
<p>Only <strong>after</strong> the software was already running on dozens of people&rsquo;s machines, across three operating systems, with real multi-user in production, did I stop and say: &ldquo;okay, now is a good time to refactor and rethink the internal wiring.&rdquo; The second-to-last big commit, <a href="https://github.com/akitaonrails/ai-memory"target="_blank" rel="noopener"><code>refactor: centralize scope auth and wiki consistency</code></a>, did exactly that, with 1,239 lines added and 249 removed, creating a central 601-line <code>ScopeResolver</code> and a consolidated <code>ActorContext</code>.</p>
<p>Look at the &ldquo;before.&rdquo; This scope-resolution snippet lived duplicated, with variations, across several methods:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-rust" data-lang="rust"><span class="line"><span class="cl"><span class="c1">// BEFORE: scope logic embedded, repeated in every handler
</span></span></span><span class="line"><span class="cl"><span class="kd">let</span><span class="w"> </span><span class="n">active</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">active_project</span><span class="p">.</span><span class="n">get_for</span><span class="p">(</span><span class="n">actor</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="k">if</span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nb">Some</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">explicit_project</span><span class="p">.</span><span class="n">map</span><span class="p">(</span><span class="kt">str</span>::<span class="n">trim</span><span class="p">).</span><span class="n">filter</span><span class="p">(</span><span class="o">|</span><span class="n">s</span><span class="o">|</span><span class="w"> </span><span class="o">!</span><span class="n">s</span><span class="p">.</span><span class="n">is_empty</span><span class="p">())</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="k">if</span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nb">Some</span><span class="p">((</span><span class="n">active_ws</span><span class="p">,</span><span class="w"> </span><span class="n">_</span><span class="p">))</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">active</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nb">Ok</span><span class="p">(</span><span class="nb">Some</span><span class="p">(</span><span class="n">pid</span><span class="p">))</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">reader</span><span class="p">.</span><span class="n">find_project</span><span class="p">(</span><span class="n">active_ws</span><span class="p">,</span><span class="w"> </span><span class="n">name</span><span class="p">.</span><span class="n">to_string</span><span class="p">()).</span><span class="k">await</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="k">return</span><span class="w"> </span><span class="nb">Ok</span><span class="p">((</span><span class="n">active_ws</span><span class="p">,</span><span class="w"> </span><span class="n">pid</span><span class="p">));</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="k">if</span><span class="w"> </span><span class="n">active</span><span class="p">.</span><span class="n">map</span><span class="p">(</span><span class="o">|</span><span class="p">(</span><span class="n">ws</span><span class="p">,</span><span class="w"> </span><span class="n">_</span><span class="p">)</span><span class="o">|</span><span class="w"> </span><span class="n">ws</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">Some</span><span class="p">(</span><span class="bp">self</span><span class="p">.</span><span class="n">workspace_id</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nb">Ok</span><span class="p">(</span><span class="nb">Some</span><span class="p">(</span><span class="n">pid</span><span class="p">))</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">self</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="p">.</span><span class="n">reader</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="p">.</span><span class="n">find_project</span><span class="p">(</span><span class="bp">self</span><span class="p">.</span><span class="n">workspace_id</span><span class="p">,</span><span class="w"> </span><span class="n">name</span><span class="p">.</span><span class="n">to_string</span><span class="p">())</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="p">.</span><span class="k">await</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="k">return</span><span class="w"> </span><span class="nb">Ok</span><span class="p">((</span><span class="bp">self</span><span class="p">.</span><span class="n">workspace_id</span><span class="p">,</span><span class="w"> </span><span class="n">pid</span><span class="p">));</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="k">return</span><span class="w"> </span><span class="nb">Err</span><span class="p">(</span><span class="n">McpError</span>::<span class="n">internal_error</span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="fm">format!</span><span class="p">(</span><span class="s">&#34;project &#39;</span><span class="si">{name}</span><span class="s">&#39; not found in the active or default workspace&#34;</span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nb">None</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="p">));</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nb">Ok</span><span class="p">(</span><span class="n">active</span><span class="p">.</span><span class="n">unwrap_or</span><span class="p">((</span><span class="bp">self</span><span class="p">.</span><span class="n">workspace_id</span><span class="p">,</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">project_id</span><span class="p">)))</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>And the &ldquo;after.&rdquo; The same resolution, now delegated to a single authority in the store crate:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-rust" data-lang="rust"><span class="line"><span class="cl"><span class="c1">// AFTER: one central resolver, one call
</span></span></span><span class="line"><span class="cl"><span class="k">fn</span> <span class="nf">scope_resolver</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nc">ScopeResolver</span><span class="o">&lt;</span><span class="nb">&#39;_</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="n">ScopeResolver</span>::<span class="n">new</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">.</span><span class="n">reader</span><span class="p">,</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">workspace_id</span><span class="p">,</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">project_id</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="p">.</span><span class="n">with_writer</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">.</span><span class="n">writer</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="p">.</span><span class="n">with_active_project</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">.</span><span class="n">active_project</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c1">// ... and each handler becomes this:
</span></span></span><span class="line"><span class="cl"><span class="bp">self</span><span class="p">.</span><span class="n">scope_resolver</span><span class="p">()</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="p">.</span><span class="n">resolve_current_or_project</span><span class="p">(</span><span class="n">explicit_project</span><span class="p">,</span><span class="w"> </span><span class="n">actor</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="p">.</span><span class="k">await</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="p">.</span><span class="n">map</span><span class="p">(</span><span class="n">ai_memory_store</span>::<span class="n">ResolvedScope</span>::<span class="n">as_tuple</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="p">.</span><span class="n">map_err</span><span class="p">(</span><span class="bp">Self</span>::<span class="n">scope_error</span><span class="p">)</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Three different methods that each used to carry 30 lines of embedded logic, with <code>lookup_ids</code>, workspace fallback, and their own error handling, collapsed into one call each. Alongside came the sibling commits: <code>harden multi-user admin auth boundaries</code> and <code>prevent scoped fallback bleed</code>. Centralizing permissions, workspace and user scope, and wiki consistency, all in one place, with a clear rule.</p>
<p>The detail that matters: <code>ScopeResolver</code> wasn&rsquo;t invented at the start of the project by guessing there&rsquo;d be multi-user one day. It was <strong>extracted</strong> from code that already existed, already worked, and had already shown, in practice, which patterns kept repeating. The abstraction came after the usage, not before. I let the structure emerge from the code, and only once it was obvious did I consolidate it.</p>
<h2>The right order: make it work, make it right, make it fast<span class="hx:absolute hx:-mt-20" id="the-right-order-make-it-work-make-it-right-make-it-fast"></span>
    <a href="#the-right-order-make-it-work-make-it-right-make-it-fast" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>This is the summary of everything. There&rsquo;s an old saying, attributed to Kent Beck, that I carry like a mantra: <strong>&ldquo;make it work, make it right, make it fast.&rdquo;</strong> Make it work, then make it right, then make it fast. In that order. Most inexperienced programmers want to make it &ldquo;right&rdquo; and &ldquo;fast&rdquo; before making it &ldquo;work,&rdquo; and so they invent rules with no code to justify the rule.</p>
<p>ai-memory followed the right order without me even thinking much about it. First I made it work for one person, simple scope. Then I made it work one feature at a time, refactoring and hardening the code along the way, but never falling into over-engineering and never rewriting from scratch to fit a preconceived structure. I let the current structures emerge from the code that was being added. That meant living with some duplication and some so-so code for a while, until that moment hit of &ldquo;okay, now it&rsquo;s time to refactor and rethink the wiring.&rdquo; And only now, with the software mature and in use, did I establish better patterns and rules for new code. Rules backed by real code, not by guesswork.</p>
<p>KISS, &ldquo;keep it simple,&rdquo; is about not solving a problem you don&rsquo;t have yet. It has nothing to do with writing little code. It&rsquo;s about letting architecture emerge from the code, not the other way around. You don&rsquo;t design the sculpture and pour the clay into the mold. You take the clay, start shaping, and the form appears as your hands work. The mold, if you ever need one, you build later, around the form that already exists.</p>
<p>Twenty-four days, 482 commits, 26 people, and none of them followed a diagram drawn on day 1. Because there was no diagram on day 1. And that&rsquo;s exactly why it worked.</p>
<p>ai-memory is open source and keeps changing every week: <a href="https://github.com/akitaonrails/ai-memory"target="_blank" rel="noopener">github.com/akitaonrails/ai-memory</a>. Want to help shape the next piece? There&rsquo;s an open issue waiting.</p>
]]></content:encoded><category>ai-memory</category><category>software-architecture</category><category>agile</category></item><item><title>Vibe Code: From Zero to Production in 6 DAYS | The M.Akita Chronicles</title><link>https://akitaonrails.github.io/en/2026/02/16/vibe-code-zero-to-production-in-6-days-the-m-akita-chronicles/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2026/02/16/vibe-code-zero-to-production-in-6-days-the-m-akita-chronicles/</guid><pubDate>Mon, 16 Feb 2026 14:19:56 +0000</pubDate><description>&lt;p&gt;&lt;strong&gt;SUBSCRIBE TO THE NEW NEWSLETTER:&lt;/strong&gt; &lt;a href="https://themakitachronicles.com/"target="_blank" rel="noopener"&gt;The M.Akita Chronicles&lt;/a&gt;
&lt;strong&gt;READ THE BLOG VERSION:&lt;/strong&gt; &lt;a href="https://blog.themakitachronicles.com/"target="_blank" rel="noopener"&gt;Blog&lt;/a&gt;
&lt;strong&gt;LISTEN ON SPOTIFY!!&lt;/strong&gt; &lt;a href="https://open.spotify.com/show/7MzG2UB7IAkC3GAwEXEIVD"target="_blank" rel="noopener"&gt;Podcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;ndash;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/frankmd/2026/02/screenshot-2026-02-14_18-59-53.png" alt="a ideia" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;On February 10, 2026, I posted the tweet above, just throwing out there something that had been on my to-do list for years, ever since I was publishing videos on YouTube. I never did it because I hate HTML/CSS, and having to build an email template was enough to keep me from starting. On top of that, doing yet another newsletter, which is just a boring list of links, didn&amp;rsquo;t motivate me.&lt;/p&gt;</description><content:encoded><![CDATA[<p><strong>SUBSCRIBE TO THE NEW NEWSLETTER:</strong> <a href="https://themakitachronicles.com/"target="_blank" rel="noopener">The M.Akita Chronicles</a>
<strong>READ THE BLOG VERSION:</strong> <a href="https://blog.themakitachronicles.com/"target="_blank" rel="noopener">Blog</a>
<strong>LISTEN ON SPOTIFY!!</strong> <a href="https://open.spotify.com/show/7MzG2UB7IAkC3GAwEXEIVD"target="_blank" rel="noopener">Podcast</a></p>
<p>&ndash;</p>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/frankmd/2026/02/screenshot-2026-02-14_18-59-53.png" alt="a ideia"  loading="lazy" /></p>
<p>On February 10, 2026, I posted the tweet above, just throwing out there something that had been on my to-do list for years, ever since I was publishing videos on YouTube. I never did it because I hate HTML/CSS, and having to build an email template was enough to keep me from starting. On top of that, doing yet another newsletter, which is just a boring list of links, didn&rsquo;t motivate me.</p>
<p>But that day I was already wrapping up my second vibe coding project, <a href="https://github.com/akitaonrails/FrankMD"target="_blank" rel="noopener">FrankMD</a>, and I think I figured out the main tricks and the methodology to build a complete product the right way. So a bunch of ideas started popping up. I dumped them all into this <a href="https://gist.github.com/akitaonrails/d2a7983fc4c839b8071f5d0babaadf94"target="_blank" rel="noopener">little document</a>.</p>
<p><a href="https://gist.github.com/akitaonrails/d2a7983fc4c839b8071f5d0babaadf94"target="_blank" rel="noopener"><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/frankmd/2026/02/screenshot-2026-02-16_12-40-04.jpg" alt="conceito original"  loading="lazy" /></a></p>
<p>I thought: what if I vibe coded not only the newsletter system&rsquo;s code, but also had part of the actual content generated by AI in a quirky way, in the form of commentators: me and a robot? And, of course, with Hitchhiker&rsquo;s Guide in mind, it had to be MARVIN, or rather, &ldquo;M.Arvin&rdquo; (so nobody hassles me about copyright).</p>
<p>Obviously, there would be a weekly email version and an archive blog. But since we were going all in, why not rewrite the whole newsletter as a podcast script? And since <a href="https://qwen.ai/blog?id=qwen3tts-0115"target="_blank" rel="noopener">Qwen3 TTS</a> recently came out, open source, why not train a LoRa with my voice (obviously, I have hundreds of hours of my voice on YouTube) and put together a fully automated podcast?</p>
<p>Finally, one of the things that would demotivate me is building a traditional Web Admin and having to log in manually to register news links and my comments. I knew I&rsquo;d get lazy and, at some point, burn out. There was only one solution: build a smarter bot I could talk to via <strong>DISCORD</strong>. That way I can quickly jump in, whether from my PC or my smartphone, without having to log into a separate system or anything. I already chat with people on Discord, so the friction would be zero.</p>
<p>So:</p>
<ul>
<li>Marvin Bot to manage all the content (the stuff I send in and the automated stuff, with comments and everything else)</li>
<li>An X.com monitor to check what I posted and grab it for the newsletter. Including the replies I give, which will become Q&amp;A!</li>
<li>Newsletter website to subscribe, unsubscribe, etc</li>
<li>Blog for newsletter archives and podcast transcripts (also with terms of service and privacy — yes, I&rsquo;m LGPD compliant!)</li>
<li>Automatic voice generator and podcast assembler that uploads automatically to make it available on Spotify</li>
<li>And also blog and email templates, with light and dark theme versions.</li>
</ul>
<p>You, an experienced programmer, without AI, how long would it take you to build all of that?</p>
<p>Well, I started on February 10. I finished everything on Sunday, February 15. And today, the 16th, the production jobs ran for the first time, which generated the newsletter, blog posts, podcast, Spotify upload, email delivery.</p>
<p>And it wasn&rsquo;t done the crappy way every amateur vibe coder does it:</p>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/frankmd/2026/02/screenshot-2026-02-16_11-37-20.jpg" alt="newsletter stats"  loading="lazy" /></p>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/frankmd/2026/02/screenshot-2026-02-16_11-37-27.jpg" alt="bot stats"  loading="lazy" /></p>
<p>Rails folks must be surprised: a project with a 1 to 1 test ratio! 1 line of tests for every 1 line of code: 100% coverage. And that&rsquo;s without counting a separate full end-to-end integration project (which I used to make sure production would be flawless).</p>
<p>All the strategies I&rsquo;ve learned over the years putting projects into production: security, scalability, durability, delivery guarantees without spamming duplicate emails, etc. I&rsquo;ll see later if I write more specific posts about some of the technical tricks.</p>
<p>I&rsquo;m not going to open source this project. I built it 100% custom for me, my workflow, and my style. It&rsquo;s not hard for another competent programmer to do the same thing with vibe code: if I pulled it off, anyone can. So just don&rsquo;t be lazy about thinking and doing. Honestly, I don&rsquo;t get how tech YouTubers still aren&rsquo;t launching 1 complete project in production, per video, for everyone to test and watch.</p>
<p>The screenshot also doesn&rsquo;t show the Qwen3-TTS server, which produces audio. That one is much simpler, a PyTorch server. Here I actually used Python. The most important part is the fine tuning of the model to generate voices exactly the way I wanted:</p>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/frankmd/2026/02/screenshot-2026-02-16_11-45-20.jpg" alt="qwen3 server"  loading="lazy" /></p>
<p>The blog is all <strong>Hugo/Hextra</strong>, same as this one. And my bot publishes there automatically.</p>
<h2>M.Arvin Bot<span class="hx:absolute hx:-mt-20" id="marvin-bot"></span>
    <a href="#marvin-bot" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>M.Arvin has a personality I spelled out exactly the way I wanted. And it&rsquo;s a Discord bot, so my workflow looks like this:</p>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/frankmd/2026/02/screenshot-2026-02-16_12-45-48.jpg" alt="bot url register"  loading="lazy" /></p>
<p>I just need to send a link with my comment (the same way I&rsquo;d do on X.com), or I can post directly on X and it&rsquo;ll pick it up the same way. Then it fetches the content, writes a little summary, does a small fact-check, and M.Arvin generates its own comment on top of mine.</p>
<p>I programmed it to respond to a bunch of commands to make my day-to-day easier. This is just a small part of it:</p>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/frankmd/2026/02/screenshot-2026-02-16_11-56-13.jpg" alt="bot help commands"  loading="lazy" /></p>
<p>Here&rsquo;s an example: I have control over how much AI it&rsquo;s using (it&rsquo;s pretty cheap):</p>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/frankmd/2026/02/screenshot-2026-02-16_11-57-07.jpg" alt="AI cost"  loading="lazy" /></p>
<h2>Deployment<span class="hx:absolute hx:-mt-20" id="deployment"></span>
    <a href="#deployment" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>In this post I&rsquo;m not going to go into too much detail, but one thing I spent a lot of time on, going through several discussions and versions with Claude Code, was the infrastructure architecture. And in the end it managed to give me a Deployment Guide that I was able to follow all the way through, knowing at a minimum it&rsquo;s set up the way I would have done it myself if I&rsquo;d built everything alone:</p>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/frankmd/2026/02/screenshot-2026-02-16_11-58-45.jpg" alt="topology"  loading="lazy" /></p>
<p>No software is guaranteed to be 100% perfect; this one shouldn&rsquo;t be either. Even with me reviewing for days, going through every step multiple times, there&rsquo;s always some bug I didn&rsquo;t anticipate. I &ldquo;think&rdquo; that, at least, everything I know usually causes problems in production, I &ldquo;think&rdquo; I managed to cover satisfactorily. If it were a human team, I would have pushed it to production in a worse state than what I reached with Claude.</p>
<p>Everything I could protect with Cloudflare, I configured. Every good practice for email/mailing, I followed. Every precaution against accidents I took (every deploy automated with Kamal) and every subscriber&rsquo;s email was encrypted with AES-256 in the database (even if they leaked by accident, the user data doesn&rsquo;t leak). I didn&rsquo;t implement profiling, cookies, or tracking pixels, nothing. Privacy was the focus.</p>
<p>Everything I could reduce costs on, I reduced; after all, I&rsquo;m paying out of pocket. So things like the RunPod GPU for generating the audio are serverless. I only spin it up at the moment of generation; it runs the whole process and then the machine shuts down. The server is all organized into a lightweight Docker image. All the AI models live on a separate network volume.</p>
<h2>Process Spoiler<span class="hx:absolute hx:-mt-20" id="process-spoiler"></span>
    <a href="#process-spoiler" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Later I plan to do a bigger post about my methodology, but it&rsquo;s very simple: treat Claude Code/Codex like a hard-working human programmer — one who&rsquo;s going to make lots of mistakes, but knows how to obey super explicit, direct, clear, unambiguous orders. My role is product manager, Tech Lead, or QA. It has to be all THREE roles.</p>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/frankmd/2026/02/screenshot-2026-02-16_12-06-47.jpg" alt="commits"  loading="lazy" /></p>
<p>In total, Claude Code made 201 commits. But these aren&rsquo;t normal commits; I figure that in a normal project with humans, each one would have been roughly <strong>150 Pull Requests</strong>.</p>
<p>Question for you folks doing sprints on real projects: how long does it take to get 150 user stories/bug fixes approved and in production on your actual project? How many user stories can you get done and approved (with QA and everything) in ONE week?</p>
<p>Here&rsquo;s an example of a commit/&ldquo;user story&rdquo;:</p>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/frankmd/2026/02/screenshot-2026-02-16_12-08-55.jpg" alt="commit example"  loading="lazy" /></p>
<p>When I was around commit 50, I was already thinking: &ldquo;It works already!&rdquo;* That&rsquo;s the stage where every content creator (who has never actually put real projects into production) would already be posting, saying: <em>&ldquo;I vibe coded it in 2 days&rdquo;</em>. In fact, in 2 days I already had the bulk of the functionality ready.</p>
<p>The other 4 days were:</p>
<ul>
<li>1 day for production deploy (when everything is planned ahead of time, all the contingencies already thought through, it&rsquo;s easy).</li>
<li>3 days just testing, writing automated/integration tests, generating and regenerating, exercising every step of every part, multiple times, and making adjustments, refactors, or even throwing away entire pieces to change them, because the tests showed it was worth it.</li>
</ul>
<p>That took from commit 50 to 200! And that&rsquo;s the part every vibe coder <strong>skips</strong>. To be fair, it&rsquo;s the part anyone, with or without AI, would skip. And that&rsquo;s why projects always go wrong and end up in production full of errors and obvious security holes.</p>
<blockquote>
  <p>Even after asking Claude Code to review security best practices and test coverage, multiple times. Then I opened Codex and asked it to do the same thing, and it still found more security holes and more missing tests, multiple times. Even after both of them did these checks several times, I still found more holes on my own that I had them fix. At no point was either of them able to find &ldquo;EVERYTHING&rdquo;. Nobody can, not even AI.</p>

</blockquote>
<h2>Conclusion<span class="hx:absolute hx:-mt-20" id="conclusion"></span>
    <a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Vibe Coding the right way has only one path: Extreme Programming!</p>
<p>Yes, all the &ldquo;boring&rdquo; and &ldquo;bureaucratic&rdquo; things every developer hates doing are what guarantees the AI will give you back a result acceptable for production:</p>
<ul>
<li>Pair Programming: you need to tell the AI to plan first and spell out exactly everything it&rsquo;s going to do, BEFORE starting. I review, I tweak, and only when I&rsquo;m satisfied do I let it go. I watch every single thing it does and, at the end, I tell it to fix whatever I think it missed.</li>
<li>Test-Driven Development: every feature must come with unit tests. Every bug fix needs regression tests.</li>
<li>Continuous Integration: every time it finishes implementing, you need to run the CI script to see if anything broke somewhere else. More than that: on the master branch, there are only commits with passing tests. I can revert at any point and the project runs.</li>
<li>Small Releases: I really liked this about Claude, even if I end up forgetting to tell it to commit a task and send it off to do another one, in the end it doesn&rsquo;t do that ugly <code>git add .</code> thing — no: it separates into 2 commits and describes each one the right way. On top of that, I pushed to production on Friday, and kept going Saturday and Sunday testing integration locally and in the production environment, to make sure there&rsquo;s none of that <em>&ldquo;it only works on my machine&rdquo;</em> stuff.</li>
<li>Coding Standard: I started with the bare minimum of technical requirements, but during development I had it refactor my way over and over again.</li>
</ul>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/frankmd/2026/02/screenshot-2026-02-16_12-21-22.jpg" alt="tech stack"  loading="lazy" /></p>
<p>Those are the main tasks that need to be done. Let me get ahead of it: &ldquo;Spec Driven Development&rdquo; isn&rsquo;t totally useless, but the structure doesn&rsquo;t matter: it&rsquo;s your text that counts.</p>
<p>It&rsquo;s the same thing as User Stories. Big deal, you wrote &ldquo;As the end user, I want that when I type X&hellip;, the system responds with Y&rdquo;. The format is NEVER important. What&rsquo;s important is HOW you wrote what goes in the middle. If you can&rsquo;t write, the AI won&rsquo;t know how to respond to you the way it should. I&rsquo;ll do another article just to show how terrible all of you are at writing.</p>
<p>The message is simple: Vibe Code works, in part.</p>
<blockquote>
  <p>What actually works is &ldquo;Senior Agile Vibe Coder&rdquo;</p>

</blockquote>
<p>I&rsquo;ll ask again: how long, without AI, would it take you to produce 150 user stories/bug fixes, in the scope I outlined at the beginning? All the way to production with everything tested? I doubt it would be in 6 days like I did it.</p>
]]></content:encoded><category>the-m-akita-chronicles</category><category>vibe-coding</category><category>agile</category></item><item><title>Estimates are Promises - A Better Metaphor</title><link>https://akitaonrails.github.io/en/2017/06/26/estimates-are-promises-a-better-metaphor/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2017/06/26/estimates-are-promises-a-better-metaphor/</guid><pubDate>Mon, 26 Jun 2017 17:44:00 -0300</pubDate><description>&lt;p&gt;If you didn&amp;rsquo;t know, I frequently answer questions over on Quora. &lt;a href="https://www.quora.com/profile/Fabio-Akita"target="_blank" rel="noopener"&gt;Follow me there&lt;/a&gt;; I&amp;rsquo;ve written almost 600 answers so far, many of them close to my longest posts here on the blog.&lt;/p&gt;
&lt;p&gt;One of the most popular ones answers the question &lt;a href="https://www.quora.com/What-is-the-hardest-thing-you-do-as-a-software-engineer/answer/Fabio-Akita"target="_blank" rel="noopener"&gt;&amp;ldquo;What is the hardest thing you do as a software engineer?&amp;rdquo;&lt;/a&gt;. I wrote something similar in Brazilian Portuguese in the post &lt;a href="http://www.akitaonrails.com/en/2013/08/23/off-topic-estimativas-sao-promessas-promessas-devem-ser-cumpridas"target="_blank" rel="noopener"&gt;&amp;ldquo;Estimativas são Promessas. Promessas devem ser cumpridas.&amp;rdquo;&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In a nutshell, you can never give an estimate that is &amp;ldquo;correct&amp;rdquo;. If you could, it would not be an &amp;ldquo;estimate&amp;rdquo;, it would be a &amp;ldquo;prediction&amp;rdquo;.&lt;/p&gt;</description><content:encoded><![CDATA[<p>If you didn&rsquo;t know, I frequently answer questions over on Quora. <a href="https://www.quora.com/profile/Fabio-Akita"target="_blank" rel="noopener">Follow me there</a>; I&rsquo;ve written almost 600 answers so far, many of them close to my longest posts here on the blog.</p>
<p>One of the most popular ones answers the question <a href="https://www.quora.com/What-is-the-hardest-thing-you-do-as-a-software-engineer/answer/Fabio-Akita"target="_blank" rel="noopener">&ldquo;What is the hardest thing you do as a software engineer?&rdquo;</a>. I wrote something similar in Brazilian Portuguese in the post <a href="http://www.akitaonrails.com/en/2013/08/23/off-topic-estimativas-sao-promessas-promessas-devem-ser-cumpridas"target="_blank" rel="noopener">&ldquo;Estimativas são Promessas. Promessas devem ser cumpridas.&rdquo;</a>.</p>
<blockquote>
  <p>In a nutshell, you can never give an estimate that is &ldquo;correct&rdquo;. If you could, it would not be an &ldquo;estimate&rdquo;, it would be a &ldquo;prediction&rdquo;.</p>

</blockquote>
<p>Let us assume we have neither precognition powers nor magic crystal balls to tell us the future.</p>
<p>To estimate something is to &ldquo;guess&rdquo; the value of something. It&rsquo;s always a guess, the same thing as a valuation. And like any guess, it can never be deemed &ldquo;correct&rdquo;: it&rsquo;s just a likely candidate among an infinite range of possible values.</p>
<blockquote>
  <p>There is zero connection between a guess and the outcome. Understand this simple truth: saying something can happen does not MAKE it happen.</p>

</blockquote>
<p>Estimating tomorrow&rsquo;s weather as rainy does not MAKE it rain. Estimating the result of the Super Bowl does not MAKE it happen. There is zero correlation between an estimate and the actual outcome.</p>
<p>I stated in those articles that <strong>&ldquo;Estimates are Promises&rdquo;</strong>. The intention was to provoke a reaction, since most people assume that estimates can never be promises, exactly because of what I just explained.</p>
<p>What makes a promise special is that once you promise something, you&rsquo;re expected to <strong>ACT</strong> on delivering it.</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/643/Skin-in-the-Game.png" alt="Skin in the Game"  loading="lazy" /></p>
<blockquote>
  <p>No one that has no &ldquo;skin in the game&rdquo; should give estimates.</p>

</blockquote>
<p>If you&rsquo;re not an active player in the game, you shouldn&rsquo;t be handing out guesses. The same way no one makes promises on someone else&rsquo;s behalf.</p>
<p>Can you actually make credible promises and keep them? You can, but first you have to understand a few more truths about reality.</p>
<p>You&rsquo;ve probably already seen plenty of articles explaining project management methodologies and techniques. Most of them manage to explain the Whats and the Hows, but as usual, they fail on the Whys.</p>
<p>Why do we need those methodologies? Why are they necessary? Why do they work? What hidden mechanisms do they set in motion?</p>
<p>What makes Agile techniques any different from your usual homeopathy or a budget self-help cliché?</p>
<h3>It&rsquo;s always all about Pareto<span class="hx:absolute hx:-mt-20" id="its-always-all-about-pareto"></span>
    <a href="#its-always-all-about-pareto" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>There is no such thing as a <strong>precise</strong> project scope. There is a limit to adding detail, and past it you just get <a href="http://www.investopedia.com/terms/l/lawofdiminishingmarginalreturn.asp"target="_blank" rel="noopener"><strong>diminishing returns</strong></a>.</p>
<p>The most precise level of detail a feature scope can have is the actual code of the feature. And this matters: the lines of code are <strong>NOT</strong> the outcome. What end users actually experience is the execution of that code at runtime.</p>
<p>The programming itself is the <strong>actual blueprint</strong>. The diagrams, the use cases, the user stories, and anything else that comes before the programming are just a draft, a mere sketch.</p>
<p>A naive architect or designer might think that detailed diagrams, use case documents, and fancy PowerPoint slides are worth as much as an engineering blueprint. They&rsquo;re worth less: they&rsquo;re the equivalent of a <strong>sketch on a napkin</strong>. Volatile and, in practice, mostly worthless.</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/644/Screenshot_from_2017-06-26_16-19-14.png" alt="Napkin Sketch"  loading="lazy" /></p>
<p><em>&ldquo;But isn&rsquo;t the programming the same as the construction phase itself, laying bricks on top of bricks?&rdquo;</em> <strong>NO</strong>, that&rsquo;s not what a programmer does. The bricklaying is the job of the language interpreter or the compiler that spits out the executable binary.</p>
<p>This is the metaphor that drives non-programmers crazy. In engineering, the construction itself is the most expensive and time-consuming part. In programming, the expensive part is the blueprint (writing the code), and the &ldquo;construction&rdquo; is trivial: just compiling, which is automatic.</p>
<p>In the same way, a project scope is just a set of sketches. We have to drop the notion that a <strong>&ldquo;complete&rdquo;</strong> scope will ever exist. There&rsquo;s no way to say &ldquo;100% of the scope&rdquo; or &ldquo;closed scope&rdquo;, because a software project scope is, by definition, always incomplete.</p>
<p>On top of that, I&rsquo;ll argue that roughly 80% of this so-called &ldquo;scope&rdquo;, what I prefer to call a sketch, is mostly worthless to most end-user activities: the admin section, the institutional pages nobody reads, convoluted sign-up flows, and so on.</p>
<p>This is why every feature list <strong>MUST</strong> be prioritized. You can usually get by with 20% of the features, which is roughly what people mean when they say &ldquo;MVP&rdquo; or &ldquo;minimum viable product&rdquo;. <strong>Release as early as you can</strong>, get user feedback, and refine the rest of the &ldquo;sketch&rdquo; you call a backlog.</p>
<p>So instead of aiming for an all-or-nothing proposition, hunting for stupidly complex equations to figure out a &ldquo;precise&rdquo; estimate of an incomplete sketch, assume you can actually deliver EARLY the first 20% that really matters and figure out the rest in iterations.</p>
<p>Oh yeah, this is what we call &ldquo;Agile&rdquo;, by the way.</p>
<h3>Agile is about Risk Management<span class="hx:absolute hx:-mt-20" id="agile-is-about-risk-management"></span>
    <a href="#agile-is-about-risk-management" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>People assume Agility is about managing the project management instruments themselves: the backlog, the rituals, the metrics.</p>
<p>Having Agile-like instruments doesn&rsquo;t make you Agile.</p>
<p>Being Agile is keeping <strong>Risk</strong> under control.</p>
<p>Instead of treating projects as an all-or-nothing endeavor, start thinking about them the way an investor thinks about a <strong>portfolio of stocks</strong>. You don&rsquo;t expect the whole portfolio to turn a profit; you assume some stocks will underperform. You just don&rsquo;t know which ones, so you dilute your risk.</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/645/635824249336942840-ThinkstockPhotos-152955327.jpg" alt="Portfolio stocks"  loading="lazy" /></p>
<p>Trying to predict the stock market is an exercise in futility.</p>
<p>Trying to predict the precise implementation of a project, especially the long ones, is also an exercise in futility.</p>
<p>So you have to deal with uncertainty the right way: by becoming <a href="https://www.amazon.com/Antifragile-Things-That-Disorder-Incerto/dp/0812979680"target="_blank" rel="noopener"><strong>Antifragile</strong></a>.</p>
<blockquote>
  <p>&ldquo;Some things benefit from shocks; they thrive and grow when exposed to volatility, randomness, disorder, and stressors and love adventure, risk, and uncertainty. Yet, in spite of the ubiquity of the phenomenon, there is no word for the exact opposite of fragile. Let us call it antifragile. Antifragility is beyond resilience or robustness. The resilient resists shocks and stays the same; the antifragile gets better&rdquo; - Nassim Taleb</p>

</blockquote>
<p>Instead of the preposterous exercise in futility of trying to predict uncertainty and random events, you do the reasonable thing: you assume Black Swans exist and you can&rsquo;t predict them. So you prepare for uncertainty the only reasonable way there is, by not trying to predict them.</p>
<p>Expose the small mistakes early and correct them often. Implementing everything in a black box and doing a Big Bang deployment is the easiest path to <strong>failure</strong>. Delivering often, exposing the bugs, and fixing them constantly is accepting that mistakes will happen and gaining strength along the way.</p>
<p><a href="https://www.amazon.com/Antifragile-Things-That-Disorder-Incerto/dp/0812979680"target="_blank" rel="noopener"><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/646/Antifragile-3.jpg" alt="Antifragile"  loading="lazy" /></a></p>
<h3>A Better Metaphor<span class="hx:absolute hx:-mt-20" id="a-better-metaphor"></span>
    <a href="#a-better-metaphor" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/642/steel_mill_blast_furnace_coking_coal_iron_ore_600.jpg" alt="Iron Ore Furnace"  loading="lazy" /></p>
<p>Imagine that you, whether the non-programmer client or the programmer who has no clue how to explain the process to that client, have an iron ore furnace to manage.</p>
<p>The thing about those furnaces is that if you heat them too much, they can explode in your face. If you cool them down too much, the ore hardens.</p>
<p>Your job is to add coal to the furnace, and you decide the rate. Too fast and it gets exploding hot. Too slow and you might put out the fire and lose your furnace.</p>
<p>Now try to estimate a constant intake of coal to keep the furnace in good shape.</p>
<p>You can&rsquo;t.</p>
<p>The easiest way out is to install a <strong>thermometer</strong> that tracks the furnace&rsquo;s current temperature.</p>
<p>You stay safe within a certain margin of temperatures, speeding up or slowing down the coal intake by checking the thermometer all the time.</p>
<p>ALL THE FREAKING TIME.</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/647/iron-4.jpg" alt="Iron Furnace"  loading="lazy" /></p>
<p>This is what Agile-based &ldquo;Velocity&rdquo; (or any of the fancier Monte Carlo simulations) actually is: a thermometer.</p>
<p>If the Velocity is too high, your team is probably working extra hours or delivering lower-quality code. This will backfire: either your team burns out too fast, or the code piles up <a href="http://www.akitaonrails.com/en/2017/06/22/the-economics-of-software-development"target="_blank" rel="noopener">technical debt</a> too fast and you won&rsquo;t be able to pay it back. Keep that pace and Velocity drops to a halt (the furnace explodes).</p>
<p>If the Velocity is too low, your team is slacking off, your backlog is a useless piece of shit no one can understand even after 10-hour meetings, or you already let Velocity run too high and now you&rsquo;re paying back technical debt, or your team is dead from burnout (fire extinguished).</p>
<p>You want to keep Velocity <strong>steady</strong>, constant. This is what being Agile is all about: keeping an eye on the thermometer and responding.</p>
<h3>The Triforce of Projects<span class="hx:absolute hx:-mt-20" id="the-triforce-of-projects"></span>
    <a href="#the-triforce-of-projects" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/650/ironTriangle.jpg" alt="Iron Triangle"  loading="lazy" /></p>
<p>Welcome to the Iron Triangle of Project Management.</p>
<blockquote>
  <p>Repeat after me: if I want to lock down the time, the cost, and the scope, <strong>I am a moron</strong>.</p>

</blockquote>
<p>Repeat again.</p>
<p>You should lock down time and cost. If you&rsquo;ve read this far, you know you can never lock down &ldquo;scope&rdquo;; you can only make it fat, and not necessarily more valuable. This is why I always say the very definition of a Product Manager or Product Owner is to be the bastion of ROI (Return on Investment).</p>
<p>Now, why?</p>
<p>Because the Iron Triangle has the following corollary:</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/651/320px-Project-triangle.svg.png" alt="Project Triangle"  loading="lazy" /></p>
<ul>
<li>If you want it fast and good, it can&rsquo;t be cheap</li>
<li>If you want it fast and cheap, it can&rsquo;t be good</li>
<li>If you want it good and cheap, it can&rsquo;t be fast</li>
</ul>
<p>This is a Law, you can&rsquo;t fiddle with it. Pick your choice.</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/652/keep-calm-and-make-your-choice-9.png" alt="Make your choice"  loading="lazy" /></p>
<h3>How do I keep Promises then?<span class="hx:absolute hx:-mt-20" id="how-do-i-keep-promises-then"></span>
    <a href="#how-do-i-keep-promises-then" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Now, with those 3 truths in hand:</p>
<ul>
<li>You can&rsquo;t have your lunch and eat it too (cheap, fast, and good)</li>
<li>You&rsquo;re managing the temperature of the furnace</li>
<li>You only need 20% of the &ldquo;sketch&rdquo; you call &ldquo;scope&rdquo;</li>
</ul>
<p>Yes, any experienced developer can give you a &ldquo;ballpark&rdquo; estimate. A ballpark goes like this:</p>
<ul>
<li>1 month (maybe 1 month and a half, but definitely less than 2)</li>
<li>3 months (it&rsquo;s more than 2 months, less than 6 months)</li>
<li>6 months (it&rsquo;s more than 4 months, less than 9 months)</li>
<li>it&rsquo;s more than 6 months, probably less than 1 year</li>
</ul>
<p>Don&rsquo;t even try to granulate more than that. It&rsquo;s useless.</p>
<p><strong>Lock the time.</strong> And <strong>lock the cost</strong> (that being the number of developers times the hourly rate times the total amount of estimated hours). That&rsquo;s it.</p>
<p>Now jot down what the client calls &ldquo;scope&rdquo; as user stories in a backlog and have him prioritize it.</p>
<p>Start the iterations. After each one, release to a staging environment. Non-programmers, beware: ALWAYS make sure whichever programmer you hire delivers testable versions of the finished stories to a publicly available URL you can actually visit and test.</p>
<p>If your programmer refuses to do that or gives excuses: <strong>FIRE HIM</strong>.</p>
<p>If your programmer or company or whatever promises you a &ldquo;closed scope&rdquo; price, promises to do everything, and you believe them, you&rsquo;re too gullible.</p>
<p>Do you think it&rsquo;s funny to play this stupid game of <em>&ldquo;I&rsquo;ll pretend to tell you that I know the truth and you will pretend that you believe what I tell you.&rdquo;</em></p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/648/e433998315b73da036e65884b67eba43.jpg" alt="Actions and Words"  loading="lazy" /></p>
<p>No serious professional has time for stupid games, and the only honest thing anyone can say about any software project is: <em>&ldquo;given my experience I believe the ballpark for this kind of project is within X months, given the Y and Z assumptions&rdquo;.</em></p>
<p>You don&rsquo;t have to believe him. You just need to start checking the thermometer. Any non-programmer can assess the quality of the delivery based on the frequent deliveries of the prioritized features.</p>
<p><em>&ldquo;But what if after 2 weeks I don&rsquo;t like the results?&rdquo;</em> Easy: <strong>FIRE HIM</strong>.</p>
<p>And sometimes &ldquo;firing&rdquo; isn&rsquo;t even the right word. Sometimes the relationship is difficult and the best thing to do is to part ways.</p>
<p>You have to accept losing 2 weeks, or any short period of time, as part of Risk Management. It&rsquo;s better to accept losing 2 weeks of your project budget than to blindly trust someone for 6 months and lose the entire project budget and then some.</p>
<p>Pareto again: Agility is about Risk Management. You accept that losing 20% of your budget is okay, and you play with that. And that&rsquo;s fine, because you only really need a bit more than 20% of the sketchy scope you have.</p>
<p>See what I just did with the Math here?</p>
<p>We stop playing the pretend game and actually manage the project&rsquo;s risks. You collaborate on the equivalent thermometer, which combines the prioritized backlog (the scale) and the velocity (the temperature), and you keep an eye on the partial deliveries in the staging environment.</p>
<h3>Conclusion<span class="hx:absolute hx:-mt-20" id="conclusion"></span>
    <a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>So yes, Estimates should be taken as seriously as Promises. You can give reasonable Estimates as long as you can manage the Risks and the Client accepts the rules of the game: there is no &ldquo;closed, complete scope&rdquo;, priorities first, and testing and accepting delivered features every week.</p>
<p>The idea behind Promises is that you have to <strong>MANAGE</strong> in order to meet them. The best way to do that is to frequently stop, re-assess, and keep going. It feels like you&rsquo;re wasting time, but you&rsquo;re actually saving yourself from wasting it.</p>
<p>If you don&rsquo;t have skin in the game, back off.</p>
<p>Velocity is meant to be kept steady, at a predictable rate. Use the variance as a sign of being too fast or too slow, adjust the other variable, measure again, and go. Just like a furnace thermometer.</p>
<p>There are several versions of &ldquo;thermometers&rdquo;, from Joel Spolsky&rsquo;s <a href="https://www.joelonsoftware.com/2007/10/26/evidence-based-scheduling/"target="_blank" rel="noopener">Evidence Based Scheduling</a> all the way to fancy Monte Carlo simulations and other stochastic processes (they are all thermometers, and NOT estimation tools).</p>
<p>What stops you from doing that is using the wrong metaphors and the wrong references.</p>
<p>Instead of hunting for equivalent metaphors in construction, factories, and other &ldquo;hard&rdquo;-ware assemblies, look elsewhere, where you&rsquo;ll find other &ldquo;soft&rdquo;-ware processes.</p>
<p>Musicians have deadlines. Painters have deadlines. Choreographers have deadlines. Sports have deadlines. Research laboratories have deadlines. How do they meet them? By constantly checking the current state, comparing it to the goals, assessing whether what they&rsquo;re doing is actually working, and changing what doesn&rsquo;t.</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/649/conducting_starwars.jpg" alt="Conducting Star Wars"  loading="lazy" /></p>
<p>Hollywood has deadlines. They have far worse variables to control than any software project you&rsquo;ll ever run into, and they still manage to deliver. And profit.</p>
<p>And accept that you can&rsquo;t control every variable, so stop trying. Think of it as the financial markets. One day you have <a href="https://web.archive.org/web/20170705022520/https://motherboard.vice.com/en_us/article/zme78x/why-the-value-of-ethereum-has-skyrocketed-4000-percent"target="_blank" rel="noopener">Ethereum skyrocketing 4,000%</a> and the very next day you have it <a href="http://www.cnbc.com/2017/06/22/buyers-beware-lessons-from-the-ethereum-flash-crash.html"target="_blank" rel="noopener">falling down to ashes in a flash-crash</a>.</p>
<p>Don&rsquo;t aim to become resistant or resilient. Prepare to become Antifragile.</p>
]]></content:encoded><category>agile</category><category>management</category><category>software-engineering</category><category>off-topic</category></item><item><title>The Economics of Software Development</title><link>https://akitaonrails.github.io/en/2017/06/22/the-economics-of-software-development/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2017/06/22/the-economics-of-software-development/</guid><pubDate>Thu, 22 Jun 2017 10:56:00 -0300</pubDate><description>&lt;p&gt;The software development community is boiling nowadays with so many options all at once. You have dozens of active and very good languages such as Go, &lt;a href="https://akitaonrails.github.io/elixir"&gt;Elixir&lt;/a&gt;, Clojure. Dozens of very good frameworks, both in the back-end and front-end including React, Elm. Dozens of sound methodologies from good old Agile stuff all the way to Continuous Deployment with microservices.&lt;/p&gt;
&lt;p&gt;Now, you&amp;rsquo;re a small tech startup or even a small team in a big corporation. How to even start?&lt;/p&gt;</description><content:encoded><![CDATA[<p>The software development community is boiling nowadays with so many options all at once. You have dozens of active and very good languages such as Go, <a href="/elixir">Elixir</a>, Clojure. Dozens of very good frameworks, both in the back-end and front-end including React, Elm. Dozens of sound methodologies from good old Agile stuff all the way to Continuous Deployment with microservices.</p>
<p>Now, you&rsquo;re a small tech startup or even a small team in a big corporation. How to even start?</p>
<p>And the recommendation is: do the smallest thing that works first. Always. Of course, avoid &ldquo;quick and dirty&rdquo; as much as you can. But don&rsquo;t get paranoid and over-engineer too much.</p>
<p>Over-engineering is as expensive as doing things &ldquo;dirty&rdquo;.</p>
<h3>Add &ldquo;Time&rdquo; to your equation<span class="hx:absolute hx:-mt-20" id="add-time-to-your-equation"></span>
    <a href="#add-time-to-your-equation" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>What most people do very wrong is disregarding the variable of &ldquo;Time&rdquo;.</p>
<p>Everybody goes to tech conferences or read fancy blog posts, or watch flashy screencasts. Their wrong conclusion is: <em>&ldquo;Netflix uses it, therefore it should be good for me, because I want to become Netflix&rdquo;</em>.</p>
<p>The wrong assumption is that Netflix, or Google, or Facebook, or Spotify, is a static system that always functioned the way they advertise it today.</p>
<p>People forget that every unicorn company had a <strong>day-1</strong>. And on day-1 they did not use microservices. They did not have React.js. They did not have Go or Elixir. Some of them didn&rsquo;t even have good programmers to begin with. Netflix started as a VHS renting service, remember that? Google started off in a dorm-room with off-the-shelf hardware components assembled in a <a href="http://www.complex.com/pop-culture/2013/02/50-things-you-didnt-know-about-google/lego-server-rack"target="_blank" rel="noopener">Lego-based rack</a>.</p>
<p>You are a fan of some celebrity. That celebrity has a Lamborghini car. So you want to be like that celebrity one day. What do you do? Do you buy the same Lamborghini he has?</p>
<p>If you are that stupid, the only thing you will end up with is a HUGE debt to pay.</p>
<p>Stop envying the rich guy&rsquo;s Lamborghini.</p>
<h3>(Technical) Debt<span class="hx:absolute hx:-mt-20" id="technical-debt"></span>
    <a href="#technical-debt" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>This is neither a new term nor a new theme. Every decision you make in programming is a <strong>compromise</strong> between what the &ldquo;future-ideal&rdquo; should be and what you can actually do right now. Loan to buy the equivalent Lamborghini too soon, and you will have to deal with an unpayable (Technical) Debt. You will stall, you will stop, and you will do nothing but pay that debt from now on.</p>
<p>You want to &ldquo;code faster&rdquo; therefore you skip writing automated tests, because you assume it will slow you down. And you&rsquo;re right. Test-driven development doesn&rsquo;t make you fast at first, and it isn&rsquo;t supposed to. It protects your future self from your present self, and keeps you from piling up Technical Debt.</p>
<p>Again, you forget the &ldquo;Time&rdquo; variable.</p>
<p>You write and deliver fast for the 1st month. After the first version is deployed, now you will be obliged to start paying the debt. Your productivity will slow down. Regression bugs will show up. Every new feature you try to add breaks something in unexpected ways. Because you don&rsquo;t have automated tests, you will keep fixing the same things many times over. Debt will catch up, and you will pay. One way or the other.</p>
<p>Minimal test suites are like <strong>Insurance</strong>. You don&rsquo;t need it right now, on day-1. But on day-100 you will be so glad you have it.</p>
<p>Doing too much microservices on day-1 is debt. It feels great that you&rsquo;re doing that fancy thing you read in a blog post. On day-100, with your 3 people team and a dozen microservices, from now on you will do nothing but pay the accumulated debt, with <strong>Interest</strong>. Every new microservices deployment breaks your system. And of course you didn&rsquo;t add monitoring, you didn&rsquo;t add integrated tests. So every time you code something, something else unexpectedly breaks.</p>
<p>Enjoying that early Lamborghini now?</p>
<h3>The Mythical Man-Month<span class="hx:absolute hx:-mt-20" id="the-mythical-man-month"></span>
    <a href="#the-mythical-man-month" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Philip Calçado writes very good posts and presentations about microservices in the right way. If you&rsquo;re serious about that subject I strongly recommend that you read his posts, such as his <a href="http://philcalcado.com/2017/06/11/calcados_microservices_prerequisites.html"target="_blank" rel="noopener">&ldquo;Prerequisites&rdquo;</a> post or his <a href="https://www.infoq.com/news/2017/05/economics-microservices"target="_blank" rel="noopener">&ldquo;Economics&rdquo;</a> presentation.</p>
<p>He correctly remembers Fred Brooks&rsquo; <strong>The Mythical Man-Month</strong>. I urge developers to read this small book. It&rsquo;s uncanny how the entire industry is still repeating the very same mistakes Brooks reports in his book from projects in the 60&rsquo;s!</p>
<p>To me, microservices is a by-product of tech companies with too many developers. Once you break through the 5-developers team a &ldquo;monolithic&rdquo; system with poor organization and few automated tests can become cumbersome to deal with. So the consequence is the desire to break it down. You make 2 teams and 2 microservices and coordinate. And the teams start to isolate, and play the finger-pointing game when new bugs are reported (<em>&ldquo;it&rsquo;s the other team&rsquo;s microservice&rsquo;s fault&rdquo;</em>).</p>
<p>That&rsquo;s <a href="http://www.melconway.com/Home/Conways_Law.html"target="_blank" rel="noopener">Conway&rsquo;s Law</a> if you do it wrong:</p>
<blockquote>
  <p>Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization&rsquo;s communication structure.</p>

</blockquote>
<p>Also in play is another chapter in Brooks&rsquo; book: The <a href="http://wiki.c2.com/?SecondSystemEffect"target="_blank" rel="noopener">Second System Effect</a>. Every developer, tech startup, has to assume that the first version of anything is not the best design. And the second system (the first big rewrite) is <strong>the most dangerous</strong> system you will write. As Brooks states, it goes like this:</p>
<blockquote>
  <p>An architect&rsquo;s first work is apt to be spare and clean. He knows he doesn&rsquo;t know what he&rsquo;s doing, so he does it carefully and with great restraint.</p>

</blockquote>
<blockquote>
  <p>As he designs the first work, frill after frill and embellishment after embellishment occur to him. These get stored away to be used &ldquo;next time.&rdquo; Sooner or later the first system is finished, and the architect, with firm confidence and a demonstrated mastery of that class of systems, is ready to build a second system.</p>

</blockquote>
<blockquote>
  <p>This second is the most dangerous system a man ever designs. When he does his third and later ones, his prior experiences will confirm each other as to the general characteristics of such systems, and their differences will identify those parts of his experience that are particular and not generalizable.</p>

</blockquote>
<blockquote>
  <p>The general tendency is to over-design the second system, using all the ideas and frills that were cautiously sidetracked on the first one. The result, as Ovid says, is a &ldquo;big pile.&rdquo;</p>

</blockquote>
<p>Then, what happens? The CEO, the board, the investors, or whatever, start doing the wrong thing: hiring more and more people. Loan more and more. Instead of paying the debts they end up making more debt. They fell for what Brooks reported in the first chapter and what gives the name to the book: The Mythical Man-Month.</p>
<blockquote>
  <p>Adding manpower to a late software project makes it later.</p>

</blockquote>
<blockquote>
  <p>Complex programming projects cannot be perfectly partitioned into discrete tasks that can be worked on without communication between the workers and without establishing a set of complex interrelationships between tasks and the workers performing them.</p>

</blockquote>
<blockquote>
  <p>Therefore, assigning more programmers to a project running behind schedule will make it even later. This is because the time required for the new programmers to learn about the project and the increased communication overhead will consume an ever increasing quantity of the calendar time available.</p>

</blockquote>
<p>Again, it&rsquo;s foregoing the sense of the &ldquo;Time&rdquo; variable. And confusing &ldquo;debt&rdquo; for &ldquo;investment&rdquo;.</p>
<p>First of all, do yourself a favor and <a href="http://amzn.to/2sFbkWq"target="_blank" rel="noopener">read the goddamn book</a>, twice.</p>
<h3>Do Agile right! And no, it&rsquo;s not Kanban!<span class="hx:absolute hx:-mt-20" id="do-agile-right-and-no-its-not-kanban"></span>
    <a href="#do-agile-right-and-no-its-not-kanban" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>If there is one good thing the whole Lean noise generated is the notion of &ldquo;Minimum Viable Product&rdquo; or MVP. People call it &ldquo;prototype&rdquo;. Some call it &ldquo;launching Beta&rdquo; or simply &ldquo;version 1.0&rdquo;. Doesn&rsquo;t matter. It&rsquo;s the realization that you don&rsquo;t know much at the beginning so overengineering on the first version is a waste of time. Lean is about controlling &ldquo;waste&rdquo;, so we do the minimal that works, gauge results and work from there.</p>
<p>The cynical will say that any prototype that reaches production will never die. And they&rsquo;re not wrong.</p>
<p>The balance is to not do the &ldquo;quick and dirty&rdquo; version. That&rsquo;s what we have Agile techniques for. Do the minimal, organize the minimal. That&rsquo;s why we have object-oriented design patterns, from GoF to DDD. You don&rsquo;t need to do EVERY pattern, and that&rsquo;s exactly what &ldquo;overengineering&rdquo; means. But you can do the minimal monolith that will allow you to evolve later.</p>
<p>People criticize Ruby on Rails for not being organized &ldquo;enough&rdquo;. <a href="https://apotonick.wordpress.com/2015/09/05/the-only-alternative-to-a-rails-monolith-are-micro-services-bullshit/"target="_blank" rel="noopener">Nick Sutterer</a>, the creator of <a href="https://github.com/trailblazer/trailblazer"target="_blank" rel="noopener">Trailblazer</a>, has a good point.</p>
<p>Rails done wrong is bad. The conclusion should NOT be: <em>&ldquo;let&rsquo;s do microservices&rdquo;</em> though. That jump in faith is idiotic and makes no sense for all the reasons I mentioned above.</p>
<p><em>&ldquo;Let&rsquo;s do proper Agile stuff and proper object-oriented stuff&rdquo;</em> should be the initial answer.</p>
<p>And by &ldquo;Agile&rdquo; forget about idiotic post-its, idiotic numerology-based estimation equations (this is a whole post in itself, because story points and velocity are useful, but adding Montecarlo and other Gaussian-based stuff are not). The only &ldquo;Agile&rdquo; things you should be concerned about are the <a href="http://www.extremeprogramming.org/"target="_blank" rel="noopener">Extreme Programming (XP) techniques</a>, <strong>including</strong> Iteration-based timeboxes.</p>
<p>You <strong>MUST</strong> do timeboxes. Stop, re-assess, change directions, and then keep going. The model of &ldquo;Pull&rdquo; is only reasonable when your direction is very, very clear, written in stone and unchangeable, like in a factory production line! (Which is exactly where the concept of Pull, and Lean, was actually born!)</p>
<p>Iterations, like automated tests, are like Insurance. You can never avoid all waste, but you can minimize it. You can afford to throw away an Iteration-worth of work. After the iteration you measure the results, and throw it away if necessary, changing direction in the process. Throwing useless stuff away is as important as adding new stuff. If you just add, you have a <a href="https://en.wikipedia.org/wiki/Compulsive_hoarding"target="_blank" rel="noopener">hoarding disorder</a>!</p>
<p>If in doubt, do XP. Yes, it feels more &ldquo;difficult&rdquo;, and Kanban is &ldquo;simpler&rdquo; to explain. Now, is that a good reason?</p>
<h3>Forget about Raw Performance when you DON&rsquo;T need it!<span class="hx:absolute hx:-mt-20" id="forget-about-raw-performance-when-you-dont-need-it"></span>
    <a href="#forget-about-raw-performance-when-you-dont-need-it" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Another problem is choosing languages or framework because of performance.</p>
<p>If you&rsquo;re in the web development business, this is a huge WASTE.</p>
<p>Understand this truth: your servers will IDLE most of the time. And if you feel like using your web app is slow, the slowness comes from the POOR programming you did, not from the language. And no good language will rescue a bad programmer. I always say that if performance was that important, we should all be doing C.</p>
<p>Most of what you serve in HTTP-based apps, be it user-readable content, be it API GET results, can be <strong>CACHED</strong>! If you&rsquo;re not using a <a href="http://www.akitaonrails.com/2015/08/25/small-bites-adicionando-um-cdn-ao-seu-site-a-forma-facil"target="_blank" rel="noopener">CDN</a>, you&rsquo;re doing it wrong.</p>
<p>Yeah, yeah, yeah, you think you&rsquo;re building the next Spotify. You&rsquo;re not, at least not 99% of you. And the 1% doing custom engineering, with custom techniques and custom stack, successfully: you&rsquo;re the 1%. Actually I&rsquo;d say you&rsquo;re a fraction of the 1%. Do not assume that what you do is good for the rest of the population.</p>
<p>90% of what most small companies and solo web developers need is just a Shopify account and a vanilla Wordpress installation. And that&rsquo;s it.</p>
<blockquote>
  <p>Are you doing infrastructure development like building custom components to Docker, Kubernetes, Terraform? Command-line tools? Daemons? Then choose GO.</p>

</blockquote>
<blockquote>
  <p>Are you doing embedded libraries? Maybe the next generation OpenSSL? Drivers? Then choose RUST.</p>

</blockquote>
<blockquote>
  <p>Are you doing mobile development? Then don&rsquo;t have a lot of choice: do Swift for iOS, do Kotlin/Java for Android. Or do React Native for simpler apps.</p>

</blockquote>
<blockquote>
  <p>Are you really doing the next Whatsapp? The next Waze? The next Snap? You have hundreds or thousands of users in need of long-lived connections over unreliable network doing broadcasts of messages? Or you&rsquo;re building the next evolution of distributed NoSQL databases? Or anything that actually has the proper meaning of &ldquo;Distributed&rdquo; in its definition? Then choose ELIXIR.</p>

</blockquote>
<blockquote>
  <p>Are you doing a CRUD based web application? Go RAILS and never look back.</p>

</blockquote>
<blockquote>
  <p>Are you doing all of the above? Use all the alternatives then. And I hope you have the budget, because you need a big team.</p>

</blockquote>
<h3>Conclusion<span class="hx:absolute hx:-mt-20" id="conclusion"></span>
    <a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>The Economics only makes sense when you consider the day-1. Do not forget the &ldquo;Time&rdquo; variable. It makes all the difference.</p>
<p>You will always get Debt to pay. So be smart in which kind of debt you choose. Because you will have to pay it back eventually.</p>
<p>Again, read Brooks. He said it decades ago: <a href="http://worrydream.com/refs/Brooks-NoSilverBullet.pdf"target="_blank" rel="noopener">THERE IS NO SILVER BULLET</a>. Don&rsquo;t bullshit yourself. A new language, a new framework, a new architecture. None of those will save you.</p>
<p>In any tech endeavor, code is not the only thing to worry about. I would go as far as to say that in a tech startup, code is only 20% of the problem. A tech startup is just a company, like any other. If you&rsquo;re the founder or CEO, you have to deal with all the remaining 80%: marketing, accounting, human resources, legal, etc. It&rsquo;s already difficult enough without your tech team getting you unwanted Technical Debt, the unneeded Lamborghini, that you won&rsquo;t be able to pay.</p>
<p>You can start humble on day-1. Keep evolving, continuously. This is the core of any Agile or Lean process: <a href="https://www.graphicproducts.com/articles/what-is-kaizen/"target="_blank" rel="noopener">KAIZEN</a>. Choose smart debts, pay them a small bit at a time, continuously. It&rsquo;s the same reasoning as getting a loan in the bank.</p>
<blockquote>
  <p>Netflix day-7,200 is NOT your day-1.</p>

</blockquote>
<blockquote>
  <p>Facebook day-4,800 is NOT your day-1.</p>

</blockquote>
<blockquote>
  <p>Google day-6,809 is NOT your day-1.</p>

</blockquote>
<blockquote>
  <p>Be humble. Deliver fast. Pay your Debts. Keep evolving continuously. Stop believing in fairy tales and silver bullets.</p>

</blockquote>
]]></content:encoded><category>software-engineering</category><category>agile</category><category>software-architecture</category><category>off-topic</category></item><item><title>Moving away from Pivotal Tracker to Fulcrum. Good Enough.</title><link>https://akitaonrails.github.io/en/2016/08/10/moving-away-from-pivotal-tracker-to-fulcrum-good-enough/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2016/08/10/moving-away-from-pivotal-tracker-to-fulcrum-good-enough/</guid><pubDate>Wed, 10 Aug 2016 18:30:00 -0300</pubDate><description>&lt;p&gt;I&amp;rsquo;ve been blogging about how I am building my own internal infrastructure. Already reported on how I moved from &lt;a href="http://www.akitaonrails.com/en/2016/08/03/migrando-para-o-gitlab-sim-vale-a-pena"target="_blank" rel="noopener"&gt;GitHub and Travis to GitLab&lt;/a&gt;, then how we moved from &lt;a href="http://www.akitaonrails.com/en/2016/08/09/moving-away-from-slack-into-rocket-chat-good-enough"target="_blank" rel="noopener"&gt;Slack to Rocket.chat&lt;/a&gt;, but the original first move is the subject of this article.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been using Pivotal Tracker since 2010 up to 2015 and this is because I believe it is far superior to Trello and other &lt;a href="http://www.akitaonrails.com/en/2009/12/16/off-topic-cuidado-com-o-kanban-butt"target="_blank" rel="noopener"&gt;glorified to-do lists&lt;/a&gt; out there.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/Codeminer42/cm42-central"target="_blank" rel="noopener"&gt;&lt;img src="https://raw.githubusercontent.com/Codeminer42/cm42-central/master/doc/cm42-central-screenshot.png" alt="Cm42-Central" loading="lazy" /&gt;&lt;/a&gt;&lt;/p&gt;</description><content:encoded><![CDATA[<p>I&rsquo;ve been blogging about how I am building my own internal infrastructure. Already reported on how I moved from <a href="http://www.akitaonrails.com/en/2016/08/03/migrando-para-o-gitlab-sim-vale-a-pena"target="_blank" rel="noopener">GitHub and Travis to GitLab</a>, then how we moved from <a href="http://www.akitaonrails.com/en/2016/08/09/moving-away-from-slack-into-rocket-chat-good-enough"target="_blank" rel="noopener">Slack to Rocket.chat</a>, but the original first move is the subject of this article.</p>
<p>I&rsquo;ve been using Pivotal Tracker since 2010 up to 2015 and this is because I believe it is far superior to Trello and other <a href="http://www.akitaonrails.com/en/2009/12/16/off-topic-cuidado-com-o-kanban-butt"target="_blank" rel="noopener">glorified to-do lists</a> out there.</p>
<p><a href="https://github.com/Codeminer42/cm42-central"target="_blank" rel="noopener"><img src="https://raw.githubusercontent.com/Codeminer42/cm42-central/master/doc/cm42-central-screenshot.png" alt="Cm42-Central"  loading="lazy" /></a></p>
<h3>The Cost Conundrum<span class="hx:absolute hx:-mt-20" id="the-cost-conundrum"></span>
    <a href="#the-cost-conundrum" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>As with all the other reports, let me start with the cost argument. Pivotal Tracker is <a href="http://www.pivotaltracker.com/why-tracker/pricing/"target="_blank" rel="noopener">priced</a> based on the number of users.</p>
<p>If you have a small team and not many outside clients, a basic 10-user plan would be enough, and you will pay just USD 420 a year. Just pay it already.</p>
<p>If you have up to 25 users, it&rsquo;s still not so expensive, and you will pay USD 1,800 a year. Well worth it.</p>
<p>Even if you have 50, the maximum plan, you will pay USD 3,600 a year. More than that and you have to contact them directly.</p>
<p>The cost is not prohibitive and if you can pay, I advise you to do so.</p>
<p>In my case, the strategy is to get full control over our data and knowledge, which is why I&rsquo;d rather have ownership of the service.</p>
<p>And because Fulcrum was &ldquo;almost&rdquo; good enough, I decided to try it out and see if we could evolve it over time. And I think that even though we are still very far from the full-featured Tracker, what we have is enough for most of our projects.</p>
<p>Let me say it again: you most probably won&rsquo;t benefit if you&rsquo;re a small team. Pivotal Tracker is, to this day, the best project management tool for software development teams, and you should definitely try it out first, get used to its workflow (as I will explain below), and then decide if you want to take control and install the open source alternative instead.</p>
<p>There is the factor of cost, but it&rsquo;s not the driving incentive for this move.</p>
<h3>The Important Features<span class="hx:absolute hx:-mt-20" id="the-important-features"></span>
    <a href="#the-important-features" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Doing some research I found the Fulcrum project. It&rsquo;s a very simple, very bare-bones Rails project that mimics Tracker&rsquo;s most important features.</p>
<p>Any competent project management tool <strong>must</strong> have at the very least 4 pillars:</p>
<ul>
<li>Stories (with discussion threads, assets uploading, tags, Epics organization, and searchability)</li>
<li>Proper numeric estimation (story points, proportional size for stories)</li>
<li>Time-boxed Sprints (short, fixed periods of time)</li>
<li>Velocity (the actual productivity of a particular team in a particular project)</li>
</ul>
<p>Any tool that has all of the above is useful.</p>
<p>Fulcrum itself has almost everything. We made an internal fork of the project and we started adding some of the missing features. We&rsquo;ve been using it for around 1 year already and it&rsquo;s been good enough for our routine. There are still a few bugs and missing features that we intend to add.</p>
<p>If you&rsquo;re interested, I am making this fork <a href="https://github.com/Codeminer42/cm42-central"target="_blank" rel="noopener">publicly available</a> to conform to the Affero GPL license.</p>
<p>Any contribution is welcome.</p>
<h3>On Proper Agile Management<span class="hx:absolute hx:-mt-20" id="on-proper-agile-management"></span>
    <a href="#on-proper-agile-management" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Now sidetracking a bit, I&rsquo;d like to explain why this kind of tool (Tracker-like) is the best compared to what I called &ldquo;glorified to-do lists&rdquo;.</p>
<p>The principles are very simple:</p>
<ul>
<li>Every project must start with the most complete backlog possible (uncertainty is at its highest in the beginning, and details will be missing, but it&rsquo;s important to have a vision of what &ldquo;minimally complete&rdquo; means and the order of importance of each story, a proper &ldquo;priority&rdquo;).
<ul>
<li>The level of detail doesn&rsquo;t matter. A story must have enough information that any developer in the team can implement the required tasks. Otherwise it must be tagged &ldquo;blocked&rdquo; so the Product Owner knows that (s)he has to add more details and no developer will touch it until the tag is removed.</li>
</ul>
</li>
<li>All stories <strong>must be estimated</strong> (more on that on the next section). The unit really doesn&rsquo;t matter. You can think in hours, in fractions of a day or for what it really is: a proportion. A story sized &ldquo;2&rdquo; should be roughly half the complexity of a Story sized &ldquo;4&rdquo;. That&rsquo;s it. Even &ldquo;blocked&rdquo; stories should receive sizes.</li>
<li>Projects must be divided into time-boxed, fixed-sized Sprints, so the team has the opportunity to reassess frequently. This is where estimation can be refined, where more levels of detail in the stories should be required.</li>
<li>Bugs can&rsquo;t have any numeric estimation. They will serve to slow down the team&rsquo;s velocity and they&rsquo;re an indication of poorly made deliveries.</li>
<li>Velocity is the actual amount of story points delivered by the end of a Sprint.
<ul>
<li>The total amount of story points of all stories in the project backlog divided by the team&rsquo;s velocity will give a roughly estimated &ldquo;End Date&rdquo;. This is important, because this is how you know when certain groups of features will be delivered over time, and this is what the Product Owner needs to know to prioritize stories, simplify stories or even cut down unnecessary features.</li>
<li>The Product Owner&rsquo;s sole responsibility is to be accountable for the Return on Investment of the implemented features. And the only way to measure cost-benefit is to know &ldquo;how much&rdquo; a feature will &ldquo;cost&rdquo; in terms of story points divided by velocity.</li>
</ul>
</li>
</ul>
<p>What the tool will expose:</p>
<ul>
<li>If a backlog has a lot of &ldquo;blocked&rdquo; stories or if it has many stories delivered without acceptance, it&rsquo;s a symptom of a Product Owner not doing the work.</li>
<li>If the velocity varies too much between sprints, it&rsquo;s a symptom of either poorly written stories (and therefore developers having a hard time understanding what to do), or developers not concentrating on their work and delivering inconsistent results.</li>
<li>Inconsistent velocities with many bugs in each sprint is the symptom of developers not doing code with proper quality (automated tests to avoid regressions for example).</li>
<li>A &ldquo;bug&rdquo; is not the same thing as the Product Owner changing their mind on a story and rejecting. The team must not implement undocumented changes. Acceptance is tied to what the story says. The Product Owner must change his mind before the story is implemented or create a new story to add the change (and therefore add more cost to the project, there is no free lunch).</li>
<li>Stories in the &ldquo;Chilly Bin&rdquo; (in Fulcrum, or &ldquo;Ice Box&rdquo; in Tracker) are &ldquo;wish-lists&rdquo; and they will never be implemented until the Product Owner moves the story to the backlog.</li>
<li>Velocity should be roughly the same between sprints. Peaks or valleys in the velocity are symptoms of a problem that needs to be addressed by the next sprint. This is how a project evolves for the better over time.</li>
</ul>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/557/big_Cm-Fulcrum_-_CM42_Central.png" alt="Velocity"  loading="lazy" /></p>
<h3>On Estimation<span class="hx:absolute hx:-mt-20" id="on-estimation"></span>
    <a href="#on-estimation" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Many people worry too much about &ldquo;proper estimation&rdquo; to the point of creating so much tension that developers start screaming about <a href="http://www.akitaonrails.com/en/en/2013/10/07/off-topic-desmontando-o-noestimates/"target="_blank" rel="noopener">&ldquo;no estimates&rdquo;</a>. This is nuts. This is why &ldquo;estimation&rdquo; is a different word than &ldquo;prediction&rdquo;, one is uncertain, a ballpark, the other is exact.</p>
<blockquote>
  <p>There is no such thing as a &ldquo;correct&rdquo; estimation.</p>

</blockquote>
<p>I would argue that in many projects if the stories are minimally described (meaning that a developer is able to implement what is written), we could estimate all of them to be size &ldquo;1&rdquo; and forget about it.</p>
<p>We run 2 or 3 sprints (usually one sprint should be one work-week - 5 days of at most 8 hours, no more, no less) and measure how many stories were delivered. And this is the velocity.</p>
<p>Now we can see how many stories we have until the end of the project and divide by this velocity. And this is how many weeks it will take to finish the project.</p>
<blockquote>
  <p>There is no need for consensus based estimation.</p>

</blockquote>
<p>Consensus on estimation is usually a waste of time. Estimation is merely the realization that it&rsquo;s difficult to write down every story to be the exact same size, so we add proportions to them (A story size 2 is half the size of a story size 4).</p>
<p>But if a project is 3 months or larger, the less the proportions matter (unless you do the anti-practice of having heavily disproportionate stories, some size 1 and many sized 5, 8 or even 10, for example). But if you stay closer to less than size 5 for every story, then the larger the project, the less the individual estimates matter. Velocity will average out the differences over time.</p>
<p>Then the task of the Project Manager, Product Owner, the team in general, is to keep an eye on the total amount of points divided by this velocity, which derives the estimated end date of the project. And everybody can negotiate, beforehand, which stories can be done, which cannot, and change priorities, remove stories or simplify stories.</p>
<blockquote>
  <p>Don&rsquo;t waste time trying to create formulas to derive estimation consensus.</p>

</blockquote>
<p>If you manage the Velocity then you can manage the entire project. This is the core of all proper Agile methodologies. Everything else is an accessory to that end.</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/556/big_Heroleads_-_CM42_Central.png" alt="Velocity"  loading="lazy" /></p>
<p>Trying to artificially increase velocity is one of the many sins. You can&rsquo;t. It&rsquo;s better to invest time in adding more details to a story, or to simplify a story or to decide that some stories are just not needed to deliver a proper product in the end.</p>
<p>Monte Carlo simulations, Six Sigma techniques, Kanban concepts, none of them matter. All traditional industry techniques are meant for production lines in factories, where the time of each task is well defined and you manage the variance, the exception. It&rsquo;s a Gaussian, Normal world.</p>
<p>In software projects, or any craft and research, you manage expectations on results based on milestones and cutting excesses and uncertainties. It&rsquo;s a Pareto world, one where there is no such thing as an &ldquo;average&rdquo;, there is no medium, no variance.</p>
<p>In a <strong>Pareto</strong> world everything is interconnected, not statistically independent (a requirement for Gaussians). It&rsquo;s therefore 80/20: where 20% of the project will yield 80% of the results, where 20% of the scope can be cut down.</p>
<p>Anything that is not <strong>&ldquo;statistically independent&rdquo;</strong> (like tossing a coin) can&rsquo;t be averaged out, can&rsquo;t fit in a Normal distribution. It&rsquo;s most possibly a Pareto, Power Law, Zipf, Exponential, or even a Poisson, not a Gaussian. Software parts are all intertwined in a network, they are not independent events, they can&rsquo;t be randomly rearranged, they are not easily interchangeable.</p>
<h2>Conclusion<span class="hx:absolute hx:-mt-20" id="conclusion"></span>
    <a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>This article is very short and I can expand each bullet point above into its own, very long, article. Let me know in the comments section if I should, and which points raise more questions.</p>
<p>I&rsquo;ve been refining those techniques for the <a href="http://www.akitaonrails.com/agile"target="_blank" rel="noopener">past 10 years</a>, and at least 5 within the constraints of a tool such as Tracker. And I believe I was able to come up with the minimal set of principles that lead to proper management, not superstition, fantasy or delusion you see everywhere nowadays.</p>
<p>Projects suffer when the recommendations above are not followed:</p>
<ul>
<li>Product Owners don&rsquo;t perform their responsibilities: they fail to add details to stories, they neglect delivered features and don&rsquo;t test them properly, they don&rsquo;t participate.</li>
<li>Backlogs are incomplete, lacking detail, lacking estimation, lacking prioritization.</li>
<li>Developers don&rsquo;t properly start and finish their tasks with proper code quality.</li>
<li>Time is wasted in bikeshedding instead of delivery.</li>
</ul>
<p>Our fork of Fulcrum, called <a href="https://github.com/Codeminer42/cm42-central"target="_blank" rel="noopener">&ldquo;Central&rdquo;</a>, is not perfect by any means, but it works well enough and gives us enough control to keep adding features that make our routine more comfortable, and we are just getting started.</p>
<p>I hope this technique and tool is valuable to more teams and I&rsquo;d love to hear feedback from anyone.</p>
]]></content:encoded><category>agile</category><category>rails</category><category>reviews</category></item><item><title>[Off-Topic] Compilation: "Processes and Methodologies Won't Help You!"</title><link>https://akitaonrails.github.io/en/2015/01/07/off-topic-coletanea-processos-e-metodologias-nao-vao-te-ajudar/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2015/01/07/off-topic-coletanea-processos-e-metodologias-nao-vao-te-ajudar/</guid><pubDate>Wed, 07 Jan 2015 14:33:00 -0200</pubDate><description>&lt;p&gt;This is one of the oldest subjects I explore on this blog. Many of the principles and philosophies behind it are in my infamous (and long) &lt;a href="http://www.akitaonrails.com/en/off-topic/"target="_blank" rel="noopener"&gt;Off-Topic posts&lt;/a&gt;. Since it&amp;rsquo;s many years of posts, I decided to compile what I consider the foundations of what everyone needs to know about this long bikeshedding called &amp;ldquo;processes and methodologies.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Start simple with the article that lends its title to this compilation, &lt;a href="http://www.akitaonrails.com/en/2013/05/24/processos-e-metodologias-nao-vao-te-ajudar"target="_blank" rel="noopener"&gt;Processes and Methodologies Won&amp;rsquo;t Help You&lt;/a&gt;, which I published on Abril&amp;rsquo;s blogs in 2011. It&amp;rsquo;s the starting point for understanding what processes, methodologies, and procedures are.&lt;/p&gt;</description><content:encoded><![CDATA[<p>This is one of the oldest subjects I explore on this blog. Many of the principles and philosophies behind it are in my infamous (and long) <a href="http://www.akitaonrails.com/en/off-topic/"target="_blank" rel="noopener">Off-Topic posts</a>. Since it&rsquo;s many years of posts, I decided to compile what I consider the foundations of what everyone needs to know about this long bikeshedding called &ldquo;processes and methodologies.&rdquo;</p>
<p>Start simple with the article that lends its title to this compilation, <a href="http://www.akitaonrails.com/en/2013/05/24/processos-e-metodologias-nao-vao-te-ajudar"target="_blank" rel="noopener">Processes and Methodologies Won&rsquo;t Help You</a>, which I published on Abril&rsquo;s blogs in 2011. It&rsquo;s the starting point for understanding what processes, methodologies, and procedures are.</p>
<p>Next, go straight to the more recent <a href="http://www.akitaonrails.com/en/2014/09/28/off-topic-agile-a-verdade-por-tras-do-metodo"target="_blank" rel="noopener">Agile: the Truth Behind the Method</a> and understand once and for all: no methodology or magic recipe will save incompetent or bad-character members of any team. After trying to improve attitude and training without success, you only rid the team of these elements one way: by replacing the members. Nothing saves a <a href="http://www.akitaonrails.com/en/2009/03/30/off-topic-net-negative-producing-programmer"target="_blank" rel="noopener">Net Negative Producing Programmer</a>.</p>
<p>Many are left with that feeling of &ldquo;waste&rdquo;, like <strong>&ldquo;man, but we&rsquo;ve invested so much in him, what if we invest a little more?&rdquo;</strong>. That comes from failing to understand that <a href="http://www.akitaonrails.com/en/2007/08/19/a-falcia-do-custo-perdido"target="_blank" rel="noopener">Sunk Cost</a> is better than increasing your Opportunity Cost.</p>
<p>On the same &ldquo;Agile is Dead&rdquo; theme, or, more explicitly, &ldquo;Agile-by-bikeshedding-consultants is Dead&rdquo;, it&rsquo;s worth recalling the old theme of <a href="http://www.akitaonrails.com/en/2009/11/04/off-topic-o-problema-das-credenciais"target="_blank" rel="noopener">The Problem of Credentials</a> and <a href="http://www.akitaonrails.com/en/2009/09/12/off-topic-a-argumenta--o-atrav-s-da-intimida--o"target="_blank" rel="noopener">Argumentation through Intimidation</a>. The credential guy has the easiest job in the world: he shows up at your company to implement &ldquo;practices&rdquo; he doesn&rsquo;t really practice. And trying to implement it at one or half a dozen places is ridiculously the same as nothing.</p>
<p>When it &ldquo;seems&rdquo; to work, he puts the case on his portfolio list as a &ldquo;success.&rdquo; When it goes wrong, he says &ldquo;you didn&rsquo;t do it right.&rdquo; Terrible.</p>
<p>Forget pompous names and different schools of methodologies. Everything starts from exactly the same principle: <a href="http://www.akitaonrails.com/en/2008/12/16/off-topic-m-todo-cient-fico-vs-cargo-cult"target="_blank" rel="noopener">Scientific Method vs Cargo Cult</a>, where it&rsquo;s clear no one understands the main thing about the method: it doesn&rsquo;t pick sides or root for any team.</p>
<p><strong>The phrase &ldquo;it&rsquo;s proven to work because I&rsquo;ve seen it working in 100 places&rdquo; doesn&rsquo;t exist.</strong></p>
<p>Anyone who uses a phrase similar to this is clearly an amateur. By Karl Popper&rsquo;s principle of <a href="http://en.wikipedia.org/wiki/Falsifiability"target="_blank" rel="noopener">&ldquo;Falsifiability&rdquo;</a>, instead of trying to prove something works, it&rsquo;s better to try to disprove that it works. Because it doesn&rsquo;t matter how many tons of evidence we manage to accumulate that something is true, a single piece of evidence that makes it false is enough to destroy any hypothesis. That&rsquo;s why the scientific body is robust, not because we have mountains of evidence in its favor, but because what we&rsquo;ve accumulated so far hasn&rsquo;t been proven false.</p>
<p>But human beings are fallible. Our non-rational brain, a leftover of our long evolution, is still exceptional at seeing patterns where none exist, as I describe in <a href="http://www.akitaonrails.com/en/2008/03/01/off-topic-somos-matematicamente-ignorantes"target="_blank" rel="noopener">We Are Mathematically Ignorant</a> and <a href="http://www.akitaonrails.com/en/2013/06/21/processos-metodologias-e-o-cerebro-humano"target="_blank" rel="noopener">Processes, Methodologies and the Human Brain</a>.</p>
<p>The most accepted hypothesis is that we tend to confuse correlation with causation. Because &ldquo;A&rdquo; came before &ldquo;B&rdquo;, we tend to think that &ldquo;A&rdquo; caused &ldquo;B&rdquo;, and most of the time this isn&rsquo;t true. The world is more random than we&rsquo;d like to accept. Shit just happens.</p>
<p>This leads to the pseudo-intellectuals who want to push their &ldquo;Southbeach Diet&rdquo; of the day and become mere trolls or haters, as I describe in <a href="http://www.akitaonrails.com/en/2013/10/30/off-topic-matematica-trolls-haters-e-discussoes-de-internet"target="_blank" rel="noopener">Math, Trolls, Haters and Internet Discussions</a>. They create more and more diets, as I talk about in <a href="http://www.akitaonrails.com/en/2013/10/07/off-topic-noestimates-debunked/"target="_blank" rel="noopener">#noEstimates Debunked</a>, <a href="http://www.akitaonrails.com/2013/05/31/desmistificando-o-metodo-kanban"target="_blank" rel="noopener">Demystifying the Kanban method</a>, and <a href="http://www.akitaonrails.com/en/2009/12/16/off-topic-cuidado-com-o-kanban-butt"target="_blank" rel="noopener">Watch Out for Kanban-butt</a>.</p>
<p>And all of that I linked above is just the introduction to the most important thing of all: be skeptical all the time, nothing is automatically true, no matter who&rsquo;s saying it. And as Carl Sagan would say: <em>&ldquo;extraordinary claims DEMAND extraordinary evidence.&rdquo;</em> In the end, we always come back to the theme of <a href="http://www.akitaonrails.com/en/2007/08/23/off-topic-inimigos-da-razo"target="_blank" rel="noopener">Enemies of Reason</a>.</p>
<p>The problem is: if none of this works, what do you do? It&rsquo;s much easier to say what&rsquo;s wrong than to say what to do. The problem was never the recipe. Everything comes down to the decisions you make.</p>
<p>Each decision brings consequences, which lead to new dilemmas, which require more decisions. As Neo would say in The Matrix Reloaded: &ldquo;The problem is choices.&rdquo; There simply is no magic recipe, diet, or methodology that will make you make better decisions all the time.</p>
<p>There&rsquo;s a desire to seek an external tool, an external source of &ldquo;validation,&rdquo; one of the <a href="http://web.archive.org/web/20141029201958/http://startupi.com.br/2013/03/a-maioria-disse-que-usaria-meu-produto-vai-dar-certo-nao/"target="_blank" rel="noopener">worst words</a> invented in recent times. The catch is that decisions carry <strong>consequences</strong>, and most people simply wish they didn&rsquo;t have to bear them. That&rsquo;s the root of the problem. This is the <a href="http://web.archive.org/web/20150110212840/http://startupi.com.br/2014/02/o-dilema-da-nova-geracao-empreender-ou-arranjar-um-emprego/"target="_blank" rel="noopener">comfort zone</a>: <a href="http://web.archive.org/web/20150404181526/http://startupi.com.br/2013/07/zona-de-conforto-sair-as-ruas-nao-e-a-unica-solucao/"target="_blank" rel="noopener">everyone complains and wants things</a>, but no one wants to make decisions, much less face their consequences.</p>
<p>The only way to make better decisions is to study and train, as much as possible, all the time, continuously. <a href="http://www.akitaonrails.com/en/2014/05/02/off-topic-carreira-em-programacao-codificar-nao-e-programar"target="_blank" rel="noopener">Experience isn&rsquo;t doing the same thing for 10 years straight</a>, but becoming very good at 10 different things over those 10 years. <a href="http://www.akitaonrails.com/en/2013/10/31/traducao-carta-para-um-jovem-programador-considerando-uma-startup"target="_blank" rel="noopener">Following the trend won&rsquo;t help you</a>, just like following magic diets. They leave you a bit thinner at the beginning, and soon the rebound comes and leaves you heavier than you were before. That&rsquo;s why Processes and Methodologies Won&rsquo;t Help You.
</content></p>
]]></content:encoded><category>agile</category><category>management</category><category>philosophy</category><category>off-topic</category></item><item><title>[Small Bites/Off-Topic] "People over Processes" — what are "People"?</title><link>https://akitaonrails.github.io/en/2014/11/21/small-bites-off-topic-people-over-processes-o-que-sao-people/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2014/11/21/small-bites-off-topic-people-over-processes-o-que-sao-people/</guid><pubDate>Fri, 21 Nov 2014 16:06:00 -0200</pubDate><description>&lt;p&gt;This phrase shows up a lot in the agile world. The correct reading of the 4 values of the Agile Manifesto is right there in what it says itself: &amp;ldquo;That is, while there is value in the items on the right, we value the items on the left more.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The trouble is using the phrase as an excuse. It turns into &amp;ldquo;we don&amp;rsquo;t need processes, just let people choose,&amp;rdquo; or &amp;ldquo;people choose, so we&amp;rsquo;ll have consensus on everything,&amp;rdquo; the fallacy of the &lt;a href="https://akitaonrails.github.io/en/2011/04/25/off-topic-mea-culpa-organizacoes-democraticas-nao-funcionam"&gt;democratic organization&lt;/a&gt;. At bottom, it&amp;rsquo;s a way to justify not understanding the value of having processes.&lt;/p&gt;</description><content:encoded><![CDATA[<p>This phrase shows up a lot in the agile world. The correct reading of the 4 values of the Agile Manifesto is right there in what it says itself: &ldquo;That is, while there is value in the items on the right, we value the items on the left more.&rdquo;</p>
<p>The trouble is using the phrase as an excuse. It turns into &ldquo;we don&rsquo;t need processes, just let people choose,&rdquo; or &ldquo;people choose, so we&rsquo;ll have consensus on everything,&rdquo; the fallacy of the <a href="/en/2011/04/25/off-topic-mea-culpa-organizacoes-democraticas-nao-funcionam">democratic organization</a>. At bottom, it&rsquo;s a way to justify not understanding the value of having processes.</p>
<p>Agile, derived from Lean, is entirely based on processes. And the pillar of original Lean (not the derivations like Lean Startup or Kanban) is <a href="http://www.akitaonrails.com/2013/05/31/desmistificando-o-metodo-kanban"target="_blank" rel="noopener">&ldquo;Kaizen&rdquo;</a>, that is, <a href="/en/2009/12/10/off-topic-voce-nao-entende-nada-de-scrum">&ldquo;continuous improvement&rdquo;</a>.</p>
<p>The idea is that <a href="/en/2009/06/14/off-topic-padr-es-commodities-e-inova--es">today should be at least a little better than yesterday</a>. What we do is measurable, and because of that we can say that today came out better than yesterday. The principle is simple; the execution, not so much. If you haven&rsquo;t read them yet, follow the links in this paragraph to understand these concepts.</p>
<p>Now comes the bad part: how do we talk about people? Or, more specifically, about people&rsquo;s behavior?</p>
<p>Since we&rsquo;re all &ldquo;people,&rdquo; we&rsquo;re sure we know how people think. And nothing could be further from the truth. We carry preconceived ideas, fallacious, superstitious, and prejudiced, many of them long outdated. From being repeated so often as clichés, we still believe them, the same way plenty of people still believe we only use <a href="https://en.wikipedia.org/wiki/Ten_percent_of_brain_myth"target="_blank" rel="noopener">10% of our brain</a> or that <a href="/en/2008/12/16/off-topic-m-todo-cient-fico-vs-cargo-cult">you can&rsquo;t have mango with milk</a>.</p>
<p>And we don&rsquo;t have to guess. Just like with processes, there is a long literature on people: psychology, sociology (which evolved a great deal since the 90s thanks to the study of networks), behavioral economics, among others. It&rsquo;s impossible for someone from tech to become a specialist in the Humanities, but if the responsibility is to prioritize people, on top of processes, we&rsquo;d better equip ourselves well enough.</p>
<p>This is a Small Bite because I don&rsquo;t intend, this time, to go into detail on the subject. I&rsquo;d rather leave a few books I really like to give some grounding.</p>
<p>Within the tech field itself there are some classics worth reading:</p>
<ul>
<li><a href="https://en.wikipedia.org/wiki/Peopleware:_Productive_Projects_and_Teams"target="_blank" rel="noopener">Peopleware</a> by Tom DeMarco</li>
<li><a href="https://en.wikipedia.org/wiki/The_Mythical_Man-Month"target="_blank" rel="noopener">The Mythical Man Month</a> by Fred Brooks</li>
<li><a href="https://www.amazon.com/dp/0932633420"target="_blank" rel="noopener">The Psychology of Computer Programming</a> by Gerald Weinberg</li>
</ul>
<p>From there we can move on to Behavioral Economics and Psychology:</p>
<ul>
<li><a href="https://en.wikipedia.org/wiki/Thinking,_Fast_and_Slow"target="_blank" rel="noopener">Thinking, Fast and Slow</a> by Nobel laureate Daniel Kahneman</li>
<li><a href="https://en.wikipedia.org/wiki/Predictably_Irrational"target="_blank" rel="noopener">Predictably Irrational</a> by Dan Ariely</li>
<li><a href="https://www.amazon.com/dp/0061995045"target="_blank" rel="noopener">The Upside of Irrationality: The Unexpected Benefits of Defying Logic</a> by Dan Ariely</li>
<li><a href="https://www.amazon.com/dp/0062183591"target="_blank" rel="noopener">The (Honest) Truth about Dishonesty</a> by Dan Ariely</li>
<li><a href="http://web.archive.org/web/20141130023720/http://www.lucifereffect.com/"target="_blank" rel="noopener">The Lucifer Effect</a> by Philip Zimbardo</li>
<li><a href="https://www.amazon.com/dp/B001HD8NZ8"target="_blank" rel="noopener">Talent Is Overrated</a> by Geoffrey Colvin</li>
<li><a href="https://www.amazon.com/dp/014303622X"target="_blank" rel="noopener">Descartes&rsquo; Error: Emotion, Reason, and the Human Brain</a> by Antonio Damasio</li>
<li><a href="https://www.amazon.com/dp/081297381X"target="_blank" rel="noopener">The Black Swan</a> by Nassim Taleb</li>
<li><a href="https://www.amazon.com/dp/0812975219"target="_blank" rel="noopener">Fooled by Randomness</a> by Nassim Taleb</li>
</ul>
<p>And, more specifically, about the behavior of various agents in groups (network theory):</p>
<ul>
<li><a href="https://en.wikipedia.org/wiki/Linked:_The_New_Science_of_Networks"target="_blank" rel="noopener">Linked, the New Science of Networks</a> by Albert-László Barabási</li>
<li><a href="https://www.amazon.com/dp/0393325423"target="_blank" rel="noopener">Six Degrees: The Science of a Connected Age</a> by Duncan Watts</li>
<li><a href="https://www.amazon.com/dp/0307951790"target="_blank" rel="noopener">Everything Is Obvious: How Common Sense Fails Us</a> by Duncan Watts</li>
<li><a href="https://www.amazon.com/dp/0786887214"target="_blank" rel="noopener">Sync: How Order Emerges From Chaos In the Universe, Nature, and Daily Life</a> by Steven H. Strogatz</li>
<li><a href="https://www.amazon.com/dp/0143113453"target="_blank" rel="noopener">Chaos: Making a New Science</a> by James Gleick</li>
<li><a href="https://www.amazon.com/dp/0813349109"target="_blank" rel="noopener">Nonlinear Dynamics and Chaos</a> by Steven H. Strogatz</li>
<li><a href="https://www.amazon.com/dp/0465043577"target="_blank" rel="noopener">The (Mis)behavior of Markets</a> by Benoit Mandelbrot</li>
</ul>
<p>Yes, a lot of these books are pretty superficial (none is technical or specialist), but the intent is just to give an introduction to the various areas. Over time, I dropped some that were too superficial, already in the entertainment and self-help category, like Malcolm Gladwell, Dan Pink, Clayton Christensen, and Clay Shirky. Even so, some of them are worth reading.</p>
<p>The main thing is the conclusion: contrary to what we usually think, we, people, aren&rsquo;t as rational as we&rsquo;d like, and our behavior is heavily influenced by external agents and by the environment.</p>
]]></content:encoded><category>agile</category><category>psychology</category><category>management</category><category>off-topic</category></item><item><title>[Off-Topic] Agile: the Truth Behind the Method</title><link>https://akitaonrails.github.io/en/2014/09/28/off-topic-agile-a-verdade-por-tras-do-metodo/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2014/09/28/off-topic-agile-a-verdade-por-tras-do-metodo/</guid><pubDate>Sun, 28 Sep 2014 23:18:00 -0300</pubDate><description>&lt;p&gt;This year, on top of the &lt;a href="http://www.akitaonrails.com/2014/08/23/small-bite-um-pouco-tarde-o-grande-debate-sobre-tdd"target="_blank" rel="noopener"&gt;discussion about TDD&lt;/a&gt; (which isn&amp;rsquo;t dead!), none other than one of the Agile Manifesto signatories, Dave Thomas, declared the death of &amp;ldquo;Agile&amp;rdquo; as we know it today.&lt;/p&gt;
&lt;p&gt;A few articles that can set up the rest of the discussion:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;by Dave Thomas: &lt;a href="https://pragdave.me/blog/2014/03/04/time-to-kill-agile/"target="_blank" rel="noopener"&gt;Agile Is Dead (Long Live Agility)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;by Richard Bishop: &lt;a href="http://web.archive.org/web/20140908134511/http://rubiquity.com/2014/03/12/agile-is-dead-angry-developer.html"target="_blank" rel="noopener"&gt;Agile Is Dead: The Angry Developer Version&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;by Giles Bowkett: &lt;a href="http://gilesbowkett.blogspot.com/2014/09/why-scrum-should-basically-just-die-in.html"target="_blank" rel="noopener"&gt;Why Scrum Should Basically Just Die In A Fire&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At my company, since day one, we don&amp;rsquo;t use the word &amp;ldquo;Agile,&amp;rdquo; &amp;ldquo;Scrum,&amp;rdquo; or any other buzzword. We do have &amp;ldquo;sprints,&amp;rdquo; but things like grooming and planning poker (just kidding!) are by no means &amp;ldquo;imposed.&amp;rdquo; The practices get used, with or without the names, whenever they&amp;rsquo;re needed. I don&amp;rsquo;t like saying &amp;ldquo;Scrum,&amp;rdquo; &amp;ldquo;Kanban,&amp;rdquo; or any other label; mentioning these names gives me a mild sense of embarrassment.&lt;/p&gt;</description><content:encoded><![CDATA[<p>This year, on top of the <a href="http://www.akitaonrails.com/2014/08/23/small-bite-um-pouco-tarde-o-grande-debate-sobre-tdd"target="_blank" rel="noopener">discussion about TDD</a> (which isn&rsquo;t dead!), none other than one of the Agile Manifesto signatories, Dave Thomas, declared the death of &ldquo;Agile&rdquo; as we know it today.</p>
<p>A few articles that can set up the rest of the discussion:</p>
<ul>
<li>by Dave Thomas: <a href="https://pragdave.me/blog/2014/03/04/time-to-kill-agile/"target="_blank" rel="noopener">Agile Is Dead (Long Live Agility)</a></li>
<li>by Richard Bishop: <a href="http://web.archive.org/web/20140908134511/http://rubiquity.com/2014/03/12/agile-is-dead-angry-developer.html"target="_blank" rel="noopener">Agile Is Dead: The Angry Developer Version</a></li>
<li>by Giles Bowkett: <a href="http://gilesbowkett.blogspot.com/2014/09/why-scrum-should-basically-just-die-in.html"target="_blank" rel="noopener">Why Scrum Should Basically Just Die In A Fire</a></li>
</ul>
<p>At my company, since day one, we don&rsquo;t use the word &ldquo;Agile,&rdquo; &ldquo;Scrum,&rdquo; or any other buzzword. We do have &ldquo;sprints,&rdquo; but things like grooming and planning poker (just kidding!) are by no means &ldquo;imposed.&rdquo; The practices get used, with or without the names, whenever they&rsquo;re needed. I don&rsquo;t like saying &ldquo;Scrum,&rdquo; &ldquo;Kanban,&rdquo; or any other label; mentioning these names gives me a mild sense of embarrassment.</p>
<p>For anyone who actually applies agile practices day to day, none of this is news. Nobody argues about things like Collective Code Ownership (Github!), Continuous Integration (Jenkins, Travis, Semaphore, etc.), Test Driven Development (Rspec, Jasmine, Capybara, etc.), Refactoring, YAGNI, User Stories/Requirements/Use Cases (or whatever you want to call it: basically, scope). Look at how open source projects run: in terms of programming practices, it&rsquo;s not much more than that.</p>
<p>The problem is the process: project management itself. People talk endlessly about Waterfall vs Agile, but that&rsquo;s a load of bullshit. What&rsquo;s worth lamenting is how the world of consultancies &ldquo;specialized&rdquo; in &ldquo;Agile processes&rdquo; has <strong>prostituted</strong> Agility.</p>
<p>And it&rsquo;s true. That&rsquo;s why I don&rsquo;t &ldquo;sell&rdquo; things like &ldquo;methodology implementation,&rdquo; and I honestly don&rsquo;t recommend anyone hire a third party for it. If you really must, size up how much hands-on time in the actual code and the day-to-day the candidate really has. Most of them rack up more &ldquo;verbal&rdquo; hours than hours of action.</p>
<p>In this article I won&rsquo;t give the solution, that&rsquo;s for a future one. Here I just want to state the one big truth nobody warns you about, which is why any implementation attempt will fail: implementing any Agile practices, processes, and methods <strong>requires</strong> a good team, programmers and managers and everyone else.</p>
<p>Does &ldquo;good team&rdquo; mean a team of nothing but &ldquo;seniors&rdquo;? No. It requires people committed to their craft, whether juniors or seniors. And by the way, the folks many people today call &ldquo;seniors&rdquo; or &ldquo;ninjas&rdquo; (argh, whether it&rsquo;s because they give talks or because of their many years of &ldquo;experience&rdquo;) are almost all barely committed and merely arrogant. Again, more talk than action.</p>
<p>This point is crucial: plenty of people will try to implement &ldquo;Agile&rdquo; hoping to turn a bad team, or a bad company, into something better. That&rsquo;s not going to happen. At first it&rsquo;ll look like things &ldquo;improved&rdquo; or at least that something &ldquo;changed.&rdquo; But of course: you&rsquo;re implementing a few merely &ldquo;different&rdquo; practices, so naturally something will change for a while.</p>
<p>Programming is a profession of practice. You can&rsquo;t turn a bad programmer into a good one just by bolting on methods, the same way making a rookie soccer player sit through a two-day training will never turn him into a goal-scorer. Only hard, uninterrupted, consistent practice, made of small continuous improvements, will maybe get him there. In my cynicism, <a href="/en/2010/06/16/railsconf-2010-video-interview-robert-martin-english">I told Bob Martin directly</a> my theory about what motivated Ken Schwaber to create something as silly as Scrum Certification, at Railsconf 2010.</p>
<p>Anyone who was programming in the 80s and 90s didn&rsquo;t see anything that disruptive when the descriptions of the principles and practices called &ldquo;Agile&rdquo; showed up in the late 90s, up to the publication of the manifesto in 2001. What was different is that someone finally condensed everything into a marketable commercial package, mostly Scrum (which on its own includes none of the important programming practices from Extreme Programming). Want to see how the practices have been evolving for far longer? Read <a href="http://www.amazon.com/Cathedral-Bazaar-Musings-Accidental-Revolutionary-ebook/dp/B0026OR3LM/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1411957445&amp;sr=1-1&amp;keywords=the&#43;cathedral&#43;and&#43;the&#43;bazaar"target="_blank" rel="noopener">The Cathedral and the Bazaar</a> and <a href="http://www.amazon.com/The-Mythical-Man-Month-Engineering-Anniversary/dp/0201835959"target="_blank" rel="noopener">The Mythical Man Month</a>.</p>
<p>So no: implementing Scrum, or even starting to implement XP, <strong>will not</strong> save a bad team. One here or there, who already had the disposition, the talent, and the drive, will manage to become agile after practicing, screwing up, and practicing more. The rest, who don&rsquo;t have the talent or the disposition, or worse, are flat-out bad-character, won&rsquo;t change.</p>
<p>No methodology on Earth will ever change a person&rsquo;s personality, at least not in so little time. Think of it this way: his mother couldn&rsquo;t get the guy to quit being lazy and a stall-tactic artist, you won&rsquo;t either, and that&rsquo;s not your job anyway. Your job is to deliver value.</p>
<p>The unspoken truth of the Agile world is that applying agile practices comes naturally among good programmers who already have experience. It won&rsquo;t be useful on a rookie team, which still needs a lot of practice, with or without agile principles.</p>
<p>I said you just have to look at how the open source world works. Contrary to what a lot of newbie Brazilians imagine, open source has, in principle, nothing to do with inclusion or leftist movements. I&rsquo;d sum up open source as &ldquo;the most efficient capitalist way to maintain commodities.&rdquo; It&rsquo;s highly exclusive to developers.</p>
<p>With no employment ties, on a purely voluntary basis, the interests revolve around marketing: company exposure, developer exposure, cost reduction, opportunities. You really do need to be &ldquo;good&rdquo; to stay at the top of the list. Does everyone&rsquo;s opinion carry equal weight? <a href="http://linux.slashdot.org/story/13/07/15/2316219/kernel-dev-tells-linus-torvalds-to-stop-using-abusive-language"target="_blank" rel="noopener">Ask Linus Torvalds</a> what he does when a bad idea shows up.</p>
<p>The open source world exposes problems immediately. Just because you think your project is &ldquo;cool&rdquo; doesn&rsquo;t automatically translate into volunteers and exposure. The rate of projects that die is orders of magnitude higher than that of projects gaining traction. Compared to the commercial world, open source kills projects far faster.</p>
<p>Agile was built to <strong>expose</strong> problems as early as possible. Understand: Agile practices are problem-exposure mechanisms! Agile is a <strong>Risk</strong> reduction and management mechanism! Catch the obstacles the moment they happen and deal with them immediately to head off unnecessary future risk, the kind that only leads to waste.</p>
<p>Except nobody wants to do this. If the problem is the manager, what consultancy is going to remove him from his post, unless the owner above him is committed to cutting into his own flesh? If the problem is the bad-character programmer everyone likes (the most dangerous type: the one who knows how to work a room and build zones of influence among peers and superiors), how do you fire that guy?</p>
<p>Yes: fixing a team in a short window <strong>necessarily</strong> means replacing its members. Worst case, replacing all of them. If the method is applied well, it immediately demonstrates and exposes the problems. And since in the vast majority of cases the problem is behavior, not practice, you have to resolve it on the spot. If you, the stakeholder responsible for your company, aren&rsquo;t firing anyone after you start implementing Agile, you&rsquo;re doing it wrong.</p>
<p>And here&rsquo;s the big problem: nobody gets this commitment. There&rsquo;s no free lunch. There&rsquo;s no making an omelet without breaking some (or all) of the eggs. Without that understanding and that commitment, there&rsquo;s no agility. And this isn&rsquo;t the first time I say it, if you read my 2009 article: <a href="/en/2009/03/30/off-topic-net-negative-producing-programmer">Net Negative Producing Programmer</a>. But since most people still seem not to have gotten it, I decided to spell it out more clearly.</p>
<p>This was an introduction. Depending on the comments, maybe I&rsquo;ll walk down a few more steps to explain exactly the mechanisms of what I laid out very quickly here.</p>
]]></content:encoded><category>agile</category><category>management</category><category>software-engineering</category><category>off-topic</category></item><item><title>[Off-Topic] Lean Is Dead, Long Live Efficiency</title><link>https://akitaonrails.github.io/en/2014/03/27/off-topic-lean-esta-morto-longa-vida-a-eficiencia/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2014/03/27/off-topic-lean-esta-morto-longa-vida-a-eficiencia/</guid><pubDate>Thu, 27 Mar 2014 15:03:00 -0300</pubDate><description>&lt;p&gt;&lt;strong&gt;Update (3/29/14):&lt;/strong&gt; I published a post in October 2013 that lays out much more detailed arguments on this topic. Read &lt;a href="http://www.akitaonrails.com/en/2013/10/30/off-topic-matematica-trolls-haters-e-discussoes-de-internet"target="_blank" rel="noopener"&gt;&amp;ldquo;Math, Trolls, Haters, and Internet Discussions&amp;rdquo;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The year was 2001. A group of senior programmers gathered at a ski resort in Snowbird, Utah. The main names of programming in the United States were there: Kent Beck, Alistair Cockburn, Ward Cunningham, Martin Fowler, Jim Highsmith, Ron Jeffries, Brian Marick, Bob Martin, Ken Schwaber, Jeff Sutherland, Andy Hunt, Dave Thomas, Mike Beedle, Arie van Bennekum, James Grenning, Jon Kern, Steve Mellor. A &amp;ldquo;who&amp;rsquo;s who&amp;rdquo; list of the field.&lt;/p&gt;</description><content:encoded><![CDATA[<p><strong>Update (3/29/14):</strong> I published a post in October 2013 that lays out much more detailed arguments on this topic. Read <a href="http://www.akitaonrails.com/en/2013/10/30/off-topic-matematica-trolls-haters-e-discussoes-de-internet"target="_blank" rel="noopener">&ldquo;Math, Trolls, Haters, and Internet Discussions&rdquo;</a>.</p>
<p>The year was 2001. A group of senior programmers gathered at a ski resort in Snowbird, Utah. The main names of programming in the United States were there: Kent Beck, Alistair Cockburn, Ward Cunningham, Martin Fowler, Jim Highsmith, Ron Jeffries, Brian Marick, Bob Martin, Ken Schwaber, Jeff Sutherland, Andy Hunt, Dave Thomas, Mike Beedle, Arie van Bennekum, James Grenning, Jon Kern, Steve Mellor. A &ldquo;who&rsquo;s who&rdquo; list of the field.</p>
<p>From that historic meeting a <a href="http://agilemanifesto.org"target="_blank" rel="noopener">manifesto</a> of 4 values and 12 principles emerged, which became known as the &ldquo;Agile Manifesto.&rdquo;</p>
<p>Thirteen years later, Dave Thomas, author of <a href="http://pragprog.com/book/tpp/the-pragmatic-programmer"target="_blank" rel="noopener">&ldquo;The Pragmatic Programmer&rdquo;</a> and one of the people most directly involved in writing the manifesto text, published a frustrated article called <a href="http://pragdave.me/blog/2014/03/04/time-to-kill-agile/"target="_blank" rel="noopener">&ldquo;Agile is Dead, Long Live Agility&rdquo;</a>.</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/404/big_Karl_Popper_Quotes_Venture.philosophy.jpg" alt="Karl Popper"  loading="lazy" /></p>
<p>The original agilists meant to break the outdated way of thinking about and executing software engineering, the same obsolete model still taught today in most of the country&rsquo;s universities. It caused a huge stir in the industry.</p>
<p>Along came the derivations, the trainings, the tools, the certifications, the conferences, the consultancies. A huge portfolio of options, for any size and any price. In the middle of this whole <strong>circus</strong>, what it really means to be an <em>agilist</em> got forgotten.</p>
<p>And, as Dave Thomas summed it up well in his vent, you don&rsquo;t &ldquo;do&rdquo; Agile or &ldquo;buy&rdquo; Agile. Agility is a quality, an adjective. To be agile, you have to go back to the principles. Quoting:</p>
<ul>
<li>Find out where you are</li>
<li>Take a small step towards your goal</li>
<li>Adjust your understanding based on what you learned</li>
<li>Repeat</li>
</ul>
<p>How to do this:</p>
<blockquote>
  <p>&ldquo;When faced with two or more alternatives that deliver roughly the same value, take the path that makes future change easier.&rdquo;</p>

</blockquote>
<p>And that&rsquo;s it: four lines and one practice.</p>
<p>Thirteen years after something so simple was first published, the world seems to have gotten way too complicated. Scrum, Kanban, Scrumban, Lean Programming, Lean Six Sigma, Agile PMI. In a moment where chaos reigns, whoever &ldquo;seems&rdquo; able to explain the chaos becomes a guru.</p>
<p>And so associations, certifications, trainings, and conferences emerge. That&rsquo;s how it works for diets, how it works for therapies, how it worked for software engineering. That&rsquo;s what Dave Thomas laments.</p>
<p>But it&rsquo;s an inevitable result. People are easy to fool: they always look for someone or something to follow and rarely question. They&rsquo;ve been dogmatized never to challenge authority and to root for soccer teams without any criteria.</p>
<p>In <strong>2010</strong> I was at a conference in Baltimore and had the chance to <a href="http://www.akitaonrails.com/en/2010/06/16/railsconf-2010-video-interview-robert-martin-english"target="_blank" rel="noopener">talk to Bob Martin</a>, who organized the Snowbird meeting. It was in his Object Mentor office that Ken Schwaber&rsquo;s first Scrum certification training took place.</p>
<p>I was already immune to the &ldquo;Agile Hype,&rdquo; but I wanted to tell Bob Martin what I thought of it. For those who don&rsquo;t know, the &ldquo;official&rdquo; Scrum Master training is a two-day course, and at the end you walk out certified. You don&rsquo;t even need to show up: just pay for the course.</p>
<p>I told him, cynically, that Ken&rsquo;s idea probably backfired. <em>&ldquo;Ken probably thought &lsquo;man, how do I convince these large corporations to adopt agile practices?&rsquo; and then he thought &lsquo;of course, large companies love certifications,&rsquo; and then he created a Trojan Horse, a joke 2-day course where serious people would know you can&rsquo;t learn anything serious in 2 days, but that way he could insert the idea into the companies. But everyone took it seriously, and that&rsquo;s when the shot backfired.&rdquo;</em> Skip straight to minute 6:24 of the video below if you want to hear that story.</p>
<div class="video-container">
    <video controls>
        <source src="https://s3.us-east-2.amazonaws.com/blip.tv/Akitaonrails-RailsConf2010RobertMartin974.mp4">
        Your browser does not support the video tag. [Direct Link](https://s3.us-east-2.amazonaws.com/blip.tv/Akitaonrails-RailsConf2010RobertMartin974.mp4)
    </video>
</div>
<h1>Learning to Learn</h1><p>Now let&rsquo;s step out of software a bit and enter the world of &ldquo;startups.&rdquo; That world has its own &ldquo;Agile,&rdquo; dubbed &ldquo;Lean Startup.&rdquo; Eric Ries coined the term in 2008 and made it famous with the book of the same name, from 2011, a direct derivation of Toyota&rsquo;s Lean principles. It&rsquo;s a repackaging of old ideas.</p>
<p>This Lean comes from the same ideas of W. Edwards Deming about <a href="http://en.wikipedia.org/wiki/PDCA"target="_blank" rel="noopener">PDCA, &ldquo;Plan, Do, Check, Act&rdquo;</a>. You&rsquo;ll notice the resemblance to Dave Thomas&rsquo;s four principles I cited above.</p>
<p>Pompous names, celebrities, gurus, expensive tools, and prominent titles don&rsquo;t matter. The basic principles of Agile and Lean are the same: deliver value as fast as possible with the least waste possible, learning and using that learning in the process, planning and replanning to reach goals that become clearer along the way. That&rsquo;s it.</p>
<p>The biggest problem shows up when an amateur programmer asks <em>&ldquo;what&rsquo;s the next step?&rdquo;</em> and the answer is <em>&ldquo;the goal is to set up a Kanban.&rdquo;</em> Or when an amateur entrepreneur asks <em>&ldquo;what&rsquo;s the next step?&rdquo;</em> and the answer is <em>&ldquo;the goal is to build a Business Canvas.&rdquo;</em></p>
<p>Kanban and Business Canvas aren&rsquo;t <strong>goals</strong>, they&rsquo;re means. If those means don&rsquo;t help reach the ends, delivering value to the customer and turning a profit in your business, then they&rsquo;re disposable. The goal is to have profit. MVP, prototype, Lean UX, and Business Canvas are just possible paths to get there. Which of them serve?</p>
<p>If you want to learn anything, the steps to start are simple:</p>
<ul>
<li>Don&rsquo;t create idols, never &ldquo;idolize&rdquo; anyone, at least not seriously.</li>
<li>Ignore almost everything you see or hear in groups. Take notes, but don&rsquo;t take everything seriously.</li>
<li>Ignore advice and mentoring. It&rsquo;s like a bank manager giving investment tips: if he were any good, he&rsquo;d be rich instead of selling advice. He&rsquo;s a salesperson by another name.</li>
<li>Everything, absolutely everything, starts with a few <strong>principles</strong>. Nobody becomes a heart surgeon wanting to cut the aorta before learning to wash their hands. Look for the principles and ignore the pompous titles.</li>
<li>Assume you know little, always. Approach every subject with the eyes of an ignorant person. Whoever thinks they already know everything learns nothing more. But be a smart ignoramus, not a dumb one.</li>
</ul>
<p>Learn to <strong>question</strong>. The whole world of the Sciences, from the absolutely small quantum world to the infinite and immense cosmological world, only exists because it accepts one principle: the <a href="https://pt.wikipedia.org/wiki/M%c3%a9todo_cient%C3%ADfico"target="_blank" rel="noopener">Scientific Method</a>.</p>
<p>It&rsquo;s basically PDCA: define the problem, make hypotheses, run controlled experiments, discard the hypotheses proven wrong, repeat. To be more accurate, Deming&rsquo;s PDCA is the one that draws directly on the Scientific Method.</p>
<p>There is the principle of everything. From Agile to Lean to PDCA, we come back to <a href="https://pt.wikipedia.org/wiki/Karl_Popper"target="_blank" rel="noopener">Karl Popper</a> and his philosophy of <a href="http://en.wikipedia.org/wiki/Critical_rationalism"target="_blank" rel="noopener">&ldquo;Critical Rationalism&rdquo;</a>, which teaches that everything should stay open to rational criticism.</p>
<p>That&rsquo;s why Lean, as an umbrella for selling products and services you don&rsquo;t need, is dead. Long live the principle of achieving value while avoiding waste through continuous learning, in other words, Efficiency. There are no magic formulas. If magic diets worked, there would be no obesity in the world.</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/403/big_images.jpeg" alt="Karl Popper"  loading="lazy" /></p>
<p>PS: I know, there&rsquo;s #tongueincheek in the title and in the article, but the intention, as usual, is actually to provoke ;-)</p>
]]></content:encoded><category>agile</category><category>management</category><category>software-engineering</category><category>off-topic</category></item><item><title>[Off-Topic] Agile Done Wrong</title><link>https://akitaonrails.github.io/en/2013/11/01/off-topic-agile-feito-errado/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2013/11/01/off-topic-agile-feito-errado/</guid><pubDate>Fri, 01 Nov 2013 10:48:00 -0200</pubDate><description>&lt;p&gt;One of the most common things I&amp;rsquo;ve seen in countless companies is adopting some methodology in the hope that it will improve things. Invariably nothing changes and sometimes it gets worse. I&amp;rsquo;ve repeated this countless times and I&amp;rsquo;ll repeat it again: Agile isn&amp;rsquo;t a silver bullet, and no magic recipe fixes bad professionals. Bad professionals can&amp;rsquo;t be fixed.&lt;/p&gt;
&lt;p&gt;The distinction matters. A junior professional, who still has technical deficiencies and wants to grow, learns techniques, practices, and tools, and gains technical quality, productivity, and efficiency. A bad professional, who may even have some technical capacity, is more interested in little work, little effort, and little responsibility, and turns bad-character in conduct and attitude. That one doesn&amp;rsquo;t change.&lt;/p&gt;</description><content:encoded><![CDATA[<p>One of the most common things I&rsquo;ve seen in countless companies is adopting some methodology in the hope that it will improve things. Invariably nothing changes and sometimes it gets worse. I&rsquo;ve repeated this countless times and I&rsquo;ll repeat it again: Agile isn&rsquo;t a silver bullet, and no magic recipe fixes bad professionals. Bad professionals can&rsquo;t be fixed.</p>
<p>The distinction matters. A junior professional, who still has technical deficiencies and wants to grow, learns techniques, practices, and tools, and gains technical quality, productivity, and efficiency. A bad professional, who may even have some technical capacity, is more interested in little work, little effort, and little responsibility, and turns bad-character in conduct and attitude. That one doesn&rsquo;t change.</p>
<p>Agile is another <a href="http://www.akitaonrails.com/en/2013/10/30/off-topic-matematica-trolls-haters-e-discussoes-de-internet"target="_blank" rel="noopener">formula</a> whose image (result) is the <a href="http://www.akitaonrails.com/en/2009/12/10/off-topic-voce-nao-entende-nada-de-scrum"target="_blank" rel="noopener">promise of hyper-productivity</a> that can reach 500% of the current. Again, what is the Domain (the premises)?</p>
<p>The most basic premise for Agile is that the team has technical capacity and commitment. No methodology teaches or changes that. Either each individual on the team is a capable person or it simply won&rsquo;t work. Well-made, well-organized code, following the known good practices, with tests and discipline, is the minimum to start, the rice and beans.</p>
<p>If that doesn&rsquo;t exist, give up. No methodology, no voodoo, no exorcism, no feng shui will help. Dropping Scrum, XP practices, Kanban, or anything else into a bad team with weak leadership produces some of the following prostitutions of the good practices:</p>
<h2>Planning for Show<span class="hx:absolute hx:-mt-20" id="planning-for-show"></span>
    <a href="#planning-for-show" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Good planning is only possible if the Product Owner commits to keeping a prioritized, well-defined backlog. And understand this: the definition of the User Stories should be ready <strong>before</strong> the Sprint Planning. A vague, poorly defined User Story helps nothing at all.</p>
<p>While the team works on the Sprint, the PO defines the upcoming User Stories, and can pull in one or more members of the team itself or of parallel teams to help. By the Sprint Planning everything should already be well defined, ideally pre-pointed and prioritized. The team just points the Sprint and, according to the current Velocity, sees what fits in the next one. A well-run meeting lasts 1 or 2 hours at most.</p>
<p>Symptoms: if it takes more than 2 hours, has too many people just to make quorum, poorly defined User Stories that spawn endless discussions and no action, you&rsquo;re doing it wrong.</p>
<h2>Pair Programming for Show<span class="hx:absolute hx:-mt-20" id="pair-programming-for-show"></span>
    <a href="#pair-programming-for-show" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Pair Programming is a very good practice, and the team decides how to run it. Except you can end up with a member who almost never programs well alone and, when doing the &ldquo;pair,&rdquo; turns into more of a listener than a participant. That&rsquo;s the famous &ldquo;dead weight.&rdquo; Sits there tossing out opinions, or just sits in silence playing Candy Crush and browsing Facebook. No value at all.</p>
<p>Symptoms: this happens more easily on very large teams (above 6), since it becomes easier to &ldquo;hide&rdquo; doing pair-fake with different people. In fact, I never recommend more than 4 people on an agile team. Even for a single product, if there are 15 people, for example, better to split into 3 teams of 5. Better still if people rotate across those teams so that &ldquo;cliques&rdquo; don&rsquo;t form where one bad guy covers for another.</p>
<h2>Departmental Protectionism<span class="hx:absolute hx:-mt-20" id="departmental-protectionism"></span>
    <a href="#departmental-protectionism" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Professional programmers today need to be multi-functional, versatile. Obviously each one is stronger at some type of capability than another. For example, what we&rsquo;d call a &ldquo;front-end&rdquo; should be the master of HTML 5, CSS 3, JavaScript, but should also know the minimum of Rails, Node.js, Python, or whatever the back-end is, enough to organize the templates and integrate with controllers, models, helpers, etc. And the &ldquo;back-ends&rdquo; should also minimally know HTML, and even infrastructure.</p>
<p>Pointing User Stories (whether in Story Points, Working Hours, etc.) should always be the same no matter who pulls the User Story. There&rsquo;s none of: &ldquo;these 3 stories are mine, these 2 are so-and-so&rsquo;s, these 4 are what&rsquo;s-his-name&rsquo;s.&rdquo; Stories are prioritized and each person pulls one story at a time as they finish the previous one.</p>
<p>Symptoms: stories pointed differently depending on who&rsquo;s going to pick them up, or &ldquo;reserved&rdquo; stories, or types of stories only one &ldquo;type&rdquo; of professional can pick up. There&rsquo;s none of &ldquo;this story is infra, only an infra guy should get it, and the back guy shouldn&rsquo;t even be looking at it.&rdquo; Sprints are the responsibility of the entire team.</p>
<p>One of the advantages of pair programming and small teams is that each person learns new capabilities from the others. A back-end dev can pull a Story with something of front-end in it, without being the best at front-end, and nothing stops them from asking to pair with a good front-end on the team when they need it. A User Story may take 2 hours if done by a good back-end, but it may take 5 hours if done by a front-end.</p>
<p>The right thing is for the front-end guy to get close to those 2 hours, not to reserve the story. The right thing is for the team&rsquo;s velocity to climb gradually, and for that the individual velocity of each member also has to climb. And for that they have to keep learning new capabilities. That&rsquo;s how everyone evolves. Reserving stories is the best example of a punch-the-clock worker wanting to &lsquo;protect&rsquo; their job and hide their mediocrity.</p>
<h2>Quality for Show<span class="hx:absolute hx:-mt-20" id="quality-for-show"></span>
    <a href="#quality-for-show" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Every member of the team should care about both the technical quality of the code and the functional quality, that is, whether the feature actually behaves correctly with end users. Many times teams allocate people with the sole goal of being a &ldquo;Q&amp;A&rdquo; (Quality Assurance), responsible for building test cases, automating integration tests, aligning with the PO and with business analysts, marketing, etc.</p>
<p>I&rsquo;ll say that personally I don&rsquo;t like this distinction, but I confess that in some cases it makes a lot of sense. Except it has to be done in a way that doesn&rsquo;t strip the team of the responsibility to deliver features that actually work. There can&rsquo;t be a feeling of &ldquo;who cares if there are bugs, the Q&amp;A will catch them later.&rdquo; But that&rsquo;s what often happens.</p>
<p>Symptom: look for User Stories that get delivered, then rejected, then redone, then rejected again, and stay that way for a long time. A User Story that goes 1 month without being accepted is a monstrous absurdity, an abomination. Even worse if there are team members who, when you look at the past backlog, are always involved in stories that always get rejected and always take days to be accepted. It&rsquo;s the typical case of the professional who keeps their job by solving problems they created themselves. Remove those rotten apples from the team as soon as possible, because they contaminate the whole barrel very fast.</p>
<h2>Excuses, Excuses, Excuses<span class="hx:absolute hx:-mt-20" id="excuses-excuses-excuses"></span>
    <a href="#excuses-excuses-excuses" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>&ldquo;I couldn&rsquo;t do it because we were missing a test, but the guy who does tests was overloaded so I got stuck.&rdquo;</p>
<p>&ldquo;I couldn&rsquo;t do it because there was an obstacle in the other team that they didn&rsquo;t resolve, so I got stuck.&rdquo;</p>
<p>&ldquo;I couldn&rsquo;t do it because it was poorly specified, I sent an email to clear it up, no one answered, so I got stuck.&rdquo;</p>
<p>A good professional gives solutions, doesn&rsquo;t point fingers or keep looking for excuses to justify their own incompetence. Does that mean nobody can complain? Of course not. There are always hard problems to solve, and people can and should seek help when needed.</p>
<p>Symptoms: it&rsquo;s easy to spot the professional procrastinator. The guy is never at his desk, spends more time chatting at the coffee machine than working. Shows up late every day, leaves early every day. When he&rsquo;s at his desk, you glance over and the poor soul is on YouTube or on Hacker News.</p>
<p>And let it be very clear: none of these activities, on its own, is a problem. Even I take a break and hang out on Facebook. It&rsquo;s just that whoever behaves this way <strong>constantly</strong>, <strong>routinely</strong>, is clowning around. Worse: if by the end of the day his task were finished, with well-made code and no bugs, I wouldn&rsquo;t complain. Usually it isn&rsquo;t. The task comes in incomplete, the code poorly made, always needing to be redone, and the guy shows up with excuses like the ones above.</p>
<p>That&rsquo;s being bad-character, that&rsquo;s a criminal&rsquo;s attitude. He&rsquo;s deliberately stealing from the company: his salary is being paid and the value isn&rsquo;t being delivered. He&rsquo;s a thief.</p>
<p>A good professional, who works seriously, doesn&rsquo;t wait to be pressed to say &ldquo;ah, I asked, no one answered, so I didn&rsquo;t do it.&rdquo; When they hit an obstacle, they chase the problem. Technical question, they ask the colleagues next to them (in person, email, chat, gtalk). Functional problem, they go straight to the PO. Departmental problem, they get up from the chair and walk over to the other team to clear it. If the task depends on a third party who wouldn&rsquo;t collaborate, they go straight to the boss to solve it.</p>
<p>The basic symptom of the bad professional is the opposite: he doesn&rsquo;t go after it. He&rsquo;s happy when he hits the obstacle, because a week from now, only at the next Review meeting, he&rsquo;ll say &ldquo;daaaamn, I even tried, but so-and-so didn&rsquo;t collaborate, so I couldn&rsquo;t.&rdquo; Give me a break.</p>
<h2>Conclusion<span class="hx:absolute hx:-mt-20" id="conclusion"></span>
    <a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>If your team has just 1 of the problems described above, it&rsquo;s already a catastrophe. If it has more than one, it&rsquo;s a military-intervention problem, Iraq level. Anything past that, only a nuclear bomb solves it. And worse still, someone who exhibits <strong>all</strong> the bad behaviors described above is a criminal sociopath. Scolding is useless, trying to fix them is useless: there&rsquo;s no fixing it&hellip; but there&rsquo;s a solution: swap out the rotten apples as soon as possible.</p>
<p>And again, to be clear, obviously there are all kinds of bad professionals, and I&rsquo;m not talking only about programmers. There are bad managers, bad analysts, bad coordinators, bad supervisors, bad directors, etc. This applies to everyone.</p>
<p>If you&rsquo;re a programmer and you see all this, chase after it. If the problem is in upper management, I&rsquo;m sorry to say there&rsquo;s nothing to do. Now, if you&rsquo;re a manager, a supervisor, someone in a position of authority, and you&rsquo;re taking no action knowing all this: resign, you&rsquo;re doing it very wrong and being complicit with an environment whose culture is bad character.</p>
<p>Applying &lsquo;some&rsquo; Agile practices, interpreted the wrong way, isn&rsquo;t being Agile, it&rsquo;s fooling yourself. It&rsquo;s like a nutritional diet. During the day you follow the diet to the letter, but when no one is looking you eat chocolate and sweets, and the next day you say &ldquo;damn, I don&rsquo;t know why this diet isn&rsquo;t working, I&rsquo;m following it right, I guess the diet&rsquo;s no good, let&rsquo;s try another one.&rdquo; #lamentable</p>
]]></content:encoded><category>agile</category><category>software-engineering</category><category>management</category><category>off-topic</category></item><item><title>[Off-Topic] #noEstimates Debunked</title><link>https://akitaonrails.github.io/en/2013/10/07/off-topic-noestimates-debunked/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2013/10/07/off-topic-noestimates-debunked/</guid><pubDate>Mon, 07 Oct 2013 11:35:00 -0300</pubDate><description>&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; One thing I forgot to mention. If you didn&amp;rsquo;t want to read all this, or you disagree altogether, ask yourself the following. You don&amp;rsquo;t want due dates, so are you willing to give up your salary&amp;rsquo;s due date as well? Why can&amp;rsquo;t you estimate what you&amp;rsquo;ll deliver and yet your client still has to pay you?&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s make this even: you do #noEstimates if, and only if, you&amp;rsquo;re willing to do #noSalary. Your employer holds your pay until you deliver, and in that scenario the amount gets depreciated the longer you take. Labor law doesn&amp;rsquo;t allow that, unfortunately. But it would be an interesting scenario.&lt;/p&gt;</description><content:encoded><![CDATA[<p><strong>Update:</strong> One thing I forgot to mention. If you didn&rsquo;t want to read all this, or you disagree altogether, ask yourself the following. You don&rsquo;t want due dates, so are you willing to give up your salary&rsquo;s due date as well? Why can&rsquo;t you estimate what you&rsquo;ll deliver and yet your client still has to pay you?</p>
<p>Let&rsquo;s make this even: you do #noEstimates if, and only if, you&rsquo;re willing to do #noSalary. Your employer holds your pay until you deliver, and in that scenario the amount gets depreciated the longer you take. Labor law doesn&rsquo;t allow that, unfortunately. But it would be an interesting scenario.</p>
<p>There are a lot of people talking about #noEstimates lately. I&rsquo;ve read most of the arguments in its favor, and anyone can run a quick Google search, so I won&rsquo;t keep referencing each of them. The gist is this: estimates will never be good enough, and the more specification and planning you do, the less the quality of the estimates seems to improve. In a dynamic market the specs change all the time, and the bigger the estimation effort, the bigger the waste. If estimation is that much of a waste, why not throw it all out at once?</p>
<p>It feels like a noble idea, especially for software developers. Software is malleable, it&rsquo;s abstract, and it just seems not to fit the traditional notions of project management. And while we&rsquo;re at it, why not throw out the entire notion of projects too? That&rsquo;s how another trend came along, #noProjects.</p>
<p>My intention here isn&rsquo;t to answer every argument, and that isn&rsquo;t even the point. What I&rsquo;ll do is explain why the whole idea is absurd right at the root. So let&rsquo;s start with the basics.</p>
<p>One thing I&rsquo;ve argued since at least 2008 is looking at project management and markets in general through the models of Complex Adaptive Systems, Chaos Theory, and Evolutionary Biology. I&rsquo;ve been heavily influenced by the ideas of Nassim Nicholas Taleb and his magnum opus &ldquo;The Black Swan&rdquo;. The idea is incredible: markets are driven by chaotic agents that influence a complex system, far from any linear path.</p>
<p>Every company is managed to deal with averages, with limited sigmas as the margin of operational error. But once something big happens, a &ldquo;Black Swan&rdquo; like the 2008 economic crisis, most aren&rsquo;t prepared. No model can predict it, and the whole system locks up and collapses.</p>
<p>If you don&rsquo;t know the idea, Google it for a second and you&rsquo;ll see that companies, markets, and human relationships in general are dynamic systems that obey the rules of evolutionary biology. Decentralized systems seem to be the way to go, and those concepts influence many of the Lean movements we see today. So, yes, I&rsquo;m well aware of these effects.</p>
<p>To sum it up, the ones with the most chance of surviving in a complex system like that are the most adaptable, far more than the ones who stick rigidly to plans. Following long-term plans with rigidity is the easiest way to fall down when the Black Swans show up.</p>
<p>That led me to another concept: Einstein&rsquo;s General Theory of Relativity. In modern cosmology it superseded Newton&rsquo;s Theory. When I first learned that, my first thought was: if Newton is &ldquo;wrong&rdquo;, why aren&rsquo;t we using Relativity to calculate everything in our daily lives?</p>
<p>The answer is that Newton is only &ldquo;wrong&rdquo; if you demand that it calculate anything. It doesn&rsquo;t apply to the very very large, to gravitational calculation, to galaxy-level calculations. But at Earth-like sizes, computing the path of an airplane or the trajectory of a bullet, it still holds, because the margins of error are negligible. In day-to-day life you can reduce the problem to Newton and leave General Relativity aside. It&rsquo;s a crude simplification, of course, but bear with me.</p>
<p>The same applies to companies. We&rsquo;re all subject to Power Law distributions, to Evolutionary Biology, to the relentless forces of Chaos that make everything behave like Complex Adaptive Systems. But in a constrained environment I&rsquo;ll argue that you can reduce the calculation back to Bell Curves. That&rsquo;s the hardest part to &ldquo;prove&rdquo;, so I won&rsquo;t try right now, but the explanation that follows may get you there.</p>
<p>Let&rsquo;s define what a company is: a set of operations. Operations are repetitive activities, like &ldquo;pay a supplier&rdquo;, &ldquo;send a purchase order&rdquo;, &ldquo;process the payroll&rdquo;, or &ldquo;transport products&rdquo;. The set of all those activities defines what a company is.</p>
<p>The core idea of a company is to run those operations as efficiently as possible. You do that by continuously refining the process in small steps, or through a breakthrough that completely changes the way you run a particular operation.</p>
<p>An example: back in the day there were entire groups of people dedicated to filling out paper forms and organizing them so information could flow inside the company. With the rise of digital systems, of ERPs, all that paperwork stopped being necessary. We got rid of an entire profession of typists and added efficiency and precision to the system. Breakthroughs are usually the digital automation of manual labor, or getting rid of a process entirely.</p>
<p>To reach those breakthroughs there are Projects. Projects are temporary endeavors where a group of people concentrate to hit a pre-established goal. They usually have a fixed start and due date, a fixed budget, and a fixed number of people involved.</p>
<p>And here we get to the Estimation part. Every project wants to hit some goal, and in the case of a software project we write code to get there. To do that, we come up with features and break them into Use Cases, User Stories, Requirements, or any artifact that describes what has to be built. Then we estimate how much resource (time, money, people) it takes to implement each piece and integrate them into a &ldquo;solution&rdquo; that solves the problem.</p>
<p>What developers complain about is that you can&rsquo;t estimate those pieces with precision, and that projects will always come out late and over budget. Hence the idea of estimating nothing, just starting to code, delivering value as fast as possible, and calling it done only when it&rsquo;s done.</p>
<p>Some developers get so fed up with this whole notion that they want to leave their companies and start their own startups, where they&rsquo;ll get to do whatever they want with no controls at all. Then off they go looking for investors, because they need a lot of money and a lot of time. Of course they do. What they don&rsquo;t realize is that <strong>EVERYBODY</strong> needs a lot of money and a lot of time.</p>
<p>And investors know this: the idea is irrelevant, execution is everything. The ones who deserve more money and more time are exactly the ones who can pressure themselves into delivering under budget and ahead of everyone else. Just doing something without worrying about constraints is the realm of the mediocre. And the mediocre deserve nothing.</p>
<p>Back to basics: there&rsquo;s a thing called <a href="https://en.wikipedia.org/wiki/Economy"target="_blank" rel="noopener">Economy</a> precisely because resources aren&rsquo;t infinite. Everything that has value has a price, whether it&rsquo;s a physical product or working hours.</p>
<p>Understand this: in the services business, where we developers all live, whether as an employee or a co-founder, value has only two variables, quality and efficiency. We tend to see quality as the only thing that matters. Worse: we tend to see what <em>we</em> think is quality as the only thing that matters.</p>
<p>This brings us back to <strong>CONTEXT</strong>. Most programmers are bad at estimates, and the root of it is that they&rsquo;re usually utterly incompetent at understanding context. As someone with a Math background, I read all those articles about processes, methodologies, and things like &ldquo;#noEstimates&rdquo; as if they were &ldquo;formulas&rdquo;.</p>
<p>Formulas alone don&rsquo;t mean a thing. Any mathematician knows you have to define a <a href="https://en.wikipedia.org/wiki/Domain_of_a_function"target="_blank" rel="noopener">Domain and an Image</a>, the source and the destination of every input and output. If I show you a formula like <tt>&ldquo;f(x) = 1 / x&rdquo;</tt>, you can say it&rsquo;s invalid, because you can&rsquo;t divide when x is zero. But if I tell you the Domain is every Natural number except zero, now it&rsquo;s a perfectly valid formula for the Image of the Rationals.</p>
<p>So when someone says &ldquo;#noEstimates&rdquo;, the natural question is: in which Domain and for what Image? That&rsquo;s the origin of the confusion in most Internet arguments. People argue for or against an idea because each one is in a different Domain. Same goes for Agile in general, Lean Startups, Lean Manufacturing, and so on: they tend to define only practices, procedures, formulas, but they rarely define Domain and Image. That creates confusion and misses the point.</p>
<p>What I&rsquo;ll define is this: Projects are necessary every time there&rsquo;s a defined goal to hit. That&rsquo;s the domain. And I&rsquo;ll also state that whoever says &ldquo;#noEstimates&rdquo; is thinking about the Domain of &ldquo;Ongoing Operations&rdquo;, while Projects are a separate Domain. That&rsquo;s exactly where Lean Manufacturing in general fits too.</p>
<p>I already explained Operations above, and it&rsquo;s where the small improvement steps (Kaizen) emerge. Sometimes the feedback from an operation gives enough input to justify a Project and take a bigger step, a breakthrough.</p>
<p>Projects, on the other hand, remain temporary endeavors. The whole idea is to set boundaries, like time and cost constraints. And we come back to the original question: is it impossible to predict the effort needed for something as malleable as software development?</p>
<p>First of all, yes, it&rsquo;s impossible to predict with exact precision. Let&rsquo;s define it again: it&rsquo;s impossible to predict a number with zero margin of error. Estimation is prediction with a margin of error. And why do some projects cost more than twice as much and take more than twice as long as the estimate?</p>
<p>Most of the time, in 90% of cases, because the team is incompetent. The problem isn&rsquo;t the estimate, it&rsquo;s the execution. Estimation is the establishment of an expectation, and expectations have to be managed. An estimate is only good if the context is taken into account.</p>
<p>Most people don&rsquo;t like to estimate because of the &ldquo;what if&rdquo; scenarios. What if the client changes their mind? What if we hit a hard obstacle? What if a meteor strikes the Earth and all living creatures perish? &ldquo;What if&rdquo; can&rsquo;t be managed; what can be managed is what you know, by creating constraints. A project&rsquo;s constraints start with its goal. To hit that goal, we also set the rules of engagement, the premises. Without goals and without premises, there&rsquo;s no game.</p>
<p>None of that guarantees a Prediction. An estimate is only as good as the execution. Now we have to manage it, and everybody has to manage it.</p>
<p>It&rsquo;s no use setting clear rules and then suddenly seeing a programmer sitting idle. You ask why he&rsquo;s idle, and the answer is &ldquo;<em>oh, because I emailed the client about some requirements and he never replied, so I was waiting</em>&rdquo;. You ask &ldquo;<em>and did you try calling him?</em>&rdquo;, and the answer is usually &ldquo;<em>No, I didn&rsquo;t</em>&rdquo;. No amount of process or methodology &ldquo;fixes&rdquo; an incompetent employee. Lack of technical skill can be fixed. Bad faith cannot.</p>
<p>The #noEstimates advocates can argue they&rsquo;re not like that, and I believe them. But 90% of the projects that failed had employees like that. Programmers tend to blame the client, the bosses, the market, but never themselves. And as a programmer I&rsquo;ll argue that most projects fail because of lazy employees, far more than because of changing requirements or limited time. Want to make projects go right? Start with Human Resources, then go find methodologies and practices.</p>
<p>The trouble with methodologies that don&rsquo;t state the Domain their formulas work in is that most people don&rsquo;t see where that Domain begins: at <strong>&ldquo;having competent, committed, and skilled employees&rdquo;</strong>. Most adopt methodologies hoping to turn incompetent employees into competent ones, and that just doesn&rsquo;t happen.</p>
<p>With that settled, why do we need estimates? Or, more generally, why do we need constraints? Because that&rsquo;s the essence of the value of any system. Nature puts pressure on every living species: changing climate, limited food, predators. The most adaptable species evolve, and the ones that can&rsquo;t adapt perish.</p>
<p>When someone says &ldquo;<em>it&rsquo;s impossible to do X</em>&rdquo;, that&rsquo;s probably the most valuable goal to chase. Because the full sentence is &ldquo;<em>it&rsquo;s impossible to do X with what we know today</em>&rdquo;. It was impossible to go around the globe in 24 hours, now it isn&rsquo;t. It was impossible to talk to the other side of the world in real time, now it isn&rsquo;t.</p>
<p>Constraints are the foundation of innovation. If I had to define innovation, I&rsquo;d say it&rsquo;s &ldquo;the process by which you accomplish something that was deemed impossible before&rdquo;.</p>
<p>If you have infinite resources, or you simply don&rsquo;t need to worry about constraints, which is what happens in bubbles, you don&rsquo;t innovate. This is so important that I&rsquo;ll repeat it:</p>
<blockquote>Innovation is the byproduct of Constraints.</blockquote>
<p>We estimate based on past knowledge. If we can&rsquo;t outdo our own past selves, how incompetent are we? You can argue that software isn&rsquo;t predictable, and I agree. But being off by orders of magnitude when recreating similar software just smells of incompetence to me.</p>
<p>Most of the software we produce is the same old thing: content websites, ecommerce, elearning, social networks, social commerce, forums, polls. It&rsquo;s rarely a brand-new idea or a breakthrough algorithm. Unless you work in research programs, what kind of truly different software have you built lately?</p>
<p>Estimation is rarely the problem. Every estimate starts from a set of premises, and the problem is not managing those premises. If the requirements change, fine, that we can always manage. What we can&rsquo;t manage is the pile of problems on the last day of the project, after the programmers kept pushing everything under the rug. Again, this is a Human Resources problem.</p>
<p>Meritocracy only exists in a system of scarcity, where one stands out against another in the face of a constraint. In a system of pure abundance, there&rsquo;s no need to innovate or to have merit. Companies that just got a humongous pile of cash invariably show symptoms of laziness, far more than of innovation.</p>
<p>The confusion comes from some of the &ldquo;practices&rdquo; being pushed coming out of this temporary, unreal bubble situation, and they can&rsquo;t take the pressure of time. Give it enough time and you&rsquo;ll ask yourself: &ldquo;how did we, with so much money and so much time, get so little done, and that little startup, with such limited resources, managed to outdo us?&rdquo;. That&rsquo;s the answer to why a Yahoo! buys a Tumblr, why a Facebook buys an Instagram, why a <a href="https://en.wikipedia.org/wiki/List_of_mergers_and_acquisitions_by_Google"target="_blank" rel="noopener">Google buys a Waze</a>.</p>
<p>If you advocate #noEstimation, why not go one step further and advocate #noWork? It&rsquo;s just one more step.</p>
]]></content:encoded><category>agile</category><category>management</category><category>software-engineering</category><category>off-topic</category></item><item><title>Introduction to Agility</title><link>https://akitaonrails.github.io/en/2013/06/28/introducao-a-agilidade/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2013/06/28/introducao-a-agilidade/</guid><pubDate>Fri, 28 Jun 2013 20:08:00 -0300</pubDate><description>&lt;p&gt;&lt;strong&gt;Original from 6/18/2010&lt;/strong&gt;: &lt;a href="http://web.archive.org/web/20130723202056/http://info.abril.com.br/noticias/rede/gestao20/gestao/introducao-a-agilidade/"target="_blank" rel="noopener"&gt;Gestão 2.0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I got back last weekend from a trip to Baltimore, Maryland, where I spoke at RailsConf. It was an event full of great talks, some aimed not just at Ruby on Rails but at the programming career in general. One of them was by no one less than Robert Martin, of Object Mentor. I translated an article of his in my previous post.&lt;/p&gt;
&lt;p&gt;I recommend watching the talk in full.&lt;/p&gt;</description><content:encoded><![CDATA[<p><strong>Original from 6/18/2010</strong>: <a href="http://web.archive.org/web/20130723202056/http://info.abril.com.br/noticias/rede/gestao20/gestao/introducao-a-agilidade/"target="_blank" rel="noopener">Gestão 2.0</a></p>
<p>I got back last weekend from a trip to Baltimore, Maryland, where I spoke at RailsConf. It was an event full of great talks, some aimed not just at Ruby on Rails but at the programming career in general. One of them was by no one less than Robert Martin, of Object Mentor. I translated an article of his in my previous post.</p>
<p>I recommend watching the talk in full.</p>
<p>Since I started this blog, I&rsquo;ve tried to explain the conditions and difficulties a Project Manager faces. But I&rsquo;ve been careful not to repeat the term &ldquo;Agile&rdquo; at every turn. We&rsquo;re in the middle of an &ldquo;agility&rdquo; fever. Every CIO, CTO, manager, or consultant, to seem modern, says they know &ldquo;Scrum&rdquo; and that they&rsquo;re &ldquo;agile&rdquo;.</p>
<p>That has a good side: some companies might finally adopt these ideas the right way. It also has a bad side, and a big one. We&rsquo;re burning the name &ldquo;Agile&rdquo; because of bad consultancies that implement everything wrong at the client. The result is the perception, among the uninformed, that &ldquo;Agile doesn&rsquo;t work&rdquo;.</p>
<p>Well, during RailsConf, I had the chance to talk to and interview Robert Martin, whose recording you can watch below:</p>
<div class="video-container">
    <video controls>
        <source src="https://s3.us-east-2.amazonaws.com/blip.tv/Akitaonrails-RailsConf2010RobertMartin974.mp4">
        Your browser does not support the video tag. [Direct Link](https://s3.us-east-2.amazonaws.com/blip.tv/Akitaonrails-RailsConf2010RobertMartin974.mp4)
    </video>
</div>
<p>From this interview, the part I want to present is the story of how &ldquo;Agile&rdquo; came about. Robert Martin, also known as &ldquo;Uncle Bob&rdquo;, has been a programmer for decades, certainly more than any of us. In the 90s he was one of those who noticed the rise of &ldquo;light&rdquo; or &ldquo;lean&rdquo; methodologies. Much of that came from the manufacturing concepts that revolutionized Japanese industry from the 60s onward.</p>
<p>Several big names started proposing smarter ways to develop software. Kent Beck with Extreme Programming (XP); Ken Schwaber and Jeff Sutherland with Scrum; Alistair Cockburn with Crystal.</p>
<p>They all followed a similar line: short iterations, constant feedback, and a lot of communication. Seeing that pattern, Uncle Bob reached out to Martin Fowler, another strong name in the world of software architecture, and together they began organizing a meeting, summoning a group of these professionals.</p>
<p>The legendary meeting took place at the Snowbird ski resort in Utah, between February 11 and 13, 2001. Seventeen professionals spent three days there and walked out with the &ldquo;Agile Manifesto&rdquo;. It brings together <strong>4 values</strong> and <strong>12 principles</strong> that all the participants accepted as the minimum common denominator in the practice of software development. The manifesto says:</p>
<blockquote>
  <p>We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:</p>
<p>Individuals and interactions over processes and tools</p>
<p>Working software over comprehensive documentation</p>
<p>Customer collaboration over contract negotiation</p>
<p>Responding to change over following a plan</p>
<p>That is, while there is value in the items on the right, we value the items on the left more.</p>

</blockquote>
<p>As I said before, there&rsquo;s a growing fever in the adoption of agile methodologies. Worse than that, there&rsquo;s a tendency to expropriate the term &ldquo;Agile&rdquo; and its derivatives, like &ldquo;XP&rdquo; and &ldquo;Scrum&rdquo;, creating real frankensteins that blend the old way with the new. It&rsquo;s the case of trying to join RUP with Scrum, or PMI with Scrum, and so on.</p>
<p>These are opportunistic attempts riding the fever to make easy money. Some companies, for example, insist on a &ldquo;Certified Scrum Master&rdquo; in a manager&rsquo;s resume, among other equally <strong>irrelevant</strong> things.</p>
<p>And, to make it worse, many try to implement agile methodologies <em>&ldquo;by the book&rdquo;</em>, that is, dogmatically. Every dogma, by definition, is dumb.</p>
<p>Back to the 4 values: the priority is working software and value to the client. Implementing a methodology comes after that, if it comes at all. The first value is clear: it values Individuals and Interactions much more than Processes and Tools. What we see today is the opposite, an effort to push processes, methodologies, and tools.</p>
<p>Now is a good time to start demystifying the Agile world. This here is just an introduction, but the advice Uncle Bob gives in the interview holds: <strong>follow the originals</strong>. If you&rsquo;re really committed to improving things and delivering projects with quality and value, drop this new generation of consultancies. Start with the first books by Ken Schwaber, Kent Beck, Alistair Cockburn, and Mike Cohn.</p>
<p>Ask yourself all the time: am I in agreement with the 4 values?</p>
<p>If you&rsquo;re putting more emphasis on the process than on people, you&rsquo;ve already started wrong. Very wrong.</p>
]]></content:encoded><category>agile</category><category>management</category><category>software-engineering</category><category>off-topic</category></item><item><title>Processes, Methodologies, and the Human Brain</title><link>https://akitaonrails.github.io/en/2013/06/21/processos-metodologias-e-o-cerebro-humano/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2013/06/21/processos-metodologias-e-o-cerebro-humano/</guid><pubDate>Fri, 21 Jun 2013 20:00:00 -0300</pubDate><description>&lt;p&gt;&lt;strong&gt;Original from 6/24/2010&lt;/strong&gt;: &lt;a href="http://web.archive.org/web/20130311020016/http://info.abril.com.br/noticias/rede/gestao20/gestao/processos-metodologias-e-o-cerebro-humano/"target="_blank" rel="noopener"&gt;Gestão 2.0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The human brain is a fantastic machine, and saying that is basically a redundancy of the term. But there are many anecdotes and mysticism when people talk about it.&lt;/p&gt;
&lt;p&gt;Everyone has at some point discussed the separation of &lt;strong&gt;&amp;ldquo;Emotion&amp;rdquo;&lt;/strong&gt; from &lt;strong&gt;&amp;ldquo;Reasoning.&amp;rdquo;&lt;/strong&gt; Since the time of Plato, emotions have been seen as something that gets in the way of logical thinking. Worse: most people believe that, at least in the most important decisions, we&amp;rsquo;re capable of setting emotions aside. The idea is to think according to classical economics, based on facts, evidence, and cost-benefit.&lt;/p&gt;</description><content:encoded><![CDATA[<p><strong>Original from 6/24/2010</strong>: <a href="http://web.archive.org/web/20130311020016/http://info.abril.com.br/noticias/rede/gestao20/gestao/processos-metodologias-e-o-cerebro-humano/"target="_blank" rel="noopener">Gestão 2.0</a></p>
<p>The human brain is a fantastic machine, and saying that is basically a redundancy of the term. But there are many anecdotes and mysticism when people talk about it.</p>
<p>Everyone has at some point discussed the separation of <strong>&ldquo;Emotion&rdquo;</strong> from <strong>&ldquo;Reasoning.&rdquo;</strong> Since the time of Plato, emotions have been seen as something that gets in the way of logical thinking. Worse: most people believe that, at least in the most important decisions, we&rsquo;re capable of setting emotions aside. The idea is to think according to classical economics, based on facts, evidence, and cost-benefit.</p>
<p>But in the vast majority of cases, that&rsquo;s not how we behave. When we go to the supermarket, we rarely stand there doing arithmetic, weighing each product&rsquo;s ingredients or nutritional value. Usually we look at a product and decide whether to buy it based on how we feel.</p>
<p>Among dozens of brands for the same type of product, we choose based on past experiences, on some memorable event, on memories, and all in fractions of a second. We prefer to buy an &ldquo;80% light&rdquo; product over a &ldquo;20% fat&rdquo; one, even though both phrases say the same thing.</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/354/parkinsons.gif" alt="Brain"  loading="lazy" /></p>
<p>Antonio Damasio is a well-known neurologist who studies the brain and our behavior. He followed patients who literally lost the ability to have emotions because of brain damage, whether from a tumor or a genetic problem. We might imagine, as the philosopher Plato did, that a person without emotions would make the best decisions all the time, since they wouldn&rsquo;t be influenced by them.</p>
<p>But without emotions, these people can&rsquo;t learn. Any trivial decision becomes a cost-benefit analysis. Everyday choices like what clothes to wear, what TV channel to watch, tea or coffee, all the mundane things we decide almost instantly, can take hours before this type of patient reaches a conclusion.</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/354/parkinsons.gif" alt="Brain"  loading="lazy" /></p>
<p>A fact we already know: all emotions, sadness, compassion, joy, depression, pleasure, are chemical reactions in the brain. And we already know how to influence or control many of them.</p>
<p>Drug users know the sensation of pleasure. People who take antidepressants do too. They&rsquo;re all chemicals that act on the brain and modify our emotions. Schizophrenia and Parkinson&rsquo;s, on the other hand, are damage to this chemical system.</p>
<p>Another fact is that our brain evolved to learn. We learn through trial and error. We learn by observing and inferring patterns. Emotions strongly influence our decisions, and that&rsquo;s good.</p>
<p>When we learn some pattern, dopamine is released in the brain and creates a sensation of pleasure. We like to discover the pattern of things and to try to predict future events.</p>
<p>Take an experiment with monkeys: we ring a bell and then give a banana. The monkey learns the pattern &ldquo;after the bell comes the banana.&rdquo; You can measure dopamine being released the moment the bell rings, because the monkey starts to anticipate that event.</p>
<p>If we turn on a light, ring the bell, and then give the banana, the monkey learns that the &ldquo;light&rdquo; event precedes the bell and then the banana. The pattern can be repeated with several stages, and the monkey learns it. But if we follow the pattern and the banana doesn&rsquo;t come at the end, the monkey gets sad, because the prediction failed.</p>
<blockquote>
  <p>We also work this way.</p>

</blockquote>
<p>For many simple events, with few variables, this works well. Perhaps that&rsquo;s why many like routine, where the results are well defined.</p>
<p>Our brain, however, has a flaw: in its eagerness to find patterns, it tries to fit them where they don&rsquo;t exist. That&rsquo;s how <strong>superstitions</strong> are born. Before we understood meteorology, primitive tribes thought &ldquo;it&rsquo;s raining&rdquo; was tied to a dance they had just done, and imagined that repeating the dance would bring the rain back.</p>
<p>I translated on my other blog a Scientific American article showing how we are &ldquo;mathematically ignorant.&rdquo; We try to find a pattern for everything. A passage that illustrates our superstitions and explanations about coincidence is this:</p>
<blockquote>
  <p>It&rsquo;s always possible to combine random data and find some regularity. A very well-known example is the comparison of coincidences in the lives of Abraham Lincoln and John Kennedy, two presidents with 7 letters in their last names, and elected 100 years apart, 1860 and 1960. Both were assassinated on a Friday in the presence of their wives, Lincoln at the Ford Theater and Kennedy in an automobile made by Ford. Both assassins have 3 names: John Wilkes Booth and Lee Harvey Oswald, with 15 letters in each full name. Oswald shot Kennedy from a warehouse and ran to a theater, and Booth shot Lincoln in a theater and ran to a kind of warehouse. Both successor vice presidents were Southern Democrats and former senators named Johnson (Andrew and Lyndon), with 13 letters in their names and born 100 years apart, 1808 and 1908.</p>

</blockquote>
<blockquote>
  <p>But if we compare other relevant attributes, we fail to find coincidences. Lincoln and Kennedy were born and died on different dates (day and month) and in different states, and none of the dates are 100 years apart. Their ages were different, as were their wives&rsquo; names. Of course, if any of these had matched, they would be on the list of &ldquo;mysterious&rdquo; coincidences. For any person with a life reasonably full of events, it&rsquo;s possible to find coincidences between them. Two people meeting at a party often find shocking coincidences between them, but what they are – birthdays, hometowns, etc. – aren&rsquo;t predicted in advance.</p>

</blockquote>
<p>The real world is full of <strong>randomness</strong>, and it isn&rsquo;t hard to find patterns in it. Actually it&rsquo;s very easy. Complex situations have many random aspects, more than we imagine. And our brain hasn&rsquo;t evolved enough to feel comfortable in a totally random world.</p>
<p>An example is successful people. Imagine a mega-investor like Warren Buffett. Books upon books get printed, with analyses, biographies, and theories, trying to explain the process that takes an ordinary person to earning billions on the stock exchange. Just as speculation: what if Warren Buffett is nothing more, nothing less, than a statistical accident?</p>
<p>Nassim Taleb explains this in a Malcolm Gladwell article:</p>
<blockquote>
  <p>Suppose that there were ten thousand investment managers out there — which is not an outlandish number — and that every year, entirely by chance, half of them made money and half of them lost money. And suppose that every year the losers were tossed out, and the game replayed with those who remained. At the end of five years, there would be three hundred and thirteen people who had made money in every one of those years, and after ten years there would be nine people who had made money every single year in a row — all out of pure luck. And who&rsquo;s to say Buffett isn&rsquo;t one of those nine?</p>

</blockquote>
<p>Our brain takes pleasure in looking for patterns in everything, especially in success stories. We want to find the recipe, the magic formula. Sometimes we get that feeling of &ldquo;what does he have that I don&rsquo;t?&rdquo;</p>
<p>Sometimes two people are technically equally capable, but one gets rich and the other doesn&rsquo;t. The difference can simply be randomness. &ldquo;But that isn&rsquo;t fair!&rdquo; you complain. The world wasn&rsquo;t made to be fair. Justice is a human concept, and reality has no sense of morality: it simply &ldquo;is.&rdquo;</p>
<p>Science, fortunately, has a procedure to avoid this trap of the brain: the scientific method. Everything can start with one of these misfirings, thinking it found a pattern and generating a theory. Now that theory has to be put to the test.</p>
<p>For it to become a good theory, we need not only to try to prove it but, mainly, to try to disprove it. And even if we don&rsquo;t find a way to disprove the hypothesis, that doesn&rsquo;t make it a &ldquo;Law.&rdquo; Science is very careful with the claims it makes.</p>
<p>Even if a theory works well a thousand times, a single failure is enough for it to be rejected. It&rsquo;s thanks to this way of thinking that we have solid and reliable foundations in science, free of superstition and mysticism.</p>
<h3>Processes, Methodologies, and Superstitions<span class="hx:absolute hx:-mt-20" id="processes-methodologies-and-superstitions"></span>
    <a href="#processes-methodologies-and-superstitions" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>I gave that whole explanation to get to the main topic of this blog: project and people management. Anyone following my posts noticed that at no point do I preach a methodology, a process, a cookbook recipe. Things like &ldquo;how to make correct estimates&rdquo; or &ldquo;how to predict the success of a project.&rdquo;</p>
<p>If you&rsquo;re well informed, you know there&rsquo;s a whole market of individuals and companies that try exactly this: to sell you processes and methodologies. Whether traditional Software Engineering, PMI, or the so-called &ldquo;Agile methodologies.&rdquo;</p>
<p>First I need to leave a warning: all these methodologies were thought up with the best of intentions. The idea was to share the factors that led a certain project to success.</p>
<p>My explanation is more or less this: the leaders of these projects, or rather, their brains, tirelessly start looking for patterns. Maybe it&rsquo;s the post-it on the wall. Maybe the kind of document used. Maybe the way people sit at the table.</p>
<p>All of this forms a set of &ldquo;pseudo-truths&rdquo; that the brain understands as the &ldquo;lights&rdquo; and &ldquo;bells&rdquo; that lead to the &ldquo;banana.&rdquo; These leaders apply the recipe to other projects and, as Nassim Taleb explained, succeed consecutively.</p>
<p>Eureka! It seems we found the formula for turning iron into gold! Quickly these pseudo-truths get formatted as methodologies, canned, packaged, and sold.</p>
<p>But think for a moment: what if all these methodologies are exactly like the rain dance? As I said, it&rsquo;s very easy to find patterns in randomness.</p>
<p>When we start discussing minutiae, what level of detail to make an estimate at, what metrics to use, what mechanisms for team communication, I can&rsquo;t help thinking of primitive tribes discussing &ldquo;What feathers should we wear? What colors on our face? Should we take long or short steps in the dance?&rdquo;</p>
<p>But the main question never comes up: is the rain dance the thing that actually makes it rain? Or, in our case, is the methodology the thing that actually takes the project to success?</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/356/rainDance.jpg" alt="Rain Dance"  loading="lazy" /></p>
<p>And the scientific method? The problem is that a &ldquo;project&rdquo; is a very complex situation. Even the smallest projects are complex, in the sense that they have more variables than it&rsquo;s possible to measure.</p>
<p>One way to test a theory is to run a double-blind experiment, like drug labs do: one group receives the real medication and another receives a placebo, without knowing. If both have approximately the same result, the drug doesn&rsquo;t work.</p>
<p>But a methodology is more complicated than a drug. Even if we create two isolated and identical work environments, put two groups of &ldquo;approximately&rdquo; similar people in each, start at the same time and with the same requirements, one side with methodology &ldquo;A&rdquo; and the other with &ldquo;B,&rdquo; we still have no way to compare the results.</p>
<p>That&rsquo;s because methodologies involve the micro-decisions and capabilities of each person, and &ldquo;approximately similar&rdquo; is very different from &ldquo;equal.&rdquo; It&rsquo;s impossible to duplicate the same group of people in each environment.</p>
<p>We would first have to successfully clone the people. Then, with exactly identical groups, we could run a double-blind experiment. But that&rsquo;s impossible.</p>
<p>The conclusion is that proving a methodology of this type as &ldquo;correct&rdquo; is impossible, just as it&rsquo;s hard to disprove it. So it&rsquo;s useless to try to claim they work or not. Of course they influence, and separately, each technique can be tested more carefully. But I don&rsquo;t think it&rsquo;s possible to scientifically claim that they work.</p>
<blockquote>
  <p><em>&ldquo;But I tested methodology X on my project and it worked!&rdquo;</em></p>

</blockquote>
<p>Excellent, good for you. But for every project that succeeded with a certain methodology, you can find a case where it went wrong.</p>
<p>And the individuals and consultancies that sell these methodologies are clever: if the project worked, it was thanks to the methodology; if it went wrong, it&rsquo;s because the people didn&rsquo;t follow the methodology as they should have. The methodology is never at fault. It&rsquo;s excellent rhetoric for building a sales argument.</p>
<p>And since people aren&rsquo;t used to evaluating things rationally, and as I explained, most of the time they don&rsquo;t reason at all, we&rsquo;re left with lots of consultants making a lot of money without having to commit to results.</p>
<p>That matters because many people believe that, with the help of the fashionable methodology, simply applying it to a team of nothing but inexperienced people will make a good result appear, as if what mattered were the process and not the people. The opposite happens.</p>
<p>Most of the time these methodologies don&rsquo;t describe the exact qualifications each member needs to have, because it&rsquo;s impossible to list them all. At most they offer vague descriptions of &ldquo;roles,&rdquo; which generate more discussion than answers. A project with a chance of succeeding starts with at least some very experienced people, capable of guiding the rest of the team.</p>
<p>Anyway, my recommendation: study the so-called &ldquo;methodologies,&rdquo; because, as I said, some techniques there have value. But understand that none of them represents the truth.</p>
<p>And there&rsquo;s no point in adding two half-methodologies together thinking it makes them &ldquo;more complete.&rdquo; Projects are executed by people, human behavior is hard to predict, and the real world is full of unpredictable variables, forming a complex system with a lot of randomness involved.</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/355/evolution.jpg" alt="Evolution"  loading="lazy" /></p>
<p>Start by accepting that the world is random and beyond your control. In complex situations it&rsquo;s better to err sooner than later, because errors bring information that helps refine the next decisions.</p>
<p>Accept that predicting the future in a complex system is impossible, and adapt: some things will go as planned and others will need to change. Maybe some unforeseen feature will need to be built, and the deadline will have to stretch. Maybe some planned feature wasn&rsquo;t so necessary after all and can be dropped. That&rsquo;s how you deal with a complex and unpredictable environment: <strong>adapting</strong>.</p>
<p>Biology explains it: all living beings on the planet are the result of a constant sequence of trial and error. Nature isn&rsquo;t &ldquo;perfect,&rdquo; in the sense that there is no creator, no intelligent design, no grand plan, no destiny. Every living being came from a very bad biological draft that, little by little, via natural selection, discarded what didn&rsquo;t work and favored what did.</p>
<p>We humans carry biological leftovers, like the appendix. We are a product in constant evolution, and for plenty of things the current stage is &ldquo;good enough.&rdquo; In terms of a project, that&rsquo;s exactly the point where it can be launched: when it&rsquo;s &ldquo;good enough,&rdquo; still with rough edges to fix, but working overall.</p>
<p>Trial and error. Adaptation. Evolution. That&rsquo;s how you manage anything.</p>
<p>If you want a more detailed view on this topic, I recommend starting with the following books:</p>
<ul>
<li><a href="http://www.amazon.com/How-We-Decide-Jonah-Lehrer/dp/0618620117"target="_blank" rel="noopener">How We Decide</a> by Jonah Lehrer</li>
<li><a href="http://www.amazon.com/Descartes-Error-Emotion-Reason-Human/dp/014303622X"target="_blank" rel="noopener">Descartes’ Error</a> by Antonio Damasio</li>
<li><a href="http://www.amazon.com/Predictably-Irrational-Revised-Expanded-Decisions/dp/0061353248"target="_blank" rel="noopener">Predictably Irrational</a> by Dan Ariely</li>
<li><a href="http://www.amazon.com/Fooled-Randomness-Hidden-Chance-Markets/dp/1400067936"target="_blank" rel="noopener">Fooled by Randomness</a> by Nassim Taleb</li>
<li><a href="http://www.amazon.com/Lucifer-Effect-Understanding-Good-People/dp/0812974441"target="_blank" rel="noopener">The Lucifer Effect</a> by Philip Zimbardo</li>
</ul>
]]></content:encoded><category>psychology</category><category>agile</category><category>management</category><category>off-topic</category></item><item><title>[Translation] Standards: excellence vs. mediocrity</title><link>https://akitaonrails.github.io/en/2013/05/17/traducao-padroes-excelencia-vs-mediocridade/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2013/05/17/traducao-padroes-excelencia-vs-mediocridade/</guid><pubDate>Fri, 17 May 2013 19:25:00 -0300</pubDate><description>&lt;p&gt;&lt;strong&gt;Original from 4/24/2011&lt;/strong&gt;: &lt;a href="http://web.archive.org/web/20130414102405/http://info.abril.com.br/noticias/rede/gestao20/gestao/padroes-excelencia-vs-mediocridade/"target="_blank" rel="noopener"&gt;Gestão 2.0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The text below is a translation of the excellent article &lt;a href="http://jchyip.blogspot.com/2011/04/standards-excellence-vs-mediocrity.html"target="_blank" rel="noopener"&gt;Standards: excellence vs mediocrity&lt;/a&gt;, written by Jason Yip, a Thoughtworks consultant I had the pleasure of meeting in person last year.&lt;/p&gt;
&lt;p&gt;Before the translated text, a short introduction. Plenty of concepts we treat as foundational in the Western world carry a radically different meaning in the Eastern world. One of the hardest to carry across is precisely &amp;ldquo;standard.&amp;rdquo;&lt;/p&gt;</description><content:encoded><![CDATA[<p><strong>Original from 4/24/2011</strong>: <a href="http://web.archive.org/web/20130414102405/http://info.abril.com.br/noticias/rede/gestao20/gestao/padroes-excelencia-vs-mediocridade/"target="_blank" rel="noopener">Gestão 2.0</a></p>
<p>The text below is a translation of the excellent article <a href="http://jchyip.blogspot.com/2011/04/standards-excellence-vs-mediocrity.html"target="_blank" rel="noopener">Standards: excellence vs mediocrity</a>, written by Jason Yip, a Thoughtworks consultant I had the pleasure of meeting in person last year.</p>
<p>Before the translated text, a short introduction. Plenty of concepts we treat as foundational in the Western world carry a radically different meaning in the Eastern world. One of the hardest to carry across is precisely &ldquo;standard.&rdquo;</p>
<p>In the Western world, a &ldquo;standard&rdquo; is a common denominator: static, rigid, hard to change, the status quo. In the Eastern world, &ldquo;standard&rdquo; means &ldquo;the best.&rdquo; If tomorrow another &ldquo;best&rdquo; shows up, that becomes the new standard. It isn&rsquo;t something unreachable that we admire from below, knowing we&rsquo;ll hardly get there, like a &ldquo;record.&rdquo;</p>
<p>Imagine a world where the &ldquo;record&rdquo; is the &ldquo;standard.&rdquo; I wrote about this in another article, <a href="/en/2009/06/14/off-topic-padr-es-commodities-e-inova--es">Standards, Commodities, and Innovations</a>, and it&rsquo;s worth the read. Here&rsquo;s the translation of Jason&rsquo;s article:</p>
<p>A few years ago, I went on a Lean study tour in Japan. As expected, we did a plant visit at Toyota. Unexpectedly, this visit was hosted by the plant manager who also accompanied us on the standard guided tour. At one point, we were looking at a demonstration area of fundamental skills training &ndash; developing the basic skills necessary to be a productive member on the assembly line. Most of this was about hand-eye coordination and motor skills. For example, there&rsquo;s an exercise where you take a thin rope and wrap it around a set of pegs following a known clockwise or counter-clockwise sequence. I&rsquo;ve sketched an example of what this might look like:</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/351/note.png" alt="Test"  loading="lazy" /></p>
<p>I was able to do the exercise in 8 seconds. We then watched a video showing the plant champion doing it in 4 seconds. We asked the plant manager what the standard was, expecting the answer to be something like 5 - 6 seconds. His answer? 4 seconds, of course. If someone is able to do 5 - 6 seconds, they&rsquo;d train them to achieve 4 but slower than that, and they&rsquo;d probably find the candidate something else to do.</p>
<p>Our basic assumption was that &ldquo;standard&rdquo; is supposed to be something easy enough that everyone can do it. Sometimes that &ldquo;standard&rdquo; comes with an expectation of training but many times it ends up being about lowest common denominator in order to achieve consistency. Obviously, we can&rsquo;t achieve consistency if our standards can only be achieved by a subset of people. The consequence of this mindset is that &ldquo;standards&rdquo; inevitably pull the organisation toward mediocrity.</p>
<p>The Toyota assumption was that the best should be the standard. There is still an expectation that people can do it (with training) and an expectation of consistency but it&rsquo;s a standard of excellence rather than lowest common denominator. This creates a much higher expectation of performance and challenge. The consequence of this mindset is that &ldquo;standards&rdquo; inevitably pull the organisation toward excellence, especially as people&rsquo;s capabilities continue to develop over time.</p>
<p>In one case, standards are an anchor; in the other case, standards are an engine.</p>
<p>Is this any different in our world of information technology and software development? I don&rsquo;t think so. Think about the last standard you encountered (e.g., coding standard, design standard, etc.). Was it designed as an anchor or as an engine? And what would it be like if every standard was designed to be an engine?</p>
]]></content:encoded><category>software-engineering</category><category>agile</category><category>management</category><category>off-topic</category></item><item><title>[Translation] Estimation — The Best We Can Do</title><link>https://akitaonrails.github.io/en/2013/04/05/traducao-estimativa-o-melhor-que-podemos-fazer/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2013/04/05/traducao-estimativa-o-melhor-que-podemos-fazer/</guid><pubDate>Fri, 05 Apr 2013 16:47:00 -0300</pubDate><description>&lt;div style="float: right; margin: 10px"&gt;&lt;img src="http://s3.amazonaws.com/akitaonrails/assets/image_asset/image/331/Ron_Jeffries-nobull.jpg"/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Ron_Jeffries"target="_blank" rel="noopener"&gt;Ron Jeffries&lt;/a&gt; is one of the 17 original signatories of the Agile Manifesto and one of the 3 founders of Extreme Programming. He publishes articles in the Pragmatic Programmers e-magazine, and the April 2013 issue ran &amp;ldquo;Estimation: The Best We Can Do.&amp;rdquo; I asked editor Michael Swaine for permission to translate this article into Portuguese, since it was a subject I meant to write about myself and Ron did a better job of it. I still have plenty to say about estimates, but for now I&amp;rsquo;ll go straight to the translation:&lt;/p&gt;</description><content:encoded><![CDATA[<div style="float: right; margin: 10px"><img src="http://s3.amazonaws.com/akitaonrails/assets/image_asset/image/331/Ron_Jeffries-nobull.jpg"/></div>
<p><a href="http://en.wikipedia.org/wiki/Ron_Jeffries"target="_blank" rel="noopener">Ron Jeffries</a> is one of the 17 original signatories of the Agile Manifesto and one of the 3 founders of Extreme Programming. He publishes articles in the Pragmatic Programmers e-magazine, and the April 2013 issue ran &ldquo;Estimation: The Best We Can Do.&rdquo; I asked editor Michael Swaine for permission to translate this article into Portuguese, since it was a subject I meant to write about myself and Ron did a better job of it. I still have plenty to say about estimates, but for now I&rsquo;ll go straight to the translation:</p>
<blockquote>
  <p>Two months ago in these pages, Ron Jeffries told us that estimates are evil. Now he&rsquo;s back to tell us they&rsquo;re a necessary evil and, done the right way, they aren&rsquo;t even evil.</p>

</blockquote>
<p>Yes, there are many abuses perpetrated by organizations around the notion of estimation. Many developers have suffered grievances from these abuses more than once in their careers.</p>
<p>Unfortunately, this leads to the common naïve view among would-be agile practitioners who are still early in learning: they want to abolish estimates completely. That&rsquo;s probably not possible, and certainly not ideal. We have the ability to estimate how quickly we can do things, and companies can make better decisions if we share what we know.</p>
<p>Software development isn&rsquo;t a perfect machine that spits out features quickly. I know it&rsquo;s comfortable to think we have no responsibility for business concerns like money, time, or dates. But that isn&rsquo;t true. What we build isn&rsquo;t solely influenced by some Lord of the Products who decides what we&rsquo;re going to do and takes on all the risks. Executives are the ones with the final decision, but many of the decisions are better made by the team — and not only in how to do things, but what to do. We have the responsibility to help guide the projects, using our creativity and our special knowledge.</p>
<p>The Agile Manifesto says, &ldquo;the best architectures, requirements, and designs emerge from self-organizing teams,&rdquo; and that&rsquo;s what we meant (my emphasis). Agile developers usually have a good sense of how long things will take, and that&rsquo;s a valuable component of selecting and refining requirements. Developers need to have the attitude of talking about possible costs of what they&rsquo;re asked to do.</p>
<h2>Concerns About Estimates<span class="hx:absolute hx:-mt-20" id="concerns-about-estimates"></span>
    <a href="#concerns-about-estimates" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>There really are several serious problems related to estimating a software job. In a previous article <a href="http://web.archive.org/web/20130420092744/http://pragprog.com/magazines/2013-02/estimation-is-evil"target="_blank" rel="noopener">&ldquo;Estimation is Evil&rdquo;</a>, I described some of them. Let&rsquo;s review them:</p>
<ul>
<li>Pre-defined work backlogs reduce creativity and inhibit adjusting the project for success.</li>
<li>Demanding delivery of &ldquo;everything&rdquo; on some fixed date is a trick that never works.</li>
<li>Treating estimates as promises leads to conservative teams and frustrating results.</li>
<li>Trying to improve the &ldquo;quality&rdquo; of the estimates is attention that could give better results if turned toward improving the quality of the product.</li>
<li>And so on.</li>
</ul>
<p>In that article, I argued that the result of this focus is &ldquo;weak Agile.&rdquo; In essence, teams focused on estimates are usually on the weak side of the balance between cost and value. Better teams focus more on value and less on cost. They still consider cost, because cost is an important component in delivering value. But value is their primary interest.</p>
<p>It&rsquo;s true that many first-rate teams don&rsquo;t estimate in the real sense of the term. They work on small stories, small enough that to get a sense of progress you can just count them. They work on the highest-value things first — using whatever notion of value they have. They adjust their vision frequently, and adjust what they&rsquo;ll work on next according to what is happening. They work to produce a continuous flow of valuable software, and they deliver as frequently as possible, usually daily.</p>
<p>Since estimation is often associated with weak and dysfunctional teams, and since great teams seem to work without estimates, many Agile practitioners strongly resist any estimates of any kind. And it&rsquo;s a good thing to build a team — and an organization — that is strong enough to work without estimates. But it&rsquo;s an advanced way of working, never the way to start. It isn&rsquo;t good to refuse to estimate, or even to feel resentful about it, in an organization where it&rsquo;s necessary. On the contrary, we need to learn to do it right, in a way that influences the organization positively.</p>
<h2>Budgeting New Projects<span class="hx:absolute hx:-mt-20" id="budgeting-new-projects"></span>
    <a href="#budgeting-new-projects" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Now, let&rsquo;s look at a legitimate need — helping the organization decide whether to proceed or not with a project.</p>
<p>When something goes wrong with our house or car, and we don&rsquo;t have all the money in the world, we probably get estimates to fix those things. We probably consider alternatives: if the trunk lid is scratched, should we repaint the whole car to match the color perfectly, just spray the lid, try to polish the scratches, or just live with the scratches? We choose the option that seems to be the best use of our money.</p>
<p>Business people budgeting projects have the same problem of allocating funds. They need to consider how to deliver the greatest value possible within the budget. In a small organization trying to create wonderful new products, the concern is even greater. We need to start generating positive cash flow before the money runs out!</p>
<p>In situations like that, we really need to have estimates. We need to know whether it&rsquo;s a wise decision to go ahead with the new project. Business people already have some estimates in mind: how many people will be interested? What percentage of prospects will become buyers? How much will buyers pay for the product?</p>
<p>But they need to decide: can we start bringing in enough money to stay alive before our money runs out?</p>
<p>The decision-maker knows that all these estimates are estimates, and uses the best judgment to value them. But there&rsquo;s a key area they don&rsquo;t know much about: how much of this product can be done, by what date, for how much money? That&rsquo;s a technical question, and it needs to be answered by technical people.</p>
<p>Yes, of course, we don&rsquo;t know either. We really don&rsquo;t know how long it will take. But let&rsquo;s face the facts — we have a better idea of how long things will take compared to the poor entrepreneur, and they need our help.</p>
<p>I believe we can give a better guess whether it will take a week, a month, a quarter, or a year before we start having a good idea of how quickly we can progress. And this guess, however broad, is a better guess than a business person can give.</p>
<p>We can&rsquo;t just say <em>&ldquo;Should we try?&rdquo;</em> It seems we can say something like:</p>
<p><em>&ldquo;Our team costs $10K per week. Let&rsquo;s start working on the most important, riskiest, most informative parts of your product, and create a sense of how hard it will be and how long things will take. You&rsquo;ll see us building what you asked for. You&rsquo;ll see us working. You&rsquo;ll be able to decide whether you want to keep investing or stop.&rdquo;</em></p>
<p>It seems to make sense to say that — unless it&rsquo;s your $10K coming out of your pocket every week. Then you have more questions. <em>&ldquo;Will I know after a week? Will I have to wait a whole month to know? Will I know by June? Jeez, guys, that&rsquo;s about $100K from now until June. That&rsquo;s a ton of money! Give me a break here! How much is this going to cost?&rdquo;</em></p>
<p>We need to take hold of this kind of challenge. We should give the most solid answer we can, even when we don&rsquo;t have an absolutely concrete answer.</p>
<p>We&rsquo;re walking on sand. How do we get concrete?</p>
<p>The question is, <em>&ldquo;How long will it take, and how much money will it cost, to get to a product people can buy?&rdquo;</em></p>
<p>We&rsquo;d like to say, <em>&ldquo;Well, start spending some money with us, and if you get bored, stop,&rdquo;</em> but that doesn&rsquo;t help at all. Can we change this idea a little? Let&rsquo;s start with a pretty broad estimate just to get a sense of where we are.</p>
<p>We probably already have some notion of whether it will take a week, a month, or six months to do something usable. If so, let&rsquo;s talk about it. Our investor already has a value in mind that they can spend. Let&rsquo;s find out how much that is, or get a sense of it in the conversation.</p>
<p>Suppose we imagine that we might get a rudimentary but usable version of the product in six months, and the investor is willing to invest up to $1 million until we achieve positive cash flow. $1 million is roughly a year of our time, and if we take 9 months instead of 6, we&rsquo;ll need to bring in $1 million in three months to reach positive. Let&rsquo;s talk about that. How quickly does he expect revenue to grow with the first version? Suppose he thinks revenue will grow quickly, so if we take 9 months, we&rsquo;re fine. That sounds risky to me, but it seems the project at least looks good enough to explore.</p>
<p>Remember how Agile works. We want business people to be fully engaged in decision-making about spending money based on what they see. So let&rsquo;s start thinking about selecting features, not just dates.</p>
<h2>Estimates That Won&rsquo;t Make You Regret<span class="hx:absolute hx:-mt-20" id="estimates-that-wont-make-you-regret"></span>
    <a href="#estimates-that-wont-make-you-regret" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p><em>&ldquo;OK, intuitively, we think we can deliver an initial version in six months, and we think that if we take nine months, the project would be viable. It sounds good, but it still sounds risky. We&rsquo;d hate to see you spend all this and get nowhere, and what we have is still rough guesses.&rdquo;</em></p>
<p><em>&ldquo;So let&rsquo;s do this: let&rsquo;s spend two weeks to produce a more concrete answer. Two weeks will cost you only $20K, which is much less than $1 million. In these two weeks, you&rsquo;ll actively work with us on the most important aspects of the product. Some will be interface things, some will be driven by business or technical risks we can predict now. At the end of these two weeks, we decide whether we want to continue. Our job will be to show you, concretely, what we can build that convinces us of whether to proceed or not. Your job will be to guide us by describing what you want, and to work with us to identify risks and concerns.&rdquo;</em></p>
<p><em>&ldquo;If after these two weeks, things look bad, we&rsquo;ll know it, and we&rsquo;ll recommend you stop. If things look good by then, we&rsquo;ll decide together what the next decision point will be. It could be a month from now, or three months from now. Frankly, we&rsquo;re perfectly happy to do this every two weeks.&rdquo;</em></p>
<p><em>&ldquo;Yes, that&rsquo;s right. Every two weeks we&rsquo;ll talk with you about what to do next. Let&rsquo;s do it and show you. If it&rsquo;s good enough, we continue. If not, we stop.&rdquo;</em></p>
<p><em>&ldquo;That way, your risk will never be greater than another $20K. You can decide whether to use that money to get more information, to redirect your efforts, or to see whether you should spend that money some other way.&rdquo;</em></p>
<p><em>&ldquo;Can we work this way?&rdquo;</em></p>
<p>If he says yes, let&rsquo;s start. If he says no, we need to find out why, and even whether this project is for us.</p>
<p>This is definitely estimating, and it&rsquo;s a kind of estimating that we can do in conjunction with our business people rather than in conflict with them.</p>
<p>We estimate, with some certainty, that we can produce useful information in two weeks. If we don&rsquo;t think we can do that, we&rsquo;d better suggest four or six or eight weeks.</p>
<p>More than that, we estimate that a viable product is probably possible in six or nine months. If we had no idea, or worse, if we honestly doubted it, then we can&rsquo;t legitimately invite him to find out — at least not on the terms above. We owe it to him to say <em>&ldquo;Frankly, this looks like a two- or three-year project to us. We could be wrong: here&rsquo;s what we need to learn to find out. Here&rsquo;s what it would cost to find out, and our best guesses now are that the answer will be bad news.&rdquo;</em></p>
<p>Sometimes we have a good idea of what we can do. Sometimes we know less. Either way, by estimating what we know, we can design experiments — investments — that improve our ability to decide what to do.</p>
<p>When we&rsquo;re talking about spending other people&rsquo;s money, I think we owe them to think and act this way.</p>
<h2>This Is Estimation, Not Negotiation!<span class="hx:absolute hx:-mt-20" id="this-is-estimation-not-negotiation"></span>
    <a href="#this-is-estimation-not-negotiation" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>An estimate doesn&rsquo;t have to be <em>&ldquo;This project will be finished on Tuesday, May 14, at 2:35 PM.&rdquo;</em> An estimate is supposed to be expressed with a range of possibilities. It would be perfectly OK to say something like, <em>&ldquo;We see no possibility of this being done before April. If everything goes perfectly, we can be ready by mid-May. Based on our experience, we&rsquo;re thinking June, maybe July.&rdquo;</em></p>
<p>Whether we say this or not, chances are we know it, or at least suspect it. And if that&rsquo;s what we think, the project needs that information. However, if we put it that way, we&rsquo;ll be pushed back. Someone will challenge us to prove, without a shadow of a doubt, that we can&rsquo;t deliver by April 30, and if we prove that, they&rsquo;ll say <em>&ldquo;How about May 5?&rdquo;</em> Bah, we hate it when they do that. So how can we deliver information the project needs without playing this game?</p>
<h3>Move from Estimated Date to Estimated Velocity<span class="hx:absolute hx:-mt-20" id="move-from-estimated-date-to-estimated-velocity"></span>
    <a href="#move-from-estimated-date-to-estimated-velocity" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Let&rsquo;s use the Five-Card method from previous articles, not to estimate a date, but to break the whole project into sub-stories small enough that our team does, say, five of them in two weeks. Of course we can end up having only three done. We may have six, but we doubt it. Then we arrive at an estimate in terms of velocity:</p>
<p><em>&ldquo;We broke the project into smaller stories. We believe that with stories of this size, we&rsquo;ll be able to do between three and five every two weeks. And at the end of a two-week period, everything we do will be visible, tested, integrated, and working. So whether it&rsquo;s five or six or two per week, we&rsquo;ll know, and you&rsquo;ll know.&rdquo;</em></p>
<p><em>&ldquo;If you can remove or defer some of these stories and still have a viable product, you&rsquo;ll have the product sooner. If you can simplify, you can have the product sooner. If you add stories, or make things harder, you&rsquo;ll delay the product to later.&rdquo;</em></p>
<p><em>&ldquo;It&rsquo;s up to you. We can break things into this size, we can guess our velocity now as three items every two weeks, and you&rsquo;ll know every two weeks what&rsquo;s really happening. You can use that information to decide what to do, what to defer, in order to get the best product by whatever dates you choose.&rdquo;</em></p>
<h3>Help Management Learn About Velocity<span class="hx:absolute hx:-mt-20" id="help-management-learn-about-velocity"></span>
    <a href="#help-management-learn-about-velocity" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Now management may still want to negotiate about this with us. If they try to add up the numbers to get dates, and then start adjusting the dates, don&rsquo;t negotiate: turn the conversation back to the rate of progress. <em>&ldquo;The date is up to you. If you choose to do more, it&rsquo;ll be later. If you choose to do less, it&rsquo;ll be sooner. We think we&rsquo;ll do between three to five items every two weeks. We may be wrong: if we are, you&rsquo;ll know as soon as we do.&rdquo;</em></p>
<p>Someone may try to push velocity. <em>&ldquo;Can&rsquo;t you do seven every two weeks? Then you could finish on time.&rdquo;</em></p>
<p>Remember how Agile works: developers work at a sustainable optimal pace; developers aren&rsquo;t responsible for the dates; the business side owns the dates, and owns the responsibility of reaching those dates.</p>
<p>The developers&rsquo; job is to deliver at the best possible pace: <em>&ldquo;We think we can do three to five. If we happen to go faster, you&rsquo;ll know. If we&rsquo;re slower, you&rsquo;ll know too. When we finish depends on that, but depends even more on how little you give us to do. What goes into those dates depends on you. You should plan on three to five items every two weeks, and check what&rsquo;s actually happening.&rdquo;</em></p>
<p>This can press more than once to go faster. But we have the facts at our disposal, as they are. <em>&ldquo;Based on our experience, we&rsquo;ll have three to five done. It wouldn&rsquo;t be wise to assume anything greater than that, because it probably won&rsquo;t happen. If something happens that makes us go faster, we&rsquo;ll all know it and you can select more items into the version.&rdquo;</em></p>
<p>All of this, of course, has much more to do with communication, not estimation, and emphatically not negotiation. The estimation was trivial: we did it right at the beginning when we separated the cards. Now we&rsquo;re communicating what we know, what we guess, what we believe.</p>
<p>We give management our best estimates and production rates, and we commit to them, improving as we evolve. We continue to make it clear that the business side controls the dates by choosing how much work they ask for.</p>
<h2>Optimizing the Product<span class="hx:absolute hx:-mt-20" id="optimizing-the-product"></span>
    <a href="#optimizing-the-product" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Whether you&rsquo;re in favor of estimates or not, you should know that Agile is about building products incrementally, in good condition, from day one to the last day, and extracting value from it as early as possible. That requires great technical skills, but technical skills aren&rsquo;t enough. The people paying for our work need to allocate their resources. They need to manage their money, and they need to coordinate our work with activities and stakeholders outside our team.</p>
<p>To do this efficiently, they need information about how long things will take, which translates into how much things will cost, and how long it will take for us to start getting our money back. They need the information we have to do this work well. The fact that our information is vague, flawed, and uncertain isn&rsquo;t a reason not to expose it. We need to put our information in their hands, and do it in a way that gives them the best opportunity to use it as well as possible.</p>
<p>Refusing to estimate isn&rsquo;t the right thing to do. Estimating is necessary, and effective communication of the estimate is necessary too.</p>
<p>The best thing to do is to develop small features at the best sustainable pace possible, and use the information generated to help business people decide what to ask for, and what to defer. To do this, we need to estimate. We break stories into small estimable sizes, and we estimate our rate of delivering them. This type of estimation isn&rsquo;t evil at all: it&rsquo;s incredibly useful and is what the best agile teams do.</p>
<blockquote>
  <p>Ron Jeffries has been developing software longer than any living person. He holds advanced degrees in mathematics and computer science, both earned before negative integers had been invented. His teams built operating systems, compilers, relational database systems, and several large applications. Ron&rsquo;s software products generated more than half a billion dollars in revenue, and he wonders why he didn&rsquo;t earn any of it.</p>

</blockquote>
<blockquote>
  <p>Send <a href="mailto:michael@pragprog.com?subject=estimating">feedback</a> to the author or discuss the article on the magazine forum.</p>

</blockquote>
]]></content:encoded><category>agile</category><category>management</category><category>software-engineering</category><category>off-topic</category></item><item><title>[Off-Topic] Jeff Patton and Megan Fox in the same post?</title><link>https://akitaonrails.github.io/en/2010/06/27/off-topic-jeff-patton-e-megan-fox-no-mesmo-post/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2010/06/27/off-topic-jeff-patton-e-megan-fox-no-mesmo-post/</guid><pubDate>Sun, 27 Jun 2010 09:30:00 -0300</pubDate><description>&lt;p&gt;I&amp;rsquo;m preparing my talk for tomorrow at the &lt;a href="http://web.archive.org/web/20100328140238/http://wire2010.rise.com.br:80/"target="_blank" rel="noopener"&gt;Wire 2010&lt;/a&gt; event (don&amp;rsquo;t miss it, it&amp;rsquo;ll be at IME-USP around 1pm). Thinking about a few slides, I decided to reuse the &amp;ldquo;Iteration and Increment&amp;rdquo; example that Jeff Patton explains so well in his article &lt;a href="https://akitaonrails.github.io/en/2008/02/10/tradu-o-n-o-sei-o-que-quero-mas-sei-como-conseguir"&gt;I don&amp;rsquo;t know what I want, but I know how to get it&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;My problem is the image he uses in the article:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://s3.amazonaws.com/akitaonrails/assets/2008/2/10/incrementing.jpg" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://s3.amazonaws.com/akitaonrails/assets/2008/2/10/iterating.jpg" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s a low-resolution image and looks really bad when I put it in a slide. The example is clear and nice to show, but this time I decided to prepare something more polished.&lt;/p&gt;</description><content:encoded><![CDATA[<p>I&rsquo;m preparing my talk for tomorrow at the <a href="http://web.archive.org/web/20100328140238/http://wire2010.rise.com.br:80/"target="_blank" rel="noopener">Wire 2010</a> event (don&rsquo;t miss it, it&rsquo;ll be at IME-USP around 1pm). Thinking about a few slides, I decided to reuse the &ldquo;Iteration and Increment&rdquo; example that Jeff Patton explains so well in his article <a href="/en/2008/02/10/tradu-o-n-o-sei-o-que-quero-mas-sei-como-conseguir">I don&rsquo;t know what I want, but I know how to get it</a>.</p>
<p>My problem is the image he uses in the article:</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/2/10/incrementing.jpg" alt=""  loading="lazy" /></p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/2/10/iterating.jpg" alt=""  loading="lazy" /></p>
<p>It&rsquo;s a low-resolution image and looks really bad when I put it in a slide. The example is clear and nice to show, but this time I decided to prepare something more polished.</p>
<p>So I decided to use exactly the same idea as the previous image (read the <a href="/en/2008/02/10/tradu-o-n-o-sei-o-que-quero-mas-sei-como-conseguir">original article</a> to know what it&rsquo;s about) and edited this video. See what you think :-)</p>
<video controls>
<source src="https://s3.us-east-2.amazonaws.com/blip.tv/Akitaonrails-AgileMashupJeffPattonMeganFox983.mp4">
Your browser does not support the video tag. [Direct Link](https://s3.us-east-2.amazonaws.com/blip.tv/Akitaonrails-AgileMashupJeffPattonMeganFox983.mp4)
</source></video>
<p>At least I think it&rsquo;s more fun :-)</p>
]]></content:encoded><category>agile</category><category>management</category><category>off-topic</category></item><item><title>[Off-Topic] Reading the Agile Principles</title><link>https://akitaonrails.github.io/en/2010/01/30/off-topic-lendo-os-principios-ageis/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2010/01/30/off-topic-lendo-os-principios-ageis/</guid><pubDate>Sat, 30 Jan 2010 19:32:00 -0200</pubDate><description>&lt;p&gt;The Agile Manifesto rests on &lt;a href="http://agilemanifesto.org/"target="_blank" rel="noopener"&gt;4 values&lt;/a&gt;. I&amp;rsquo;ve repeated that more times than I can count. On top of that, it rests on &lt;a href="http://agilemanifesto.org/principles.html"target="_blank" rel="noopener"&gt;12 important principles&lt;/a&gt; that a lot of people treat like the ten commandments.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m against anything turned into dogma. But if you insist on dogmatizing the Manifesto, never pull a single sentence out of it in isolation. If you&amp;rsquo;re going to take one principle literally, take all of them literally, otherwise it&amp;rsquo;s the same as dogmatizing the ten commandments and saying &lt;em&gt;&amp;ldquo;I obey the ten commandments: I&amp;rsquo;ve committed adultery, but it doesn&amp;rsquo;t matter because I never killed anyone, never stole, and it wasn&amp;rsquo;t with the neighbor&amp;rsquo;s wife that I committed adultery.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;</description><content:encoded><![CDATA[<p>The Agile Manifesto rests on <a href="http://agilemanifesto.org/"target="_blank" rel="noopener">4 values</a>. I&rsquo;ve repeated that more times than I can count. On top of that, it rests on <a href="http://agilemanifesto.org/principles.html"target="_blank" rel="noopener">12 important principles</a> that a lot of people treat like the ten commandments.</p>
<p>I&rsquo;m against anything turned into dogma. But if you insist on dogmatizing the Manifesto, never pull a single sentence out of it in isolation. If you&rsquo;re going to take one principle literally, take all of them literally, otherwise it&rsquo;s the same as dogmatizing the ten commandments and saying <em>&ldquo;I obey the ten commandments: I&rsquo;ve committed adultery, but it doesn&rsquo;t matter because I never killed anyone, never stole, and it wasn&rsquo;t with the neighbor&rsquo;s wife that I committed adultery.&rdquo;</em></p>
<p>A few of the principles:</p>
<blockquote>
  <p>&ldquo;Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.&rdquo;</p>

</blockquote>
<p>This one principle alone has fueled years of debate. Worth reading <a href="https://www.pavley.com/2009/10/08/our-highest-priority/"target="_blank" rel="noopener">Our Highest Priority</a> and <a href="http://web.archive.org/web/20100201014014/http://stevebockman.com:80/blog/2010/01/27/why-satisfy-the-customer/"target="_blank" rel="noopener">Why Satisfy the Customer?</a>.</p>
<p>I like to think like <a href="http://en.wikipedia.org/wiki/Theory_of_Constraints"target="_blank" rel="noopener">Eliyahu Goldratt</a>, who says, in simplified terms, that the priority of any company is <em>to make money.</em> Now, calm down, anti-capitalists and on-duty populists :-) Nobody is talking about <em>&ldquo;making money at the expense of people, customers, and society&rdquo;</em> or anything like that.</p>
<p>The priority is to make money. Creating innovation, creating products, and generating jobs are means to get there, and we keep confusing the <strong>means</strong> with the <strong>goals</strong>.</p>
<p><em>&ldquo;Delivering fast and continuously&rdquo;</em> is important to keep in mind. It isn&rsquo;t always possible, for example, when you depend on suppliers or other external factors. But let me pull in other principles tied to this first one:</p>
<blockquote>
  <p>&ldquo;Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.&rdquo;</p>

</blockquote>
<p>Time is never fixed, because every professional knows you can&rsquo;t predict the future. Delivering value quickly is a principle that guides the work, and nobody should treat it as a rigid rule. It means doing everything possible to deliver something that works, with quality, in the shortest viable timeframe.</p>
<p>For that, you try to remove impediments, improve processes, optimize procedures, and improve communication. It&rsquo;s a reminder for every agilist whenever deliveries start taking longer than normal.</p>
<blockquote>
  <p>&ldquo;Working software is the primary measure of progress.&rdquo;</p>

</blockquote>
<p>Same idea in different words: software that hasn&rsquo;t been delivered is useless. An agilist should feel bad working for months on software nobody uses.</p>
<p>Every piece of software is different. Sometimes it takes a whole day to find a one-line solution, and sometimes you can write a hundred lines in an hour. It&rsquo;s the old productivity dilemma the industry tried to solve with failed techniques like LOC (lines of code), Function Points, and other nonsense.</p>
<p>I imagine Martin Fowler was one of the people who suggested this principle, mostly because of his article <a href="https://martinfowler.com/bliki/CannotMeasureProductivity.html"target="_blank" rel="noopener">Cannot Measure Productivity</a>. Software is measured by value. Raw productivity says very little, and whoever defines the value to be reached in development is the client or the company.</p>
<p>If the delivered software brings no value, the problem is in the definition of that value. The software did what it was told. A tool, on its own, has no value.</p>
<p>That&rsquo;s why I say LOC and function points are useless. I can have a team shipping ten thousand function points per sprint, and it means nothing if what was requested brings no value to the client.</p>
<p>This is one of a Product Owner&rsquo;s jobs: making sure whatever enters the development queue will actually bring value, short or long term, depending on the future vision they have. A PO with no vision, no strategy, and no clear direction reaps exactly that: lots of software and little value. The blame there lands on the PO&rsquo;s and the company&rsquo;s lack of vision, never on the technical team.</p>
<p>And speaking of POs, we can&rsquo;t leave out stakeholders in general, the people interested in the value the project will generate:</p>
<blockquote>
  <p>&ldquo;Business people and developers must work together daily throughout the project.&rdquo;</p>

</blockquote>
<p>Personally, I&rsquo;d hate bureaucrats around a development environment every day :-) Cynicism aside, this is another reminder that whoever cares about the value of a project is the one who should seek out the team and check if anything is missing. A stakeholder who never approaches the technical team shows they don&rsquo;t care about the result.</p>
<p>And I&rsquo;m not talking about a daily meeting. Five or ten minutes of conversation a day are enough, no ritual like a Daily Scrum required. An interested stakeholder gets up from the chair and walks over to the teams. An uninterested stakeholder stays seated, waiting for things to happen on their own.</p>
<p>Guess which of the two is more efficient? If the stakeholder, who should be the most interested, shows no interest in what&rsquo;s being produced, why would anyone on the team bother?</p>
<p>Teams are a reflection of the company&rsquo;s organization. If the upper layers are disorganized, indecisive, uncommunicative, and irresponsible, the teams will be the same. What are teams but sub-systems, copies of the larger complex adaptive system called &ldquo;company&rdquo;?</p>
<p>A company can hire a hundred Linus Torvalds, a hundred Guido van Rossums, a hundred John Resigs, and even then don&rsquo;t expect them to come up with iPods, iPhones, and other products that sell millions all on their own. Apple works because, I speculate, a Steve Jobs gets out of his chair and gets personally involved in the day-to-day of the research and development teams, even as CEO.</p>
<p>Put this way, it sounds like one side is off the hook for the other&rsquo;s responsibility. Of course not. The best way to work is <strong>collaboratively</strong>, but arriving at the best technological solutions, with technical quality and efficiency, is the technical team&rsquo;s job. Stakeholders, in turn, answer for market studies, marketing research, and product vision.</p>
<p>One side can and should collaborate with the other, but not everyone can do everything equally. Stakeholders bring the vision and the technical team does what it can to fulfill it. Except the vision isn&rsquo;t authoritarian, just as some technological decisions shouldn&rsquo;t be either.</p>
<p>The criticism shows up when orders come from a single direction, with no discussion. The technical team can be doing everything right and still head the wrong way, and in the end the criticism comes back on them for the failure of a vision nobody ever discussed.</p>
<blockquote>
  <p>&ldquo;The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.&rdquo;</p>

</blockquote>
<p>To me, this is a corollary of the previous principle. Forget automated communication systems, information-flow systems, and all that nonsense. Everyone has seen 80s and 90s movies mocking &ldquo;memos,&rdquo; that technique for spreading information. To this day people still try something similar, only now they call it a spreadsheet, an email, a wiki, and so on.</p>
<p>What matters is sitting next to the person who&rsquo;s going to deliver value to you, clearly stating the expectations, what changed, what stayed, and then getting out of the way. A stakeholder who can&rsquo;t talk live with the teams shows, again, no interest in the result. And the message is clear: what&rsquo;s being developed has no value, because if it did, they&rsquo;d show interest.</p>
<p>As long as a stakeholder keeps the old-fashioned mentality of <em>&ldquo;these people who work for me are obligated to guess what I&rsquo;m thinking and deliver what I want, when I want it,&rdquo;</em> they&rsquo;ll never get any value, and they&rsquo;ll keep asking themselves <em>&ldquo;are my teams so incompetent they can&rsquo;t deliver anything?&rdquo;</em> The obvious conclusion would be the other one: <em>&ldquo;maybe if I just &rsquo;tell&rsquo; them what I&rsquo;m thinking, they can deliver what I want.&rdquo;</em></p>
<p>And there&rsquo;s nothing worse than an absent stakeholder who only shows up when something goes wrong, to yell, threaten, and terrorize. Where was he during the whole process that led to this accident in the first place?</p>
<blockquote>
  <p>&ldquo;At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.&rdquo;</p>

</blockquote>
<p>Every agile methodology has a &ldquo;Retrospective&rdquo; phase, one of the rituals created for teams that weren&rsquo;t used to talking. No process is a silver bullet, and every process needs constant refinement. Ideally, each retrospective, at the end of each sprint, points at something to change. There&rsquo;s no perfect scenario; what there is is continuous, uninterrupted improvement. If nothing changes after a retrospective, if nobody suggests adjustments at the end of the sprint, something is wrong.</p>
<p>The other principles speak for themselves:</p>
<blockquote>
  <p>&ldquo;Welcome changing requirements, even late in development. Agile processes harness change for the customer&rsquo;s competitive advantage.&rdquo;</p>

</blockquote>
<p>Changes are welcome, as long as they bring competitive advantage to the customer. Random changes based on the mood of the people involved stay out.</p>
<blockquote>
  <p>&ldquo;Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.&rdquo;</p>

</blockquote>
<p>Obvious again: either you trust your teams, or you don&rsquo;t. If you don&rsquo;t, fire them. If you do, stop micro-managing and demanding reports all the time. Simple as that. Anyone who doesn&rsquo;t trust them and still thinks they can control everything through micro-management is a terrible manager, and should fire themselves first.</p>
<p>About the environment, remember <a href="http://en.wikipedia.org/wiki/Maslow%27s_hierarchy_of_needs"target="_blank" rel="noopener">Maslow&rsquo;s Hierarchy of Needs</a>. If the environment is cramped, hot, dirty, and disorganized, don&rsquo;t expect motivated, proactive, organized teams. Nobody motivates anybody, but demotivating is very easy. Don&rsquo;t demand the top of the pyramid while not even the base is satisfied.</p>
<blockquote>
  <p>&ldquo;Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.&rdquo;</p>

</blockquote>
<p>It means all the principles above are being respected: there&rsquo;s a good environment, stakeholders are involved, live and frequent communication happens, and priorities are clear. With that, you can have frequent deliveries at a constant pace and, better still, accelerating.</p>
<blockquote>
  <p>&ldquo;Continuous attention to technical excellence and good design enhances agility.&rdquo;</p>

</blockquote>
<p>The first principle, in isolation, sometimes gives the false impression that value has to be delivered at any cost, sacrificing quality, maintainability, and good design. That&rsquo;s false, and that&rsquo;s exactly why I keep insisting on considering all the principles together.</p>
<p>Valuable software should be delivered as fast as possible, but never at the cost of wrecking future maintainability, right when the Return on Investment starts happening. Each case is its own case, and that&rsquo;s why stakeholders and teams need to talk often and decide based on cost-benefit.</p>
<blockquote>
  <p>&ldquo;Simplicity&ndash;the art of maximizing the amount of work not done&ndash;is essential.&rdquo;</p>

</blockquote>
<p>Together with the previous principle, this means not getting stuck on <em>&ldquo;maybe they&rsquo;ll need this in the future&rdquo;</em> and cranking out &ldquo;bloat&rdquo; software, fat, heavy, and complex to try to make it <em>&ldquo;future-proof&rdquo;</em>. That&rsquo;s impossible and only leads to software that takes too long to deliver and shows up with dubious value.</p>
<p>Again, it&rsquo;s a matter of communication, negotiation, and cost-benefit, starting from the value the stakeholder said they need.</p>
<blockquote>
  <p>&ldquo;The best architectures, requirements, and designs emerge from self-organizing teams.&rdquo;</p>

</blockquote>
<p>This topic I&rsquo;ve explained dozens of times, in all sorts of ways, but I recommend reading my article <a href="/en/2009/07/08/off-topic-agilidade-caos-auto-organizacao">Agility, Chaos, Self-Organization</a>.</p>
<p>Anyone who doesn&rsquo;t understand Emergence and Self-Organization doesn&rsquo;t understand Agility. That brings me back to my article <a href="/en/2009/12/10/off-topic-voce-nao-entende-nada-de-scrum">You Don&rsquo;t Understand Anything About Scrum</a>, which I also recommend reading now.</p>
<p>As you can see, the world of Agility rests on important principles. None of them holds up in isolation: either you consider them all together, or you&rsquo;ll have none of them.</p>
<p>But be careful: a lot of people confuse Agility, Self-Organization, and Participatory Management with <a href="http://en.wikipedia.org/wiki/Consensus"target="_blank" rel="noopener">the Search for Consensus</a>. Nothing could be further from that. I&rsquo;m taking longer than I&rsquo;d like to finish the book <a href="https://www.amazon.com/Systems-Thinking-Second-Complexity-Architecture/dp/0750679735"target="_blank" rel="noopener">Systems Thinking</a>, but here&rsquo;s an excerpt I like:</p>
<blockquote>
  <p>&ldquo;Finally, fear of rejection and a strong tendency toward conformity among members of a social system and others are obstacles to social changes. An example is the experiment in a city with a dry law (which doesn&rsquo;t allow the sale of alcohol) whose constituents were to vote on the ban against alcohol. A pre-voting poll indicated that 75% of voters were in favor of abolishing the ban. However, each of the voters thought that the majority preferred the dry law. When the results were tabulated, 60% of voters voted to keep the dry law. Not surprisingly, after the poll was published, the next election on the subject produced a 65% majority in favor of abolishing the ban.&rdquo;</p>

</blockquote>
<p>Democracy based on the <a href="http://en.wikipedia.org/wiki/Tyranny_of_the_majority"target="_blank" rel="noopener">Tyranny of the Majority</a> is useless. This subject is much more complicated than just having people vote on the options, and it can&rsquo;t be treated lightly. Political scientists, philosophers, and various researchers have been studying it for a long time, and I guarantee there&rsquo;s vast literature on it.</p>
<p>And this whole subject is more complex than just reading the twelve principles. An engineer, a doctor, or a lawyer study for years and are still far from being masters of their fields. A manager, on the other hand, studies almost nothing, and so decides based more on folklore than anything else. It&rsquo;s terrible: in these cases, when they&rsquo;re right it&rsquo;s by luck, and when they&rsquo;re wrong it&rsquo;s just what you&rsquo;d expect.</p>
<video controls>
<source src="https://s3.us-east-2.amazonaws.com/blip.tv/Akitaonrails-DanPinkMotivao160.mp4">
Your browser does not support the video tag. [Direct Link](https://s3.us-east-2.amazonaws.com/blip.tv/Akitaonrails-DanPinkMotivao160.mp4)
</source></video>
]]></content:encoded><category>agile</category><category>software-engineering</category><category>off-topic</category></item><item><title>Off-Topic: Literature for Agile Managers</title><link>https://akitaonrails.github.io/en/2010/01/06/off-topic-literatura-para-gerentes-ageis/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2010/01/06/off-topic-literatura-para-gerentes-ageis/</guid><pubDate>Wed, 06 Jan 2010 03:24:00 -0200</pubDate><description>&lt;p&gt;&lt;strong&gt;Update: 01/06:&lt;/strong&gt; When I started writing, the goal was to be really assertive. It still frustrates me to research current material, blogs, and articles, and not see any Agility topic going deeper into the principles.&lt;/p&gt;
&lt;p&gt;On top of that, I&amp;rsquo;m anxious about my own research, which always seems to have pieces missing. Since there&amp;rsquo;s almost no one to talk to about it, the frustration grows. So, at the start of the article, I was already out of patience and began abusing the first and third person, in a near 1-to-1 dialogue. That wasn&amp;rsquo;t helping the main point, so I decided to trim the most aggressive parts. Let&amp;rsquo;s see if it&amp;rsquo;s more &amp;ldquo;digestible&amp;rdquo; now :-)&lt;/p&gt;</description><content:encoded><![CDATA[<p><strong>Update: 01/06:</strong> When I started writing, the goal was to be really assertive. It still frustrates me to research current material, blogs, and articles, and not see any Agility topic going deeper into the principles.</p>
<p>On top of that, I&rsquo;m anxious about my own research, which always seems to have pieces missing. Since there&rsquo;s almost no one to talk to about it, the frustration grows. So, at the start of the article, I was already out of patience and began abusing the first and third person, in a near 1-to-1 dialogue. That wasn&rsquo;t helping the main point, so I decided to trim the most aggressive parts. Let&rsquo;s see if it&rsquo;s more &ldquo;digestible&rdquo; now :-)</p>
<p>Last year I put together a <a href="/en/2009/07/11/off-topic-livros-de-refer-ncia-2008-2009">list of books</a> I read in my search for the essence of <strong>true</strong> management. Instead of going through the more trivial authors, like Peter Drucker, I went after the principles of Agility.</p>
<p>There are a few categories of managers: the &ldquo;agile&rdquo; ones, in the broadest sense of the word, and the &ldquo;traditional&rdquo; ones. The second group, prone to not wanting to change or learn anything, is sad, period. The first is on the right path, but there&rsquo;s still a long way to go. The discussions I see today in agile communities also fall into the inertia of &ldquo;good sense&rdquo; and &ldquo;common sense,&rdquo; and end up shallow.</p>
<p>An agile manager should want to dedicate a lot more. Scrum itself is an example. As I said in the article <a href="/en/2009/12/10/off-topic-voce-nao-entende-nada-de-scrum">You Don&rsquo;t Understand Anything About Scrum</a>: Jeff Sutherland and Ken Schwaber researched the relevant subjects long ago and gave the tips, though few follow them.</p>
<p>If you really want to understand Scrum, this literature helps a lot. To start, there are the <a href="http://web.archive.org/web/20100114175300/http://scrumtraininginstitute.com/home/stream_download/scrumpapers"target="_blank" rel="noopener">Scrum Papers</a>, which give you the introduction.</p>
<p>If you read them, you&rsquo;ve already bumped into terms like &ldquo;Emergence,&rdquo; &ldquo;Edge of Chaos,&rdquo; &ldquo;Complex Adaptive Systems,&rdquo; and &ldquo;Self-Organization.&rdquo; And if you passed through those terms and left it at that, think again: what&rsquo;s the point of reading without understanding?</p>
<p>I don&rsquo;t know everything yet either, but I&rsquo;m committed to understanding this properly. Without the principles, all that&rsquo;s left is to &ldquo;follow a recipe,&rdquo; and that&rsquo;s very little.</p>
<p>Whoever looks for rules or recipes is trying to shed their own responsibility. If the method, the procedure, or the process &ldquo;fails&rdquo; or doesn&rsquo;t deliver, you can always hide behind &ldquo;but I followed it to the letter, it&rsquo;s not my fault.&rdquo; That misses the point. What result are you after: following rules or reaching results?</p>
<p>I say this with &ldquo;aggressiveness,&rdquo; but some reluctance, because I used to think this way myself. Anyway, after some time reading academic articles, right now I&rsquo;m working through these books:</p>
<ul>
<li>
<p><a href="http://www.amazon.com/Systems-Thinking-Second-Complexity-Architecture/dp/0750679735/ref=sr_1_2?ie=UTF8&amp;s=books&amp;qid=1262753653&amp;sr=8-2"target="_blank" rel="noopener">Systems Thinking, Second Edition: Managing Chaos and Complexity: A Platform for Designing Business Architecture</a>. Once you fall into Complexity, you leave classical, reductionist, deterministic thinking behind and start needing the holistic thinking of Systems, which has itself gone through several paradigms. Highly recommended: it opens by describing the different management models and their evolution with precision.</p>
</li>
<li>
<p><a href="http://www.amazon.com/Essence-Chaos-Jessie-John-Lecture/dp/0295975148/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1262753645&amp;sr=8-1"target="_blank" rel="noopener">The Essence of Chaos</a>. Complex Adaptive Systems fall under the broader subject of &ldquo;Complexity,&rdquo; and that leads straight to &ldquo;Chaos.&rdquo; I&rsquo;d rather read something by Ilya Prigogine, but since I&rsquo;m on a Kindle, the only things I found available were titles like this one, by none other than Edward Lorenz, one of the &ldquo;fathers&rdquo; of Chaos.</p>
</li>
<li>
<p><a href="http://www.amazon.com/Surfing-Edge-Chaos-Nature-Business/dp/0609808834/ref=sr_1_3?ie=UTF8&amp;s=books&amp;qid=1262753662&amp;sr=8-3"target="_blank" rel="noopener">Surfing the Edge of Chaos: The Laws of Nature and the New Laws of Business</a>. Systems and Complexity also require understanding the Edge of Chaos.</p>
</li>
<li>
<p><a href="http://www.amazon.com/Greatest-Show-Earth-Evidence-Evolution/dp/1416594787/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1262753713&amp;sr=8-1"target="_blank" rel="noopener">The Greatest Show on Earth: The Evidence for Evolution</a>. One of the clearest examples of Complex Adaptive Systems is the nature around us. You need to understand Darwin&rsquo;s Theory of Evolution. Most people &ldquo;think&rdquo; they understand it, but watch out: much of it is folklore, and plenty of people still doubt it. If you have doubts about Evolution, don&rsquo;t even start.</p>
</li>
</ul>
<p>More than that? From experience, every time someone uses words like &ldquo;chaos&rdquo; or &ldquo;balance,&rdquo; I notice they&rsquo;re working from the casual definition, not the technical one. Many think &ldquo;chaos&rdquo; is just mess, something completely unwanted.</p>
<p>Worse still: they believe the &ldquo;secret&rdquo; is to reach <strong>balance</strong> and stay there, and they confuse the goal with seeking balance. That&rsquo;s not quite it.</p>
<p>Here&rsquo;s what the introduction of Surfing the Edge of Chaos says:</p>
<blockquote>
  <p><em>Equilibrium</em> is a precursor to death. When a living system is in a state of equilibrium, it is less responsive to changes occurring around it. This places it at maximum risk. In the face of threat, or when galvanized by a compelling opportunity, living things move toward the <em>edge of chaos</em>. This condition evokes higher levels of mutation and experimentation, and fresh new solutions are more likely to be found.</p>
<p>When this excitation takes place, the components of living systems <em>self-organize</em> and new forms and repertoires <em>emerge</em> from the turmoil.</p>
<p>Living systems cannot be <em>directed</em> along a linear path. Unforeseen consequences are inevitable. The challenge is to disturb them in a way that approximates the desired outcome.</p>

</blockquote>
<p>This is a definition of the biological evolution of living beings. But if you&rsquo;ve read at least the basics of Scrum and Agile, it&rsquo;s also a way to describe the Agile process. Reread the <a href="http://agilemanifesto.org/principles.html"target="_blank" rel="noopener">Principles of the Agile Manifesto</a> and you&rsquo;ll find similar texts.</p>
<p>As for Complex Adaptive Systems:</p>
<blockquote>
  <p>A complex adaptive system is formally defined as a system of independent agents that can act in parallel, develop &ldquo;models&rdquo; as to how things work in their environment, and, most importantly, refine those models through learning and adaptation. The human immune system is a complex adaptive system. So is a rain forest, an ant colony, and a <em>business</em>.</p>

</blockquote>
<p>There&rsquo;s vast literature. Search Amazon for terms like &ldquo;Complexity,&rdquo; &ldquo;Edge of Chaos,&rdquo; and &ldquo;Systems Thinking,&rdquo; and you&rsquo;ll see that for decades researchers from the most varied fields and industries have been refining this body of knowledge. Techniques like the Toyota Production System/Lean, Six Sigma, Scrum, and Theory of Constraints all derive from this school of thought.</p>
<p>From my previous list, I reinforce the need for readings like:</p>
<ul>
<li>
<p><a href="http://www.amazon.com/Machine-That-Changed-World-Production/dp/0060974176/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1262755165&amp;sr=1-1"target="_blank" rel="noopener">The Machine that Changed the World: The Story of Lean Production</a>. Understand how the Lean process came about at Toyota.</p>
</li>
<li>
<p><a href="http://www.amazon.com/Goal-Process-Ongoing-Improvement/dp/0884271781/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1247296468&amp;sr=8-1"target="_blank" rel="noopener">The Goal</a>. Process engineering and cost control. Without understanding TOC, it&rsquo;s futile.</p>
</li>
<li>
<p><a href="http://www.amazon.com/End-Management-Rise-Organizational-Democracy/dp/078795912X/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1247296899&amp;sr=8-1"target="_blank" rel="noopener">The End of Management, and the Rise of Organizational Democracy</a>. A summary of all these subjects and, maybe, a provocative introduction to the rest.</p>
</li>
</ul>
<p>More concerning: techniques like Lean, TOC, Six Sigma, and derivatives like Kanban are terms plenty of people use the wrong way nowadays. They were all born and refined in Production Engineering, always talking about the &ldquo;production line&rdquo; and the &ldquo;manufacturing&rdquo; of material goods, &ldquo;physical&rdquo; things.</p>
<p>In Agile, we&rsquo;re talking about &ldquo;Software,&rdquo; something abstract and without parallel in the physical world, and therefore without the same references.</p>
<p>It&rsquo;s impossible to migrate any Production Engineering technique verbatim. It doesn&rsquo;t work that simply. A Scrum Sprint is a conscious adaptation by Sutherland and Schwaber, who knew this limitation and attempted an approximation in the abstract world.</p>
<p>But this isn&rsquo;t obvious or trivial to grasp. I haven&rsquo;t fully grasped it myself yet, and I believe most people in the agile world never stopped to study this difference.</p>
<p>Be very careful: &ldquo;Management&rdquo; is <strong>much</strong> more than &ldquo;experience&rdquo; or &ldquo;good sense.&rdquo; Just as a good programmer needs to read and research a lot to sharpen their technique, a manager <strong>needs</strong> to as well. And I&rsquo;m saying this to myself.</p>
]]></content:encoded><category>agile</category><category>management</category><category>learning</category><category>off-topic</category></item><item><title>[Off Topic] Watch Out for Kanban-butt</title><link>https://akitaonrails.github.io/en/2009/12/16/off-topic-cuidado-com-o-kanban-butt/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2009/12/16/off-topic-cuidado-com-o-kanban-butt/</guid><pubDate>Wed, 16 Dec 2009 23:22:00 -0200</pubDate><description>&lt;p&gt;For some reason, lately a lot of people have been discussing and evangelizing &lt;a href="http://en.wikipedia.org/wiki/Kanban"target="_blank" rel="noopener"&gt;Kanban&lt;/a&gt;, and it&amp;rsquo;s starting to annoy me. Applying the Kanban tool as if it were a whole methodology is a mistake. This tool was created and spread by Toyota, decades ago, inside a much larger methodology: the &lt;a href="http://en.wikipedia.org/wiki/Toyota_Production_System"target="_blank" rel="noopener"&gt;Toyota Production System&lt;/a&gt; (TPS), from the great &lt;a href="http://en.wikipedia.org/wiki/Taiichi_Ohno"target="_blank" rel="noopener"&gt;Taiichi Ohno&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As I said in a &lt;a href="https://akitaonrails.github.io/en/2009/12/10/off-topic-voce-nao-entende-nada-de-scrum"&gt;previous article&lt;/a&gt;, agile methodologies share the same foundation. To understand TPS it&amp;rsquo;s worth going back to the original literature, and one of those sources is the book A Study of the Toyota Production System from an Industrial Engineering Viewpoint, by &lt;a href="http://en.wikipedia.org/wiki/Shigeo_Shingo"target="_blank" rel="noopener"&gt;Shigeo Shingo&lt;/a&gt;, published in &lt;strong&gt;1996&lt;/strong&gt;. In the Preface he says:&lt;/p&gt;</description><content:encoded><![CDATA[<p>For some reason, lately a lot of people have been discussing and evangelizing <a href="http://en.wikipedia.org/wiki/Kanban"target="_blank" rel="noopener">Kanban</a>, and it&rsquo;s starting to annoy me. Applying the Kanban tool as if it were a whole methodology is a mistake. This tool was created and spread by Toyota, decades ago, inside a much larger methodology: the <a href="http://en.wikipedia.org/wiki/Toyota_Production_System"target="_blank" rel="noopener">Toyota Production System</a> (TPS), from the great <a href="http://en.wikipedia.org/wiki/Taiichi_Ohno"target="_blank" rel="noopener">Taiichi Ohno</a>.</p>
<p>As I said in a <a href="/en/2009/12/10/off-topic-voce-nao-entende-nada-de-scrum">previous article</a>, agile methodologies share the same foundation. To understand TPS it&rsquo;s worth going back to the original literature, and one of those sources is the book A Study of the Toyota Production System from an Industrial Engineering Viewpoint, by <a href="http://en.wikipedia.org/wiki/Shigeo_Shingo"target="_blank" rel="noopener">Shigeo Shingo</a>, published in <strong>1996</strong>. In the Preface he says:</p>
<blockquote>
  <p>Many believe that when implementing a new system, only <em>&ldquo;know-how&rdquo;</em> is needed. However, if you want to succeed, you must understand, as well, <em>&ldquo;know-why&rdquo;</em></p>
<p>With the know-how, you can operate the system, but you won&rsquo;t know what to do if you encounter problems under conditions different from the usual. With the know-why, or &ldquo;knowing why,&rdquo; you understand why you have to do what you&rsquo;re doing, and thus face changing situations.</p>

</blockquote>
<p>Specifically about Kanban he says:</p>
<blockquote>
  <p>The biggest problem I encountered while studying TPS from an Industrial Engineering viewpoint is the fact that it&rsquo;s often considered synonymous with the <em>Kanban</em> system. Mr. Ohno writes:</p>
<ul>
<li>TPS is a production system</li>
<li>The <em>Kanban</em> method is a technique for its implementation</li>
</ul>
<p>Many publications are confused on this issue and offer an explanation of the system, claiming that <em>Kanban</em> is the essence of TPS. Once again: <em>TPS is a production system, and the kanban method is merely a means of controlling the system.</em></p>
<p>Superficial analyses of TPS give special attention to the <em>kanban</em> method because of its unique characteristics. Consequently, many people conclude that TPS is equivalent to the <em>Kanban</em> method.</p>

</blockquote>
<blockquote>
  <p>A <em>Kanban</em> method should only be adopted after the production system itself has been rationalized. That&rsquo;s the reason this book repeatedly insists on the fact that TPS and the Toyota method are separate entities.</p>

</blockquote>
<blockquote>
  <p>I should add that 90% of Toyota&rsquo;s excellent management performance was attributed to TPS itself, and only 10% to the <em>Kanban</em> method — a clear demonstration of the greater importance of TPS.</p>

</blockquote>
<p>Worth repeating: Shigeo wrote this in <strong>1996</strong>. It&rsquo;s striking that, more than a decade later, we&rsquo;re still making the same interpretation mistakes.</p>
<p>Just like the <a href="http://agilemanifesto.org"target="_blank" rel="noopener">Agile Manifesto</a>, the Toyota System has a set of 14 principles, known in the West as <a href="http://en.wikipedia.org/wiki/The_Toyota_Way"target="_blank" rel="noopener">The Toyota Way</a>. And the same way it works in Agile, sticking post-its on the wall and running Sprints doesn&rsquo;t make anything Agile. Following the Toyota method takes a lot more than using Kanban.</p>
<p>To understand Toyota it&rsquo;s mandatory to understand the Toyota Way, and one of the best books to start with is The Toyota Way by Jeffrey Liker. If you intend to take this seriously, you also need to understand Toyota&rsquo;s management revolution, narrated in the classic The Machine That Changed the World by James Womack.</p>
<p>If you&rsquo;re still not convinced, at the conclusion of the chapter on Kanban, Shigeo Shingo himself says:</p>
<blockquote>
  <p>Kanban systems can only be applied in factories with repetitive production. (…)</p>
<p>Kanban systems are not applicable in companies with non-repetitive project-based production, where orders are infrequent and unpredictable.</p>
<p>The type of production most likely to benefit from Kanban is that which uses common material transformation processes.</p>

</blockquote>
<p>A tip: software development is a non-repetitive task. Even so, TPS principles stay very applicable when the <em>know-why</em> is clear.</p>
<p>The Toyota method is more generically known as <a href="http://en.wikipedia.org/wiki/Lean_production"target="_blank" rel="noopener">Lean Manufacturing</a>. The best work adapting Lean to the software world is the book <a href="http://en.wikipedia.org/wiki/Lean_software_development"target="_blank" rel="noopener">Lean Software Development</a>, by Tom and Mary Poppendieck. Before talking loosely about Kanban, it&rsquo;s mandatory to read those works; otherwise it&rsquo;ll just be one more tool doomed to fail, and we&rsquo;ll end up with a wave of Kanban-butts.</p>
<p>Everything that comes easy goes easy. It &ldquo;seems&rdquo; easy to implement Agile. It &ldquo;seems&rdquo; easy to implement Kanban. There&rsquo;s no free lunch. Take things superficially and don&rsquo;t expect anything beyond mediocre results. That&rsquo;s how it works.</p>
]]></content:encoded><category>agile</category><category>management</category><category>off-topic</category></item><item><title>[Off-Topic] You Don't Understand Anything About Scrum</title><link>https://akitaonrails.github.io/en/2009/12/10/off-topic-voce-nao-entende-nada-de-scrum/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2009/12/10/off-topic-voce-nao-entende-nada-de-scrum/</guid><pubDate>Thu, 10 Dec 2009 23:23:00 -0200</pubDate><description>&lt;p&gt;&lt;em&gt;&amp;ldquo;And neither do I. But I keep studying :-P&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://s3.amazonaws.com/akitaonrails/assets/2009/12/11/Screen_shot_2009-12-11_at_1.21.28_AM_original.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;My research style is quite &lt;em&gt;Web-like&lt;/em&gt;, I&amp;rsquo;d say :-) For example, by some cosmic accident, only this week did I decide to read about the origin of Scrum, the Agile methodology that ended up becoming the most well-known today. I was very surprised by what I found.&lt;/p&gt;
&lt;p&gt;I always defend that people need to constantly, obsessively research and never accept anything without argument. We should all already know that there are no silver bullets. Simply quoting someone to justify something is a fallacy I &lt;strong&gt;don&amp;rsquo;t accept&lt;/strong&gt;, as I already said in my article &lt;a href="http://akitaonrails.com/en/2009/11/08/off-topic-obediencia-a-autoridade"target="_blank" rel="noopener"&gt;Obedience to Authority&lt;/a&gt;.&lt;/p&gt;</description><content:encoded><![CDATA[<p><em>&ldquo;And neither do I. But I keep studying :-P&rdquo;</em></p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2009/12/11/Screen_shot_2009-12-11_at_1.21.28_AM_original.png" alt=""  loading="lazy" /></p>
<p>My research style is quite <em>Web-like</em>, I&rsquo;d say :-) For example, by some cosmic accident, only this week did I decide to read about the origin of Scrum, the Agile methodology that ended up becoming the most well-known today. I was very surprised by what I found.</p>
<p>I always defend that people need to constantly, obsessively research and never accept anything without argument. We should all already know that there are no silver bullets. Simply quoting someone to justify something is a fallacy I <strong>don&rsquo;t accept</strong>, as I already said in my article <a href="http://akitaonrails.com/en/2009/11/08/off-topic-obediencia-a-autoridade"target="_blank" rel="noopener">Obedience to Authority</a>.</p>
<p>That is, even to defend agile methodologies I need a better argument than saying <em>&ldquo;Kent Beck is awesome, Kent Beck invented XP, so I should use XP.&rdquo;</em> Or something like <em>&ldquo;Toyota is awesome, Toyota uses Lean, so I should use Lean.&rdquo;</em> That&rsquo;s not an argument.</p>
<p>Fact: many companies today say they use Scrum, many people say they understand Scrum, but I&rsquo;d bet a lot of money that the overwhelming majority don&rsquo;t know more than <a href="http://web.archive.org/web/20100107182455/http://agilethis.com:80/2009/03/03/scrumbutt-and-so-what/"target="_blank" rel="noopener">Scrum-butt</a>, or what we&rsquo;d call, in a very Brazilian way, <em>&ldquo;half-baked Scrum.&rdquo;</em> Better than nothing, yes, but quite poor compared to the level of <strong>hyperproductivity</strong> that Scrum promises: 400% or more.</p>
<p>David Hume said:</p>
<blockquote>
  <p>A wise man, therefore, proportions his belief to the evidence.</p>

</blockquote>
<p>Laplace&rsquo;s Principle (Pierre Simon Laplace) says:</p>
<blockquote>
  <p>The weight of evidence for an extraordinary claim must be proportional to its strangeness.</p>

</blockquote>
<p>Carl Sagan popularized:</p>
<blockquote>
  <p>Extraordinary claims require extraordinary evidence.</p>

</blockquote>
<p>Given that I think this way, I need much more. I can use something based on my hunch that it works, but it can&rsquo;t turn into a comfort zone. This led me into reverse engineering and a research path that has already lasted more than a year: <a href="http://www.akitaonrails.com/en/2009/07/11/off-topic-livros-de-refer-ncia-2008-2009"target="_blank" rel="noopener">dozens of books</a>, dozens of <a href="http://harvardbusiness.org/"target="_blank" rel="noopener">technical papers</a>, multidisciplinary research spanning the history of management, production engineering, psychology, sociology, and physics.</p>
<p>It&rsquo;s a search for the roots of what should make a real &ldquo;agile organization.&rdquo; For me, agile methodologies are the current stage in the evolution of project management, and still far from the last one. Implementing an agile methodology is a means to get somewhere bigger, never the end goal.</p>
<p>In reality, the last few months have only been the most constant stretch. Worth remembering that I certified as a PMP in 2005, and back then I was already studying PMBOK and OPM3. Two years before, my research line was RUP, SW-CMM (before CMMi), and Indian software factories. My first contact with agile methodologies was in 2003, with an introduction to Extreme Programming, and in the 90s I followed the evolution of UML and RUP: Coad &amp; Yourdon, Rumbaugh, Booch, Jacobson.</p>
<p>This whole introduction is a <strong>mea culpa</strong> about recent talks I&rsquo;ve given, especially &ldquo;Beyond Chaos: Random Thoughts on Agility.&rdquo; It was the most recent and most daring version of a series of talks I gave throughout 2009 in several cities. It became clear that many people didn&rsquo;t have the background to follow all these concepts.</p>
<p>In that talk I dared to mention concepts like:</p>
<ul>
<li>Complexity Theory and Nonlinearity</li>
<li>Chaos Theory (specifically the &ldquo;Edge of Chaos&rdquo;)</li>
<li>Entropy Systems Theory</li>
<li>Emergence and Self-Organization</li>
<li>Complex Adaptive Systems</li>
<li>Evolution and <em>Punctuated Equilibrium</em></li>
<li>Game Theory</li>
</ul>
<p>I really did try to explain each of these topics, but I found out that talks of less than 1 hour are terrible for explaining such dense concepts at the same time. I&rsquo;ll still find a better way.</p>
<p>Each of these topics represents an entire branch of scientific research. And I swear I&rsquo;m not talking about pseudo-science, this is serious research. In fact, these branches are precisely the &ldquo;answer&rdquo; to the question: <em>&ldquo;how do agile methodologies, if properly implemented, lead teams to a stage of sustainable hyperproductivity?&rdquo;</em></p>
<p>The first time I mentioned <em>&ldquo;Self-Organization&rdquo;</em> at the beginning of 2009, I heard many people literally &ldquo;making fun&rdquo; of what I said. Some thought I had &ldquo;invented&rdquo; this &ldquo;strange&rdquo; concept. Unfortunately I&rsquo;m not that smart :-) By chance, I reached the same conclusions as the creators of Scrum. Watch Jeff Sutherland, co-creator of Scrum, himself listing some of these concepts:</p>
<video controls>
<source src="https://s3.us-east-2.amazonaws.com/blip.tv/Akitaonrails-Agile2009JeffSutherland974.mp4">
Your browser does not support the video tag. [Direct Link](https://s3.us-east-2.amazonaws.com/blip.tv/Akitaonrails-Agile2009JeffSutherland974.mp4)
</source></video>
<p>This excerpt is from the talk <a href="http://jeffsutherland.com/scrum/2009/04/self-organization-secret-sauce-for.html"target="_blank" rel="noopener">Self-Organization: The Secret Sauce for Improving Your Scrum Team</a>, which he recently presented at Google Tech Talk.</p>
<p>I confess it was very strange to hear that reaction, since I&rsquo;m talking about people who, in theory, should be agilists, given that they claim to know how to implement Scrum. That&rsquo;s why I published the article <a href="/en/2008/10/7/off-topic-o-manifesto-gil-ou-como-se-tornar-o-google">The Agile Manifesto, or How to Become Google</a>, where I started to interpret what everyone should have already memorized: the <a href="http://agilemanifesto.org/"target="_blank" rel="noopener">Agile Manifesto</a>:</p>
<blockquote>
  <p>&ldquo;The best architectures, requirements, and designs <strong>emerge</strong> from <strong>self-organizing</strong> teams.&rdquo;</p>

</blockquote>
<p>Yes, this is one of the <a href="http://agilemanifesto.org/principles.html"target="_blank" rel="noopener">12 principles</a> of the Manifesto. But if you don&rsquo;t understand the scientific concept of &ldquo;emergence&rdquo; and &ldquo;self-organization,&rdquo; then you don&rsquo;t understand the Manifesto and will have many problems trying to be Agile.</p>
<p>You know what else? Ken Schwaber was co-creator of Scrum in the mid-90s, together with Jeff Sutherland. He <a href="http://jeffsutherland.com/oopsla/schwapub.pdf"target="_blank" rel="noopener">wrote a formal paper</a> presented at OOPSLA-95. I can&rsquo;t understand how anyone can say they &ldquo;know Scrum&rdquo; and have never read this paper. In it, Schwaber says:</p>
<blockquote>
  <p>&ldquo;The closer the development team operates to the <strong>edge of chaos</strong>, while still maintaining order, the more competitive and useful the resulting system will be.&rdquo;</p>

</blockquote>
<p>Sutherland and Schwaber were some of the first Westerners to understand and publish about the enormous difference between <strong>Defined</strong> (predictable) and <strong>Empirical</strong> (unpredictable) processes. The Japanese had already gotten there with Deming years earlier.</p>
<p>Waterfall, RUP, and CMM are defined processes. Scrum, XP, and other Agile methodologies are mixed, somewhere between defined and empirical. This is the first big difference that makes the two groups incomparable, and Schwaber explains it very well in <a href="http://jeffsutherland.com/oopsla96/schwaber.html"target="_blank" rel="noopener">Controlling Chaos: Living on the Edge</a>, presented at OOPSLA-96.</p>
<p>Even today I hear someone wanting to start a discussion like <em>&ldquo;Scrum vs. XP,&rdquo;</em> <em>&ldquo;Scrum vs. Lean,&rdquo;</em> <em>&ldquo;Adding Scrum to Kanban,&rdquo;</em> or <em>&ldquo;Adding Scrum to CMMi.&rdquo;</em> It&rsquo;s hard not to get frustrated with the futility of these conversations, where people only argue about the top of the iceberg and never come close to touching the base of the principles that precede each of these topics.</p>
<p><a href="http://jeffsutherland.com/scrum/2007/11/is-it-scrum-or-lean.html"target="_blank" rel="noopener">In the words</a> of Scrum co-creator Jeff Sutherland, from November 2007:</p>
<blockquote>
  <p>After thinking about the early days of Scrum I think the root of both Scrum and Lean is <strong>complex adaptive systems</strong> theory. When we created Scrum we did not talk about Lean, we talked about complex adaptive systems. I think Scrum and Lean are complementary implementations of ways to deal with physical reality where things are often <strong>not linear</strong>, not simple, and not predictable.</p>
<p>The first Scrum implemented all the practices we know as Scrum today plus all of what later became known as XP practices plus some secret sauce that creates hyperproductive teams.</p>
<p>(&hellip;) But most important, we captured the &ldquo;punctuated equilibrium&rdquo; effect, something I have yet to see another Scrum team do. It is one of the secrets of hyperproductive teams. Before a developer chooses a task in the Scrum meeting, the entire team discusses with the developer whether that task will be the fastest path to an observable end-use feature. This was a sophisticated implementation of <strong>&ldquo;self-organization&rdquo;</strong> and &ldquo;test first&rdquo; development.</p>

</blockquote>
<p>What&rsquo;s funny is that, as I said before, I only read this account of Scrum&rsquo;s history this week. I arrived at the same topics of <a href="http://en.wikipedia.org/wiki/Complex_adaptive_system"target="_blank" rel="noopener"><strong>Complex Adaptive Systems</strong></a>, <a href="http://en.wikipedia.org/wiki/Punctuated_equilibrium"target="_blank" rel="noopener"><strong>Punctuated Equilibrium</strong></a>, and the others I listed above through different paths.</p>
<p>I already knew the novelties of scale-free network theory, which gave rise to my 2008 talk &ldquo;Killing the Average.&rdquo; And, reading and rereading the Agile Manifesto, I came across the word <a href="http://en.wikipedia.org/wiki/Self-organization"target="_blank" rel="noopener">self-organization</a>. The sum of these two things led to dozens of readings that culminated in Complex Adaptive Systems. It&rsquo;s a research path that seems somewhat inevitable, and it seems Sutherland and Schwaber reached the same conclusion more than 15 years ago.</p>
<p>And more than that, Sutherland <a href="http://jeffsutherland.com/scrum/2009/01/roots-of-scrum-takeuchi-and-nonaka.html"target="_blank" rel="noopener">also says</a> the following about the origin of Scrum:</p>
<blockquote>
  <p>The first Scrum team was created directly from a paper which is required reading for any Scrum practitioner. It explains how to set up self-organizing teams and clearly outlines management&rsquo;s role in the process.</p>
<p>Takeuchi and Nonaka. <a href="https://hbr.org/1986/01/the-new-new-product-development-game"target="_blank" rel="noopener">The New New Product Development Game</a>. Harvard Business Review, 1986</p>
<p>A longer paper from a book which is out of print goes into more depth. Some may find this easier reading.</p>
<p>Ken-ichi Imai, Ikujiro Nonaka, and Hirotaka Takeuchi. <a href="http://jeffsutherland.com/scrum/takeuchimanagingnewproductdevelopmentprocess.pdf"target="_blank" rel="noopener">Managing the New Product Development Process: How Japanese Companies Learn and Unlearn</a>.</p>

</blockquote>
<p><a href="http://en.wikipedia.org/wiki/Hirotaka_Takeuchi"target="_blank" rel="noopener">Hirotaka Takeuchi</a> and <a href="http://en.wikipedia.org/wiki/Ikujiro_Nonaka"target="_blank" rel="noopener">Ikujiro Nonaka</a> are Japanese professors also known for their research in <a href="https://www.monografias.com/pt/trabalhos3/gestao-conhecimento/gestao-conhecimento3.shtml"target="_blank" rel="noopener">Knowledge Management</a>. The Harvard Business paper Sutherland mentions costs a mere USD 6.50. I just bought it, and it&rsquo;s telling that the &ldquo;Scrum&rdquo; analogy from &ldquo;Rugby&rdquo; is already explained and named right there. That is, the name &ldquo;Scrum&rdquo; comes from Takeuchi and Nonaka.</p>
<p>More than that, they already explain in that paper what the concept of <strong>Self-Organization</strong> is and how it works. They also explain sequential style (Type A) and overlapping development phases (Types B and C). Sutherland usually talks about hyperproductive teams as <strong>Type C Scrum</strong>.</p>
<p>What Takeuchi and Nonaka explain in detail in these papers is the following:</p>
<blockquote>
  <p>From interviews with organization members from the CEO to young engineers, we learned that leading companies show six characteristics in managing their new product development processes:</p>
<ol>
<li>Built-in instability</li>
<li>Self-organizing project teams</li>
<li>Overlapping development phases</li>
<li>&ldquo;Multilearning&rdquo;</li>
<li>Subtle control</li>
<li>Organizational transfer of learning</li>
</ol>

</blockquote>
<p>Once again, each of these items is the subject of an entire branch of research, so don&rsquo;t try to extract any meaning from just these few words. The goal here is only to give a &ldquo;taste.&rdquo; Buy the paper and read more about the two&rsquo;s work, especially about Knowledge Management, which is a bit different from what most companies understand by knowledge (for a change).</p>
<p>Another thing some may not know:</p>
<blockquote>
  <p>&ldquo;In the same year, Sutherland provided support for development of eXtreme Programming by giving Kent Beck all background information on the creation of Scrum and the results of two years of product development with the Scrum process from 1993-95. XP engineering practices evolved along with Scrum and the two leading Agile development processes work well together. Scrum and XP are the most widely used Agile processes worldwide and their creators are signatories of the Agile Manifesto.&rdquo;</p>

</blockquote>
<p>This is in the <a href="http://web.archive.org/web/20100114175300/http://scrumtraininginstitute.com/home/stream_download/scrumpapers"target="_blank" rel="noopener">Scrum Papers</a>, which obviously every agilist should read. The point is: Scrum is founded on the Japanese principles that gave rise to Lean, while also serving as inspiration for the creation of XP. There is no conflict between Lean, Scrum, and XP. They have similar roots! That&rsquo;s why it&rsquo;s important to study principles more than just practices.</p>
<p>Be careful: I&rsquo;m not citing all of this as a way of &ldquo;proving&rdquo; my point. I&rsquo;m citing studies that happened to coincide with what I started doing on my own. It&rsquo;s all research material that shouldn&rsquo;t be used as dogma, but as a reference for research.</p>
<p>To close, I like to mention Mary Poppendieck. Among the agilists, she and Tom decided to take the most purist line and wrote <a href="http://en.wikipedia.org/wiki/Lean_software_development"target="_blank" rel="noopener">Lean Software Development</a>. With this explanation, it should be clear that what Mary/Tom and Sutherland/Schwaber say is complementary and totally compatible, each with their own experience background. And from Mary, I think <a href="http://web.archive.org/web/20090310184819/http://www.poppendieck.com/blame.htm"target="_blank" rel="noopener">this article on &lsquo;Blame&rsquo;</a> is important to read:</p>
<blockquote>
  <p>The purpose of what became today&rsquo;s organization chart was clear: The assignment of responsibility would enable &ldquo;prompt detection of derelictions of duty&hellip; and point out the delinquent.&rdquo;</p>
<p>(&hellip;) There is something called standard work, but standards should be changed constantly. Instead, if you think of the standard as the best you can do, it&rsquo;s all over. The standard work is only a baseline for doing further kaizen. It is kai-aku [change for the worse] if things get worse than now, and it is kaizen [change for the better] if things get better than now. Standards are set arbitrarily by humans, so how can they not change?</p>

</blockquote>
<p>That last paragraph is, again, for those who still think silver bullets exist, that there&rsquo;s some body of unshakable practices (CMMI, ITIL, RUP, etc.) where simply &ldquo;following the recipe to the letter&rdquo; will magically make everything work. After all, they&rsquo;re &ldquo;industry standards.&rdquo;</p>
<p>Bullshit! Do your homework: keep researching!</p>
<p>PS: Read all my articles from the <a href="http://akitaonrails.com/off-topic"target="_blank" rel="noopener">Off-Topic</a> section for more related topics.</p>
]]></content:encoded><category>agile</category><category>management</category><category>off-topic</category></item></channel></rss>