<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Gets Things Done</title>
	<atom:link href="http://getsthingsdone.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://getsthingsdone.com</link>
	<description>Resource for Recruiting, Developing &#38; Retaining the Best Developers, Programmers and Technical Talent</description>
	<lastBuildDate>Mon, 12 Dec 2011 20:00:10 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>The Hardest Interview Puzzle Question Ever</title>
		<link>http://getsthingsdone.com/2011/01/28/the-hardest-interview-puzzle-question-ever/</link>
		<comments>http://getsthingsdone.com/2011/01/28/the-hardest-interview-puzzle-question-ever/#comments</comments>
		<pubDate>Fri, 28 Jan 2011 19:59:25 +0000</pubDate>
		<dc:creator>jeffatwood</dc:creator>
				<category><![CDATA[Recruiting]]></category>

		<guid isPermaLink="false">http://getsthingsdone.com/?p=89</guid>
		<description><![CDATA[Hiring is difficult under the best of conditions. But an interview process that relies too heavily on puzzle questions is risky. Sure, you may end up with programmers who can solve (or memorize, I guess) the absolute gnarliest puzzle questions you throw at them. But isn't effectively communicating those solutions to the rest of the team important, too? For many programmers, that's the hardest part of the puzzle.]]></description>
				<content:encoded><![CDATA[<p>Have you ever been to an <a href="http://getsthingsdone.com/on-interviewing-programmers">interview for a programming job</a> where they asked you one of those interview puzzle questions? I have. The one I got was:</p>

<p>How much of your favorite brand of soda is consumed in this state?</p>

<p>And no, the correct answer is not <em>who cares</em>, unless the thing you don&#8217;t care about is getting the job you&#8217;re interviewing for. I didn&#8217;t know it at the time, but this is a Fermi Question.</p>

<p>Puzzle questions are still all the rage in programming interviews at top technical firms – like Google, Facebook, Goldman Sachs, Boston Consulting Group, and others. It is prudent to <a href="http://www.techinterview.org/">study common interview puzzle questions</a> if you know you&#8217;ll be interviewing at a company that asks these sorts of questions. And if you think you&#8217;re ace at programming puzzle questions, then I challenge you to point your massive brain at this, <a href="http://www.cartalk.com/content/read-on/2008/08.23.2.html">the hardest interview puzzle question ever</a>:</p>

<p>A hundred prisoners are each locked in a room with three pirates, one of whom will walk the plank in the morning. Each prisoner has 10 bottles of wine, one of which has been poisoned; and each pirate has 12 coins, one of which is counterfeit and weighs either more or less than a genuine coin. In the room is a single switch, which the prisoner may either leave as it is, or flip. Before being led into the rooms, the prisoners are all made to wear either a red hat or a blue hat; they can see all the other prisoners&#8217; hats, but not their own. Meanwhile, a six-digit prime number of monkeys multiply until their digits reverse, then all have to get across a river using a canoe that can hold at most two monkeys at a time. But half the monkeys always lie and the other half always tell the truth. Given that the Nth prisoner knows that one of the monkeys doesn&#8217;t know that a pirate doesn&#8217;t know the product of two numbers between 1 and 100 without knowing that the N+1th prisoner has flipped the switch in his room or not after having determined which bottle of wine was poisoned and what color his hat is, what is the solution to this puzzle?</p>

<p>In other words, <a href="http://www.codinghorror.com/blog/archives/000226.html">I hate puzzle questions</a>.*</p>

<p>I&#8217;m also not a huge fan of those abstract impossible questions, eg, &#8220;how many optometrists are there in Seattle?&#8221;, but I suppose that&#8217;s a matter of taste. If you absolutely must, at least ask an impossible question that has some relevance to a problem your very real customers might encounter. I just can&#8217;t muster any enthusiasm for completely random arbitrary puzzles in the face of so many actual, real world problems.</p>

<p>And yes, I totally failed that interview. Which was disappointing, because it was kind of a cool job.</p>

<p>Not that <a href="http://getsthingsdone.com/on-interviewing-programmers/">my proposal for interviewing programmers</a> was any more popular, though I do think it&#8217;s much better.</p>

<p>I have my own theory about the ideal way to interview developers: <strong>have the candidate give a 10 minute watercooler presentation to your team on something they&#8217;ve worked on</strong>. I think this is a far better indicator of success than a traditional interview. You&#8217;ll quickly ascertain:</p>

<ul>
    <li>Is this person passionate about what      they are doing?</li>
    <li>Can they communicate effectively to a      small group?</li>
    <li>Do they have a good handle on their      area of expertise?</li>
    <li>Would your team enjoy working with      this person?</li>
</ul>

<p>You&#8217;d certainly want to complement this type of interview with some actual hands on programming, to make sure the applicant isn&#8217;t full of crap &#8212; although I&#8217;m pretty sure that you can&#8217;t B.S. your way through a technical presentation to a handful of your peers if you truly have no idea what you&#8217;re talking about. (And if you can, you should be CEO of a startup by now.)</p>

<p><strong>What I&#8217;m optimizing for here is the ability to communicate</strong>. Most programmers, once they <a href="http://www.codinghorror.com/blog/archives/000781.html">pass the FizzBuzz level of competency</a>, are decent enough. But coding chops aren&#8217;t enough. To go from good to great, you must be able to communicate effectively: with your teammates, your manager, the users, and ultimately the world.</p>

<p>Hiring is difficult under the best of conditions. But an interview process that relies too heavily on puzzle questions is risky. Sure, you may end up with programmers who can solve (or memorize, I guess) the absolute gnarliest puzzle questions you throw at them. But isn&#8217;t <em>effectively communicating those solutions to the rest of the team </em>important, too? For many programmers, <em>that&#8217;s</em> the hardest part of the puzzle.</p>

<p><a href="http://www.codinghorror.com/blog/2009/03/the-hardest-interview-puzzle-question-ever.html" target="_blank">Originally appearing</a> on Jeff Atwood&#8217;s blog, <a href="http://www.codinghorror.com" target="_blank">Coding Horror</a></p>
]]></content:encoded>
			<wfw:commentRss>http://getsthingsdone.com/2011/01/28/the-hardest-interview-puzzle-question-ever/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>On Interviewing Programmers</title>
		<link>http://getsthingsdone.com/2011/01/28/on-interviewing-programmers/</link>
		<comments>http://getsthingsdone.com/2011/01/28/on-interviewing-programmers/#comments</comments>
		<pubDate>Fri, 28 Jan 2011 19:49:28 +0000</pubDate>
		<dc:creator>jeffatwood</dc:creator>
				<category><![CDATA[Recruiting]]></category>

		<guid isPermaLink="false">http://getsthingsdone.com/?p=85</guid>
		<description><![CDATA[During interviewing a developer and considering if you want to hire them, there are a few key technical interview questions that you want to ask yourself:
-Is this programmer passionate about what they are doing?
-Can they communicate effectively to a small group?
-Do they have a good handle on their area of expertise?
-Would your team enjoy working with this person?]]></description>
				<content:encoded><![CDATA[<p>How do you recognize talented software developers in a 30 minute interview? There are multiple techniques which interviewers use:</p>

<ul>
    <li>Explore an area of expertise</li>
    <li>Have them critique something</li>
    <li>Ask      them to solve a problem (but not a puzzle)</li>
    <li>Look      at their code</li>
    <li>Find      out what books they read</li>
    <li>Ask about a people problem</li>
    <li>Bring them on for a trial basis</li>
    <li>Question about recent project</li>
    <li>An Impossible Question</li>
    <li>Write some C Functions &#8211; Are you      satisfied with that code?</li>
    <li>Design Question</li>
    <li>The      Challenge</li>
</ul>

<p>I definitely don&#8217;t agree with a few of the topics on this list, but I suppose that&#8217;s a matter of taste. If you absolutely must, at least ask an impossible question that has some relevance to a problem your very real customers might encounter. I just can&#8217;t muster any enthusiasm for completely random arbitrary problems in the face of so many <em>actual</em> problems. There are so many puzzle questions by top tech employers that there is even a <a href="http://www.siliconindia.com/shownews/Top_15_odd_interview_questions_by_tech_cos_in_2010-nid-77289.html">top 15 list of odd interview questions</a>.</p>

<p>Joel recently posted an update questioning the commonly held belief that <a href="http://getsthingsdone.com/hiring-the-top-1/">&#8220;we&#8217;re only hiring the top 0.5%&#8221;</a>:</p>

<p><em>It&#8217;s pretty clear to me that just because you&#8217;re hiring the top 0.5% of all applicants for a job, doesn&#8217;t mean you&#8217;re hiring the top 0.5% of all software developers. You could be hiring from the top 10% or the top 50% or the top 99% and it would still look, to you, like you&#8217;re rejecting 199 for every 1 that you hire.</em></p>

<p><em>By the way, it&#8217;s because of this phenomenon &#8212; the fact that many of the great people are never on the job market &#8212; that we are so aggressive about hiring summer interns. This may be the last time these kids ever show up on the open market. In fact we hunt down the smart CS students and individually beg them to apply for an internship with us, because if you wait around to see who sends you a resume, you&#8217;re already missing out.</em></p>

<p>I concur. I&#8217;ve worked with a few interns who were amazing developers. It&#8217;s a bit like playing the slots, but when you hit the jackpot, you win big. If your company isn&#8217;t taking advantage of intern programs, start immediately.</p>

<p>I have my own theory about the ideal way to interview developers: <strong>have the candidate give a 20 minute presentation to your team on their area of expertise.</strong> I think this is a far better indicator of success than a traditional interview, because you&#8217;ll quickly ascertain..</p>

<ul>
    <li>Is      this person passionate about what they are doing?</li>
    <li>Can      they communicate effectively to a small group?</li>
    <li>Do      they have a good handle on their area of expertise?</li>
    <li>Would      your team enjoy working with this person?</li>
</ul>

<p>Jobs may come and go, but it&#8217;s the people I&#8217;ve worked with that I always remember.</p>

<p><a href="http://www.codinghorror.com/blog/2005/03/on-interviewing-programmers.html" target="_blank">Originally appearing</a> on Jeff Atwood&#8217;s blog, <a href="http://www.codinghorror.com" target="_blank">Coding Horror</a></p>
]]></content:encoded>
			<wfw:commentRss>http://getsthingsdone.com/2011/01/28/on-interviewing-programmers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>A Field Guide to Developers – What am I working on?</title>
		<link>http://getsthingsdone.com/2011/01/21/a-field-guide-to-developers-%e2%80%93-what-am-i-working-on/</link>
		<comments>http://getsthingsdone.com/2011/01/21/a-field-guide-to-developers-%e2%80%93-what-am-i-working-on/#comments</comments>
		<pubDate>Fri, 21 Jan 2011 16:15:55 +0000</pubDate>
		<dc:creator>joelspolsky</dc:creator>
				<category><![CDATA[Onboarding]]></category>

		<guid isPermaLink="false">http://getsthingsdone.com/?p=121</guid>
		<description><![CDATA[To some extent, one of the best ways you can attract developers is to let them work on something interesting. This may be the hardest thing to change: doggone it, if you’re in the business of making software for the gravel and sand industry, that’s the business you’re in, and you can’t pretend to be [...]]]></description>
				<content:encoded><![CDATA[<p>To some extent, one of the best ways you can attract developers is to let them work on something interesting. This may be the hardest thing to change: doggone it, if you’re in the business of making software for the gravel and sand industry, that’s the business you’re in, and you can’t pretend to be some cool web startup just to attract developers.</p>

<p>Another thing developers like is working on something simple enough or popular enough that they can explain to Aunt Irma, at Thanksgiving. Aunt Irma, of course, being a nuclear physicist, doesn’t really know that much about Ruby programming in the gravel and sand industry.</p>

<p>Finally, many developers are going to look at the social values of the company they’re working for. Jobs at social networking companies and blog companies help bring people together and don’t really pollute, it seems, so they’re popular, while jobs in the munitions industry or in ethically-challenged accounting-fraud-ridden companies are a lot less popular.</p>

<p>Unfortunately I’m not really sure if I can think of any way for the average hiring manager to do anything about this. You can try to change your product lineup to make something “cool,” but that’s just not going to go very far. There are a few things, though, that I’ve seen companies do in this area:</p>

<ul>
    <li><strong>Let the top recruits pick their      own project</strong></li>
</ul>

<p>For many years, Oracle Corporation had a program called MAP: the “Multiple Alternatives Program.” This was offered to the college graduates whom they considered the top candidates from each class. The idea was that they could come to Oracle, spend a week or two looking around, visiting all the groups with openings, and then choose any opening they wanted to work in.</p>

<p>I think this was a good idea, although probably someone from Oracle knows better whether this worked out.</p>

<ul>
    <li><strong>Use cool new technologies      unnecessarily</strong></li>
</ul>

<p>The big investment banks in New York are considered fairly tough places for programmers. The working conditions are dreadful, with long hours, noisy environments, and tyrannical bosses; programmers are very distinct third-class citizens while the testosterone-crazed apes who actually sell and trade financial instruments are corporate royalty, with $30,000,000 bonuses and all the cheeseburgers they can eat (often delivered by a programmer who happened to be nearby). That’s the stereotype, anyway, so to keep the best developers, investment banks have two strategies: paying a ton of money, and allowing programmers basically free reign to keep rewriting everything over and over again in whatever hot new programming language they feel like learning. Wanna rewrite that whole trading app in Lisp? Whatever. Just get me a goddamned cheeseburger.</p>

<p>Some programmers couldn’t care less about what programming language they’re using, but most would just love to have the opportunity to work with exciting new technologies. Today that may be Python or Ruby on Rails; three years ago it was C# and before that Java.</p>

<p>Now, I’m not telling you not to use the best tool for the job, and I’m not telling you to rewrite in the hot <em>language-du-jour</em> every two years, but if you can find ways for developers to get experience with newer languages, frameworks, and technologies, they’ll be happier. Even if you don’t dare rewrite your core application, is there any reason your internal tools, or less-critical new applications, can’t be written in an exciting new language as a learning project?</p>

<p><a href="http://www.joelonsoftware.com/articles/FieldGuidetoDevelopers.html">Originally appearing</a> on Joel&#8217;s blog, <a href="http://www.joelonsoftware.com/" target="_blank">Joel on Software</a></p>
]]></content:encoded>
			<wfw:commentRss>http://getsthingsdone.com/2011/01/21/a-field-guide-to-developers-%e2%80%93-what-am-i-working-on/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Working Remotely</title>
		<link>http://getsthingsdone.com/2011/01/21/working-remotely/</link>
		<comments>http://getsthingsdone.com/2011/01/21/working-remotely/#comments</comments>
		<pubDate>Fri, 21 Jan 2011 15:55:24 +0000</pubDate>
		<dc:creator>jeffatwood</dc:creator>
				<category><![CDATA[Onboarding]]></category>

		<guid isPermaLink="false">http://getsthingsdone.com/?p=100</guid>
		<description><![CDATA[Some of the best talented developers may not live in your geographic area, nor can they relocate. So, then what?  Here are some tips on creating a remote developer team. 
o   The minimum remote team size is two. Always have a buddy, even if your buddy is on another continent halfway across the world.
o   Only code-loving veterans should be considered for remote development positions. Those working remotely should be highly passionate about the work, which lends itself to being highly self-motivated.
o   To be effective, remote teams need full autonomy and a leader (PM, if you will) who has a strong vision and the power to fully execute on that vision.
Some technology and process tips:
o   Real Time Chat
o   Persistent Mailing List
o   Voice &#38; Video Chat
o   Monday Team Status Reports – emailed to everyone
o   Meeting minutes]]></description>
				<content:encoded><![CDATA[<p>When I first <a href="http://www.codinghorror.com/blog/2008/03/choosing-your-own-adventure.html">chose my own adventure</a>, I didn&#8217;t know what working remotely from home was going to be like. I had never done it before. As <em>programmers</em> go, I&#8217;m fairly social. Which still means I&#8217;m a borderline sociopath by normal standards. All the same, I was worried that I&#8217;d go stir-crazy with no division between my work life and my home life.</p>

<p>Well, I haven&#8217;t gone stir-crazy yet. I think. But in building Stack Overflow, I have learned a few things about what it means to work remotely &#8212; at least when it comes to programming. Our current team encompasses 5 people, distributed all over the USA, along with the team in NYC.</p>

<p>My first mistake was <a href="http://www.codinghorror.com/blog/2007/06/in-programming-one-is-the-loneliest-number.html">attempting to program alone</a>. I had weekly calls with my business partner, <a href="http://www.joelonsoftware.com/">Joel Spolsky</a>, which were quite productive in terms of figuring out what it was we were trying to do together &#8212; but he wasn&#8217;t writing code. I was coding alone. Really alone. One guy working all by yourself alone. This didn&#8217;t work <em>at all</em> for me. I was unmoored, directionless, suffering from analysis paralysis, and barely able to get motivated enough to write even a few lines of code. I rapidly realized that I&#8217;d made a huge mistake in not <a href="http://www.codinghorror.com/blog/2009/02/whos-your-coding-buddy.html">having a coding buddy</a> to work with.</p>

<p>That situation <a href="http://www.codinghorror.com/blog/2010/01/cultivate-teams-not-ideas.html">rectified itself soon enough</a>, as I was fortunate enough to find one of my favorite old coding buddies was available. Even though Jarrod was in North Carolina and I was in California, the shared source code was the mutual glue that stuck us together, motivated us, and kept us moving forward. To be fair, we also had the considerable advantage of prior history, because we had worked together at a previous job. But the minimum bar to work remotely is to find someone who loves code as much as you do. It&#8217;s … enough. Anything else on top of that &#8212; old friendships, new friendships, a good working relationship &#8212; is icing that makes working together all the sweeter. I eventually expanded the team in the same way by adding another old coding buddy, Geoff, who lives in Oregon. And again by adding Kevin, who I didn&#8217;t know, but had built amazing stuff for us <em>without even being asked to</em>, from Texas. And again by adding Robert, in Florida, who I also didn&#8217;t know, but spent so much time on every single part of our sites that I felt he had been running alongside our team the whole way, there all along.</p>

<p>The reason remote development worked for us, in retrospect, wasn&#8217;t just shared love of code. I picked developers who I knew &#8212; I had incontrovertible <em>proof</em> &#8212; were amazing programmers. I&#8217;m not saying they&#8217;re perfect, far from it, merely that they were top programmers by any metric you&#8217;d care to measure. <em>That&#8217;s</em> why they were able to work remotely. Newbie programmers, or competent programmers who are phoning it in, are absolutely not going to have the moxie necessary to get things done remotely &#8212; at least, not without a pointy haired manager, or grumpy old team lead, breathing down their neck. Don&#8217;t even <em>think</em> about working remotely with anyone who doesn&#8217;t freakin&#8217; <em>bleed</em> ones and zeros, and has a proven track record of getting things done.</p>

<p>While Joel certainly had a lot of high level input into what Stack Overflow eventually became, I only talked to him once a week, at best (these calls were <a href="http://itc.conversationsnetwork.org/series/stackoverflow.html">the genesis of our weekly podcast series</a>). <strong>I had a strong, clear vision of what I wanted Stack Overflow to be, and how I wanted it to work.</strong> Whenever there was a question about functionality or implementation, my team was able to rally around me and collectively make decisions we liked, and that I personally felt were in tune with this vision. And if you know me at all, you know <a href="http://www.codinghorror.com/blog/2004/10/just-say-no.html">I&#8217;m not shy about saying no</a>, either. We were able to build exactly what we wanted, exactly how we wanted.</p>

<p>Bottom line, we were <a href="http://www.youtube.com/results?search_query=we're+on+a+mission+from+god">on a mission from God</a>. And we still are.</p>

<p>So, there are a few basic ground rules for remote development, at least as I&#8217;ve seen it work:</p>

<ul>
    <li>The      minimum remote team size is two. Always have a buddy, even if your buddy      is on another continent halfway across the world.</li>
    <li>Only      grizzled veterans who absolutely <em>love</em> to code need apply      for remote development positions. Mentoring of newbies or casual programmers      simply doesn&#8217;t work at all remotely.</li>
    <li>To      be effective, remote teams need full autonomy and a leader (PM, if you      will) who has a strong vision <em>and</em> the power to fully      execute on that vision.</li>
</ul>

<p>This is all well and good when you have a remote team size of <em>three</em>, as we did for the bulk of Stack Overflow development. And all in the same country. <a href="http://blog.stackoverflow.com/2010/05/announcing-our-series-a/">Now we need to grow the company</a>, and I&#8217;d like to grow it in distributed fashion, by hiring other amazing developers from around the world, many of whom I have met through Stack Overflow itself.</p>

<p><strong>But how do you scale remote development?</strong> Joel had some deep seated concerns about this, so I tapped one of my heroes, Miguel de Icaza &#8212; who I&#8217;m proud to note is on <a href="http://stackoverflow.com/about/management#advisors">our all-star board of advisors</a> &#8212; and he was generous enough to give us some personal advice based on his experience running the <a href="http://www.mono-project.com/">Mono project</a>, which has dozens of developers distributed all over the world.</p>

<p>At the risk of summarizing mercilessly (and perhaps too much), I&#8217;ll boil down Miguel&#8217;s advice the best I can. There are three tools you&#8217;ll need in place if you plan to grow a large-ish and still functional remote team.</p>

<p><strong>1. Real      time chat</strong></p>

<p>When your team member lives in Brazil, you can&#8217;t exactly walk by his desk      to ask him a quick question, or bug him about something in his recent      checkin. Nope. You need a way to <em>casually</em> ping your      fellow remote team members and get a response back quickly. This should be      low friction and available to all remote developers at all times. IM, IRC,      some web based tool, laser beams, smoke signals, carrier pigeon, two tin      cans and a string: whatever. As long as everyone really <em>uses</em> it.</p>

<p><strong>2. Persistent      mailing list</strong></p>

<p>Sure, your remote team may know the details of <em>their</em> project,      but what about all the other work going on? How do they find out about      that stuff or even know it exists in the first place? You need a virtual      bulletin board: a place for announcements, weekly team reports, and      meeting summaries. This is where a classic old-school mailing list comes      in handy.</p>

<p>We&#8217;re using <a href="http://groups.google.com/">Google Groups</a> and although it&#8217;s old school in spades, it works plenty well for this. You can get the emails as they arrive, or view the archived list via the web interface. One word of caution, however. Every time you see something arrive in your inbox from the mailing list you better believe, in your heart of hearts, that it contains useful information. The minute the mailing list becomes just another &#8220;whenever I have time to read that stuff&#8221;, noise engine, or distraction from work … you&#8217;ve let someone cry wolf too much, and ruined it. So be very careful. Noisy, argumentative, or useless things posted to the mailing list should be punishable by death. Or noogies.</p>

<p><strong>3. Voice      and video chat</strong></p>

<p>As much as I love ASCII, sometimes faceless ASCII characters just aren&#8217;t enough to capture the full intentions and feelings of the human being behind them. When you find yourself sending kilobytes of ASCII back and forth, and still are unsatisfied that you&#8217;re <em>communicating</em>, you should instill a reflexive habit of &#8220;going voice&#8221; on your team.</p>

<p>Never underestimate the power of actually <em>talking</em> to another human being. I know, I know, the whole reason we got into this programming thing was to <em>avoid</em> talking to other people, but bear with me here. You can&#8217;t be face to face on a remote team without flying 6 plus hours, and who the heck has that kind of time? I&#8217;ve got work I need to get done! Well, the next best thing to hopping on a plane is to fire up <a href="http://www.skype.com/">Skype</a> and have a little voice chat. Easy peasy. All that human nuance which is totally lost in faceless ASCII characters (yes, even with our old pal <a href="http://en.wikipedia.org/wiki/Emoticon">*&lt;:-)</a>) will come roaring back if you <em>regularly</em> schedule voice chats. I recommend at least once a week at an absolute minimum; they don&#8217;t have to be long meetings, but it sure helps in understanding the human being behind all those awesome checkins.</p>

<p>Nobody hates meetings and process claptrap more than I do, but there is a certain amount of process you&#8217;ll need to keep a bunch of loosely connected remote teams and developers in sync.</p>

<p><strong>1. Monday      team status reports</strong></p>

<p><strong> </strong>Every Monday, as in <a href="http://www.youtube.com/results?search_query=somebody's+got+a+case+of+the+mondays">somebody&#8217;s-got-a-case-of-the</a>, each team should produce a brief, summarized rundown of:</p>

<ul>
    <li>What we did <span style="text-decoration: underline">last week</span></li>
    <li>What we&#8217;re planning to do <span style="text-decoration: underline">this week</span></li>
    <li>Anything that is <span style="text-decoration: underline">blocking</span> us or we are <span style="text-decoration: underline">concerned</span> about</li>
</ul>

<p>This doesn&#8217;t have to be (and in fact <em>shouldn&#8217;t</em> be) a long report. The briefer the better, but do try to capture all the useful highlights. Mail this to the mailing list every Monday like clockwork. Now, how many &#8220;teams&#8221; you have is up to you; I don&#8217;t think this needs to be done at the individual developer level, but you could.</p>

<p><strong>2. Meeting      minutes</strong></p>

<p>Any time you conduct what you would consider to be a &#8220;meeting&#8221; with someone else, <span style="text-decoration: underline">take minutes</span>! That is, write down what happened in bullet point form, so those remote team members who couldn&#8217;t be there can benefit from &#8212; or at least hear about &#8212; whatever happened.</p>

<p>Again, this doesn&#8217;t have to be long, and if you find taking meeting minutes onerous then you&#8217;re probably doing it wrong. A simple bulleted list of sentences should suffice. We don&#8217;t need to know every little detail, just the big picture stuff: <span style="text-decoration: underline">who</span> was there? What<span style="text-decoration: underline">topics</span> were discussed? What <span style="text-decoration: underline">decisions</span> were made? What are the <span style="text-decoration: underline">next steps</span>?</p>

<p>Both of the above should, of course, be mailed out to the mailing list as they are completed so everyone can be notified. You do have a mailing list, right? Of course you do!</p>

<p>If this seems like a lot of jibba-jabba, well, that&#8217;s because <strong>remote development is hard</strong>. It takes discipline to make it all work, certainly more discipline than piling a bunch of programmers into the same cubicle farm. But when you imagine what this kind of intellectual work &#8212; not just programming, but anything where you&#8217;re working in mostly thought-stuff &#8212; will be like in ten, twenty, even thirty years … don&#8217;t you think it will look a lot like what happens every day <em>right now</em> on Stack Overflow? That is, a programmer in Brazil helping a programmer in New Jersey solve a problem?</p>

<p>If I have learned anything from Stack Overflow it is that the world of programming is <a href="http://www.codinghorror.com/blog/2009/03/the-ugly-american-programmer.html">truly global</a>. I am honored to meet these brilliant programmers from every corner of the world, even if only in a small way through a website. Nothing is more exciting for me than the prospect of adding international members to the Stack Overflow team. The development of Stack Overflow should be reflective of what Stack Overflow <em>is</em>: an international effort of like-minded &#8212; and dare I say <em>totally awesome</em> &#8212; programmers. I wish I could hire each and every one of you. OK, maybe I&#8217;m a little biased. But to me, that&#8217;s how awesome the Stack Overflow community is.</p>

<p>I believe <strong>remote development represents the future of work</strong>. If we have to spend a little time figuring out how this stuff works, and maybe even make some mistakes along the way, it&#8217;s worth it. As far as I&#8217;m concerned, the future is now. Why wait?</p>

<p><a href="http://www.codinghorror.com/blog/2010/05/on-working-remotely.html">Originally appearing</a> on Jeff’s blog, <a href="http://www.codinghorror.com/">Coding Horror</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://getsthingsdone.com/2011/01/21/working-remotely/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Field Guide to Developers – Private Offices</title>
		<link>http://getsthingsdone.com/2011/01/14/a-field-guide-to-developers-%e2%80%93-private-offices/</link>
		<comments>http://getsthingsdone.com/2011/01/14/a-field-guide-to-developers-%e2%80%93-private-offices/#comments</comments>
		<pubDate>Fri, 14 Jan 2011 20:21:09 +0000</pubDate>
		<dc:creator>joelspolsky</dc:creator>
				<category><![CDATA[Development Team]]></category>

		<guid isPermaLink="false">http://getsthingsdone.com/?p=117</guid>
		<description><![CDATA[Private offices seem like a huge expense, but have statistically proven to increase programmers productivity. As a recruiting tool, private offices are a high priority for talented programmers. A private office says to candidates that you respect their work style and are willing to provide support in increasing productivity.]]></description>
				<content:encoded><![CDATA[<p>By Joel Spolsky, <a href="http://www.joelonsoftware.com/articles/FieldGuidetoDevelopers.html" target="_blank">originally appearing</a> on his blog, <a href="http://www.joelonsoftware.com/" target="_blank">Joel on Software</a></p>

<p>There’s a strong culture in Silicon Valley that requires you to jam a lot of programmers into a big open space, despite a preponderance of evidence that private offices are far more productive, something which I’ve covered repeatedly on this site. I’m not really getting through to people, I don’t think, because programmers kind of <em>like</em> being social, even if it means they are unproductive, so it’s an uphill battle.</p>

<p>I’ve even heard programmers say things like, “Yeah, we all work in cubicles, but <em>everyone</em> works in a cubicle—up to and including the CEO!”</p>

<p>“The CEO? Does the CEO really work in a cubicle?”</p>

<p>“Well, he <em>has</em> a cubicle, but actually now that you mention it there’s this one conference room that he goes to for all his important meetings…”</p>

<p>Mmmm hmmm. A fairly common Silicon Valley phenomenon is the CEO who makes a big show of working from a cubicle just like the hoi polloi, although somehow there’s this one conference room that he tends to make his own (“Only when there’s something private to be discussed,” he’ll claim, but half the time when you walk by that conference room there’s your CEO, all by himself, talking on the phone to his golf buddy, with his Cole Haans up on the conference table).</p>

<p>Anyway, I don’t want to revisit the discussion of why private offices are more productive for software developers, or why just putting on headphones to drown out the ambient noise has been shown to reduce the quality of work that programmers produce, and why it doesn’t really cost that much more in the scheme of things to have private offices for developers. I’ve talked about that already. Today I’m talking about recruiting, and private offices in recruiting.</p>

<p>No matter what you think about productivity, and no matter what you think about egalitarian workspaces, two things are incontrovertible:</p>

<ol>
    <li>Private offices have higher status</li>
    <li>Cubicles and other shared space can be socially awkward.</li>
</ol>

<p>Given these two facts, the bottom line is that programmers are more likely to take the job that offers them a private office. Especially if there’s a door that shuts, and a window, and a nice view.</p>

<p>Now, it&#8217;s an unfortunate fact that some of these things that make recruiting easier are not really within your power. Even CEOs and founders can be prevented from establishing private offices if they’re dependent on VCs. Most companies only move or rearrange their office space every five to ten years. Smaller startups may not be able to afford private offices. So my experience has been that a number of excuses all pile up until it’s virtually impossible to get private offices for developers in any but the most enlightened of companies, and even in those companies, the decision of where to move and where people should work is often taken once every ten years by a committee consisting of the office manager’s secretary and a junior associate from a big architecture firm, who is apt to believe architecture-school fairy tales about how open spaces mean open companies, or whatever, with close to zero input from the developers or the development team.</p>

<p>This is something of a scandal, and I’ll keep fighting the good fight, but in the meantime, private offices are <em>not</em> impossible; we’ve managed to do it for all of our full-time programmers, most of the time, even in New York City where the rents are some of the highest in the world, and there’s no question that it makes people much happier about working at Fog Creek, so if you all want to keep resisting, <strong>so be it,</strong> I’ll just let this remain a competitive advantage.</p>
]]></content:encoded>
			<wfw:commentRss>http://getsthingsdone.com/2011/01/14/a-field-guide-to-developers-%e2%80%93-private-offices/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Evidence Based Scheduling</title>
		<link>http://getsthingsdone.com/2011/01/14/evidence-based-scheduling/</link>
		<comments>http://getsthingsdone.com/2011/01/14/evidence-based-scheduling/#comments</comments>
		<pubDate>Fri, 14 Jan 2011 19:47:37 +0000</pubDate>
		<dc:creator>joelspolsky</dc:creator>
				<category><![CDATA[Development Team]]></category>

		<guid isPermaLink="false">http://getsthingsdone.com/?p=72</guid>
		<description><![CDATA[Why schedule? The project will get done when it gets done.  Or will it?

Using Evidence-Based Scheduling is pretty easy: it will take you a day or two at the beginning of every iteration to produce detailed estimates, and it’ll take a few seconds every day to record when you start working on a new task on a timesheet. The benefits, though, are huge: realistic schedules.

Realistic schedules are the key to creating good software. It forces you to do the best features first and allows you to make the right decisions about what to build. Which makes your product better, your boss happier, delights your customers, and—best of all—lets you go home at five o’clock.]]></description>
				<content:encoded><![CDATA[<p>by Joel Spolsky, <a href="http://www.joelonsoftware.com/items/2007/10/26.html">originally appearing</a> on his blog, <a href="http://www.joelonsoftware.com/">Joel on Software</a></p>

<p>Software developers don’t really like to make schedules. Usually, they try to get away without one. “It’ll be done when it’s done!” they say, expecting that such a brave, funny zinger will reduce their boss to a fit of giggles, and in the ensuing joviality, the schedule will be forgotten.</p>

<p>You want to be spending your time on things that get the most bang for the buck. And you can’t figure out how much buck your bang is going to cost without knowing how long it’s going to take. When you have to decide between the “animated paperclip” feature and the “more financial functions” feature, you really need to know how much time each will take.</p>

<p>Why won’t developers make schedules? Two reasons. One: it’s a pain in the butt. Two: nobody believes the schedule is realistic. Why go to all the trouble of working on a schedule if it’s not going to be right?</p>

<p>Over the last year or so at Fog Creek we’ve been developing a system that’s so easy even our grouchiest developers are willing to go along with it. And as far as we can tell, it produces extremely reliable schedules. It’s called Evidence-Based Scheduling, or EBS. You gather evidence, mostly from historical timesheet data, that you feed back into your schedules. What you get is not just one ship date: you get a confidence distribution curve, showing the probability that you will ship on any given date. It looks like this:</p>

<p>The steeper the curve, the more confident you are that the ship date is real. Here’s how you do it.</p>

<p><strong> </strong></p>

<p><strong>1) Break ‘er down</strong></p>

<p>When I see a schedule measured in days, or even weeks, I know it’s not going to work. You have to break your schedule into very small tasks that can be measured in hours. Nothing longer than 16 hours.</p>

<p>This forces you to actually figure out what you are going to do. Write subroutine foo. Create this dialog box. Parse the Fizzbott file. Individual development tasks are easy to estimate, because you’ve written subroutines, created dialogs, and parsed files before.</p>

<p>If you are sloppy, and pick big three-week tasks (e.g., “Implement Ajax photo editor”), then you haven’t thought about what you are going to do. In detail. Step by step. And when you haven’t thought about what you’re going to do, you can’t know how long it will take.</p>

<p>Setting a 16-hour maximum forces you to design the damn feature. If you have a hand-wavy three week feature called “Ajax photo editor” without a detailed design, I’m sorry to be the one to break it to you but you are officially doomed. You never thought about the steps it’s going to take and you’re sure to be forgetting a lot of them.</p>

<p><strong>2) Track elapsed time</strong></p>

<p>It’s hard to get individual estimates exactly right. How do you account for interruptions, unpredictable bugs, status meetings, and the semiannual Windows Tithe Day when you have to reinstall everything from scratch on your main development box? Heck, even without all that stuff, how can you tell exactly how long it’s going to take to implement a given subroutine?</p>

<p>You can’t, really.</p>

<p>So, keep timesheets. Keep track of how long you spend working on each task. Then you can go back and see how long things took relative to the estimate. For each developer, you’ll be collecting data like this:</p>

<p>Each point on the chart is one completed task, with the estimate and actual times for that task. When you divide estimate by actual, you get velocity: how fast the task was done relative to estimate. Over time, for each developer, you’ll collect a history of velocities.</p>

<p>As estimators gain more experience, their estimating skills improve. So throw away any velocities older than, say, six months.</p>

<p>If you have a new estimator on your team, who doesn&#8217;t have a track record, assume the worst: give them a fake history with a wide range of velocities, until they&#8217;ve finished a half-dozen real tasks.</p>

<p><strong>3) Simulate the future</strong></p>

<p>Rather than just adding up estimates to get a single ship date, which sounds right but gives you a profoundly wrong result, you’re going to use the Monte Carlo method to simulate many possible futures. In a Monte Carlo simulation, you can create 100 possible scenarios for the future. Each of these possible futures has 1% probability, so you can make a chart of the probability that you will ship by any given date.</p>

<p>While calculating each possible future for a given developer, you’re going divide each task’s estimate by a randomly-selected velocity from that developer’s historical velocities, which we&#8217;ve been gathering in step 2. Here’s one sample future:</p>

<p>Estimate:              4              8              2              8              16</p>

<p>Random Velocity:             0.6          0.5          0.6          0.6          0.5          Total:</p>

<p>E/V:        6.7          16           3.3          13.3        32           71.3
Do that 100 times; each total has 1% probability, and now you can figure out the probability that you will ship on any given date.</p>

<p>Now watch what happens:</p>

<p>In the case of the mythical perfect estimator, all velocities are 1. Dividing by a velocity which is always 1 has no effect. Thus, all rounds of the simulation give the same ship date, and that ship date has 100% probability. Just like in the fairy tales!</p>

<p>The bad estimator’s velocities are all over the map. 0.1 and 13.0 are just as likely. Each round of the simulation is going to produce a very different result, because when you divide by random velocities you get very different numbers each time. The probability distribution curve you get will be very shallow, showing an equal chance of shipping tomorrow or in the far future. That’s still useful information to get, by the way: it tells you that you shouldn&#8217;t have confidence in the predicted ship dates.</p>

<p>The common estimator has a lot of velocities that are pretty close to each other, for example, {0.6, 0.5, 0.6, 0.6, 0.5, 0.6, 0.7, 0.6}. When you divide by these velocities you increase the amount of time something takes, so in one iteration, an 8-hour task might 13 hours; in another it might take 15 hours. That compensates for the estimators perpetual optimism. And it compensates precisely, based exactly on this developers actual, proven, historical optimism. And since all the historical velocities are pretty close, hovering around 0.6, when you run each round of the simulation, you’ll get pretty similar numbers, so you’ll wind up with a narrow range of possible ship dates.</p>

<p>In each round of the Monte Carlo simulation, of course, you have to convert the hourly data to calendar data, which means you have to take into account each developer’s work schedule, vacations, holidays, etc. And then you have to see, for each round, which developer is finishing last, because that’s when the whole team will be done. These calculations are painstaking, but luckily, painstaking is what computers are good at.  Obsessive-compulsive disorder not required.</p>

<p>What do you do about the boss who interrupts you all the time with long-winded stories about his fishing trips? Or the sales meetings you’re forced to go to even though you have no reason to be there? Coffee breaks? Spending half a day helping the new guy get his dev environment set up?</p>

<p>When Brett and I were developing this technique at Fog Creek, we worried a lot about things that take real time but can’t be predicted in advance. Sometimes, this all adds up to more time than writing code. Should you have estimates for this stuff too, and track it on a time sheet?</p>

<p>Well, yeah, you can, if you want. And Evidence Based Scheduling will work.</p>

<p>But you don’t have to.</p>

<p>It turns out that EBS works so well that all you have to do is keep the clock running on whatever task you were doing when the interruption occurred. As disconcerting as this may sound, EBS produces the best results when you do this.</p>

<p>Let me walk you through a quick example. To make this example as simple as possible, I’m going to imagine a very predictable programmer, John, whose whole job is writing those one-line getter and setter functions that inferior programming languages require. Each getter or setter takes him 2 hours. So his task estimates look like this: {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, … }</p>

<p>Now, this poor guy has a boss who interrupts him every once in a while with a two-hour conversation about marlin fishing. Now, of course, John could have a task on his schedule called “Painful conversations about marlin,” and put that on his timesheet, but this might not be politically prudent. Instead, John just keeps the clock running. So his actual times look like this: {2, 2, 2, 2, 4, 2, 2, 2, 2, 4, 2, … }</p>

<p>And his velocities (estimates / actual) are: {1, 1, 1, 1, 0.5, 1, 1, 1, 1, 0.5, 1, … }</p>

<p>Now think about what happens. In the Monte Carlo simulation, the probability that each estimate will be divided by 0.5 is exactly the same as the probability that John’s boss would interrupt him during any given feature. So EBS produces a correct schedule!</p>

<p>In fact, EBS is far more likely to have accurate evidence about these interruptions than even the most timesheet-obsessive developer. Which is exactly why it works so well. Here’s how I explain this to people. When developers get interrupted, they can either make a big stink about putting the interruption on their timesheet and in their estimates, so management can see just how much time is being wasted on fishing conversation, or make a big stink about refusing to put it on their timesheet, just letting the feature they were working on slip, because they refuse to pad their estimates which were perfectly correct with stupid conversation about fishing expeditions to which they weren&#8217;t even invited, … and in either case, EBS gives the same, exactly correct results, no matter which type of passive-aggressive developer you have.</p>

<p><strong>4) Manage your projects actively</strong></p>

