<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    This is an interesting side discussion to the problem of HR
    departments filtering out the good people and passing on people with
    the highest number of keyword matches to the hiring managers.<br>
    <br>
    [This one keeps coming up in both GTALUG and UU discussions:
    crossposted.]<br>
    <br>
    <div class="moz-forward-container">--dave<br>
      -------- Original Message --------
      <table class="moz-email-headers-table" border="0" cellpadding="0"
        cellspacing="0">
        <tbody>
          <tr>
            <th nowrap="nowrap" valign="BASELINE" align="RIGHT">Subject:
            </th>
            <td>Resume Driven Development</td>
          </tr>
          <tr>
            <th nowrap="nowrap" valign="BASELINE" align="RIGHT">Date: </th>
            <td>Sat, 11 Oct 2014 13:38:37 GMT</td>
          </tr>
          <tr>
            <th nowrap="nowrap" valign="BASELINE" align="RIGHT">From: </th>
            <td><Mike Loukides></td>
          </tr>
        </tbody>
      </table>
      <br>
      <a class="moz-txt-link-freetext"
href="http://feedproxy.google.com/%7Er/oreilly/radar/atom/%7E3/vgBYi2NC_FY/resume-driven-development.html">http://feedproxy.google.com/~r/oreilly/radar/atom/~3/vgBYi2NC_FY/resume-driven-development.html</a><br>
      <br>
      <title>Resume Driven Development</title>
      <base
        href="http://radar.oreilly.com/2014/10/resume-driven-development.html">
      <p><a moz-do-not-send="true"
          href="https://www.flickr.com/photos/howardlake/4834299551"><img
            moz-do-not-send="true"
src="http://s.radar.oreilly.com/wp-files/2/2014/10/Crossed_Wires_Howard_Lake_Flickr.jpg"
            alt="Crossed_Wires_Howard_Lake_Flickr" class="aligncenter
            size-full wp-image-71237" height="205" width="620"></a></p>
      <p>I had a conversation recently with <a moz-do-not-send="true"
          href="http://mechanical-sympathy.blogspot.com/">Martin
          Thompson</a> (<a moz-do-not-send="true"
          href="https://twitter.com/mjpt777">@mjpt777</a>), a
        London-based developer who specializes in performance and
        low-latency systems. I learned about Martin through <a
          moz-do-not-send="true" href="https://twitter.com/KevlinHenney">Kevlin

          Henney’s Tweets</a> about his recent talk at <a
          moz-do-not-send="true"
          href="http://gotocon.com/aarhus-2014/speaker/Martin+Thompson">Goto

          Aarhus</a>.</p>
      <p>We talked about a disturbing trend in software development:
        Resume Driven Development, or RDD. Resume Driven Development
        happens when your group needs to hire a developer. It’s very
        hard to tell a non-technical HR person that you need someone who
        can make good decisions about software architecture, someone who
        knows the difference between clean code and messy code, and
        someone who’s able to look at a code base and see what’s
        unnecessary and what can be simplified. We frequently can’t do
        that ourselves. So management says, “oh, we just added Redis to
        the application, so we’ll need a Redis developer.” That’s great
        — it’s easy to throw out resumes that don’t say Redis; it’s easy
        to look for certifications; and sooner or later, you have a
        Redis developer at a desk. Maybe even a good one.</p>
      <p>And what does your Redis developer do? He does Redis, of
        course. So, you’re bound to have an application with a lot of
        Redis in it. Whenever he sees a problem that can be solved with
        Redis, that’s what he’ll do. It’s what you hired him for. You’re
        happy; he’s happy. Except your application is now being
        optimized to fit the resumes of the people you hired, not the
        requirements of your users.<span id="more-71224"></span></p>
      <p>I have nothing against Redis. Substitute any other great tool
        (Node, Django, jQuery, AngularJS — the list is very long) in any
        tier of the application, and you’ll end up with the same story.
        If this scenario bears any resemblance to the truth (and it
        certainly does), you probably will rinse, substitute some other
        tool, and repeat. Now you have a developer whose job is to make
        sure there’s a lot of Angular in the system. Sooner or later,
        you have a nice “full stack” that’s using just about everything
        in the modern bestiary of programming languages and frameworks.</p>
      <p>This isn’t a good situation. The problem isn’t the tools, each
        of which serves a need and is good at doing what it does. The
        problem isn’t the developers; you hired good Redis, Angular, and
        Node guys, and they’re all doing what they were hired to do. The
        problem is that your team is optimized around the inability to
        communicate at a critical stage: the inability of a technical
        team to specify what they really want (a developer with good
        programming taste and instincts), and instead hiring someone who
        has a particular skill or credential. Martin and I suspect that
        Resume Driven Development is quite pervasive: an overly complex
        application stack that’s defined by the people you hired, and by
        the current toys that the “cool kids” on the programming block
        get to play with, not by the requirements of the application.</p>
      <p>If it all works, what’s the problem? Well, the problem is that
        it probably doesn’t work. Martin has gotten latencies from tens
        of seconds down to sub-second levels just by stripping layers
        out of the stack. The resulting code is simpler, easier to work
        with, and much more productive: customers buy stuff; customers
        actually explore the site and shop because they’re no longer
        frustrated while waiting around for their request to percolate
        through an overly complex site.</p>
      <p>This isn’t an easy problem to solve. The complete system
        (software, engineers, HR staff) tends to optimize around the
        wrong problem: simplifying the process of evaluating candidates
        by listing a set of skills. In the process, it pessimizes what
        should be most important: the ability to serve customers
        effectively. The result is a large, complex technology stack, a
        Yak with a lot of multi-colored hair to shave, that’s defined by
        the institutional setting, not the job’s real technical
        requirements.</p>
      <p>How do we fix this? It’s easy to say “hire good people”; but
        hiring good people is hard. When you’re looking for good
        programming instincts and a solid understanding of the
        fundamentals, certifications don’t help; degrees don’t help. But
        certainly understanding the problem, understanding why your
        “full stack” has grown so full, is a start. And before you ask
        HR to find a developer who is familiar with AcuteJS and Lymph,
        think about who you really want in that seat.</p>
      <p><em>Cropped image on article and category pages by <a
            moz-do-not-send="true"
            href="https://www.flickr.com/photos/howardlake/4834299551">Howard

            Lake on Flickr</a>, used under a <a moz-do-not-send="true"
            href="https://creativecommons.org/licenses/by-sa/2.0/">Creative

            Commons license</a>.</em></p>
      <div class="feedflare"> <a moz-do-not-send="true"
