<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">
  <id>tag:blog.nahurst.com,2013:/posts</id>
  <link rel="alternate" type="text/html" href="https://blog.nahurst.com"/>
  <link rel="self" type="application/atom+xml" href="https://blog.nahurst.com/posts.atom"/>
  <title>Nathan Hurst's Blog</title>
  <updated>2024-03-12T17:11:37Z</updated>
  <itunes:author>Nathan Hurst</itunes:author>
  <entry>
    <id>tag:blog.nahurst.com,2013:Post/843283</id>
    <published>2015-04-20T18:55:20Z</published>
    <updated>2020-09-08T17:17:49Z</updated>
    <link rel="alternate" type="text/html" href="https://blog.nahurst.com/im-joining-teachers-pay-teachers"/>
    <title>I'm joining Teachers Pay Teachers</title>
    <content type="html">
      <![CDATA[<div class="posthaven-post-body"><p>I’ve been programming for mobile for 15 years. “What?! Mobile wasn’t around in 2000,” you say? Well, you’re forgetting about the original mobile, the TI-83 graphing calculator.</p><p>BASIC on the TI-83 was my first experience with programming, and it all started because a teacher told me I could use calculator apps on tests if I made them myself. I’ve been programming ever since, and it has shaped who I am as a person. This is just one example of the profound effect teachers can have. </p><p>Today, I’m proud to announce I’m joining a company that helps teachers share these transformational experiences: <a title="Link: http://teacherspayteachers.com" href="http://teacherspayteachers.com">Teachers Pay Teachers</a>. Teachers Pay Teachers is the world’s first and largest open marketplace for educators to buy, sell, and share their original resources. It’s growing like crazy and has already paid out over $100M to teachers.</p><p>I’m excited to join a great team including:</p><ul>
<li>Sha-Mayn Teh (previously an engineering manager at Google)</li>
<li>Adam Freed (previously COO at Etsy)</li>
<li>Jared Cohen (previously COO at Kickstarter)</li>
<li>Kirsten Nevill-Manning (previously director of FB recruiting)</li>
<li>Scott Carleton and Alexis Tryon (from Artsicle who I met during the good ol’ days at Dogpatch Labs)</li>
</ul><p>If you’re interested in hearing more, ping me at <a href="mailto:nhurst@teacherspayteachers.com">nhurst@teacherspayteachers.com</a> - I’d love to grab coffee, hear what you’ve been doing, and tell you what we’re up to!        <div class="posthaven-gallery" id="posthaven_gallery[854082]">
                  <p class="posthaven-file posthaven-file-image posthaven-file-state-processed">
          <img class="posthaven-gallery-image" src="https://phaven-prod.s3.amazonaws.com/files/image_part/asset/1414438/XKSJEbPFHP_WIjHJy3fGcFsWrQ8/medium_originalmobile.jpg" data-posthaven-state='processed'
data-medium-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/1414438/XKSJEbPFHP_WIjHJy3fGcFsWrQ8/medium_originalmobile.jpg'
data-medium-width='355'
data-medium-height='455'
data-large-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/1414438/XKSJEbPFHP_WIjHJy3fGcFsWrQ8/large_originalmobile.jpg'
data-large-width='355'
data-large-height='455'
data-thumb-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/1414438/XKSJEbPFHP_WIjHJy3fGcFsWrQ8/thumb_originalmobile.jpg'
data-thumb-width='200'
data-thumb-height='200'
data-xlarge-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/1414438/XKSJEbPFHP_WIjHJy3fGcFsWrQ8/xlarge_originalmobile.jpg'
data-xlarge-width='355'
data-xlarge-height='455'
data-orig-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/1414438/XKSJEbPFHP_WIjHJy3fGcFsWrQ8/originalmobile.jpg'
data-orig-width='355'
data-orig-height='455'
data-posthaven-id='1414438'/>
        </p>

        </div>
</p><br><br><br></div>]]>
    </content>
    <author>
      <name>Nathan Hurst</name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.nahurst.com,2013:Post/598916</id>
    <published>2013-09-03T19:01:32Z</published>
    <updated>2019-07-31T14:57:50Z</updated>
    <link rel="alternate" type="text/html" href="https://blog.nahurst.com/understand-the-differences-between-ios-and-android"/>
    <title>Understand the differences between iOS and Android</title>
    <content type="html">
      <![CDATA[<div class="posthaven-post-body"><div>My name is Nathan, and I'm an Android fanboy. I've been 
investigating the differences between Android and iOS user experiences 
recently, and wanted to summarize my findings for you:<br><br>
</div>
<div>
<img title="Image: http://i.imgur.com/eRXlfIw.jpg" src="http://i.imgur.com/eRXlfIw.jpg">
</div>
<div>That's right: one of these things is not like the others. This is how it feels to use your iOS app that you directly cloned for Android.<br><br>
</div><div>
<b>Don't port your interface from iOS to Android directly. </b>There's a minimal level of work you have to do to take your app from bleach to milk. Just take a look at these resources.<br>
</div><div>
<br><a target="_blank" href="http://developer.android.com/design/patterns/pure-android.html">Pure Android</a> will give you 80% of what you need to know in five minutes.<br><a title="Link: http://kintek.com.au/blog/portkit-ux-metaphor-equivalents-for-ios-and-android/" target="_blank" href="http://kintek.com.au/blog/portkit-ux-metaphor-equivalents-for-ios-and-android/">iOS 7, iOS6, and Android UI Element Equivalents</a> will take you up to 90% in another five minutes.<br>
</div><div>
<a target="_blank" href="http://developer.android.com/design/index.html">Android Design Guide</a> will take you up to 95% in a few hours.<br><br>To get the rest of the way, I'd suggest using Android device as your primary mobile device for a week at least.<br><br>If these types of user experience challenges interest you, we're hiring mobile engineers at <a title="Link: http://amplify.com/tablet" href="http://amplify.com/tablet">Amplify</a>. Feel free to contact me directly at nhurst@amplify.com if you're interested.<br>
</div></div>]]>
    </content>
    <author>
      <name>Nathan Hurst</name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.nahurst.com,2013:Post/333133</id>
    <published>2012-11-19T17:17:00Z</published>
    <updated>2018-02-21T17:31:13Z</updated>
    <link rel="alternate" type="text/html" href="https://blog.nahurst.com/discover-unique-gift-ideas-with-giftmating"/>
    <title>Discover unique gift ideas with GiftMating</title>
    <content type="html">
      <![CDATA[<div class="posthaven-post-body"><p><span>Dear friends,</span></p>
<p><span>I made something for you this Christmas. I hope you'll enjoy it!</span></p>
<p><span>Each year I have a secret I use to find gifts for people: go to Amazon, find two things I know my gift recipient likes, then compare the "similar items" section to find matches. It's kind of tedious to do, but it works like a charm. Enter computers. Exit the tedious.</span></p>
<p><span>This year, I made a website that does the same thing without any effort: <a href="http://GiftMating.com" rel="nofollow">GiftMating.com</a></span></p>
<p><a href="http://giftmating.com">        <div class="posthaven-gallery" id="posthaven_gallery[338527]">
                  <p class="posthaven-file posthaven-file-image posthaven-file-state-processed">
          <img class="posthaven-gallery-image" src="https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607335/n1uFwUOBx9mmB94GFQL1am1ZUbk/medium_merry.png.scaled1000.png" data-posthaven-state='processed'
data-medium-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607335/n1uFwUOBx9mmB94GFQL1am1ZUbk/medium_merry.png.scaled1000.png'
data-medium-width='600'
data-medium-height='457'
data-large-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607335/n1uFwUOBx9mmB94GFQL1am1ZUbk/large_merry.png.scaled1000.png'
data-large-width='600'
data-large-height='457'
data-thumb-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607335/n1uFwUOBx9mmB94GFQL1am1ZUbk/thumb_merry.png.scaled1000.png'
data-thumb-width='200'
data-thumb-height='200'
data-xlarge-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607335/n1uFwUOBx9mmB94GFQL1am1ZUbk/xlarge_merry.png.scaled1000.png'
data-xlarge-width=''
data-xlarge-height=''
data-orig-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607335/n1uFwUOBx9mmB94GFQL1am1ZUbk/merry.png.scaled1000.png'
data-orig-width='600'
data-orig-height='457'
data-posthaven-id='607335'/>
        </p>

        </div>
</a></p></div>]]>
    </content>
    <author>
      <name>Nathan Hurst</name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.nahurst.com,2013:Post/333135</id>
    <published>2012-11-05T16:12:31Z</published>
    <updated>2018-02-21T17:31:13Z</updated>
    <link rel="alternate" type="text/html" href="https://blog.nahurst.com/dont-re-elect-sopa-supporters"/>
    <title>Don't re-elect SOPA supporters on Tuesday</title>
    <content type="html">
      <![CDATA[<div class="posthaven-post-body"><p><span>As elections draw near, remember that it's not just about the President. We'll vote on a number of Congressional seats too.</span></p><p></p><span>If you haven't take a second to get a quick read on your senator and representative, <a href="http://ballotpedia.org/wiki/index.php/Ballotpedia:2012_general_election_preview_articles" target="_blank">do that now</a>.</span><p></p> <span>As you're considering congressional leaders, take note of <a href="http://projects.propublica.org/sopa/" target="_blank">who never came to their senses</a> with regard to SOPA, the bill that was going to <a href="http://americancensorship.org/infographic.html">break the internet</a>. For quick reference, if you're in one of these states or districts, please pay extra attention. </span><p></p> <span><strong>You have a SOPA supporter up for re-election:  </strong></span><p></p><span>Arizona</span><br><span>Don't re-elect Senator Kyl</span><p></p><span>California</span><br><span>Everyone: Don't re-elect Senator Feinstein</span> <span><br><a href="http://en.wikipedia.org/wiki/California&#39;s_24th_congressional_district">District 24</a>: Don't re-elect Representative Gallegly</span><br><span><a href="http://en.wikipedia.org/wiki/California&#39;s_27th_congressional_district"> District 27</a>: Don't re-elect Representative Sherman</span><br><span><a href="http://en.wikipedia.org/wiki/California&#39;s_28th_congressional_district">District 28</a>: Don't re-elect Representative Berman</span><br><span><a href="http://en.wikipedia.org/wiki/California&#39;s_29th_congressional_district">District 29</a>: Don't re-elect Representative Schiff</span><br><span><a href="http://en.wikipedia.org/wiki/California&#39;s_32nd_congressional_district">District 32</a>: Don't re-elect Representative Chu</span><br><span><a href="http://en.wikipedia.org/wiki/California&#39;s_33rd_congressional_district"> District 33</a>: Don't re-elect Representative Bass</span><br><span><a href="http://en.wikipedia.org/wiki/California&#39;s_43rd_congressional_district">District 43</a>: Don't re-elect Representative Baca</span><br><span><a href="http://en.wikipedia.org/wiki/California&#39;s_45th_congressional_district">District 45</a>: Don't re-elect Representative Bono Mack</span><p></p><span>Connecticut</span><br><span><a href="http://en.wikipedia.org/wiki/Connecticut&#39;s_1st_congressional_district">District 1</a>: Don't re-elect Representative Larson</span><p></p> <span>Florida</span><br><span>Everyone: Don't re-elect Senator Nelson</span> <span><br><a href="http://en.wikipedia.org/wiki/Florida&#39;s_12th_congressional_district">District 12</a>: Don't re-elect Representative Ross</span><br><span><a href="http://en.wikipedia.org/wiki/Florida&#39;s_19th_congressional_district">District 19</a>: Don't re-elect Representative Deutch</span><br><span><a href="http://en.wikipedia.org/wiki/Florida&#39;s_20th_congressional_district">Distruct 20</a>: Don't re-elect RepresentativeWasserman Schultz</span><p></p> <span>Georgia</span><br><span><a href="http://en.wikipedia.org/wiki/Georgia&#39;s_12th_congressional_district">District 12</a>: Don't re-elect Representative Barrow</span><p></p><span>Michigan</span><br><span><a href="http://en.wikipedia.org/wiki/Michigan&#39;s_14th_congressional_district">District 14</a>: Don't re-elect Representative Conyers Jr.</span><p></p><span>Minnessota</span><br><span>Everyone: Don't re-elect Senator Klobuchar</span><p></p><span>Mississippi</span><span><br><a href="http://en.wikipedia.org/wiki/Mississippi&#39;s_1st_congressional_district"> District 1</a>: Don't re-elect Representative Nunnelee</span><p></p><span>North Carolina</span><br><span><a href="http://en.wikipedia.org/wiki/North_Carolina&#39;s_12th_congressional_district">District 12</a>: Don't re-elect Representative Watt</span><p></p><span>New Mexico</span><br><span>Everyone: Don't re-elect Senator Bingaman</span><p></p><span>Nevada</span><br><span><a href="http://en.wikipedia.org/wiki/Nevada&#39;s_2nd_congressional_district">District 2</a>: Don't re-elect Representative Amodei</span><p></p> <span>New York</span><br><span><a href="http://en.wikipedia.org/wiki/New_York&#39;s_3rd_congressional_district">District 3</a>: Don't re-elect Representative King</span><br><span><a href="http://en.wikipedia.org/wiki/New_York&#39;s_23rd_congressional_district">District 23</a>: Don't re-elect Representative Owens</span><p></p><span>Ohio</span><br><span>Everyone: Don't re-elect Senator Brown</span><br><a href="http://en.wikipedia.org/wiki/Ohio&#39;s_1st_congressional_district">District 1</a><span>: Don't re-elect Representative Chabot</span> <p></p> <span>Pennsylvania</span><br><span>Everyone: Don't re-elect Senator Casey</span><br><span><a href="http://en.wikipedia.org/wiki/Pennsylvania&#39;s_10th_congressional_district">District 10</a>: Don't re-elect Representative Marino</span><p></p><span>Rhode Island</span><br><span>Everyone: Don't re-elect Senator Whitehouse</span><p></p><span>Tennessee</span><br><span>Everyone: Don't re-elect Senator Corker</span><br><a href="http://en.wikipedia.org/wiki/Tennessee&#39;s_5th_congressional_district">District 5</a><span>: Don't re-elect Representative Cooper</span> <p></p> <span>Texas</span><br><span><a href="http://en.wikipedia.org/wiki/Texas&#39;s_21st_congressional_district">District 21</a>: Don't re-elect Representative Smith</span><p></p><span>Virginia</span><br><span><a href="http://en.wikipedia.org/wiki/Virginia&#39;s_6th_congressional_district">District 6</a>: Don't re-elect Representative Goodlatte</span>
<p><span><strong>Notes</strong></span></p>
<p><span>* </span><span>Data courtesy of <a href="http://projects.propublica.org/sopa/">ProPublica</a></span><br><span>* Some SOPA supporting senators and representatives are not mentioned here because they're not up for re-election or aren't running again.</span></p>
<p><span>Please tweet/share with your friends in other locations!</span></p></div>]]>
    </content>
    <author>
      <name>Nathan Hurst</name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.nahurst.com,2013:Post/333137</id>
    <published>2012-09-13T02:30:00Z</published>
    <updated>2018-02-21T17:31:13Z</updated>
    <link rel="alternate" type="text/html" href="https://blog.nahurst.com/visualizing-latency-numbers-every-programmer"/>
    <title>Visualizing Latency Numbers Every Programmer Should Know</title>
    <content type="html">
      <![CDATA[<div class="posthaven-post-body"><p>I recently saw <a href="https://gist.github.com/2841832">Latency Number Every Programmer Should Know</a> and was having trouble getting my head around the scale, so I made this visualization to help me out.</p>
<p>I converted latency times to their equivalent light distances (how far light travels in that much time) and plotted those distances on a map to get a sense of the latency numbers in relation to each other.</p>
<p>        <div class="posthaven-gallery" id="posthaven_gallery[338528]">
                  <p class="posthaven-file posthaven-file-image posthaven-file-state-processed">
          <img class="posthaven-gallery-image" src="https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607336/RZHROOumglV9DqZo4h9Q90YXQ0o/medium_latency_3_largest.png" data-posthaven-state='processed'
data-medium-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607336/RZHROOumglV9DqZo4h9Q90YXQ0o/medium_latency_3_largest.png'
data-medium-width='800'
data-medium-height='287'
data-large-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607336/RZHROOumglV9DqZo4h9Q90YXQ0o/large_latency_3_largest.png'
data-large-width='1000'
data-large-height='359'
data-thumb-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607336/RZHROOumglV9DqZo4h9Q90YXQ0o/thumb_latency_3_largest.png'
data-thumb-width='200'
data-thumb-height='200'
data-xlarge-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607336/RZHROOumglV9DqZo4h9Q90YXQ0o/xlarge_latency_3_largest.png'
data-xlarge-width=''
data-xlarge-height=''
data-orig-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607336/RZHROOumglV9DqZo4h9Q90YXQ0o/latency_3_largest.png'
data-orig-width='1000'
data-orig-height='359'
data-posthaven-id='607336'/>
        </p>
        <p class="posthaven-file posthaven-file-image posthaven-file-state-processed">
          <img class="posthaven-gallery-image" src="https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607337/RUalQRxyV0talJ46hbGY3nPLbDA/medium_latency_2_large.png" data-posthaven-state='processed'
data-medium-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607337/RUalQRxyV0talJ46hbGY3nPLbDA/medium_latency_2_large.png'
data-medium-width='770'
data-medium-height='750'
data-large-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607337/RUalQRxyV0talJ46hbGY3nPLbDA/large_latency_2_large.png'
data-large-width='770'
data-large-height='750'
data-thumb-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607337/RUalQRxyV0talJ46hbGY3nPLbDA/thumb_latency_2_large.png'
data-thumb-width='200'
data-thumb-height='200'
data-xlarge-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607337/RUalQRxyV0talJ46hbGY3nPLbDA/xlarge_latency_2_large.png'
data-xlarge-width=''
data-xlarge-height=''
data-orig-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607337/RUalQRxyV0talJ46hbGY3nPLbDA/latency_2_large.png'
data-orig-width='770'
data-orig-height='750'
data-posthaven-id='607337'/>
        </p>
        <p class="posthaven-file posthaven-file-image posthaven-file-state-processed">
          <img class="posthaven-gallery-image" src="https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607338/uqvwQMIBJuY6D2-Bw0dw_t1DpOY/medium_latency_1_mid.png" data-posthaven-state='processed'
data-medium-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607338/uqvwQMIBJuY6D2-Bw0dw_t1DpOY/medium_latency_1_mid.png'
data-medium-width='750'
data-medium-height='750'
data-large-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607338/uqvwQMIBJuY6D2-Bw0dw_t1DpOY/large_latency_1_mid.png'
data-large-width='750'
data-large-height='750'
data-thumb-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607338/uqvwQMIBJuY6D2-Bw0dw_t1DpOY/thumb_latency_1_mid.png'
data-thumb-width='200'
data-thumb-height='200'
data-xlarge-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607338/uqvwQMIBJuY6D2-Bw0dw_t1DpOY/xlarge_latency_1_mid.png'
data-xlarge-width=''
data-xlarge-height=''
data-orig-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607338/uqvwQMIBJuY6D2-Bw0dw_t1DpOY/latency_1_mid.png'
data-orig-width='750'
data-orig-height='750'
data-posthaven-id='607338'/>
        </p>

        </div>
</p>
<p><strong>Source Data</strong></p>
<p>The smallest few latency times are included here with their respective comparisons.</p>
<p><script src="https://gist.github.com/3711264.js?file=latency.txt"></script></p>
<p><strong>About me</strong></p>
<p>My company runs "speed interviewing" events over video chat to connect developers and companies for face-to-face conversations. If you're interested in latency and performance, we're hosting a web-event Tuesday and would love to have you participate: <a href="http://hirelite.com">Hirelite.com</a>.</p>
</div>]]>
    </content>
    <author>
      <name>Nathan Hurst</name>
    </author>
    <category scheme="https://blog.nahurst.com/tags/all" term="visual"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="performance"/>
  </entry>
  <entry>
    <id>tag:blog.nahurst.com,2013:Post/333139</id>
    <published>2012-01-22T21:50:00Z</published>
    <updated>2018-02-21T17:31:13Z</updated>
    <link rel="alternate" type="text/html" href="https://blog.nahurst.com/effort-to-simplicity-code-design-art"/>
    <title>Code, Picasso, and Simplicity</title>
    <content type="html">
      <![CDATA[<div class="posthaven-post-body"><p><span>I coded all day yesterday, focusing on a new feature for <a href="http://hirelite.com">Hirelite: Speed Dating for Software Jobs</a>. I implemented ~300 lines, added tons of functionality, and was feeling crazy productive. After this surge of productivity, though, the familiar pangs of technical debt anxiety came. I prescribed a hearty dose of refactoring.</span></p>
<p><span>I looked for commonalities to refactor among the eight paths of the feature. In particular, two paths stuck out as having more in common with the rest of the feature than the other six. </span><span>Coincidentally, these two paths were far more commonly used than the others. Additionally, </span><span>these two paths could effectively cover the scenarios implied by the other six.</span></p>
<p><span>Interestingly, these commonalities emerged through implementation. As I implemented the eight paths, the data structures backing each path generally fell in to two buckets. Each of the two more commonly used paths took advantage of different data structures, allowing the less common paths to be covered by one or a combination of the two.</span></p>
<p><span>These things weren't obvious from the user experience or product perspective. It took a deep, code-level understanding of the details of the problem and multiple potential solutions to surface this insight.</span></p>
<p><span>By the time I actually finished the feature, it was down to 50 lines. Though the simplified solution now seems obvious, I'm sure I would not have found this shortcut without working through the initial cases and writing the 300 lines. </span></p>
<p><span>It always astounds me how much work it takes to understand something well enough to truly simplify it. Sometimes I feel bad, like I've wasted a bunch of time building something that should have been easy from the start. Or maybe I shouldn't have done it at all - I should have hired a <a href="http://blog.hirelite.com/what-developers-think-when-you-say-rock-star">rockstarguru</a> who doesn't need to write rough drafts of anything, ever. And then I remember those people don't actually exist.</span></p>
<p><span>The same seems to be true for art. Picasso said:</span></p>
<blockquote>
<p><span>... pictures went forward toward completion by stages. Every day brought something new. A picture used to be a sum of additions. In my case a picture is a sum of destructions. I do a picture - then I destroy it. In the end, though, nothing is lost: the red I took away from one place turns up somewhere else.</span></p>
</blockquote>
<p><span>Picasso simplified masterfully. In 45 days, he drew 11 bulls, eventually boiling a bull down to just 9 lines. </span><br>        <div class="posthaven-gallery" id="posthaven_gallery[338530]">
                  <p class="posthaven-file posthaven-file-image posthaven-file-state-processed">
          <img class="posthaven-gallery-image" src="https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607339/yqHD9kAhaPVLCPvxOVMCYJikgGo/medium_picasso_bull_2_12-12-1945.jpg" data-posthaven-state='processed'
data-medium-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607339/yqHD9kAhaPVLCPvxOVMCYJikgGo/medium_picasso_bull_2_12-12-1945.jpg'
data-medium-width='401'
data-medium-height='296'
data-large-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607339/yqHD9kAhaPVLCPvxOVMCYJikgGo/large_picasso_bull_2_12-12-1945.jpg'
data-large-width='401'
data-large-height='296'
data-thumb-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607339/yqHD9kAhaPVLCPvxOVMCYJikgGo/thumb_picasso_bull_2_12-12-1945.jpg'
data-thumb-width='200'
data-thumb-height='200'
data-xlarge-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607339/yqHD9kAhaPVLCPvxOVMCYJikgGo/xlarge_picasso_bull_2_12-12-1945.jpg'
data-xlarge-width=''
data-xlarge-height=''
data-orig-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607339/yqHD9kAhaPVLCPvxOVMCYJikgGo/picasso_bull_2_12-12-1945.jpg'
data-orig-width='401'
data-orig-height='296'
data-posthaven-id='607339'/>
        </p>
        <p class="posthaven-file posthaven-file-image posthaven-file-state-processed">
          <img class="posthaven-gallery-image" src="https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607340/Pnke1DzUMmMZtRJghXxdPRmrqs0/medium_picasso_bull_1_12-5-1945.jpg" data-posthaven-state='processed'
data-medium-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607340/Pnke1DzUMmMZtRJghXxdPRmrqs0/medium_picasso_bull_1_12-5-1945.jpg'
data-medium-width='398'
data-medium-height='279'
data-large-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607340/Pnke1DzUMmMZtRJghXxdPRmrqs0/large_picasso_bull_1_12-5-1945.jpg'
data-large-width='398'
data-large-height='279'
data-thumb-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607340/Pnke1DzUMmMZtRJghXxdPRmrqs0/thumb_picasso_bull_1_12-5-1945.jpg'
data-thumb-width='200'
data-thumb-height='200'
data-xlarge-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607340/Pnke1DzUMmMZtRJghXxdPRmrqs0/xlarge_picasso_bull_1_12-5-1945.jpg'
data-xlarge-width=''
data-xlarge-height=''
data-orig-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607340/Pnke1DzUMmMZtRJghXxdPRmrqs0/picasso_bull_1_12-5-1945.jpg'
data-orig-width='398'
data-orig-height='279'
data-posthaven-id='607340'/>
        </p>
        <p class="posthaven-file posthaven-file-image posthaven-file-state-processed">
          <img class="posthaven-gallery-image" src="https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607341/_2t8ECC36PjSZ0XE5UJfouSmRus/medium_picasso_bull_3_12-18-1945.jpg" data-posthaven-state='processed'
data-medium-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607341/_2t8ECC36PjSZ0XE5UJfouSmRus/medium_picasso_bull_3_12-18-1945.jpg'
data-medium-width='398'
data-medium-height='290'
data-large-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607341/_2t8ECC36PjSZ0XE5UJfouSmRus/large_picasso_bull_3_12-18-1945.jpg'
data-large-width='398'
data-large-height='290'
data-thumb-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607341/_2t8ECC36PjSZ0XE5UJfouSmRus/thumb_picasso_bull_3_12-18-1945.jpg'
data-thumb-width='200'
data-thumb-height='200'
data-xlarge-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607341/_2t8ECC36PjSZ0XE5UJfouSmRus/xlarge_picasso_bull_3_12-18-1945.jpg'
data-xlarge-width=''
data-xlarge-height=''
data-orig-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607341/_2t8ECC36PjSZ0XE5UJfouSmRus/picasso_bull_3_12-18-1945.jpg'
data-orig-width='398'
data-orig-height='290'
data-posthaven-id='607341'/>
        </p>
        <p class="posthaven-file posthaven-file-image posthaven-file-state-processed">
          <img class="posthaven-gallery-image" src="https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607342/WyUYtAI1RqKXZrIMc56JEMZzsZo/medium_picasso_bull_4_12-22-1945.jpg" data-posthaven-state='processed'
data-medium-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607342/WyUYtAI1RqKXZrIMc56JEMZzsZo/medium_picasso_bull_4_12-22-1945.jpg'
data-medium-width='401'
data-medium-height='295'
data-large-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607342/WyUYtAI1RqKXZrIMc56JEMZzsZo/large_picasso_bull_4_12-22-1945.jpg'
data-large-width='401'
data-large-height='295'
data-thumb-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607342/WyUYtAI1RqKXZrIMc56JEMZzsZo/thumb_picasso_bull_4_12-22-1945.jpg'
data-thumb-width='200'
data-thumb-height='200'
data-xlarge-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607342/WyUYtAI1RqKXZrIMc56JEMZzsZo/xlarge_picasso_bull_4_12-22-1945.jpg'
data-xlarge-width=''
data-xlarge-height=''
data-orig-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607342/WyUYtAI1RqKXZrIMc56JEMZzsZo/picasso_bull_4_12-22-1945.jpg'
data-orig-width='401'
data-orig-height='295'
data-posthaven-id='607342'/>
        </p>
        <p class="posthaven-file posthaven-file-image posthaven-file-state-processed">
          <img class="posthaven-gallery-image" src="https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607343/rtfsSOVouPrjmzr8-SSTB_8UIGM/medium_picasso_bull_5_12-24-1945.jpg" data-posthaven-state='processed'
data-medium-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607343/rtfsSOVouPrjmzr8-SSTB_8UIGM/medium_picasso_bull_5_12-24-1945.jpg'
data-medium-width='401'
data-medium-height='299'
data-large-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607343/rtfsSOVouPrjmzr8-SSTB_8UIGM/large_picasso_bull_5_12-24-1945.jpg'
data-large-width='401'
data-large-height='299'
data-thumb-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607343/rtfsSOVouPrjmzr8-SSTB_8UIGM/thumb_picasso_bull_5_12-24-1945.jpg'
data-thumb-width='200'
data-thumb-height='200'
data-xlarge-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607343/rtfsSOVouPrjmzr8-SSTB_8UIGM/xlarge_picasso_bull_5_12-24-1945.jpg'
data-xlarge-width=''
data-xlarge-height=''
data-orig-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607343/rtfsSOVouPrjmzr8-SSTB_8UIGM/picasso_bull_5_12-24-1945.jpg'
data-orig-width='401'
data-orig-height='299'
data-posthaven-id='607343'/>
        </p>
        <p class="posthaven-file posthaven-file-image posthaven-file-state-processed">
          <img class="posthaven-gallery-image" src="https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607344/1QFD17KP0hybcFQi4X2Wf72CsnI/medium_picasso_bull_6_12-26-1945.jpg" data-posthaven-state='processed'
data-medium-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607344/1QFD17KP0hybcFQi4X2Wf72CsnI/medium_picasso_bull_6_12-26-1945.jpg'
data-medium-width='397'
data-medium-height='295'
data-large-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607344/1QFD17KP0hybcFQi4X2Wf72CsnI/large_picasso_bull_6_12-26-1945.jpg'
data-large-width='397'
data-large-height='295'
data-thumb-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607344/1QFD17KP0hybcFQi4X2Wf72CsnI/thumb_picasso_bull_6_12-26-1945.jpg'
data-thumb-width='200'
data-thumb-height='200'
data-xlarge-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607344/1QFD17KP0hybcFQi4X2Wf72CsnI/xlarge_picasso_bull_6_12-26-1945.jpg'
data-xlarge-width=''
data-xlarge-height=''
data-orig-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607344/1QFD17KP0hybcFQi4X2Wf72CsnI/picasso_bull_6_12-26-1945.jpg'
data-orig-width='397'
data-orig-height='295'
data-posthaven-id='607344'/>
        </p>
        <p class="posthaven-file posthaven-file-image posthaven-file-state-processed">
          <img class="posthaven-gallery-image" src="https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607345/jEdmbyJuWNbGSflDVIUup7PWATI/medium_picasso_bull_7_12-28-1945.jpg" data-posthaven-state='processed'
data-medium-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607345/jEdmbyJuWNbGSflDVIUup7PWATI/medium_picasso_bull_7_12-28-1945.jpg'
data-medium-width='398'
data-medium-height='295'
data-large-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607345/jEdmbyJuWNbGSflDVIUup7PWATI/large_picasso_bull_7_12-28-1945.jpg'
data-large-width='398'
data-large-height='295'
data-thumb-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607345/jEdmbyJuWNbGSflDVIUup7PWATI/thumb_picasso_bull_7_12-28-1945.jpg'
data-thumb-width='200'
data-thumb-height='200'
data-xlarge-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607345/jEdmbyJuWNbGSflDVIUup7PWATI/xlarge_picasso_bull_7_12-28-1945.jpg'
data-xlarge-width=''
data-xlarge-height=''
data-orig-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607345/jEdmbyJuWNbGSflDVIUup7PWATI/picasso_bull_7_12-28-1945.jpg'
data-orig-width='398'
data-orig-height='295'
data-posthaven-id='607345'/>
        </p>
        <p class="posthaven-file posthaven-file-image posthaven-file-state-processed">
          <img class="posthaven-gallery-image" src="https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607346/uo8LfsfSOpRq4WVNXYAyH7sXVvg/medium_picasso_bull_8_1-2-1946.jpg" data-posthaven-state='processed'
data-medium-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607346/uo8LfsfSOpRq4WVNXYAyH7sXVvg/medium_picasso_bull_8_1-2-1946.jpg'
data-medium-width='397'
data-medium-height='291'
data-large-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607346/uo8LfsfSOpRq4WVNXYAyH7sXVvg/large_picasso_bull_8_1-2-1946.jpg'
data-large-width='397'
data-large-height='291'
data-thumb-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607346/uo8LfsfSOpRq4WVNXYAyH7sXVvg/thumb_picasso_bull_8_1-2-1946.jpg'
data-thumb-width='200'
data-thumb-height='200'
data-xlarge-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607346/uo8LfsfSOpRq4WVNXYAyH7sXVvg/xlarge_picasso_bull_8_1-2-1946.jpg'
data-xlarge-width=''
data-xlarge-height=''
data-orig-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607346/uo8LfsfSOpRq4WVNXYAyH7sXVvg/picasso_bull_8_1-2-1946.jpg'
data-orig-width='397'
data-orig-height='291'
data-posthaven-id='607346'/>
        </p>
        <p class="posthaven-file posthaven-file-image posthaven-file-state-processed">
          <img class="posthaven-gallery-image" src="https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607347/DQDIa2BSQLCRBotCrW7xNBXEdJ4/medium_picasso_bull_9_1-5-1946.jpg" data-posthaven-state='processed'
data-medium-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607347/DQDIa2BSQLCRBotCrW7xNBXEdJ4/medium_picasso_bull_9_1-5-1946.jpg'
data-medium-width='400'
data-medium-height='293'
data-large-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607347/DQDIa2BSQLCRBotCrW7xNBXEdJ4/large_picasso_bull_9_1-5-1946.jpg'
data-large-width='400'
data-large-height='293'
data-thumb-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607347/DQDIa2BSQLCRBotCrW7xNBXEdJ4/thumb_picasso_bull_9_1-5-1946.jpg'
data-thumb-width='200'
data-thumb-height='200'
data-xlarge-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607347/DQDIa2BSQLCRBotCrW7xNBXEdJ4/xlarge_picasso_bull_9_1-5-1946.jpg'
data-xlarge-width=''
data-xlarge-height=''
data-orig-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607347/DQDIa2BSQLCRBotCrW7xNBXEdJ4/picasso_bull_9_1-5-1946.jpg'
data-orig-width='400'
data-orig-height='293'
data-posthaven-id='607347'/>
        </p>
        <p class="posthaven-file posthaven-file-image posthaven-file-state-processed">
          <img class="posthaven-gallery-image" src="https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607348/BJyWjwlIDcQoMbQd0ZLepuBoDUc/medium_picasso_bull_10_1-10-1946.jpg" data-posthaven-state='processed'
data-medium-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607348/BJyWjwlIDcQoMbQd0ZLepuBoDUc/medium_picasso_bull_10_1-10-1946.jpg'
data-medium-width='400'
data-medium-height='293'
data-large-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607348/BJyWjwlIDcQoMbQd0ZLepuBoDUc/large_picasso_bull_10_1-10-1946.jpg'
data-large-width='400'
data-large-height='293'
data-thumb-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607348/BJyWjwlIDcQoMbQd0ZLepuBoDUc/thumb_picasso_bull_10_1-10-1946.jpg'
data-thumb-width='200'
data-thumb-height='200'
data-xlarge-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607348/BJyWjwlIDcQoMbQd0ZLepuBoDUc/xlarge_picasso_bull_10_1-10-1946.jpg'
data-xlarge-width=''
data-xlarge-height=''
data-orig-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607348/BJyWjwlIDcQoMbQd0ZLepuBoDUc/picasso_bull_10_1-10-1946.jpg'
data-orig-width='400'
data-orig-height='293'
data-posthaven-id='607348'/>
        </p>
        <p class="posthaven-file posthaven-file-image posthaven-file-state-processed">
          <img class="posthaven-gallery-image" src="https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607349/4T2NENdF0H4lNBygdcWf2RrNdYk/medium_picasso_bull_11_1-17-1946.jpg" data-posthaven-state='processed'
data-medium-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607349/4T2NENdF0H4lNBygdcWf2RrNdYk/medium_picasso_bull_11_1-17-1946.jpg'
data-medium-width='400'
data-medium-height='291'
data-large-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607349/4T2NENdF0H4lNBygdcWf2RrNdYk/large_picasso_bull_11_1-17-1946.jpg'
data-large-width='400'
data-large-height='291'
data-thumb-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607349/4T2NENdF0H4lNBygdcWf2RrNdYk/thumb_picasso_bull_11_1-17-1946.jpg'
data-thumb-width='200'
data-thumb-height='200'
data-xlarge-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607349/4T2NENdF0H4lNBygdcWf2RrNdYk/xlarge_picasso_bull_11_1-17-1946.jpg'
data-xlarge-width=''
data-xlarge-height=''
data-orig-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607349/4T2NENdF0H4lNBygdcWf2RrNdYk/picasso_bull_11_1-17-1946.jpg'
data-orig-width='400'
data-orig-height='291'
data-posthaven-id='607349'/>
        </p>

        </div>
Pablo Picasso - The Bull. Dec. 5th 1945 - Jan. 17, 1946. Image source and further reading: <a href="http://www.artyfactory.com/art_appreciation/animals_in_art/pablo_picasso/pablo_picasso.htm">Pablo Picasso - Bull: a ma</a><a href="http://www.artyfactory.com/art_appreciation/animals_in_art/pablo_picasso/pablo_picasso.htm">ster class on abstract art</a></p>
<p><span>Despite all this, I still have this gut feeling that I should have known. </span></p>
<ul>
<li><span>Do you run in to situations like this?</span></li>
<li><span>Any tips on how to shortcut early iterations that take so much time?</span></li>
<li><span>Is this the type of thing that more experience helps you get around or is it purely a creative process?</span></li>
</ul><p><span>After we launch the feature, I'll try to follow up with a deeper dive in to the specifics of the implementation.</span></p></div>]]>
    </content>
    <author>
      <name>Nathan Hurst</name>
    </author>
    <category scheme="https://blog.nahurst.com/tags/all" term="software"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="simplicity"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="art"/>
  </entry>
  <entry>
    <id>tag:blog.nahurst.com,2013:Post/333141</id>
    <published>2011-02-27T21:31:00Z</published>
    <updated>2018-02-21T17:31:13Z</updated>
    <link rel="alternate" type="text/html" href="https://blog.nahurst.com/developers-you-are-the-last-line-of-defense"/>
    <title>Developers, you are the last line of defense</title>
    <content type="html">
      <![CDATA[<div class="posthaven-post-body"><p>One of the main reasons all of development isn't outsourced is that it's hard to replace an in-house developer's personal investment in the business, cultural understanding, and market understanding. Additionally, communication is typically orders of magnitude more efficient.</p>
<div>
<div>As an in-house developer, you have a clear responsibility to give technical feedback on product designs, but your responsibility doesn't stop there. You are the last line of defense for your company's product or service. If a bad feature makes it past you, it gets released. If you're implementing a feature that makes no sense for your target market, or is spammy, or rubs you the wrong way, it is your obligation to speak up.</div>
<p></p>
<div>There is a natural set of responsibilities and checks for a product company. The management team sets the product vision. The product team specifies the product vision. The development implements the product specification.</div>
<div>        <div class="posthaven-gallery" id="posthaven_gallery[338531]">
                  <p class="posthaven-file posthaven-file-image posthaven-file-state-processed">
          <img class="posthaven-gallery-image" src="https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607350/nSUJqk-bx9AlSIc2lQ03MeMk2hg/medium_product_checks.png" data-posthaven-state='processed'
data-medium-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607350/nSUJqk-bx9AlSIc2lQ03MeMk2hg/medium_product_checks.png'
data-medium-width='500'
data-medium-height='350'
data-large-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607350/nSUJqk-bx9AlSIc2lQ03MeMk2hg/large_product_checks.png'
data-large-width='500'
data-large-height='350'
data-thumb-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607350/nSUJqk-bx9AlSIc2lQ03MeMk2hg/thumb_product_checks.png'
data-thumb-width='200'
data-thumb-height='200'
data-xlarge-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607350/nSUJqk-bx9AlSIc2lQ03MeMk2hg/xlarge_product_checks.png'
data-xlarge-width=''
data-xlarge-height=''
data-orig-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607350/nSUJqk-bx9AlSIc2lQ03MeMk2hg/product_checks.png'
data-orig-width='500'
data-orig-height='350'
data-posthaven-id='607350'/>
        </p>

        </div>
</div>
<div>There are two ideal outcomes from you defending your product:</div>
<div><ol>
<li>You convince the product team or your manager that there's a problem.</li>
<li>Your product team or manager convinces you that the specified solution applies well for your market, use case, or company culture.</li>
</ol></div>
<div>Neither situation is bad. In #1, you make them think more about the problem and potentially reach a better solution. In #2, you learn more about your product and market allowing you to better defend your product in the future from poor designs. </div>
<p></p>
<div>Alternatively, you could learn that your company doesn't accept feedback like this. If that is the case, you are likely undervalued, and your company should probably be outsourcing the work (and likely will in the future). You should start considering other employment options.</div>
<p></p>
<div>Remember, if you release a bad product or feature, it <em>is </em>your fault. "I just built what was specified," is not an excuse for full-time, in-house developers. You build the product, you understand its details, and you release it to customers. It's your duty to defend it.</div>
<p></p>
<div><strong>Self promotion</strong></div>
<p></p>
<div>I run a company on a mission to put recruitment agencies out of business. We host speed interviewing events using video chat where 20 job seekers talk to 20 companies for 5 minutes each. If you're looking to evaluate the software job market or looking to hire, check out <a href="http://www.hirelite.com">Hirelite.com</a>.</div>
</div></div>]]>
    </content>
    <author>
      <name>Nathan Hurst</name>
    </author>
    <category scheme="https://blog.nahurst.com/tags/all" term="product"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="developers"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="teams"/>
  </entry>
  <entry>
    <id>tag:blog.nahurst.com,2013:Post/333143</id>
    <published>2010-11-15T15:00:00Z</published>
    <updated>2018-02-21T17:31:13Z</updated>
    <link rel="alternate" type="text/html" href="https://blog.nahurst.com/find-a-place-to-hack-using-nyc-architecture"/>
    <title>Find a place to hack using NYC architecture</title>
    <content type="html">
      <![CDATA[<div class="posthaven-post-body"><p>Since starting <a href="http://hirelite.com" target="_blank">Hirelite: Speed Dating for Software Jobs</a>, I've been taking a lot of meetings around New York City. After each meeting, I like to find a place nearby to sit, plug in my laptop, and hack for a few hours. In New York, it's hard to find a place you can sit with some elbow room unless you know where to look (Starbucks is usually packed). It turns out, due to zoning regulations, NYC abounds with free public space, often indoors and often with open power outlets where they don't mind you sitting for a few hours.</p><p></p> <strong>tl;dr - In Manhattan, look for newish buildings that have a higher base height than buildings around them. Chances are, there's a place you can hack.</strong><br>        <div class="posthaven-gallery" id="posthaven_gallery[338532]">
                  <p class="posthaven-file posthaven-file-image posthaven-file-state-processed">
          <img class="posthaven-gallery-image" src="https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607351/P8VdvnCHzAoNunOnajNsofFhPTY/medium_zh_sky_exposure_plane.jpg" data-posthaven-state='processed'
data-medium-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607351/P8VdvnCHzAoNunOnajNsofFhPTY/medium_zh_sky_exposure_plane.jpg'
data-medium-width='320'
data-medium-height='402'
data-large-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607351/P8VdvnCHzAoNunOnajNsofFhPTY/large_zh_sky_exposure_plane.jpg'
data-large-width='320'
data-large-height='402'
data-thumb-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607351/P8VdvnCHzAoNunOnajNsofFhPTY/thumb_zh_sky_exposure_plane.jpg'
data-thumb-width='200'
data-thumb-height='200'
data-xlarge-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607351/P8VdvnCHzAoNunOnajNsofFhPTY/xlarge_zh_sky_exposure_plane.jpg'
data-xlarge-width=''
data-xlarge-height=''
data-orig-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607351/P8VdvnCHzAoNunOnajNsofFhPTY/zh_sky_exposure_plane.jpg'
data-orig-width='320'
data-orig-height='402'
data-posthaven-id='607351'/>
        </p>

        </div>

<p>[Base height illustrated <a href="http://www.nyc.gov/html/dcp/html/zone/glossary.shtml#sky_exposure_plane">source</a>]<strong></strong></p>
<p><strong>Example</strong></p><p></p> In the example below, there are three buildings. #2 has a much higher base height in relation to buildings #1 and #3. There's probably a place to hack here.
<p>        <div class="posthaven-gallery" id="posthaven_gallery[338533]">
                  <p class="posthaven-file posthaven-file-image posthaven-file-state-processed">
          <img class="posthaven-gallery-image" src="https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607352/2XGgSnwl1mAJOQZ8bHAWV-bzWxk/medium_setback.png" data-posthaven-state='processed'
data-medium-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607352/2XGgSnwl1mAJOQZ8bHAWV-bzWxk/medium_setback.png'
data-medium-width='499'
data-medium-height='365'
data-large-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607352/2XGgSnwl1mAJOQZ8bHAWV-bzWxk/large_setback.png'
data-large-width='499'
data-large-height='365'
data-thumb-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607352/2XGgSnwl1mAJOQZ8bHAWV-bzWxk/thumb_setback.png'
data-thumb-width='200'
data-thumb-height='200'
data-xlarge-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607352/2XGgSnwl1mAJOQZ8bHAWV-bzWxk/xlarge_setback.png'
data-xlarge-width=''
data-xlarge-height=''
data-orig-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607352/2XGgSnwl1mAJOQZ8bHAWV-bzWxk/setback.png'
data-orig-width='499'
data-orig-height='365'
data-posthaven-id='607352'/>
        </p>

        </div>
</p>
<p><strong>Why is this?<p></p></strong>In the late 1800's and early 1900's, as buildings in New York City were built taller and taller, people protested the loss of light due to the shadows cast and light blocked by new buildings. When the Equitable building was built in 1915, it cast a 7-acre shadow and enforced the need for more zoning regulation.<br><strong>        <div class="posthaven-gallery" id="posthaven_gallery[338534]">
                  <p class="posthaven-file posthaven-file-image posthaven-file-state-processed">
          <img class="posthaven-gallery-image" src="https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607353/P5jxjhDlfTiYSwxSkyTfiRJGnaw/medium_equitable.jpg" data-posthaven-state='processed'
data-medium-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607353/P5jxjhDlfTiYSwxSkyTfiRJGnaw/medium_equitable.jpg'
data-medium-width='338'
data-medium-height='450'
data-large-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607353/P5jxjhDlfTiYSwxSkyTfiRJGnaw/large_equitable.jpg'
data-large-width='338'
data-large-height='450'
data-thumb-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607353/P5jxjhDlfTiYSwxSkyTfiRJGnaw/thumb_equitable.jpg'
data-thumb-width='200'
data-thumb-height='200'
data-xlarge-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607353/P5jxjhDlfTiYSwxSkyTfiRJGnaw/xlarge_equitable.jpg'
data-xlarge-width=''
data-xlarge-height=''
data-orig-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607353/P5jxjhDlfTiYSwxSkyTfiRJGnaw/equitable.jpg'
data-orig-width='338'
data-orig-height='450'
data-posthaven-id='607353'/>
        </p>

        </div>
</strong></p>
<p>[The Equitable Building <a href="http://www.thermoroll.com/images/equitable.jpg">source</a>]</p>
<p>Early attempts to regulate building height, base height, and setbacks (how high building walls may be before they must be set back in relation to the building footprint), including the 1916 Zoning Resolutions, were too restrictive and were plagued with other problems inherent to a growing city.</p><p></p> New regulations were drafted to better fit the city's expansion, culminating in the 1961 Zoning Regulations. These regulations set forth incentives for building developers to create publicly available space. Essentially, the new regulations allowed building developers to build with a higher base height in exchange for having an enclosed atrium, an outdoor park, or some other public space. This is where the hack comes from (the hack doesn't work if there are a cluster of buildings taking advantage of these incentives).<p></p> If you prefer to research for yourself instead of finding a place on the fly, just visit this <a href="http://www.nyc.gov/html/dcp/html/pops/pops_inventory.shtml" target="_blank">list of of all privately owned public space in NYC</a>. This will also help you narrow down outdoor vs indoor public space.<p></p> For more information see: <a href="http://www.nyc.gov/html/dcp/html/zone/zonehis.shtml" target="_blank">NYC Zoning History</a>.</div>]]>
    </content>
    <author>
      <name>Nathan Hurst</name>
    </author>
    <category scheme="https://blog.nahurst.com/tags/all" term="architecture"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="nyc" label="NYC"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="hack"/>
  </entry>
  <entry>
    <id>tag:blog.nahurst.com,2013:Post/333144</id>
    <published>2010-09-08T15:00:00Z</published>
    <updated>2021-01-31T06:58:47Z</updated>
    <link rel="alternate" type="text/html" href="https://blog.nahurst.com/how-to-value-your-startup-using-comparables"/>
    <title>How To Value Your Startup Using Comparables</title>
    <content type="html">
      <![CDATA[<div class="posthaven-post-body"><p>I'm embarrassed to admit that lately, I've been watching a lot of HGTV. Whenever I have programming to do that is easy but time consuming, I watch House Hunters or Designed to Sell in the background. On both shows, buyers and sellers use comparable houses to help them put a value on a house. Similarly, investors value companies based largely on how the company compares to other companies they've seen before. Wouldn't it be nice if there was some way for founders to see the valuations of other startups too?</p>
 
<p>        <div class="posthaven-gallery" id="posthaven_gallery[338536]">
                  <p class="posthaven-file posthaven-file-image posthaven-file-state-processed">
          <img class="posthaven-gallery-image" src="https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607355/wiA22xfFI2FBBXoXI6OHM31gmF4/medium_comps.png" data-posthaven-state='processed'
data-medium-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607355/wiA22xfFI2FBBXoXI6OHM31gmF4/medium_comps.png'
data-medium-width='500'
data-medium-height='145'
data-large-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607355/wiA22xfFI2FBBXoXI6OHM31gmF4/large_comps.png'
data-large-width='500'
data-large-height='145'
data-thumb-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607355/wiA22xfFI2FBBXoXI6OHM31gmF4/thumb_comps.png'
data-thumb-width='200'
data-thumb-height='200'
data-xlarge-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607355/wiA22xfFI2FBBXoXI6OHM31gmF4/xlarge_comps.png'
data-xlarge-width=''
data-xlarge-height=''
data-orig-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607355/wiA22xfFI2FBBXoXI6OHM31gmF4/comps.png'
data-orig-width='500'
data-orig-height='145'
data-posthaven-id='607355'/>
        </p>

        </div>
</p>
<p><strong> </strong><strong>Finding an</strong><strong>d Valuing Startup Comparables</strong></p>
<p>You can start valuing your company more like an investor by seeking out comparable startups and working backward from the funding they've raised.</p>
<ol>
<li> Go to the <a href="http://www.crunchbase.com/funding-rounds">funding section</a> of CrunchBase and look for companies who have received funding recently that are similar to you: similar stage (angel, seed, series X), similar progress (demo, launch, 10k users, paying customers), similar team size/composition.</li>
<li>Take the funding amount, divide it by <a href="http://twitter.com/jonsteinberg/status/23186918072">0.2 and 0.3</a> to get a range for the post-money valuation. 0.2 and 0.3 correspond to how much dilution you expect from the funding. Example: GroupMe raised $850k. The post-money (high end of the range) is $850k / 0.2 = $4.25m.</li>
<li>Subtract the funding amount from each side of the range to get the pre-money valuation. Example: GroupMe's pre-money (high end of the range) is $4.25m - $850k = $3.4m.</li>
</ol><p>Here are a few example pre-money valuations of companies on CrunchBase who have received seed or angel funding within a month. Ideally, you'd look closer at the composition of the team and the progress of company; however, I've only included the team size and how long the company has been operating here.</p>
<p>        <div class="posthaven-gallery" id="posthaven_gallery[338535]">
                  <p class="posthaven-file posthaven-file-image posthaven-file-state-processed">
          <img class="posthaven-gallery-image" src="https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607354/oqnWp82F7UVUbJ1q7DPD267-t-I/medium_pre-money_valuations.png" data-posthaven-state='processed'
data-medium-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607354/oqnWp82F7UVUbJ1q7DPD267-t-I/medium_pre-money_valuations.png'
data-medium-width='500'
data-medium-height='398'
data-large-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607354/oqnWp82F7UVUbJ1q7DPD267-t-I/large_pre-money_valuations.png'
data-large-width='500'
data-large-height='398'
data-thumb-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607354/oqnWp82F7UVUbJ1q7DPD267-t-I/thumb_pre-money_valuations.png'
data-thumb-width='200'
data-thumb-height='200'
data-xlarge-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607354/oqnWp82F7UVUbJ1q7DPD267-t-I/xlarge_pre-money_valuations.png'
data-xlarge-width=''
data-xlarge-height=''
data-orig-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607354/oqnWp82F7UVUbJ1q7DPD267-t-I/pre-money_valuations.png'
data-orig-width='500'
data-orig-height='398'
data-posthaven-id='607354'/>
        </p>

        </div>
</p></div>]]>
    </content>
    <author>
      <name>Nathan Hurst</name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.nahurst.com,2013:Post/333145</id>
    <published>2010-07-19T16:00:00Z</published>
    <updated>2024-03-12T17:11:37Z</updated>
    <link rel="alternate" type="text/html" href="https://blog.nahurst.com/how-much-equity-a-technical-cofounder-should"/>
    <title>How Much Equity a Technical Cofounder Should Get</title>
    <content type="html">
      <![CDATA[<div class="posthaven-post-body"><p>Through <a href="http://hirelite.com/">Hirelite</a>, cofounders often ask me  how much  equity a technical cofounder should get. The graphic below  balances the risks cofounders take with their relative contributions to  help answer this question. All assumptions and clarifications are noted  after the graphic.</p>
<p>This covers one of the most common situations I encounter: <strong>For  a pre-funding web startup whose team includes only a non-technical   cofounder, how much equity should an incoming technical cofounder get?</strong></p>
<p>Technical cofounders, remember that the number of shares or options  doesn't matter, just your percentage ownership (what the chart shows).</p>
<p>        <div class="posthaven-gallery" id="posthaven_gallery[338537]">
                  <p class="posthaven-file posthaven-file-image posthaven-file-state-processed">
          <img class="posthaven-gallery-image" src="https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607356/-4iSaC70A6LNELeynuIUTBG6ft8/medium_tech-cofounder.png" data-posthaven-state='processed'
data-medium-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607356/-4iSaC70A6LNELeynuIUTBG6ft8/medium_tech-cofounder.png'
data-medium-width='501'
data-medium-height='1324'
data-large-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607356/-4iSaC70A6LNELeynuIUTBG6ft8/large_tech-cofounder.png'
data-large-width='501'
data-large-height='1324'
data-thumb-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607356/-4iSaC70A6LNELeynuIUTBG6ft8/thumb_tech-cofounder.png'
data-thumb-width='200'
data-thumb-height='200'
data-xlarge-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607356/-4iSaC70A6LNELeynuIUTBG6ft8/xlarge_tech-cofounder.png'
data-xlarge-width=''
data-xlarge-height=''
data-orig-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607356/-4iSaC70A6LNELeynuIUTBG6ft8/tech-cofounder.png'
data-orig-width='501'
data-orig-height='1324'
data-posthaven-id='607356'/>
        </p>

        </div>
</p>
<p><strong>Assumptions</strong></p>
<p>For this case, I assume the non-technical cofounder has already  contributed significantly to the business and will likely get more  equity (in this chart their minimum ownership is 50%). This doesn't have  to be the case. Technically inclined people can definitely build  something on their own, and then seek a non-technical cofounder,  retaining more equity for themselves. Even if the technical cofounder  doesn't prototype something first, they can still contribute more to the  business and receive more equity (ex: someone who did marketing for 2  years out of undergrad manages to recruit a top 10th percentile  programmer with a successful app in the iPhone app store).</p>
<p>I assume both the non-technical and the technical cofounders are  compensated equally. I also assume they are either working on their  company full time now or will be soon. Compensation is probably between  $0 and a ramen salary. This is an area that varies widely and can  significantly impact how much equity a technical cofounder receives (if  they take more salary). It's beyond the scope of this post, but I'll try  to cover it in the future.</p>
<p>I assume the technical cofounder has a reasonably general set of  technical skills and can pickup new technical skills quickly. Ex:  they're primarily a back-end programmer, who can code basic front-end  specs, and who can administer cloud hosting.</p>
<p>I assume both cofounders will be diluted equally as more employees  and investors get involved.</p>
<p>Finally, I assume this chart may be a little surprising to  non-technical cofounders. Why should a technical cofounder get so much  of the company? Especially a company based on your vision. Basically,  it's because ideas aren't worth much. Execution is what matters, and in  most web startups that falls on the technical founder. Software  developers are a hot commodity right now, and many of them know it, so  they're on the lookout for really stellar business people to partner  with, not some run-of-the-mill, me-too idea having, 10k foot synergizer  without any concrete sales prospects, marketing ability, or product  experience. Sorry for the rant, but in all seriousness, I've seen too  many good non-technical founders delay building a product for  months because they're too stingy with equity.</p>
<p><strong>Other Reading</strong></p>
<p>Here are a few other approaches by others in the venture and tech community. There are no hard rules for this kind of stuff, so I'd recommend reading them and synthesizing with this:</p>
<ul>
<li>
<a href="http://www.avc.com/a_vc/2011/04/how-to-allocate-founder-and-employee-equity.html">How To Allocate Founder and Employee Equity</a> by Fred Wilson</li>
<li>
<a href="http://answers.onstartups.com/questions/6949/forming-a-new-software-startup-how-do-i-allocate-ownership-fairly/23326#23326">Fair Equity Allocation</a> by Joel Spolsky</li>
<li>
<a href="http://www.geekwire.com/2011/wrong-answer-5050-calculating-cofounder-equity-split">The only wrong answer is 50/50: Calculating the co-founder equity split</a> by Dan Shapiro (in response to Joel Spolsky's post)</li>
</ul><p>
</p><p><strong>Notes</strong></p>
<p>[1] Technical cofounder starts with 50%: start by assuming the technical and non-technical cofounders will contribute similarly to the business and are taking similar risks for the business. Give the non-technical cofounder extra equity for anything "above and beyond" (see final assumption above for more). Also, here's an example calculation: 50 (base equity) - 10 (for working prototype) - 5 (has over 10k users) - 10 (has raised VC) = 25. The technical cofounder gets 25% of the company.</p>
<p>[2] Working prototype (not just wireframes) -10%: If a non-technical cofounder has a working prototype, they've likely assumed some risk already to build the prototype (perhaps by contracting it out). Creating wireframes doesn't require much risk taking or even really help de-risk much of the busines.</p>
<p>[2a] Has paying customers -10%: If the company already has paying customers, the non-technical cofounder has already eliminated a huge risk for the business; someone wants the product.</p>
<p>[2b] Has over 10k users -5%: If the company doesn't have paying customers, but does have some reasonable user traction (with an nice trajectory), the non-technical cofounder has de-risked the business some, but not as much as having paying customers.</p>
<p>[3] Non-technical cofounder has significant connections or experience -10%: Connections include: relationships with key people in the company's target market, social network connections, blog readership, etc. Domain specific experience within the target market are helpful as are more broad experiences in sales, marketing, product development, or business development (probably on the order of 5+ years outside of undergrad, grad, or MBA school).</p>
<p>[4] Non-technical cofounder has raised venture capital before -10%: The non-technical cofounder has done a startup before, and someone has trusted them with a lot of money. It will probably be easier to get money again. If your business doesn't need external capital, tone this number down, but it's still important (maybe -5%) because it conveys a degree of startup savvy.</p>
<p>[5] Non-technical cofounder has had a successful exit before -10%: The biggest predictor of future success is past performance. This could also apply to non-exit situations where the non-technical cofounder started a company that is operating successfully and the non-technical cofounder has chosen to move on, etc.</p>
<p>[6a] Salary upon funding -0%: No extra equity for getting a salary upon funding. It may not be a market salary, but a technical founder will likely get something if they elect to. Why should a technical cofounder take less equity upfront because they may or may not receive a salary later? In this situation a technical cofounder and a non-technical cofounder are taking similar risks; therefore, neither get any extra equity.</p>
<p>[6b] Non-technical cofounder has idea and vision -0%: This is just part of the job description and included in the non-technical cofounder's initial 50%. Execution is what matters anyway (see final assumption above for more).</p>
<p>[6c] Non-technical cofounder has MBA -0%: (this is my opinion) In the early days of a startup, an MBA doesn't help much. It certainly doesn't hurt, but it shouldn't affect equity.</p>
<p>[7] Non-technical cofounder invests money -5% per $10k: This is an approximation based on a very early stage valuation of $200k. The situation will vary from company to company based on who is involved with the company and what they've accomplished so far. When I think about this, I only include money still unspent when the technical cofounder joins (usually the money was used to build the initial prototype. Sometimes I adjust the equity for the "working prototype" step above).</p>
<p>[8] Lower limit 10%: A non-technical cofounder wants to ensure the technical cofounder has compelling incentives. I consider this the minimum if the technical cofounder is not taking a salary.</p>

<ul></ul></div>]]>
    </content>
    <author>
      <name>Nathan Hurst</name>
    </author>
    <category scheme="https://blog.nahurst.com/tags/all" term="cofounders"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="equity"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="startup"/>
  </entry>
  <entry>
    <id>tag:blog.nahurst.com,2013:Post/333146</id>
    <published>2010-07-15T15:23:00Z</published>
    <updated>2013-10-08T16:32:53Z</updated>
    <link rel="alternate" type="text/html" href="https://blog.nahurst.com/easy-local-repository-browsing-for-git-or-mer"/>
    <title>Easy local repository browsing for Git or Mercurial</title>
    <content type="html">
      <![CDATA[<div class="posthaven-post-body"><p>In both Git and Mercurial, there's a very easy way to browse your local repository in a web browser that I didn't know about until recently. You should really try these right now. They've already made a huge difference for me.</p>
<p><strong> Browse your local Git repository</strong></p>
<p>git instaweb --httpd webrick # view at <a href="http://localhost:1234">http://localhost:1234</a></p>
<p><span>If you prefer not to use webrick, you could install lighttpd and then just run <span>git instaweb</span>.</span></p>
<p><strong>Browse your local Mercurial repository﻿﻿</strong></p>
<p><span>hg serve # view at <a href="http://localhost:8000">http://localhost:8000</a></span></p>
<p><br>Both of these tips came from <a href="http://forrst.com/posts/Browse_your_Git_Repository_locally_Way_Cool_Watc-iGZ">this forrst post and discussion</a>.</p></div>]]>
    </content>
    <author>
      <name>Nathan Hurst</name>
    </author>
    <category scheme="https://blog.nahurst.com/tags/all" term="mercurial"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="git"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="versioncontrol"/>
  </entry>
  <entry>
    <id>tag:blog.nahurst.com,2013:Post/333147</id>
    <published>2010-07-13T17:26:30Z</published>
    <updated>2013-10-08T16:32:53Z</updated>
    <link rel="alternate" type="text/html" href="https://blog.nahurst.com/speed-dating-for-software-jobs-a-web-event-hi"/>
    <title>Speed Dating for Software Jobs, a web event - Hirelite Blog</title>
    <content type="html">
      <![CDATA[<div class="posthaven-post-body"><div class="posterous_bookmarklet_entry">
      <blockquote class="posterous_long_quote">
<h2><a href="http://blog.hirelite.com/speed-dating-for-software-jobs-a-web-event">Speed Dating for Software Jobs, a web event</a></h2>
                        
      	        
                
                        <p>
                            </p>
<p>Our in-person "speed interviewing" events have worked so well that we're expanding to web-based events. On Tuesday, July 27th, Hirelite will host its <a href="http://hirelite.com">first web-based event</a> for software jobs and software engineers in New York City.</p>
<p>Get your webcams and microphones ready for efficient, face-to-face interviews, just like our in-person event but even more convenient. This web-based event will last 2 hours and feature a series of 5-minute interviews with either software engineers or companies. Since you can only get through so many interviews in 2 hours, we're capping attendance at 20 companies and 20 software engineers.</p>
<p></p>
<div class="posterousGalleryMainDiv">
<a href="http://blog.hirelite.com/speed-dating-for-software-jobs-a-web-event#" class="posterousGalleryMainlink">        <div class="posthaven-gallery" id="posthaven_gallery[338538]">
                  <p class="posthaven-file posthaven-file-image posthaven-file-state-processed">
          <img class="posthaven-gallery-image" src="https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607357/vgoJqm1Zb1qdMo0E55xcC7itW7c/medium_stroked.jpg.scaled500.jpg" data-posthaven-state='processed'
data-medium-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607357/vgoJqm1Zb1qdMo0E55xcC7itW7c/medium_stroked.jpg.scaled500.jpg'
data-medium-width='500'
data-medium-height='323'
data-large-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607357/vgoJqm1Zb1qdMo0E55xcC7itW7c/large_stroked.jpg.scaled500.jpg'
data-large-width='500'
data-large-height='323'
data-thumb-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607357/vgoJqm1Zb1qdMo0E55xcC7itW7c/thumb_stroked.jpg.scaled500.jpg'
data-thumb-width='200'
data-thumb-height='200'
data-xlarge-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607357/vgoJqm1Zb1qdMo0E55xcC7itW7c/xlarge_stroked.jpg.scaled500.jpg'
data-xlarge-width=''
data-xlarge-height=''
data-orig-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607357/vgoJqm1Zb1qdMo0E55xcC7itW7c/stroked.jpg.scaled500.jpg'
data-orig-width='500'
data-orig-height='323'
data-posthaven-id='607357'/>
        </p>

        </div>
</a><div class="show">
<div>Click to view large</div>
<div class="posterousGalleryLink">Download this gallery (ZIP, undefined KB)</div>
<div class="posterousGalleryLink">Download full size (113 KB)</div>
</div>
</div>
          
      <p></p>
<p>Over the next few months, Hirelite will expand to other cities. If  you're interested in Hirelite coming to your city, <a href="http://spreadsheets.google.com/embeddedform?formkey=dGxYWU1qbzJQQ3VHN3NiNEcxSmNHc0E6MQ" title="let us know">let us know</a>!</p>
<p>Related Posts:</p>
<p><a href="http://blog.hirelite.com/results-of-a-speed-dating-event-for-hiring-so">Results of a Speed Dating Event for Hiring Software Engineers</a></p>
</blockquote>

<div class="posterous_quote_citation">via <a href="http://blog.hirelite.com/speed-dating-for-software-jobs-a-web-event">blog.hirelite.com</a>
</div>
    <p></p>
</div></div>]]>
    </content>
    <author>
      <name>Nathan Hurst</name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.nahurst.com,2013:Post/333148</id>
    <published>2010-06-04T14:22:00Z</published>
    <updated>2014-06-01T00:59:33Z</updated>
    <link rel="alternate" type="text/html" href="https://blog.nahurst.com/visual-tech-job-board-comparison"/>
    <title>Visual Tech Job Board Comparison</title>
    <content type="html">
      <![CDATA[<div class="posthaven-post-body"><p>It's hard to determine if a tech job board is worth watching (if you're a job seeker) or worth posting to (if you're hiring), so I made a quick visual comparison of job boards in New York City. </p><p></p> I used metrics that were easiest<em> </em>to quantify quickly through examining up to 300 recent local tech job posts on each of these sites, so you should definitely consider metrics other than what I've mentioned here (namely<em> </em>what types of job seekers frequent each job board). A few notable job boards are missing due to technical<em> </em><span>constraints</span><span> t</span>hat I didn't have time to overcome while scraping data (Startuply and Monster load some posts using JavaScript, and TheLadders and LinkedIn require logging in). I've tried to be as objective as possible, but I run <a href="http://hirelite.com" target="_blank">Hirelite: Speed Dating for the Hiring Process</a>, so keep that in mind.<p></p> A few notes and observations after the graphic...
<p>        <div class="posthaven-gallery" id="posthaven_gallery[338539]">
                  <p class="posthaven-file posthaven-file-image posthaven-file-state-processed">
          <img class="posthaven-gallery-image" src="https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607358/MuAhSn1DdvU9QHtIsf4Gl4GUrQg/medium_boards.png" data-posthaven-state='processed'
data-medium-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607358/MuAhSn1DdvU9QHtIsf4Gl4GUrQg/medium_boards.png'
data-medium-width='800'
data-medium-height='614'
data-large-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607358/MuAhSn1DdvU9QHtIsf4Gl4GUrQg/large_boards.png'
data-large-width='1024'
data-large-height='786'
data-thumb-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607358/MuAhSn1DdvU9QHtIsf4Gl4GUrQg/thumb_boards.png'
data-thumb-width='200'
data-thumb-height='200'
data-xlarge-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607358/MuAhSn1DdvU9QHtIsf4Gl4GUrQg/xlarge_boards.png'
data-xlarge-width=''
data-xlarge-height=''
data-orig-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607358/MuAhSn1DdvU9QHtIsf4Gl4GUrQg/boards.png'
data-orig-width='1024'
data-orig-height='786'
data-posthaven-id='607358'/>
        </p>

        </div>
</p>
<p><br><strong>What each metric means</strong></p>
<ul>
<li>Cost - the cost of a single post. The life time of the post varies per site.</li>
<li>Headhunter posts - the number of posts originating from recruitment agencies as opposed to from companies that are hiring.</li>
<li> Typical company sizes - an estimate of the typical size of companies posting to a job board based on the company name, funding stage, salary/equity balance, and other information contained in the post.</li>
<li>20 most frequent words - the words most often used in job posts at a particular job board. Technical note: I used Lucene (and the StandardAnalyzer) to help with text processing and frequency calculations, so very common words (a, the, ...) are excluded. Additionally, some special characters were omitted from words (see observations for effects).</li>
</ul><p><strong>Observations</strong></p><p></p>Keep in mind that more (and more random) samples would be ideal, but here are some preliminary observations:
<p>First, I noticed that "c" appeared much more than I expected. Companies can't be requesting C skills enough to put it in the 20 most frequent words used Craigslist and Stack Overflow! Well... maybe Stack Overflow. It turns out, the tool I used process the text (Lucene) cut out special characters, normalizing C++, C#, Objective-C, and C all to C, thus inflating the frequency of "c".</p><p></p> The words "you", "we", and "our" appear very high on 37signals, Craigslist, Hirelite, NextNY, and Stack Overflow, but are much less emphasized on CareerBuilder and Dice. Are the job posts less personal or intimate? Does this matter? From looking at the posts in more detail, it seems to correlate with a greater focus on more specific requirements in posts on CareerBuilder and Dice. Note that the word "years" as in "3 years of Java experience" appear in the top 20 most frequent words of CareerBuilder and Dice; however, they do appear in the top 50 most frequent words of all the job boards surveyed.<p></p> I highlighted words in top 20 most frequent word lists that I thought correlated to technical skills or softer skills to observe the relative importance of each, but I don't see any discernible pattern. Additionally, many of the meanings of these words depend highly on their context (requirements section vs responsibilities section vs about the company section).<p></p> <span>Initially, I thought that posts from larger companies correlated with a higher number of recruiter/confidential posts, but then I got to NextNY where many posts for positions at small to medium sized companies are recruiter/confidential posts. </span>Maybe recruiter/confidential posts will appear in high numbers wherever they're allowed? Hirelite and Stack Overflow have policies against posts where the hiring company is not named, but I don't know of any explicit policy on 37signals (though they have no recruiter/confidential posts). Does anyone know if they have a policy about these posts? <p></p> Finally, let me know what you see in the data or if you have other ideas of what to do with this type of data. I'm considering doing some kind of analysis of how typical job post language compares to typical English -<span> I predict probably an inord</span>inate use of "pirate" and "ninja".<p></p> <strong>Data</strong> (including top 50 most frequent words)<p></p><a href="http://jobs.37signals.com/" target="_blank"><strong>37signals </strong></a><br> Cost (single post): $400<br>Headhunter posts: 0%<br>Typical company sizes: generally medium sized companies or funded small companies<br>50 most frequent words: we, experience, our, you, web, have, design, team, work, development, business, can, developer, your, who, software, looking, end, ruby, new, rails, project, management, skills, working, us, strong, requirements, about, from, css, well, knowledge, front, things, technologies, jquery, html, systems, php, all, years, use, technology, some, should, projects, javascript, help, has<p></p> <a href="http://www.careerbuilder.com" target="_blank"><strong>CareerBuilder </strong></a><br>Cost: $419<br>Headhunter posts: 65%<br>Typical company sizes: large companies<br>50 most frequent words: experience, skills, management, business, technology, development, job, work, requirements, our, technical, systems, project, information, knowledge, support, must, years, software, data, have, your, team, ability, required, strong, services, security, robert, half, all, working, email, time, us, opportunity, we, sql, contact, developer, more, new, network, industry, design, you, company, system, server, application<p></p> <a href="http://newyork.craigslist.org/mnh/sof/" target="_blank"><strong>Craigslist </strong></a><br>Cost: $25<br>Headhunter posts: 46%<br>Typical company sizes: all company sizes<br>50 most frequent words: experience, our, software, development, you, we, work, skills, have, team, new, design, business, strong, knowledge, management, systems, web, c, your, java, developer, technical, years, requirements, please, ability, working, applications, environment, job, must, programming, project, all, company, data, time, technology, product, sql, looking, candidates, york, client, solutions, plus, services, from, well<p></p> <a href="http://www.dice.com/" target="_blank"><strong>Dice </strong></a><br>Cost: $459<br>Headhunter posts: 51%<br>Typical company sizes: large companies<br>50 most frequent words: experience, business, skills, development, management, team, work, knowledge, services, technology, systems, project, technical, new, client, years, data, strong, design, java, support, developer, our, you, required, software, information, web, financial, have, description, working, ability, all, solutions, position, application, requirements, sales, applications, company, other, manager, your, must, title, environment, including, york, understanding<p></p> <a href="http://hirelite.com" target="_blank"><strong>Hirelite</strong></a><br>Cost: $100<br>Headhunter posts: 0%<br>Typical company sizes: seed stage to medium sized companies<br>50 most frequent words: you, we, our, experience, software, team, web, work, have, your, development, skills, new, looking, design, engineer, from, environment, applications, java, years, strong, technology, get, working, plus, senior, about, us, technologies, developers, who, systems, ruby, javascript, can, business, product, platform, people, like, engineering, building, what, want, understanding, technical, other, developer, company<p></p> <a href="http://nextny.jobthread.com/" target="_blank"><strong>NextNY</strong></a><br> Cost: $0<br> Headhunter posts: 43%<br>Typical company sizes: seed stage to medium sized companies<br>50 most frequent words: experience, you, we, work, have, our, skills, your, team, development, new, web, product, business, working, strong, client, management, media, from, apply, all, clients, project, online, data, software, ability, looking, design, marketing, can, years, technology, us, time, sales, including, high, company, about, requirements, must, technical, services, environment, who, advertising, please, lead<br><strong><br><a href="http://jobs.stackoverflow.com/" target="_blank">Stack Overflow</a><br></strong> Cost: $350<br> Headhunter posts: 0%<br>Typical company sizes: generally medium sized companies or funded small companies<br>50 most frequent words: you, experience, our, we, development, software, work, team, have, c, skills, new, systems, from, web, technology, design, your, knowledge, strong, working, developers, programming, java, developer, looking, applications, environment, years, technical, high, including, code, business, application, management, about, projects, technologies, all, ability, well, requirements, performance, media, engineer, us, science, more, computer</div>]]>
    </content>
    <author>
      <name>Nathan Hurst</name>
    </author>
    <category scheme="https://blog.nahurst.com/tags/all" term="visual"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="data"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="comparison"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="jobs"/>
  </entry>
  <entry>
    <id>tag:blog.nahurst.com,2013:Post/333149</id>
    <published>2010-04-26T17:03:00Z</published>
    <updated>2013-10-08T16:32:53Z</updated>
    <link rel="alternate" type="text/html" href="https://blog.nahurst.com/ctrl-r-searches-history-and-other-historical"/>
    <title>Ctrl-R Searches History and Other Historical Tricks</title>
    <content type="html">
      <![CDATA[<div class="posthaven-post-body"><p>These tricks have saved me a lot of time. Many of them I started using after reading this <a href="http://www.catonmat.net/blog/the-definitive-guide-to-bash-command-line-history/">Definitive Guide to Bash Command Line History</a> by fellow Hacker News reader, pkrumins. It includes a much deeper look at history than the quick examples I cover here.<strong> </strong></p>
<p><strong>Search Your History Quickly</strong></p>
<p>No more <span>history | grep ...</span> or hitting the up button 20 times. Just open a command prompt, press <span>Ctrl-R</span>, and begin typing a word in your command. As you type, the most recent command matching what you type will appear. To continue searching backwards in the history, hit <span>Ctrl-R</span> again. Then hit the <span>left</span> or <span>right</span> key to edit the command or hit <span>enter</span> to run it.<strong> </strong></p>
<p><strong>Increase Your History Size</strong></p>
<p>Once you know how to search your history, make sure your commands stick around for a while. By default, the history size is pretty low, usually only 500. To increase your history size, add the following to either ~/.bashrc, ~/.bash_profile, or /etc/profile:</p>
<p><span>export HISTFILESIZE=1000000000</span><br><span>export HISTSIZE=1000000</span></p>
<p><strong>Analyze Your History</strong></p>
<p>Once you've built up a sizable history, <a href="http://www.oreillynet.com/onlamp/blog/2007/01/whats_in_your_bash_history.html">analyze</a> it to determine possible aliases that will reduce typing time. To see the top 30 most used commands, run:</p>
<p><span>cut -f1 -d" " .bash_history | sort | uniq -c | sort -nr | head -n 30</span></p>
<p>To see the top 30 most used commands including arguments, run:</p>
<p><span>sort .bash_history | uniq -c | sort -nr | head -n 30</span></p><p></p> <strong>Stop Getting Annoyed When You Forget sudo</strong>
<p>I used to get so mad when I forgot to sudo a command, especially a long one. Not any more. To repeat a command using sudo, run:</p>
<p><span>sudo !!</span><strong></strong></p>
<p><strong>Reuse Arguments</strong><strong></strong></p>
<p>Say you want to backup a file then edit that file. Here's how you can reuse an argument from the most recent command:</p>
<p><span>cp a-very-long-file-name.txt </span><span>a-very-long-file-name.txt.bak<br> vi !^</span></p>
<p>Also, you can use <span>!!:N</span> for the Nth argument, <span>!!:N-M</span> for the Nth to Mth arguments,  <span>!!:$</span> for the last argument, or <span>!!:*</span> for all arguments.<br><strong><br></strong><strong>Self Promotion</strong><strong></strong></p>
<p>If you're a software engineer with Linux experience in NYC, consider coming to <a href="http://hirelite.com">Hirelite: Speed Dating for the Hiring Process</a> tomorrow evening (4/27).</p></div>]]>
    </content>
    <author>
      <name>Nathan Hurst</name>
    </author>
    <category scheme="https://blog.nahurst.com/tags/all" term="commands" label="Commands"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="linux"/>
  </entry>
  <entry>
    <id>tag:blog.nahurst.com,2013:Post/333150</id>
    <published>2010-04-18T04:10:00Z</published>
    <updated>2014-06-01T00:59:45Z</updated>
    <link rel="alternate" type="text/html" href="https://blog.nahurst.com/a-delicious-four-years"/>
    <title>A Delicious Four Years</title>
    <content type="html">
      <![CDATA[<div class="posthaven-post-body"><p>        <div class="posthaven-gallery" id="posthaven_gallery[338540]">
                  <p class="posthaven-file posthaven-file-image posthaven-file-state-processed">
          <img class="posthaven-gallery-image" src="https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607359/EqdLVdrLX-6qI6BFCLSGSPtGtXg/medium_delicious-1280.png" data-posthaven-state='processed'
data-medium-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607359/EqdLVdrLX-6qI6BFCLSGSPtGtXg/medium_delicious-1280.png'
data-medium-width='800'
data-medium-height='476'
data-large-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607359/EqdLVdrLX-6qI6BFCLSGSPtGtXg/large_delicious-1280.png'
data-large-width='1200'
data-large-height='714'
data-thumb-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607359/EqdLVdrLX-6qI6BFCLSGSPtGtXg/thumb_delicious-1280.png'
data-thumb-width='200'
data-thumb-height='200'
data-xlarge-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607359/EqdLVdrLX-6qI6BFCLSGSPtGtXg/xlarge_delicious-1280.png'
data-xlarge-width=''
data-xlarge-height=''
data-orig-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607359/EqdLVdrLX-6qI6BFCLSGSPtGtXg/delicious-1280.png'
data-orig-width='1280'
data-orig-height='762'
data-posthaven-id='607359'/>
        </p>

        </div>
</p>
<p>I realized I made my first Delicious bookmark just over four years ago. Here's a visualization of my links. It's a decent approximation of what I know.</p>
<p> </p>
<p>Update: I switched to pinboard.in after all the Delicious shutdown controversy.</p></div>]]>
    </content>
    <author>
      <name>Nathan Hurst</name>
    </author>
  </entry>
  <entry>
    <id>tag:blog.nahurst.com,2013:Post/333151</id>
    <published>2010-04-11T19:35:00Z</published>
    <updated>2014-06-01T00:59:59Z</updated>
    <link rel="alternate" type="text/html" href="https://blog.nahurst.com/thread-synchronization-issues-romance"/>
    <title>Thread Synchronization Issues &amp; Romance</title>
    <content type="html">
      <![CDATA[<div class="posthaven-post-body"><p>Who knew threads and romantic relationships had so much in common? For those of you new to threads, <a href="http://en.wikipedia.org/wiki/Thread_%28computer_science%29">threads</a> (and <a href="http://en.wikipedia.org/wiki/Process_%28computing%29">processes</a>) allow computers to seemingly do multiple things at once, where each thing is a separate "thread" of execution. On a computer with a single processor, the processor spends short amounts of time executing each thread before switching to another thread to execute. On a multiprocessor system, processors execute threads simultaneously, switching between threads when there are more threads than processors.</p><p></p> For those of you new to romantic relationships, I don't have much advice for you other than: Don't tell your significant other that you're treating your relationship as a series of thread synchronization problems!<p></p> Also, I'm probably perpetuating some stereotypes here. Sorry, it just makes the examples easier.<p></p><strong>Thread Synchronization Issues</strong><p></p><strong>Deadlock</strong> occurs when threads cannot proceed because they're waiting on each other. <br><em><br>Romantic relationship example:</em> You and wife have to wake up at 6am to catch a flight. You half-wake-up at some point in the morning and think, "she'll wake me up," and go back to sleep. The problem is, now it's noon, and you've both been thinking the same thing for six hours. You missed your flight due to relationship deadlock.<p></p> <strong>Livelock</strong> occurs when threads cannot proceed because they're too busy responding to each other.<br><em><br>Romantic relationship example:</em> When was the last time you heard an obnoxious couple talking on the phone? Think back to the end of their phone conversation. It probably ended like this.<p></p> 1: Love you. Talk to you later.<br>2: Love you too. Bye.<em><br>... </em>both wait ...<br>1: You hang up first. <br>2: No you hang up first.<br>1: No you...<p></p> You're witnessing relationship livelock. Neither person in the couple nor the couple as a whole can proceed because they're too busy responding to each other.<p></p><strong>Starvation</strong> occurs when one thread is deprived of resources by greedy or mis-prioritized threads.<br><em><br>Romantic relationship example:</em> You and your boyfriend share a checking account and deposit money into it on the first of the month. You routinely make small purchases every day. Your boyfriend rarely makes purchase, but when he does, he buys something big. After the first of the month, you successfully make your small purchases for a few days, but then your boyfriend buys an iPad. All your attempted purchases are now denied. You're suffering from starvation.<p></p> <strong>Race conditions </strong>occur when success depends on the order in which threads run.<br><em><br>Romantic relationship example: </em>Your son wants to go bungee jumping with his friends. He knows that each parent requires that he ask both parents for permission. Using a clever turn of phrase, he realizes that he can exploit a relationship race condition to get what he wants by asking the stricter parent first.<p></p> Son (approaches strict mother): Can I go bungee jumping?<br>Mother: No, but ask your father.<br>Son (approaches lenient father): Can I go bungee jumping?<br>Father: Yes, but ask your mother.<br>Son: I already did.<br> Father: Great. Hope you have fun!<p></p><strong>Thrashing</strong> occurs when threads make little or no progress due to the overhead of context switching.<br><em></em>
<p><em>Romantic relationship example:</em> A couple tries to decide whether or not to get a pet. The argument gets heated. They keep bringing up unrelated topics. Each time a new topic comes up, they spend five minutes on it.</p><p></p> 1: Having a dog would be so much fun!<br>2: You would never clean up after it.<br>1: What?! I clean all the time.<br>... five minutes later ...<br>1: Well at least I don't leave clothes all over the place.<br>2: Psh. I'm the only one that ever does the laundry. I can leave my clothes wherever I want.<br> ... five minutes later ...<br>2: I don't know if I can talk about this anymore. I'm just going to go watch TV to cool down.<br>1: You watch TV all the time! We don't even need a pet. You spend all your time with the TV.<p></p> Every context switch gets the couple further away from where they started and from the problem they're trying to resolve. They're thrashing.<p></p><strong>Busy waiting</strong> occurs when one thread continuously checks if it may proceed, robbing other threads of processing time.<br><em></em>
<p><em>Romantic relationship example: </em>A couple is getting dressed for a party. The man is dressed and ready to go. The woman is nowhere near done. The man keeps interrupting the woman to ask her if she's ready yet. The man is busy waiting.</p><p></p> <strong>Self Promotion</strong><p></p>If you're a developer and you like these sorts of problems, consider attending <a href="http://hirelite.com/" target="_blank">Hirelite: Speed Dating for the Hiring Process</a> on Tuesday, April 27th in NYC where companies will be looking for great software people.</div>]]>
    </content>
    <author>
      <name>Nathan Hurst</name>
    </author>
    <category scheme="https://blog.nahurst.com/tags/all" term="software"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="threads"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="relationships"/>
  </entry>
  <entry>
    <id>tag:blog.nahurst.com,2013:Post/333152</id>
    <published>2010-04-04T19:08:00Z</published>
    <updated>2019-06-18T21:11:48Z</updated>
    <link rel="alternate" type="text/html" href="https://blog.nahurst.com/black-hat-recruiter-tactics"/>
    <title>Black Hat Recruiter Tactics</title>
    <content type="html">
      <![CDATA[<div class="posthaven-post-body"><p>Since starting <a href="http://hirelite.com" target="_blank">Hirelite</a>, where we get companies and software people talking directly, I've heard a lot of horror stories about working with recruiting agencies. When I hear these stories, I can't help but think of black hat vs. white hat hacking and SEO, so I call recruiters who engage in unethical practices "black hat recruiters". Black hat recruiters resort to the tactics below because they're too lazy to confront the real challenges involved in finding and matching good people and good companies. <em>Please note that not all recruiters are bad, and some provide a lot of value</em>, but this post is not about those recruiters<em>.</em> This post is about black hat recruiting where tactics range from lies to ethically gray practices to illegal activity (in approximate order of how common they are):</p><p></p> <strong>Posting misleading job descriptions</strong> - This is by far the most common form of abuse. Recruiters will post a job description for a legitimate position for a client, but falsify some of the information to entice candidates. For example, a recruiter will inflate the salary/compensation portion of the job description or inflate the job responsibilities while dumbing down the job requirements.<p></p> <strong>Posting bait-and-switch job descriptions</strong> - Black hat recruiters will advertise a job that does not exist or is already filled just to receive resumes from job seekers that they can contact about other job opportunities. This is very similar to a tactic that black hat apartment brokers use (mentioned in Rent Hop's <a href="http://www.renthop.com/news/2010/03/apartment-brokers-and-head-hunters/">comparison of headhunters and apartment brokers</a>).<p></p> <strong>Surreptitiously modifying a job seeker's resume</strong> - Black hat recruiters often request a resume in a format they can modify. They will make modifications to job seekers resumes without telling job seekers and then give the modified resume to their clients. Modifications range from obscuring contact information so that the recruiter is always in the loop to more liberal modifications like inflating experience and skills. Nothing's worse than getting to an interview and finding out that you know COBOL from the hiring manager reading it off your resume.<p></p> <strong>Approaching other companies job seekers interview with</strong> - Recruiters often ask job seekers what other companies they are interviewing with under the guise of tailoring their search to the job seeker. Some recruiters will go as far as to ask who specifically the job seeker is in contact with. Armed with that information, a recruiter will contact the other companies and try to send competing job seekers. I've spoken to one job seeker who suspected this was happening and caught their recruiter in the act. This job seeker told the recruiter a friend's name and had the friend wait for the recruiter's call. The friend didn't have to wait long. Only 10 minutes after the initial call ended, the recruiter called the job seeker's friend. The recruiter denied everything.<p></p> <strong>Cold calling and pressuring low level employees</strong> - Black hat recruiters will call low level employees at a company and threaten termination and legal repercussions unless the employee passes the recruiter along to a hiring manager at the company.<p></p><strong>Buying resumes from hiring companies</strong> - Black hat recruiters will give discounts to companies that will pass all the resumes for a particular position along to the recruiter. These resumes could be from other recruiters or from candidates who contacted a company directly.<p></p><strong>Pressuring job seekers into interviews</strong> - Black hat recruiters will pressure job seekers into interviews that they don't want to go on. Sure, job seekers should stand up to them and say, "I don't want that job," but when a recruiter responds, "I'm not going to put you in front of &lt;company&gt; unless you go to this interview," job seekers may give in.<p></p><strong>Promising exclusivity to job seekers</strong> - Black hat recruiters will promise a job seeker that they will not submit other job seekers for the same position as long as the job seeker agrees not to talk to any other recruiters. The recruiter then submits multiple competing job seekers for a position. If one is rejected, he tells that job seeker that the company decided there wasn't a fit and continues to send him to other companies.<p></p><strong>Recruiting the references of a job seeker</strong> - Black hat recruiters request references from job seekers and recruit those references. Later, job seekers hear from their references that their recruiter pressured them for resumes to send to clients, sometimes for the exact job the original job seeker was up for!<p></p><strong>Faking a relationship</strong> - Black hat recruiters will hear that Dunder Mifflin, a company they have no relationship with, is hiring. Instead of approaching Dunder Mifflin about working for them, the recruiter will solicit resumes from potential job seekers for exciting new openings at Dunder Mifflin. The recruiter will then approach Dunder Mifflin with the resumes they have. If Dunder Mifflin rejects the recruiter, the recruiter will tell the job seekers that Dunder Mifflin said there wasn't a fit for them.<strong><p></p> Discrediting an employee's current company</strong> - Black hat recruiters will contact an employed potential candidate and tell them that their current company is in a precarious financial state  and offer to find the employee another job. Black hat recruiters will even do this to employees of their own clients.<p></p> <strong>Simulating expiring offers</strong> - When a company sends an offer to a job seeker, black hat recruiters will tell the job seeker that they only have X days (where X is usually 1 or 2) to accept the offer; otherwise, it will be rescinded. This practice is a bit more rare because job seekers and companies know each others' contact information by this point, but I've heard of this happening to at least one company and one job seeker (separate events).<p></p> <strong>Sending false offer letters </strong>- Black hat recruiters will send out fake offer letters to job seekers for companies they're having trouble getting interviews for. Black hat recruiters rely on job seekers requesting to interview with the company before accepting the offer. The recruiter then arranges an interview with the company. If the company like the job seeker, the recruiter makes sure to process and negotiate the offer, sometimes issuing a "revised" offer to the job seeker. If there is not a fit for the job seeker at the company, the recruiter is no worse off than they started, and they just drop all contact with a job seeker. <p></p> <br>If you're thinking that any of these practices might work for you, think again. Seriously. They may work in the short term, but you will do irreparable harm to your reputation, the reputation of job seekers, and the reputation of companies you represent in addition to possibly opening yourself up to legal problems.<p></p> If you're a company or a software engineer who's tired of dealing with these tactics, check out <a href="http://hirelite.com">Hirelite: Speed Dating for the Hiring Process</a>. We have another event next Tuesday.<p></p> Got any more horror stories? Leave them in the comments.</div>]]>
    </content>
    <author>
      <name>Nathan Hurst</name>
    </author>
    <category scheme="https://blog.nahurst.com/tags/all" term="software"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="recruiters"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="engineering"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="hiring" label="Hiring"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="jobs"/>
  </entry>
  <entry>
    <id>tag:blog.nahurst.com,2013:Post/333153</id>
    <published>2010-03-22T18:54:46Z</published>
    <updated>2013-10-08T16:32:53Z</updated>
    <link rel="alternate" type="text/html" href="https://blog.nahurst.com/results-of-a-speed-dating-event-for-hiring-so"/>
    <title>Results of a Speed Dating Event for Hiring Software Engineers</title>
    <content type="html">
      <![CDATA[<div class="posthaven-post-body"><p>On Tuesday, I ran Hirelite's first event: Speed Dating for the Hiring Process for software engineers. Read about how it went here: <a href="http://blog.hirelite.com/results-of-a-speed-dating-event-for-hiring-so">Results of a Speed Dating Event for Hiring Software Engineers</a>.</p></div>]]>
    </content>
    <author>
      <name>Nathan Hurst</name>
    </author>
    <category scheme="https://blog.nahurst.com/tags/all" term="interviewing"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="software"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="engineering"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="hiring" label="Hiring"/>
  </entry>
  <entry>
    <id>tag:blog.nahurst.com,2013:Post/333154</id>
    <published>2010-03-15T07:17:00Z</published>
    <updated>2021-06-09T01:40:15Z</updated>
    <link rel="alternate" type="text/html" href="https://blog.nahurst.com/visual-guide-to-nosql-systems"/>
    <title>Visual Guide to NoSQL Systems</title>
    <content type="html">
      <![CDATA[<div class="posthaven-post-body"><p>There are so many NoSQL systems these days that it's hard to get a quick overview of the major trade-offs involved when evaluating relational and non-relational systems in non-single-server environments. I've developed this visual primer with quite a lot of help (see credits at the end), and it's still a work in progress, so let me know if you see anything misplaced or missing, and I'll fix it.</p><p></p> Without further ado, here's what you came here for (and further explanation after the visual).
<p>Note: RDBMSs (MySQL, Postgres, etc) are only featured here for comparison purposes. Also, some of these systems can vary their features by configuration (I use the default configuration here, but will try to delve into others later).</p>
<p>        <div class="posthaven-gallery" id="posthaven_gallery[338542]">
                  <p class="posthaven-file posthaven-file-image posthaven-file-state-processed">
          <img class="posthaven-gallery-image" src="https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607361/CausfGVcU2tskB-TR5b8CMm8Keg/medium_media_httpfarm5static_mevIk.png" data-posthaven-state='processed'
data-medium-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607361/CausfGVcU2tskB-TR5b8CMm8Keg/medium_media_httpfarm5static_mevIk.png'
data-medium-width='800'
data-medium-height='600'
data-large-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607361/CausfGVcU2tskB-TR5b8CMm8Keg/large_media_httpfarm5static_mevIk.png'
data-large-width='1024'
data-large-height='768'
data-thumb-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607361/CausfGVcU2tskB-TR5b8CMm8Keg/thumb_media_httpfarm5static_mevIk.png'
data-thumb-width='200'
data-thumb-height='200'
data-xlarge-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607361/CausfGVcU2tskB-TR5b8CMm8Keg/xlarge_media_httpfarm5static_mevIk.png'
data-xlarge-width=''
data-xlarge-height=''
data-orig-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607361/CausfGVcU2tskB-TR5b8CMm8Keg/media_httpfarm5static_mevIk.png'
data-orig-width='1024'
data-orig-height='768'
data-posthaven-id='607361'/>
        </p>

        </div>
</p><p></p>As you can see, there are three primary concerns you must balance when choosing a data management system: consistency, availability, and partition tolerance.
<ul>
<li>
<strong>Consistency</strong> means that each client always has the same view of the data. </li>
<li>
<strong>Availability</strong> means that all clients can always read and write.</li>
<li>
<strong>Partition tolerance</strong> means that the system works well across physical network partitions.</li>
</ul><p>According to the <a href="http://www.julianbrowne.com/article/viewer/brewers-cap-theorem" target="_blank">CAP Theorem</a>, you can only pick two. So how does this all relate to NoSQL systems?</p><p></p>One of the primary goals of NoSQL systems is to bolster horizontal scalability. To scale horizontally, you need strong network partition tolerance which requires giving up either consistency or availability. NoSQL systems typically accomplish this by relaxing relational abilities and/or loosening transactional semantics.<p></p> In addition to CAP configurations, another significant way data management systems vary is by the data model they use: relational, key-value, column-oriented, or document-oriented (there are <a href="http://nosql-database.org/" target="_blank">others</a>, but these are the main ones).
<ul>
<li>
<strong>Relational</strong> systems are the databases we've been using for a while now. RDBMSs and systems that support ACIDity and joins are considered relational.</li>
<li> <strong>Key-value</strong> systems basically support get, put, and delete operations based on a primary key.</li>
<li> <strong>Column-oriented</strong> systems still use tables but have no joins (joins must be handled within your application). Obviously, they store data by column as opposed to traditional row-oriented databases. This makes aggregations much easier.</li>
<li>
<strong>Document-oriented</strong> systems store structured "documents" such as JSON or XML but have no joins (joins must be handled within your application). It's very easy to map data from object-oriented software to these systems.</li>
</ul><p>Now for the particulars of each CAP configuration and the systems that use each configuration:</p><p></p><strong>Consistent, Available </strong><strong>(CA) </strong><strong>Systems</strong> have trouble with partitions and typically deal with it with replication. Examples of CA systems include:
<ul>
<li>Traditional RDBMSs like Postgres, MySQL, etc (relational)</li>
<li>Vertica (column-oriented)</li>
<li>Aster Data (relational)</li>
<li> Greenplum (relational)</li>
</ul><p><strong>Consistent, Partition-Tolerant </strong><strong>(CP) </strong><strong>Systems</strong> have trouble with availability while keeping data consistent across partitioned nodes. Examples of CP systems include:</p>
<ul>
<li>
<a href="http://labs.google.com/papers/bigtable.html" target="_blank">BigTable</a> (column-oriented/tabular)</li>
<li> <a href="http://hypertable.org/" target="_blank">Hypertable</a> (column-oriented/tabular)</li>
<li>
<a href="http://hadoop.apache.org/hbase/" target="_blank">HBase</a> (column-oriented/tabular)</li>
<li>
<a href="http://www.mongodb.org/display/DOCS/Home" target="_blank">MongoDB</a> (document-oriented)</li>
<li>
<a href="http://code.google.com/p/terrastore/" target="_blank">Terrastore</a> (document-oriented)</li>
<li>
<a href="http://code.google.com/p/redis/" target="_blank">Redis</a> (key-value)</li>
<li>
<a href="http://code.google.com/p/scalaris/" target="_blank">Scalaris</a> (key-value)</li>
<li>
<a href="http://memcachedb.org/" target="_blank">MemcacheDB</a> (key-value)</li>
<li>
<a href="http://en.wikipedia.org/wiki/Berkeley_DB" target="_blank">Berkeley DB</a> (key-value)</li>
</ul><p><strong> Available, Partition-Tolerant </strong><strong>(AP) </strong><strong>Systems</strong> achieve "eventual consistency" through replication and verification. Examples of AP systems include:</p>
<ul>
<li>
<a href="http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf" target="_blank">Dynamo</a> (key-value)</li>
<li>
<a href="http://project-voldemort.com/" target="_blank">Voldemort</a> (key-value)</li>
<li>
<a href="http://1978th.net/" target="_blank">Tokyo Cabinet</a> (key-value)</li>
<li>
<a href="http://sourceforge.net/projects/kai/" target="_blank">KAI</a> (key-value)</li>
<li>
<a href="http://incubator.apache.org/cassandra/" target="_blank">Cassandra</a> (column-oriented/tabular)</li>
<li>
<a href="http://couchdb.apache.org/" target="_blank">CouchDB</a> (document-oriented)</li>
<li>
<a href="http://aws.amazon.com/simpledb/" target="_blank">SimpleDB</a> (document-oriented)</li>
<li>
<a href="http://riak.basho.com/" target="_blank">Riak</a> (document-oriented)</li>
</ul><p><strong>Self promotion and Credits</strong></p>
<ul>
<li>If you're a developer and looking for a job or if you're hiring developers and these data systems are important to you, consider coming to <a href="http://hirelite.com" target="_blank">Hirelite: Speed Dating for the Hiring Process</a> on Tuesday.</li>
<li>This guide draws heavily from a recent <a href="http://www.meetup.com/nycruby/calendar/12780042/" target="_blank">Ruby</a> meetup (by Matthew Jording and Michael Bryzek) and a recent <a href="http://www.leadit.us/hands-on-tech/MongoDB-High-Performance-SQL-Free-Database" target="_blank">MongoDB</a> presentation (given by Dwight Merriman).</li>
<li>Thanks to <a href="http://twitter.com/DBNess" target="_blank">DBNess</a> and <a href="http://twitter.com/ansonism" target="_blank">ansonism</a> for their help with validating system categorizations.</li>
<li>Thanks to those who helped shape the post after it was written: <a href="http://posterous.com/people/biCDj0Hd8">Stan</a>, <a href="http://twitter.com/dmerr">Dwight</a>, and others who commented here and on this <a href="http://news.ycombinator.com/item?id=1190772">Hacker News thread</a>.</li>
</ul><p>Update: Here's a print version of the <a href="http://nahurst.com/pdf/Visual_Guide_To_NoSQL_Systems.pdf">Visual Guide To NoSQL Systems</a> if you need one quickly (warning: it's not all that pretty and I may not keep it updated, but as of 3/17/2010, it's current).</p>
<ul></ul></div>]]>
    </content>
    <author>
      <name>Nathan Hurst</name>
    </author>
    <category scheme="https://blog.nahurst.com/tags/all" term="visual"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="cap"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="data"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="comparison"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="nosql"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="database"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="guide"/>
  </entry>
  <entry>
    <id>tag:blog.nahurst.com,2013:Post/333155</id>
    <published>2010-03-03T14:27:00Z</published>
    <updated>2013-10-08T16:32:53Z</updated>
    <link rel="alternate" type="text/html" href="https://blog.nahurst.com/why-networking-sucks-for-introverts-and-one-w"/>
    <title>Why Networking Sucks for Introverts (and one way I'm trying to fix it for us)</title>
    <content type="html">
      <![CDATA[<div class="posthaven-post-body"><p>Networking can really suck for introverts. I know because I'm one of them. You're probably thinking, "Of course! Introverts are shy and have trouble with social interactions." However, introversion is much more complex and encompasses an overlapping spectrum of feelings. Here's my take on it:</p><p></p>         <div class="posthaven-gallery" id="posthaven_gallery[338543]">
                  <p class="posthaven-file posthaven-file-image posthaven-file-state-processed">
          <img class="posthaven-gallery-image" src="https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607362/cDw_iXjfa-wEgS_zTKStAwyf4d0/medium_intro.png" data-posthaven-state='processed'
data-medium-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607362/cDw_iXjfa-wEgS_zTKStAwyf4d0/medium_intro.png'
data-medium-width='400'
data-medium-height='147'
data-large-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607362/cDw_iXjfa-wEgS_zTKStAwyf4d0/large_intro.png'
data-large-width='400'
data-large-height='147'
data-thumb-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607362/cDw_iXjfa-wEgS_zTKStAwyf4d0/thumb_intro.png'
data-thumb-width='200'
data-thumb-height='200'
data-xlarge-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607362/cDw_iXjfa-wEgS_zTKStAwyf4d0/xlarge_intro.png'
data-xlarge-width=''
data-xlarge-height=''
data-orig-src='https://phaven-prod.s3.amazonaws.com/files/image_part/asset/607362/cDw_iXjfa-wEgS_zTKStAwyf4d0/intro.png'
data-orig-width='400'
data-orig-height='147'
data-posthaven-id='607362'/>
        </p>

        </div>
<p></p>In general, the terms "introvert" and "extrovert" describe social preferences, not social capabilities, and it's important to remember that there's nothing wrong with tending toward one side or the other. Both have advantages and disadvantages (many that you can overcome with practice or adrenaline).<p></p> <strong>Problems that Introverts Have with Networking</strong><p></p>These observations stem largely from the software-related meet-ups I've attended in NYC (Hackers &amp; Founders, Hadoop, Android, etc), so they may only be applicable to technically-oriented introverts.<p></p> <strong>1. Making small talk</strong><p></p>"The weather sure is ____." When introverts hear this, we immediately disengage. It's a struggle for us to realize that a little upfront investment in small talk can lead to a great conversation. Small talk is all about finding something to have a deeper conversation about, but often times, introverts get stuck in small talk ruts or completely blank on what to talk about, leading to awkward pauses. <p></p> <strong>2. Inducing awkward pauses</strong><p></p>I've been a party to plenty of awkward pauses, both on the "caused" and the "affected" side. Awkward pauses happen for two reasons: <a href="http://www.stanford.edu/%7Epgbovine/geek-behaviors.htm" target="_blank">struggling with turn taking</a> or blanking on what to talk about. Blanking on what to talk about can happen because introverts have other interesting ideas we're mulling or we've run out of conversation topics. In the past, I've thought about keeping notes on conversation topics, but it's pretty weird to see someone whip out a notebook in the middle of a conversation, so I haven't done it.<p></p> <strong>3. Politely leaving conversations of no interest </strong><p></p>If an introvert can't get out of the small talk stage or genuinely has no interest in the person they're talking to (imagine getting stuck talking to a someone from a recruitment agency that snuck in to a MySQL meetup), the conversation is over. Time to escape. <p></p> The polite introverts needlessly stick with the conversation, trying to think of a way to break it off nicely. From personal experience, these dreaded conversations can last up to half an hour. All the while, you're catching bits and pieces of interesting conversations all around you.<p></p> The less polite introverts either have "I don't care" plastered across their faces or just walk away. I have seen both. The latter is much more entertaining.<p></p><strong>4. Having group discussions instead of 1-on-1 conversations</strong><p></p> If there's a type of conversation that introverts love, it's 1-on-1 conversations. It's nerdy, but it's great to get into an intellectual property debate with one other person. However, at most "networking events" it's tough to get a 1-on-1 conversation. Often times you're stuck with a group. <p></p> Introverts have a lot of trouble with group conversations. We feel like we can't get a word in - other people are always talking! We feel like we have to keep up with the main conversation <em>and</em> all the little side conversations that keep splitting off. And a lot of times, it's hard to even join a group conversation. <p></p> Joining a group conversation is hard because everyone already involved is participating in the conversation. It's hard for them to include someone who has just popped in. It sounds strange, but I've seen people walk up to a group conversation, stand there for 10 minutes, and then walk away without ever saying anything. <p></p> <br><strong>What I'm doing about it</strong><p></p>I've resolved to help fix these problems for a subset of introverts in a subset of networking situations. I want to help software engineers, who are definitely more introverted than the general population, network to find jobs and meet companies. To accomplish this goal (and others - a subject of another post), I'm introducing <a href="http://hirelite.com" target="_blank">Hirelite.com: Speed Dating for the Hiring Process</a>. <p></p> At a Hirelite event, software engineers will go on 5-minute "speed interviews" with companies. Making small talk and creating awkward pauses will be less of an issue because the conversations will be short and focused on how each party can help the other. Starting new conversations and politely leaving conversations of no interest will be of little concern due to the 5-minute time limit and rotation to the next conversation. And group conversations will be minimized: one company (possibly two people) speaking with one software engineer.<p></p> Hirelite is having its <a href="http://hirelite.eventbrite.com" target="_blank">inaugural event</a> on March 16th in New York City. For this event, there is only space for 20 companies and 20 software engineers, so let us know early if you would like to attend.<p></p> </div>]]>
    </content>
    <author>
      <name>Nathan Hurst</name>
    </author>
    <category scheme="https://blog.nahurst.com/tags/all" term="software"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="engineering"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="networking"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="hiring" label="Hiring"/>
  </entry>
  <entry>
    <id>tag:blog.nahurst.com,2013:Post/333156</id>
    <published>2010-02-21T18:09:00Z</published>
    <updated>2013-10-08T16:32:53Z</updated>
    <link rel="alternate" type="text/html" href="https://blog.nahurst.com/time-to-reset-some-passwords"/>
    <title>Time to reset some passwords</title>
    <content type="html">
      <![CDATA[<div class="posthaven-post-body"><p>About once a year, I accidentally type my password into the user name field on a login form and click submit. Immediately, I realize what I did as I see my password sitting there, mocking me in plain text from the user name field. I did that today, and it's time to go reset my passwords. For those of you who aren't involved in web development, let me explain why.</p><p></p> Nearly everything you do online gets logged, but it's standard security practice to filter passwords out of the logs. However, filtering passwords doesn't help much when you type your password in a user name field. Here's an example log of what I just did:<p></p> <span>Processing UserSessionsController#create (for <strong>72.14.204.99</strong> at 2010-02-21 <strong>11:43:21</strong>) [POST]</span><br><span>  Parameters: {"user_session"=&gt;{"user_name"=&gt;"<strong>Th1s1sMyP@ssw0rd</strong>","password"=&gt;"<strong>[FILTERED]</strong>"}}<br>  </span><span>[User Load (0.4ms) <strong>incorrect user_name or password - user not loaded</strong>]</span><br><span><br></span> <span>Processing UserSessionsController#create (for <strong>72.14.204.99</strong> at 2010-02-14 <strong>11:43:53</strong>) [POST]</span><br><span>  Parameters: {"user_session"=&gt;{"user_name"=&gt;"<strong>nathan</strong>","password"=&gt;"<strong>[FILTERED]</strong>"}}</span><br><span>  [User Load (0.4ms) "user_name"=&gt;<strong>"nathan" loaded</strong>]</span><p></p> As you can see, on my first login attempt, the log contains my password as the user name, my IP address, a time stamp, and a note that the login failed. On my second login attempt, the log contains my real user name, my filtered (correct) password, my IP address, a time stamp, and a note that the login succeeded.<p></p> Given that these two events happen within a minute of each other and come from the same IP address, a savvy attacker with access to the logs (or an unscrupulous systems administrator) could determine that my password is Th1s1sMyP@ssword just by looking at the logs. That attacker could also create a script that would prune the logs for all failed logins from the same IP address that are followed by successful logins within some short time period from a different user name. If the attacker slurped the logs into a database (and had a SQL-wielding DBA wife to help with his queries like I do), he could use a query like this:<p></p> <span>select success.ip, success.user_name as user_name, fail.user_name as password</span><br><span>from</span><br><span>    (select *</span><br><span>        from login_attempt f</span><br><span>        where f.success = false</span><br><span>    ) fail</span><br><span>inner join</span><br><span>    (select *</span><br><span>        from login_attempt s</span><br><span>        where s.success = true</span><br><span>    ) success</span><br><span>on fail.ip = success.ip</span><br><span>and success.datetime between fail.datetime and date_add(fail.datetime, interval 5 minute)</span><p></p>on a login_attempt table with columns: ip, datetime, user_name, and success to give him possible user name/password combinations.<p></p> Luckily, I only have to change the passwords for 2 or 3 accounts, but many web users carry a single password with them to every site, leaving them broadly exposed if an attacker discovers the password for a single account.</div>]]>
    </content>
    <author>
      <name>Nathan Hurst</name>
    </author>
    <category scheme="https://blog.nahurst.com/tags/all" term="mistakes"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="security"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="passwords"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="logs"/>
  </entry>
  <entry>
    <id>tag:blog.nahurst.com,2013:Post/333136</id>
    <published>2010-02-11T04:33:00Z</published>
    <updated>2013-10-08T16:32:53Z</updated>
    <link rel="alternate" type="text/html" href="https://blog.nahurst.com/yourtinnituscom-launches-this-week"/>
    <title>YourTinnitus.com launches this week</title>
    <content type="html">
      <![CDATA[<div class="posthaven-post-body"><p>Do you know the high pitched sound you hear when a TV is on but muted? Imagine you heard that noise constantly... and really loudly. That is tinnitus: chronic ringing in the ears. Currently, <a href="http://www.ata.org/for-patients/faqs">12 million</a> Americans suffer enough from their tinnitus to require medical attention, and 2 million patients report being unable to function "normally" day-to-day. Tinnitus can even be so extreme that it drives some sufferers to suicide.</p><p></p> There is currently no cure for tinnitus. Though there are ways to diagnose, monitor, cope, and potentially inhibit tinnitus sounds for tinnitus sufferers, primary care physicians rarely have the training or equipment to deal with tinnitus patients, and specialists are hard to come by. With this lack of viable medical options, two camps have sprung up: online pill pushers and high-end devices manufacturers (in the $5k range). This is where we come in. YourTinnitus.com offers an option to help tinnitus sufferers <a href="http://www.yourtinnitus.com">diagnose, monitor, and learn about their tinnitus</a>. We do nearly the same thing that the $5k devices do, except we do it online for about 1/100th of the price.<p></p> After a few great months of working with the auditory neuroscientists in the <a href="http://www.science.mcmaster.ca/psychology/research-areas/cognition-perception.html">Department of Psychology, Neuroscience, and Behavior at McMaster University</a>, we're proud to release <a href="http://www.yourtinnitus.com">YourTinnitus.com</a> this week. With our tools, tinnitus sufferers will be able to objectively evaluate if their tinnitus worsens or improves over time, determine how similar their tinnitus is to others who have tinnitus, and download a sound file of their tinnitus that they can let friends, family, and doctors listen to to prove they're not crazy. Over the next few months, we'll be working on even more tools to evaluate, diagnose, and potentially mask tinnitus sounds for tinnitus sufferers.</div>]]>
    </content>
    <author>
      <name>Nathan Hurst</name>
    </author>
    <category scheme="https://blog.nahurst.com/tags/all" term="company"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="tinnitus"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="startup"/>
  </entry>
  <entry>
    <id>tag:blog.nahurst.com,2013:Post/333138</id>
    <published>2010-02-02T06:20:00Z</published>
    <updated>2014-06-01T01:06:32Z</updated>
    <link rel="alternate" type="text/html" href="https://blog.nahurst.com/email-server-recipe-for-avoiding-spam-filters"/>
    <title>Email server recipe for avoiding spam filters</title>
    <content type="html">
      <![CDATA[<div class="posthaven-post-body"><p><span class="status-body"><span class="entry-content">Setting up an email server and making it work with anti-spam protocols is one of those things that's 100x easier to do the 2nd time around. I follow these steps whenever I need to do it. <p></p>
<strong>Prerequisites</strong><br></span></span></p>
<ul>
<li><span class="status-body"><span class="entry-content">Apache</span></span></li>
<li><span class="status-body"><span class="entry-content">Ubuntu 9.04 (these instructions should work for other versions, but that's what my target currently is)</span></span></li>
</ul><p><span class="status-body"><span class="entry-content"><strong>Ingredients</strong><br></span></span></p>
<ul>
<li><span class="status-body"><span class="entry-content">postfix</span></span></li>
<li><span class="status-body"><span class="entry-content">dkim-filter - DKIM (DomainKeys Identified Mail - new standard)<br></span></span></li>
<li><span class="status-body"><span class="entry-content">dk-filter - DomainKeys (legacy protocol - needed for Yahoo, etc)<br></span></span></li>
<li><span class="status-body"><span class="entry-content">SPF records</span></span></li>
</ul><p><strong>Postfix Setup</strong></p><p></p>First, we need to install an email server, postfix. I'm going to skimp a little on configuration here because with most EC2 AMIs I use, postfix is already installed. For more information see: <a href="https://help.ubuntu.com/community/Postfix">Postfix setup and configuration for Ubuntu</a>.<p></p> The most important parts are installation:
<div class="CodeRay">
  <div class="code"><pre>sudo aptitude install postfix</pre></div>
</div>

<p>and configuration of myhostname, mydomain, and mynetworks (which determines which hosts may send mail through the server). Here's the section from a sample configuration:</p>
<div class="CodeRay">
  <div class="code"><pre>myhostname = yourdomain.comalias_maps = hash:/etc/aliasesalias_database = hash:/etc/aliasesmyorigin = /etc/mailnamemydestination = yourdomain.com, localhostrelayhost =mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128mailbox_size_limit = 0recipient_delimiter = + inet_interfaces = allmydomain = yourdomain.com</pre></div>
</div>

<p><strong>DKIM setup and configuration for Postfix and your DNS<br></strong><br>Next we need to install and configure DKIM. This will make the server sign email headers so that users can assert, through DNS, that an email's origin has not been forged.<strong> </strong>It's safe to directly follow the instructions here: <a href="https://help.ubuntu.com/community/Postfix/DKIM">DKIM setup and configuration for Postfix and your DNS</a>.<strong> </strong>The only catch may be with your DNS; as some DNS's (particularly GoDaddy) will not display the fully qualified TXT record name. If you enter "mail._<a href="http://domainkey.mydomain.com">domainkey.mydomain.com</a>" your DNS may show the record name as "mail._domainkey". If it does, don't worry about it. It's just following an internal convention. When the DNS server receives queries for "mail._<a href="http://domainkey.mydomain.com">domainkey.mydomain.com</a>", it will respond correctly.<strong><p></p> DomainKeys setup and configuration for Postfix and your DNS<br></strong><br> DKIM (described above) is the newer, standard protocol for signing emails; however, some mail providers are still using the older DomainKeys protocol (namely Yahoo). It's safe to directly follow the instructions here: <a href="https://help.ubuntu.com/community/Postfix/DomainKeys">DomainKeys setup and configuration for Postfix and your DNS</a>, but watch out for a few repeats. You will have already completed the second part of the "Configurating DNS" section, and should use the second form of the Apache configuration in the "Startup and testing" section because you will have already placed a DKIM configuration in Apache:</p>
<div class="CodeRay">
  <div class="code"><pre>milter_default_action = acceptmilter_protocol = 2smtpd_milters = inet:localhost:8891,inet:localhost:8892non_smtpd_milters = inet:localhost:8891,inet:localhost:8892</pre></div>
</div>

<p><strong>SPF setup and configuration for Postfix and your DNS<br></strong><br>SPF (Sender Policy Framework) allows mail recipients to reject mail received by senders who DNS does not recognize as authorized senders for a domain. It's safe to directly follow the instructions here: <a href="https://help.ubuntu.com/community/Postfix/SPF">SPF record setup and configuration for Postfix and your DNS</a>, though you may need to create the "smtpd_recipient_restrictions" section in your postfix configuration.</p><p></p> <strong>Validating your installation<br></strong><br>Throughout this process, you can emailing <a href="mailto:check-auth2@verifier.port25.com">check-auth2@verifier.port25.com</a> to <a href="/">Validating your email server configuration</a>. You will receive an email reply to the address you sent the check request from. Also, make sure that the email address is from the domain you are targeting (it could be different based on the hostname or other postfix configuration, particularly on EC2). Here's an example command to send the email from your server:<p></p> <span>echo "test message" | mail -a "From: <a href="mailto:you@yourdomain.com">you@yourdomain.com</a>" -s test <a href="mailto:check-auth2@verifier.port25.com">check-auth2@verifier.port25.com</a></span><p></p> <strong>Other limitations</strong><p></p>From time to time, you may run across an email sending limit imposed by EC2 and you may need to <a href="http://aws.amazon.com/contact-us/ec2-email-limit-request/">request that the limit be removed</a>.<p></p> Additionally, it's good to <a href="http://www.spamhaus.org/lookup.lasso">check that you are not listed on Spamhaus</a>.</div>]]>
    </content>
    <author>
      <name>Nathan Hurst</name>
    </author>
    <category scheme="https://blog.nahurst.com/tags/all" term="software"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="email"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="server"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="instructions"/>
  </entry>
  <entry>
    <id>tag:blog.nahurst.com,2013:Post/333140</id>
    <published>2010-02-01T04:21:46Z</published>
    <updated>2013-10-08T16:32:53Z</updated>
    <link rel="alternate" type="text/html" href="https://blog.nahurst.com/choosing-posterous-over-tumblr"/>
    <title>Choosing Posterous over Tumblr</title>
    <content type="html">
      <![CDATA[<div class="posthaven-post-body">After a semi-thorough comparison, I'm choosing Posterous over Tumblr. Initially, I wanted to pick Tumblr for no reason other than it being in NY and being funded by Union Square Ventures. However, I chose Posterous because of it's: <br><ul>
<li>compatibility with how I write - The easiest way for me to sync post writing across my desktop, laptop, and phone is to save drafts in gmail. It seems like the Posterous team had this specific use case in mind for their product.<br>
</li>
<li>orientation toward longer-form posts - I need a place to ramble, and to me, Posterous has a look and feel that lends itself to longer posts.<br>
</li>
<li>focus on content creation - Tumblr seems like it's based on sharing other content, which is fine, but not what I'm going for with this blog. <br>
</li>
</ul></div>]]>
    </content>
    <author>
      <name>Nathan Hurst</name>
    </author>
    <category scheme="https://blog.nahurst.com/tags/all" term="review"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="startup"/>
    <category scheme="https://blog.nahurst.com/tags/all" term="blog"/>
  </entry>
</feed>