<p>Once you’ve got this set up, you can actively manage projects to ship on time. For example, if you sort features out into different priorities, it’s easy to see how much it would help the schedule if you could cut the lower priority features.</p>

<p>You can also look at the distribution of possible ship dates for each developer:</p>

<p>Some developers may be causing problems because their ship dates are so uncertain: they need to work on learning to estimate better. Other developers (like Jane) have very precise ship dates that are just too late: they need to have some of their work taken off their plate. Other developers are not on the critical path at all, and can be left in peace.</p>

<p>Assuming you had everything planned down to the last detail when you started work, EBS works great. To be honest, though, you may do some features that you hadn&#8217;t planned. You get new ideas, your salespeople sell features you don’t have, and somebody on the board of directors comes up with a cool new idea to make your golf cart GPS application monitor EKGs while golfers are buzzing around the golf course. All this leads to delays that could not have been predicted when you did the original schedule.</p>

<p>Ideally, you have a bunch of buffer for this. In fact, go ahead and build buffer into your original schedule for:</p>

<ul>
    <li>New feature ideas</li>
    <li>Responding to the competition</li>
    <li>Integration (getting everyone’s code to work together when it’s merged)</li>
    <li>Debugging time</li>
    <li>Usability testing (and incorporating the results of those tests into the product).</li>
    <li>Beta tests</li>