href="http://feeds.feedburner.com/%7Eff/oreilly/radar/atom?a=vgBYi2NC_FY:8OLvyutoYS8:V_sGLiPBpWU"><img
            moz-do-not-send="true"
src="http://feeds.feedburner.com/%7Eff/oreilly/radar/atom?i=vgBYi2NC_FY:8OLvyutoYS8:V_sGLiPBpWU"
            border="0"></a> <a moz-do-not-send="true"
href="http://feeds.feedburner.com/%7Eff/oreilly/radar/atom?a=vgBYi2NC_FY:8OLvyutoYS8:yIl2AUoC8zA"><img
            moz-do-not-send="true"
            src="http://feeds.feedburner.com/%7Eff/oreilly/radar/atom?d=yIl2AUoC8zA"
            border="0"></a> <a moz-do-not-send="true"
href="http://feeds.feedburner.com/%7Eff/oreilly/radar/atom?a=vgBYi2NC_FY:8OLvyutoYS8:JEwB19i1-c4"><img
            moz-do-not-send="true"
src="http://feeds.feedburner.com/%7Eff/oreilly/radar/atom?i=vgBYi2NC_FY:8OLvyutoYS8:JEwB19i1-c4"
            border="0"></a> <a moz-do-not-send="true"
href="http://feeds.feedburner.com/%7Eff/oreilly/radar/atom?a=vgBYi2NC_FY:8OLvyutoYS8:7Q72WNTAKBA"><img
            moz-do-not-send="true"
            src="http://feeds.feedburner.com/%7Eff/oreilly/radar/atom?d=7Q72WNTAKBA"
            border="0"></a> <a moz-do-not-send="true"
href="http://feeds.feedburner.com/%7Eff/oreilly/radar/atom?a=vgBYi2NC_FY:8OLvyutoYS8:qj6IDK7rITs"><img
            moz-do-not-send="true"
            src="http://feeds.feedburner.com/%7Eff/oreilly/radar/atom?d=qj6IDK7rITs"
            border="0"></a> </div>
      <img moz-do-not-send="true"
src="http://feeds.feedburner.com/%7Er/oreilly/radar/atom/%7E4/vgBYi2NC_FY"
        height="1" width="1"> <br>
    </div>
    <br>
  </body>
</html>