{"id":1830,"date":"2010-10-23T14:49:34","date_gmt":"2010-10-23T19:49:34","guid":{"rendered":"http:\/\/mikeconley.ca\/blog\/?p=1830"},"modified":"2023-12-20T16:25:15","modified_gmt":"2023-12-20T21:25:15","slug":"recognizing-good-code-review","status":"publish","type":"post","link":"https:\/\/mikeconley.ca\/blog\/2010\/10\/23\/recognizing-good-code-review\/","title":{"rendered":"Recognizing Good Code Review"},"content":{"rendered":"<p>While the benefits of code review are <a href=\"http:\/\/www.mfagan.com\/ibmfagan.pdf\">proven<\/a>, <a href=\"http:\/\/smartbear.com\/docs\/BestPracticesForPeerCodeReview.pdf\">documented<\/a>, <a href=\"http:\/\/smartbear.com\/codecollab-code-review-book.php\">numerous<\/a> and <a href=\"http:\/\/www.reviewboard.org\">awesome<\/a>, it doesn&#8217;t change the fact that most people, in general, don&#8217;t like doing it.<\/p>\n<p>I guess code review just isn&#8217;t really all that fun.<\/p>\n<p>So a few months ago, <a href=\"http:\/\/mikeconley.ca\/blog\/2010\/03\/09\/turning-peer-code-review-into-a-game\/\">I broadcast the idea of turning code review into a game.<\/a> It was my way of trying to mix things up &#8211; &#8220;let&#8217;s add points, and have reviewers\/developers competing to be the best participant in the code review process&#8221;.<\/p>\n<p>Well, if there&#8217;s one thing that <a href=\"http:\/\/www.third-bit.com\">my supervisor Greg<\/a> has taught me, it&#8217;s how I shouldn&#8217;t rush headlong into something before all of the facts are in. \u00a0So before I decide to do something like game-ifize code review, I should take a look at some prior work in the area&#8230;<\/p>\n<p>Enter this guy: \u00a0<a href=\"http:\/\/cargocollective.com\/codingconduct\">Sebastian Deterding<\/a>.<\/p>\n<p>In particular, check out the following slide-show. \u00a0Flip through it if you have the time. \u00a0If you don&#8217;t have the time, scroll down, where I get to the salient point with respect to game-ificating code review.<\/p>\n<p><a href=\"http:\/\/www.slideshare.net\/dings\/pawned-gamification-and-its-discontents\">Here&#8217;s the slide-show.<\/a> Be sure to read the narrative at the bottom.<\/p>\n<h3>The Salient Point<\/h3>\n<p>Sebastian seems to be saying that adding points to apps and trying to incite competition does not make something a game. \u00a0If it did, <a href=\"http:\/\/progresswars.com\/\">then this should be countless hours of fun<\/a>.<\/p>\n<p>Without play, there is no game.  Points do not equal a game. \u00a0It&#8217;s not nearly that simple.<\/p>\n<h3>Free Pizza and Pop<\/h3>\n<p>I&#8217;m going to divert for a second here.<\/p>\n<p>Last week, a company set themselves up a couple of booths in the lobby of the Bahen Center where I work. \u00a0They were there to recruit university students to work for their company &#8211; either as interns, or full-timers.<\/p>\n<p>They were also handing out free pizza and pop.<\/p>\n<p>Needless to say, I wanted a few slices &#8211; but I figured it would be polite if I engaged them in conversation before waltzing off with some of the free food and drink they&#8217;d brought.<\/p>\n<p>So I sparked up a conversation with one of the recruiters, and he told me about the company. \u00a0I&#8217;m going to call this recruiter Vlad.<\/p>\n<p>I ended up gently steering the conversation towards code review, and I asked my inevitable question:<\/p>\n<blockquote><p>&#8220;So, do you guys do code review?&#8221;<\/p><\/blockquote>\n<p>I felt like a dentist asking a patient if he&#8217;s been flossing. \u00a0Vlad waffled a bit, but the general impression was:<\/p>\n<blockquote><p>&#8220;Not as much as we should. \u00a0We don&#8217;t have a prescribed workflow. It&#8217;d be hard to persuade all of the teams to do it.&#8221;<\/p><\/blockquote>\n<p>And then we started talking about code review in general. \u00a0It turns out that Vlad had worked in a few companies where they&#8217;d done code review, and he always felt a little short changed. \u00a0He said something along the lines of:<\/p>\n<blockquote><p>&#8220;I never felt compelled to do reviews. \u00a0They just sort of happened&#8230;and I did it, and it felt like&#8230;unrecognized effort. \u00a0I mean, what&#8217;s the incentive? \u00a0Do you know what I mean? \u00a0There&#8217;s incentive for the software, but I&#8217;m talking incentive for <em>me<\/em>. \u00a0And some people did really lousy reviews&#8230;but my reviews were treated the same as theirs. \u00a0I didn&#8217;t get recognized, and didn&#8217;t get rewarded if I did a good review. \u00a0So it was hard for me to do them. \u00a0I want to be recognized for my good reviews, for my good contributions.&#8221;<\/p><\/blockquote>\n<p>I wish I&#8217;d had a tape-recorder running so I could have gotten Vlad&#8217;s exact words. \u00a0But that&#8217;s what I remember him saying.<\/p>\n<h3>Feedback and Recognition<\/h3>\n<p>Maybe instead of trying to game-ulize code review, I can instead hear what Vlad is saying and work off of that.<\/p>\n<p>With the code review that Vlad participated in, <strong>all of the feedback went to the code author, and none went to the reviewers<\/strong>. \u00a0And the reviewers are the ones who are doing all of the heavy lifting! \u00a0As a reviewer, Vlad also wants feedback, and recognition for code review done well.<\/p>\n<p>There&#8217;s a company in Toronto that specializes in feedback like this. \u00a0They&#8217;re one of the major players in the Toronto start-up scene, and have built a pretty sweet suite of tools to facilitate quick and easy feedback\/recognition.<\/p>\n<p>The company is called <a href=\"http:\/\/www.rypple.com\">Rypple<\/a>. \u00a0And maybe that&#8217;s the name of the application, too. \u00a0(checks website) Yeah, it&#8217;s both.<\/p>\n<p>So Rypple has this feature called Kudos that let&#8217;s people publicly\u00a0acknowledge the good work of their team.<\/p>\n<p>Normally, I don&#8217;t pimp companies. \u00a0And it upsets me when people comment on my blog, and their sub-text is to try to sell their product or service. \u00a0However, I think this video is\u00a0relevant, so I&#8217;m posting their demo video so you can see how Kudos work:<\/p>\n<p><a href=\"http:\/\/vimeo.com\/11811215\">Click here if you can&#8217;t see the video.<\/a><\/p>\n<p><object classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" width=\"400\" height=\"300\" codebase=\"http:\/\/download.macromedia.com\/pub\/shockwave\/cabs\/flash\/swflash.cab#version=6,0,40,0\"><param name=\"allowfullscreen\" value=\"true\" \/><param name=\"allowscriptaccess\" value=\"always\" \/><param name=\"src\" value=\"http:\/\/vimeo.com\/moogaloop.swf?clip_id=11811215&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0\" \/><\/object><\/p>\n<h3>The Idea<\/h3>\n<p>So Rypple&#8217;s idea is to have a feed that the team subscribes to, and publicly display things like Kudos. \u00a0The badges for the Kudos are also limited in how many you can give per week, so they&#8217;re a valuable commodity that can&#8217;t just be handed out all over the place. \u00a0Cool idea.<\/p>\n<p>So there&#8217;s one approach &#8211; use a service like Rypple to give your reviewers better feedback and recognition.<\/p>\n<p>Or maybe we could build an extension for <a href=\"http:\/\/www.reviewboard.org\">Review Board<\/a> that does something similar, and more oriented around code review.<\/p>\n<p>It&#8217;s not oriented like a game, like I had originally envisioned. \u00a0But somehow, I think this idea has more meaning and traction than just &#8220;adding points&#8221;.<\/p>\n<p>More on this idea in a few days. \u00a0But please, comment if you have any thoughts or ideas to add.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>While the benefits of code review are proven, documented, numerous and awesome, it doesn&#8217;t change the fact that most people, in general, don&#8217;t like doing it. I guess code review just isn&#8217;t really all that fun. So a few months ago, I broadcast the idea of turning code review into a game. It was my [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[454,657,649],"tags":[854,501,856,855,859,857,1219,504,122,858],"class_list":["post-1830","post","type-post","status-publish","format-standard","hentry","category-code-reviews","category-extensions-review-board-code-reviews-computer-science-technology","category-review-board","tag-code-inspection","tag-code-review","tag-good-code-review","tag-how-to-review-code","tag-incentive","tag-recognition","tag-review-board","tag-reviewboard","tag-team","tag-value"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/prmTy-tw","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/posts\/1830","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/comments?post=1830"}],"version-history":[{"count":33,"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/posts\/1830\/revisions"}],"predecessor-version":[{"id":3151,"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/posts\/1830\/revisions\/3151"}],"wp:attachment":[{"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/media?parent=1830"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/categories?post=1830"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/tags?post=1830"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}