</ul>

<p>So now, when new features come up, you can slice off a piece of the appropriate buffer and use it for the new feature.</p>

<p>What happens if you’re still adding features and you&#8217;ve run out of buffer? Well, now the ship dates you get out of EBS start slipping. You should take a snapshot of the ship date confidence distribution every night, so that you can track this over time:</p>

<p>Here are a few more things I&#8217;ve learned over the years about schedules.</p>

<p>1)      Only the programmer doing the work can create the estimate. Any system where management writes a schedule and hands it off to programmers is doomed to fail. Only the programmer who is going to implement a feature can figure out what steps they will need to take to implement that feature.</p>

<p>2)      Fix bugs as you find them, and charge the time back to the original task. You can’t schedule a single bug fix in advance, because you don’t know what bugs you’re going to have. When bugs are found in new code, charge the time to the original task that you implemented incorrectly. This will help EBS predict the time it takes to get fully debugged code, not just working code.</p>

<p>3)      Don’t let managers badger developers into shorter estimates. Many rookie software managers think that they can “motivate” their programmers to work faster by giving them nice, “tight” (unrealistically short) schedules. I think this kind of motivation is brain-dead. When I’m behind schedule, I feel doomed and depressed and unmotivated. When I’m working ahead of schedule, I’m cheerful and productive. The schedule is not the place to play psychological games.</p>

<p>Why do managers try this?</p>

<p>When the project begins, the technical managers go off, meet with the business people, and come up with a list of features they think would take about three months, but which would really take twelve. When you think of writing code without thinking about all the steps you have to take, it always seems like it will take n time, when in reality it will probably take more like 4n time. When you do a real schedule, you add up all the tasks and realize that the project is going to take much longer than originally thought. The business people are unhappy.</p>

<p>Inept managers try to address this by figuring out how to get people to work faster. This is not very realistic. You might be able to hire more people, but they need to get up to speed and will probably be working at 50% efficiency for several months (and dragging down the efficiency of the people who have to mentor them).</p>

<p>You might be able to get 10% more raw code out of people temporarily at the cost of having them burn out 100% in a year. Not a big gain, and it’s a bit like eating your seed corn. Of course, when you overwork people, debugging time doubles and a late project becomes later. Splendid karma.</p>

<p><strong>
Summary</strong></p>

<p>Using Evidence-Based Scheduling is pretty easy: it will take you a day or two at the beginning of every iteration to produce detailed estimates, and it’ll take a few seconds every day to record when you start working on a new task on a timesheet. The benefits, though, are huge: realistic schedules.</p>

<p>Realistic schedules are the key to creating good software. It forces you to do the best features first and allows you to make the right decisions about what to build. Which makes your product better, your boss happier, delights your customers, and—best of all—lets you go home at five o’clock.</p>
]]></content:encoded>
			<wfw:commentRss>http://getsthingsdone.com/2011/01/14/evidence-based-scheduling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Incentive Pay Considered Harmful</title>
		<link>http://getsthingsdone.com/2011/01/07/incentive-pay-considered-harmful/</link>
		<comments>http://getsthingsdone.com/2011/01/07/incentive-pay-considered-harmful/#comments</comments>
		<pubDate>Fri, 07 Jan 2011 16:26:24 +0000</pubDate>
		<dc:creator>joelspolsky</dc:creator>
				<category><![CDATA[Development Team]]></category>
		<category><![CDATA[Engagement]]></category>
		<category><![CDATA[engagement]]></category>

		<guid isPermaLink="false">http://getsthingsdone.com/?p=104</guid>
		<description><![CDATA[Incentivizing employees to ship software quickly, will most likely result in less than stellar software. Why? Because the incentive is to get the product out the door, not create a good product. Similarly, traditional performance review systems probably won’t work for your software teams.  As much as you can estimate how long each task will take with evidence based scheduling, this doesn’t necessarily translate into how good one programmer is over another. In general, if your team members are expecting a reward (for a good job or just finishing the job), chances are they don’t perform as well as the team members who don’t expect a reward.  The best teams are motivated by the work, people, environment and overall passion for programming.]]></description>
				<content:encoded><![CDATA[<p>By Joel Spolsky, <a href="http://www.joelonsoftware.com/articles/fog0000000070.html" target="_blank">originally appearing</a> on his blog, <a href="http://www.joelonsoftware.com/" target="_blank">Joel on Software</a></p>

<p>Mike Murray, a surprisingly hapless HR manager at Microsoft, made a number of goofs, but the doozie was introducing a &#8220;Ship It&#8221; award shortly after he started the job. The idea was that you would get a big lucite tombstone the size of a dictionary when your product shipped. This was somehow supposed to give you an incentive to work, you see, because if you didn&#8217;t do your job&#8211; no lucite for you! Makes you wonder how Microsoft ever shipped software <em>before</em> the lucite slab.</p>

<p>The Ship It program was announced with an incredible amount of internal fanfare and hoopla at a big company picnic. For weeks before the event, teaser posters appeared all over the corporate campus with a picture of Bill Gates and the words &#8220;Why is this man smiling?&#8221; I&#8217;m not sure what that meant. Was Bill smiling because he was happy that we now had an incentive to ship software?  But at the company picnic, it became apparent that the employees felt like they were being treated like children. There was a lot of booing. The Excel programming team held up a huge sign that said &#8220;Why is the Excel team yawning?&#8221; The Ship It award was so despised that there is even a (non-fiction) episode in Douglas Coupland&#8217;s classic <a href="http://www.amazon.com/exec/obidos/ASIN/0060987049/ref=nosim/joelonsoftware">Microserfs</a> in which a group of programmers try to <a href="http://www.wired.com/wired/archive/2.01/microserfs_pr.html">destroy one with a blow torch</a>.</p>

<p>Treating your rocket scientist employees as if they were still in kindergarten is not an isolated phenomenon. Almost every company has some kind of incentive program that is insulting and demeaning.</p>

<p>At two of the companies I&#8217;ve worked for, the most stressful time of year was the twice-yearly performance review period. For some reason, the Juno HR department and the Microsoft HR department must have copied their performance review system out of the same Dilbertesque management book, because both programs worked exactly the same way. First, you gave &#8220;anonymous&#8221; upward reviews for your direct manager (as if that could be done in an honest way). Then, you filled out optional &#8220;self-evaluation&#8221; forms, which your manager &#8220;took into account&#8221; in preparing your performance review. Finally, you got a numerical score, in lots of non-scalar categories like &#8220;works well with others&#8221;, from 1-5, where the only possible scores were actually 3 or 4. Managers submitted bonus recommendations upwards, which were completely ignored and everybody received bonuses that were almost completely random. The system never took into account the fact that people have different and unique talents, all of which are needed for a team to work well.</p>

<p>Performance reviews were stressful for a couple of reasons. Many of my friends, especially the ones whose talents were very significant but didn&#8217;t show up on the traditional scales, tended to get lousy performance reviews. For example, one friend of mine was a cheerful catalyst, a bouncy cruise director who motivated everyone else when the going got tough. He was the glue that held his team together. But he tended to get negative reviews, because his manager didn&#8217;t understand his contribution. Another friend was incredibly insightful strategically; his conversations with other people about how things should be done allowed everyone else to do much better work. He tended to spend more time than average trying out new technologies; in this area he was invaluable to the rest of the team. But in terms of lines of code, he wrote less than average, and his manager was too stupid to notice all his other contributions, so he always got negative reviews, too. Negative reviews, obviously, have a devastating effect on morale. In fact, giving somebody a review that is positive, but not <em>as </em>positive as that person expected, also has a negative effect on morale.</p>

<p>The effect of reviews on morale is lopsided: while negative reviews hurt morale a lot, positive reviews have no effect on morale or productivity. The people who get them are already working productively. For them, a positive review makes them feel like they are doing good work in order to get the positive review&#8230; as if they were Pavlovian dogs working for a treat, instead of professionals who actually care about the quality of the work that they do.</p>

<p>And herein lies the rub. Most people think that they do pretty good work (even if they don&#8217;t). It&#8217;s just a little trick our minds play on us to keep life bearable. So if everybody thinks they do good work, and the reviews are merely <em>correct </em>(which is not very easy to achieve), then <strong>most people will be disappointed by their reviews</strong>. The cost of this in morale is hard to understate. On teams where performance reviews are done honestly, they tend to result in a week or so of depressed morale, moping, and some resignations. They tend to drive wedges between team members, often because the poorly-rated are jealous of the highly-rated, in a process that <a href="http://www.amazon.com/exec/obidos/ASIN/0932633439/ref=nosim/joelonsoftware/">DeMarco and Lister</a> call <em>teamicide</em>: the inadvertent destruction of jelled teams.</p>

<p>DeMarco and Lister go on even further, stating unequivocally that any kind of workplace competition, any scheme of rewards and punishments, and even the old fashion trick of &#8220;catching people doing something right and rewarding them,&#8221; all do more harm than good. Giving somebody <em>positive</em> reinforcement (such as stupid company ceremonies where people get plaques) implies that they only did it for the lucite plaque; it implies that they are not independent enough to work unless they are going to get a cookie; and it&#8217;s insulting and demeaning.</p>

<p>Most software managers have no choice but to go along with performance review systems that are already in place. If you&#8217;re in this position, the only way to prevent teamicide is to simply give everyone on your team a gushing review. But if you do have any choice in the matter, I&#8217;d recommend that you run fleeing from any kind of performance review, incentive bonus, or stupid corporate employee-of-the-month program.</p>
]]></content:encoded>
			<wfw:commentRss>http://getsthingsdone.com/2011/01/07/incentive-pay-considered-harmful/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Field Guide To Developers &#8211; Can I identify with the company?</title>
		<link>http://getsthingsdone.com/2011/01/06/a-field-guide-to-developers-can-i-identify-with-the-company/</link>
		<comments>http://getsthingsdone.com/2011/01/06/a-field-guide-to-developers-can-i-identify-with-the-company/#comments</comments>
		<pubDate>Thu, 06 Jan 2011 22:02:02 +0000</pubDate>
		<dc:creator>joelspolsky</dc:creator>
				<category><![CDATA[Engagement]]></category>
		<category><![CDATA[employer branding]]></category>
		<category><![CDATA[engagement]]></category>

		<guid isPermaLink="false">http://getsthingsdone.com/?p=232</guid>
		<description><![CDATA[The point of this section is to think of what your company stands for, how it’s perceived, and how it could be perceived. Developers are becoming choosier in the employer they work for (or even interview with). Creating a meaningful corporate  reputation which provides employees with a passionate cause will increase your ability to attract top talent. Managing your corporate brand is just as important for recruiting as it is for marketing.]]></description>
				<content:encoded><![CDATA[<p>By Joel Spolsky, <a href="http://www.joelonsoftware.com/articles/FieldGuidetoDevelopers.html">originally appearing</a> on his blog, <a href="http://www.joelonsoftware.com/">Joel on Software</a></p>

<p>Most programmers aren’t just looking for a gig to pay the rent. They don’t want a “day job”: they want to feel like their work has meaning. They want to identify with their company. Young programmers, especially, are attracted to ideological companies. A lot of companies have some connection to open source or the free software movement (these are not the same thing), and that can be attractive to idealistic developers. Other companies line up with social causes, or produce a product which, in some way, can be perceived or framed as benefitting society.</p>

<p>As a recruiter, your job is to identify the idealistic aspects of your company, and make sure candidates are aware of them.</p>

<p>Some companies even strive to create their own ideological movements. Chicago-area firm <a href="http://www.37signals.com/">37signals</a> has strongly aligned themselves with the idea of simplicity: simple, easy to use apps like Backpack and the simple, easy to use programming framework Ruby on Rails.</p>

<p>For 37signals, simplicity is an “-ism”, practically an international political movement. Simplicity is not just simplicity, oh no, it’s summertime, it’s beautiful music and peace and justice and happiness and pretty girls with flowers in their hair. David Heinemeier Hansson, the creator of Rails, <a href="http://www.loudthinking.com/arc/000594.html">says</a> that their story is “one of beauty, happiness, and motivation. Taking pride and pleasure in your work and in your tools. That story simply isn’t a fad, it’s a trend. A story that allows for words like passion and enthusiasm to be part of the sanctioned vocabulary of developers without the need to make excuses for yourself. Or feel embarrassed about really liking what you do.” Elevating a web programming framework to a thing of “beauty, happiness, and motivation” may seem like hubris, but it’s very appealing and sure differentiates their company. In propagating the narrative of Ruby on Rails as Happiness, they’re practically guaranteeing that at least some developers out there will be looking for Ruby on Rails jobs.</p>

<p>But 37signals is still new at this identity management campaign thing. They don’t hold a <em>candle</em> to Apple Computer, which, with a single Superbowl ad in 1984, managed to cement their position <em>to this day</em> as the countercultural force of freedom against dictatorship, of liberty against oppression, of colors against black and white, of pretty women in bright red shorts against brainwashed men in suits. The implications of this, I’m afraid, are ironically Orwellian: giant corporations manipulating their public image in a way which doesn’t even make sense (like, uh, they’re a computer company—what the hell does that have to do with being against dictatorships?) and successfully creating a culture of identity that has computer shoppers around the world feeling like they’re not just buying a computer, they’re <em>buying into a movement.</em> When you buy an iPod, of course, you’re supporting Gandhi against British Colonialism. Every MacBook bought takes a stand against dictatorship and hunger!</p>

<p>Anyway. Deep breath… The real point of this section is to think of what your company stands for, how it’s perceived, and how it could be perceived. Managing your corporate brand is just as important for recruiting as it is for marketing.</p>
]]></content:encoded>
			<wfw:commentRss>http://getsthingsdone.com/2011/01/06/a-field-guide-to-developers-can-i-identify-with-the-company/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>No Matter What They Tell You, It’s a People Problem</title>
		<link>http://getsthingsdone.com/2011/01/06/no-matter-what-they-tell-you-it%e2%80%99s-a-people-problem/</link>
		<comments>http://getsthingsdone.com/2011/01/06/no-matter-what-they-tell-you-it%e2%80%99s-a-people-problem/#comments</comments>
		<pubDate>Thu, 06 Jan 2011 16:16:32 +0000</pubDate>
		<dc:creator>jeffatwood</dc:creator>
				<category><![CDATA[Engagement]]></category>
		<category><![CDATA[Development Team]]></category>
		<category><![CDATA[engagement]]></category>

		<guid isPermaLink="false">http://getsthingsdone.com/?p=106</guid>
		<description><![CDATA[It may sound trivial to focus on the people you work with over more tangible things like, say, the actual work, or the particular technology you're using to do that work. But it isn't. The people you choose to work with are the most accurate predictor of job satisfaction I've ever found. And job satisfaction, based on my work experience to date, correlates perfectly with success. I have never seen a happy, healthy, gelled, socially functional software development team fail. It's a shame such teams are so rare.]]></description>
				<content:encoded><![CDATA[<p>By Jeff Atwood, <a href="http://www.codinghorror.com/blog/2008/01/no-matter-what-they-tell-you-its-a-people-problem.html" target="_blank">originally appearing</a> on his blog, <a href="http://www.codinghorror.com/" target="_blank">Coding Horror</a></p>

<p>Let&#8217;s say I was tasked with determining <a href="http://www.codinghorror.com/blog/archives/000917.html" target="_blank">whether your software project will fail</a>. With the responses to these three questions in hand, I can tell you with almost utter certainty whether your project will fail:</p>

<ol>
    <li>How many <a href="http://www.codinghorror.com/blog/archives/000637.html" target="_blank">lines of code</a> will your team write?</li>
    <li>What <a href="http://www.joelonsoftware.com/articles/FiveWorlds.html" target="_blank">kind of software</a> are you building?</li>
    <li><em>Do you like your coworkers?</em></li>
</ol>

<p>That last question isn&#8217;t a joke. I&#8217;m not kidding. Do you like the company of your teammates on a personal level? Do you respect your teammates professionally? If you were starting at another company, would you invite your coworkers along? Do you have spirited team discussions or knock-down, drag-out, last man standing filibuster team arguments? Are there any people on your team you&#8217;d &#8220;vote off the island&#8221; if you could?</p>

<p>Gerald Weinberg, prolific writer of programming books, said it best, &#8220;No matter what the problem is, it&#8217;s always a people problem.&#8221;</p>

<p>Bruce Eckel, blogger and C++ and Java expert, detailed Weinberg’s theory further in an <a href="http://www.artima.com/weblogs/viewpost.jsp?thread=221622" target="_blank">inspiring commencement speech</a> to college graduates, “Usually the things that make or break a project are process and people issues. The way that you work on a day-to-day basis. Who your architects are, who your managers are, and who you are working with on the programming team. How you communicate, and most importantly how you solve process and people problems when they come up.”</p>

<p>It may sound trivial to focus on the people you work with over more tangible things like, say, the actual work, or the particular technology you&#8217;re using to do that work. But it isn&#8217;t. <em>The people you choose to work with are the most accurate predictor of job satisfaction I&#8217;ve ever found.</em> And job satisfaction, based on my work experience to date, correlates perfectly with success. I have <em>never</em> seen a happy, healthy, gelled, socially functional software development team fail. It&#8217;s a shame such teams are so rare.</p>

<p>As Weinberg said, <em>it&#8217;s always a people problem</em>. If you aren&#8217;t working with people you like, people you respect, people that challenge and inspire you&#8211; then why not? What&#8217;s stopping you?</p>
]]></content:encoded>
			<wfw:commentRss>http://getsthingsdone.com/2011/01/06/no-matter-what-they-tell-you-it%e2%80%99s-a-people-problem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why Can’t Programmers Program?</title>
		<link>http://getsthingsdone.com/2010/12/29/why-can%e2%80%99t-programmers-program/</link>
		<comments>http://getsthingsdone.com/2010/12/29/why-can%e2%80%99t-programmers-program/#comments</comments>
		<pubDate>Wed, 29 Dec 2010 20:07:59 +0000</pubDate>
		<dc:creator>jeffatwood</dc:creator>
				<category><![CDATA[Recruiting]]></category>

		<guid isPermaLink="false">http://getsthingsdone.com/?p=94</guid>
		<description><![CDATA[A degree in computer science or computer engineering doesn’t pre-qualify someone for a programming job.  In fact, many graduate students and college grads interviewed for a programming job or architect job cannot write simple code.  When choosing applicants to interview, you need to look beyond the written resume and job experience.  Do they have: a Stack Overflow account, Blog, Twitter? Have they created their own software or website? Software Development is more of a passion than a profession; keep that in mind when choosing to interview.  You may be surprised to find out that English major / Music minor is your next rockstar software developer.]]></description>
				<content:encoded><![CDATA[<p>by Jeff Atwood, <a href="http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html" target="_blank">originally appearing</a> on his blog, <a href="http://www.codinghorror.com/blog/" target="_blank">Coding Horror</a>.</p>

<p>I was incredulous when I read <a href="http://weblog.raganwald.com/2007/01/dont-overthink-fizzbuzz.html">this observation from Reginald Braithwaite</a>:</p>

<p><em>Like me, the author is having trouble with the fact that <a href="http://getsthingsdone.com/hiring-the-top-1/">199 out of 200</a></em><em> applicants for every programming job can&#8217;t write code at all. I repeat: they can&#8217;t write any code whatsoever.</em></p>

<p>The author he&#8217;s referring to is Imran, who is evidently <a href="http://tickletux.wordpress.com/2007/01/24/using-fizzbuzz-to-find-developers-who-grok-coding/">turning away lots of programmers who can&#8217;t write a simple program</a>:</p>

<p><em>After a fair bit of trial and error I&#8217;ve discovered that people who struggle to code don&#8217;t just struggle on big problems, or even smallish problems (i.e. write a implementation of a linked list). They struggle with tiny problems.</em></p>

<p><em>So I set out to develop questions that can identify this kind of developer and came up with a class of questions I call &#8220;FizzBuzz Questions&#8221; named after a game children often play (or are made to play) in schools in the UK. An example of a Fizz-Buzz question is the following:</em></p>

<p><em>Write a program that prints the numbers from 1 to 100. But for multiples of three print &#8220;Fizz&#8221; instead of the number and for the multiples of five print &#8220;Buzz&#8221;. For numbers which are multiples of both three and five print &#8220;FizzBuzz&#8221;.</em></p>

<p><em>Most good programmers should be able to write out on paper a program which does this in a under a couple of minutes. Want to know something scary? <strong>The majority of comp sci graduates can&#8217;t. I&#8217;ve also seen self-proclaimed senior programmers take more than 10-15 minutes to write a solution.</strong></em></p>

<p>Dan Kegel <a href="http://www.kegel.com/academy/getting-hired.html">had a similar experience hiring entry-level programmers</a>:</p>

<p><em>A surprisingly large fraction of applicants, even those with masters&#8217; degrees and PhDs in computer science, fail during interviews when asked to carry out basic programming tasks. For example, I&#8217;ve personally interviewed graduates who can&#8217;t answer &#8220;Write a loop that counts from 1 to 10&#8243; or &#8220;What&#8217;s the number after F in hexadecimal?&#8221; Less trivially, I&#8217;ve interviewed many candidates who can&#8217;t use recursion to solve a real problem. These are basic skills; anyone who lacks them probably hasn&#8217;t done much programming.</em></p>

<p><em>Speaking on behalf of software engineers who have to interview prospective new hires, I can safely say that we&#8217;re tired of talking to candidates who can&#8217;t program their way out of a paper bag. If you can successfully write a loop that goes from 1 to 10 in every language on your resume, can do simple arithmetic without a calculator, and can use recursion to solve a real problem, you&#8217;re already ahead of the pack!</em></p>

<p>Between Reginald, Dan, and Imran, I&#8217;m starting to get a little worried. I&#8217;m more than willing to cut freshly minted software developers slack at the beginning of their career. Everybody has to start somewhere. But <strong>I am disturbed and appalled that any so-called programmer would apply for a job without being able to write the simplest of programs.</strong> That&#8217;s a slap in the face to anyone who writes software for a living.</p>

<p>The <a href="http://getsthingsdone.com/separating-programming-sheep-from-non-programming-goats/">vast divide between those who can program and those who cannot program</a> is well known. I assumed anyone applying for a job as a programmer had already crossed this chasm. Apparently this is not a reasonable assumption to make. Apparently, FizzBuzz style screening is <em>required</em> to keep interviewers from wasting their time interviewing programmers who can&#8217;t program.</p>

<p><strong>Maybe it&#8217;s foolish to begin interviewing a programmer without looking at their code first.</strong> At Stack Overflow, we require a code sample before we even proceed to the phone interview stage. And our on-site interview includes a small coding exercise. Nothing difficult, mind you, just a basic exercise to go through the motions of building a small application in an hour or so. Although there have been one or two notable flame-outs, for the most part, this strategy has worked well for us. It lets us focus on actual software engineering in the interview without <a href="http://www.codeslate.com/2007/01/you-dont-bury-survivors.html">resorting to tedious puzzle questions</a>.</p>

<p>It&#8217;s a shame you have to do so much pre-screening to <strong>have the luxury of interviewing programmers who can actually <em>program</em></strong>, but we’ll be better off in the long run.</p>
]]></content:encoded>
			<wfw:commentRss>http://getsthingsdone.com/2010/12/29/why-can%e2%80%99t-programmers-program/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
<!-- This Quick Cache file was built for (  getsthingsdone.com/feed/ ) in 0.36954 seconds, on May 22nd, 2013 at 7:19 am UTC. -->
<!-- This Quick Cache file will automatically expire ( and be re-built automatically ) on May 22nd, 2013 at 7:24 am UTC -->