<?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>Pramatr Blog &#187; Discipline</title>
	<atom:link href="http://www.pramatr.com/blog/tag/discipline/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pramatr.com/blog</link>
	<description>A collection of articles from pramatr.com on technology, security, software and anything we find interesting</description>
	<lastBuildDate>Mon, 29 Mar 2010 19:48:11 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Hiring Staff: Level 70s Need Not Apply?</title>
		<link>http://www.pramatr.com/blog/2009/02/26/hiring-staff-level-70s-need-not-apply/</link>
		<comments>http://www.pramatr.com/blog/2009/02/26/hiring-staff-level-70s-need-not-apply/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 06:15:24 +0000</pubDate>
		<dc:creator>pramatr</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Opinion]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[Discipline]]></category>
		<category><![CDATA[Hiring]]></category>
		<category><![CDATA[Interview]]></category>
		<category><![CDATA[Team]]></category>

		<guid isPermaLink="false">http://pramatr.com/?p=547</guid>
		<description><![CDATA[After working in the technology industry for many years, I&#8217;ve had the pleasure of working with many avid gamers. Some of these are occasion players, but I&#8217;ve also worked with those that spent endless evenings and early mornings playing MMOs. The water cooler gaming banter is a regular occurrence; with discussions of last nights raid [...]]]></description>
			<content:encoded><![CDATA[<p>After working in the technology industry for many years, I&#8217;ve had the pleasure of working with many avid gamers. Some of these are occasion players, but I&#8217;ve also worked with those that spent endless evenings and early mornings playing MMOs. The water cooler gaming banter is a regular occurrence; with discussions of last nights raid and the weekend guild meeting. It was therefore quite interesting when I started to read January&#8217;s edition of the gaming magazine <a href="http://www.edge-online.com/">edge</a> which talked about hiring these same gamers.</p>
<blockquote><p><em>&#8220;He replied that employers instruct him not to send them World of Warcraft players. He said there&#8217;s a belief that WOW player can&#8217;t give 100 per cent as their focus is elsewhere, their sleeping patterns aren&#8217;t great, etc. I mentioned that some people have written about MMOG leadership as a career positive, and he shook his head.&#8221;</em></p></blockquote>
<p>After a little searching I found the original <a href="http://forums.f13.net/index.php?topic=15577.0">source</a> of this quote and the proper context in which it was delivered. Although the opinion was that of a single recruiter and was merely a brief comment in a conversation, it seems to have generated a surprising amount of publicity (nearly 90k hits on the forum alone). Much of this was no doubt due to the <a href="http://en.wikipedia.org/wiki/Telephone_game">telephone game</a> nature of how this story was reported; in some reports it was a job interview, in others a huge employeer. The story had a life of it&#8217;s own and was reported in various incarnations, some widely inaccurate from the original. It did however touch a nerve and I was forwarded the same link several times from both gamers and none gamers.</p>
<p>It wasn&#8217;t so many months ago that I was <a href="http://infotech.indiatimes.com/Personal-Tech/Computing/How-to-build-leaders-from-gaming/articleshow/msid-3046174,curpg-1.cms">reading</a> about <em>&#8220;the striking similarities between the skills required for online gaming and those required for real world leadership&#8221;.</em> Jim Spohrer, Director of Services Research IBM <a href="http://www.gameguru.in/mmo/2007/02/mmo-players-make-great-leaders-ibm-seriosity-study/">said</a>, <em>&#8220;What we&#8217;ve found is that success as a business leader may depend on skills as a gamer&#8221;.</em> Some <a href="http://www.nickyee.com/daedalus/archives/000338.php">people</a> even went as far as to say that these games should be thought of as <em>&#8220;a potential educational medium for complex social skills&#8221;.</em> Others even <a href="http://www.wired.com/wired/archive/14.04/learn.html">contemplated</a> resumes that include a line reading <em>&#8220;level 60 tauren shaman in World of Warcraft.&#8221;</em></p>
<p>I have come across many hardcore MMO gamers who poses in-game qualities that any employer would jump at, but do these really translate into real world qualities? Are guild masters really project managers or lead developers in another guise? I&#8217;ve seen guild masters that organize every part of their weekend raid but I really wouldn&#8217;t be confident of letting them run the project schedule. Virtual world skills <em>may</em> help improve real world skills but I personally haven&#8217;t seen a correlation between the two. Guild masters may make great project managers but I wouldn&#8217;t personally use this status as an indication of potential ability.</p>
<p>Since reading the quote in the edge magazine, I&#8217;ve read more negative opinions about the impact these games have on individuals. Some anecdotal observations <a href="http://www.wowinsider.com/2008/12/11/fcc-comissioner-world-of-warcraft-causes-college-dropouts/">claim</a> that playing these games is causing college drop-outs and led to people <a href="http://www.gamepolitics.com/2008/12/09/wow-trashing-some-college-students039-grades">neglecting</a> their studies. The results from a <em>small</em> poll even <a href="http://www.boards.ie/vbulletin/showthread.php?t=2055418002">showed</a> that 55% of people thought that MMO gaming affected their own school or work performance. The sample is small, but it&#8217;s still quite interesting that the very people playing the game claim it affects their own performance. Many follow up comments from the original story come to a similar conclusion; playing games makes you a less effective employee. But is that really true?</p>
<p>Balance and separation seem to be the dominating factors. Those gamers that I&#8217;ve really enjoyed working with were able to leave their gaming lifestyle at home, it&#8217;s something they do in an evening but it doesn&#8217;t take over their life. Those that really cause headaches think nothing of discussing group tactics and tech tree analysis during work, with the lunchtime forum reading quite easily turning into an afternoons reading. Morning naps are a common occurrence to make up for lost sleep when they were too busy the night before slaying the latest boss. But is this really any different to any other evening activity?</p>
<p>Everyone spends their spare time in different ways, but if that spare time activity starts affecting work on a regular basis, an employeer is completely justified to be unhappy about this. It doesn&#8217;t have to be a late night playing games, it could quite easily be a late night at the local pub or 4am coding on your own pet project. It doesn&#8217;t matter if last night you <a href="http://www.worldofwarcraft.com/info/classes/">were</a> a Death Knight, a Shaman a Warlock or just out partying, if you come to work an absolute wreck and the rest of the team have to make up for it, that&#8217;s just not on. When hiring staff, level 70s need not apply?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pramatr.com/blog/2009/02/26/hiring-staff-level-70s-need-not-apply/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Documentation: Update It Or Lose It</title>
		<link>http://www.pramatr.com/blog/2009/02/17/documentation-update-it-or-lose-it/</link>
		<comments>http://www.pramatr.com/blog/2009/02/17/documentation-update-it-or-lose-it/#comments</comments>
		<pubDate>Tue, 17 Feb 2009 06:43:31 +0000</pubDate>
		<dc:creator>pramatr</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Opinion]]></category>
		<category><![CDATA[Refactoring]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[Discipline]]></category>
		<category><![CDATA[Improvement]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Smells]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Structure]]></category>

		<guid isPermaLink="false">http://pramatr.com/?p=17</guid>
		<description><![CDATA[Over time I&#8217;m frequently restructuring and refactoring the code I work on to improve the design and simplify many of the balls of mud I find along the way. If I break some of that code my unit tests shout at me and if they don&#8217;t my continuous integration environment shouts at me when I&#8217;ve [...]]]></description>
			<content:encoded><![CDATA[<p>Over time I&#8217;m frequently <a href="http://pramatr.com/2008/09/26/yes-you-are-making-changes-but-that-doesnt-make-it-refactoring/">restructuring and refactoring</a> the code I work on to improve the design and simplify many of the <a href="http://www.laputan.org/mud/mud.html#BigBallOfMud">balls of mud</a> I find along the way. If I break some of that code my unit tests shout at me and if they don&#8217;t my <a>continuous integration</a> environment shouts at me when I&#8217;ve <a>broken</a> one of the integration tests. One area of the code that doesn&#8217;t receive the same attention however is the documentation.</p>
<p>I love a well documented API as much as the next developer. I also am fighting a constant battle to improve my JavaDoc <a href="http://java.sun.com/j2se/javadoc/writingdoccomments/">skills</a>, trying to write to the same quality that I see in many other projects. But is excellent documentation really enough? It can&#8217;t just be excellent when it&#8217;s written it needs to be constantly maintained to this same level over time.</p>
<p>It&#8217;s a pretty common occurrence that I can look at a section of code and find documentation that has nothing to do with the method it belongs to. The <a href="http://www.c2.com/cgi/wiki/wiki?IntentionRevealingNames">intention revealing name</a> sounds nothing like the documentation which describes what it&#8217;s supposed to be doing. Somewhere in the mists of time, the intention of the method and the documentation parted company; it is documentation no more it is ex-documentation. The problem here however is that there&#8217;s nothing to catch this issue. If an extra argument is added, Eclipse might display a warning telling me it&#8217;s missing from the documentation, but the actual context of the documentation can be completely wrong and I am none the wiser.</p>
<p>Although this incorrect documentation may seem fairly harmless to some, the reason it was supposed to be there in the first place is to the give the user of the API information on the method contract and the expected outcomes. If this information is completely wrong however it introduces confusion and also potential misuse of the API. After much wasted time and several grey hairs later I recently filed a couple of JIRA reports about popular open source frameworks which did exactly this. After my code just didn&#8217;t work and the unit tests failed, it took me a number of minutes to realise that the JavaDoc description of expected events just didn&#8217;t reflect what was actually going on in the code.</p>
<p>One approach to solving this problem is to include the documentation in the <a href="http://pramatr.com/2009/01/27/frequent-code-reviews-the-key-to-success/">frequent code reviews</a>. Code that doesn&#8217;t have documentation or has incorrect documentation can&#8217;t be considered complete, thus doesn&#8217;t pass the review. Developers need to make sure however, that they treat the documentation with the same respect that they give to their code and their tests. When dealing with documentation I&#8217;d much sooner see a method with no documentation than something that is completely wrong. I do want a good level of documentation in the code I work on but there is a very simple rule; update it or lose it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pramatr.com/blog/2009/02/17/documentation-update-it-or-lose-it/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Playing The Blame Game: A Better Way?</title>
		<link>http://www.pramatr.com/blog/2009/02/10/playing-the-blame-game-a-better-way/</link>
		<comments>http://www.pramatr.com/blog/2009/02/10/playing-the-blame-game-a-better-way/#comments</comments>
		<pubDate>Tue, 10 Feb 2009 06:00:17 +0000</pubDate>
		<dc:creator>pramatr</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Opinion]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[Discipline]]></category>
		<category><![CDATA[Improvement]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Team]]></category>

		<guid isPermaLink="false">http://pramatr.com/?p=638</guid>
		<description><![CDATA[Success! We&#8217;ve just released a new version of our software, this calls for a celebration. All the team march down to the local bar for a well earned beer or an orange juice for the designated driver. But what&#8217;s that annoying noise in my jacket pocket, my mobile phone&#8217;s ringing and it&#8217;s the boss. Some [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.sxc.hu/photo/867352"><img class="alignleft size-full wp-image-650" title="family-game" src="http://pramatr.files.wordpress.com/2009/02/family-game.jpg" alt="family-game" width="300" height="200" /></a>Success! We&#8217;ve just released a new version of our software, this calls for a celebration. All the team march down to the local bar for a well earned beer or an orange juice for the designated driver. But what&#8217;s that annoying noise in my jacket pocket, my mobile phone&#8217;s ringing and it&#8217;s the boss. Some customers have just upgraded and now they are reporting serious problems with their systems, looks like we better get ready to play the blame game.</p>
<p>For those people who have never played the blame game before, we need to set out the rules. The rules are actually quite simple, if in doubt seek the advice of a seasoned player. The first rule of the blame game is, <em>it&#8217;s never your fault</em>. The second rule of the blame game is, <em>it&#8217;s <strong>never</strong> your fault</em>. The third rule of the blame game is, <em>it&#8217;s <strong>always</strong> some one else&#8217;s fault</em>. So now we&#8217;ve established the rules, we need to work out some tactics to work out whose fault it actually is.</p>
<p>The first candidate for blame <strong>always</strong> has to be the last person to leave the company. Anything that&#8217;s wrong can easily be blamed on them, after all they can&#8217;t defend themselves so they make an ideal target. The next candidate can be chosen from any of the temporary staff you currently employ, the shorter the contract the better. If you aren&#8217;t going to have to see these people for much longer, this should work out quite nicely. The next candidate is anyone that&#8217;s working for the company in another location (if it&#8217;s another country this works even better). You might have to work with these people again, but you&#8217;re probably not going to see them on a daily basis, it shouldn&#8217;t be too awkward. Now this is where your choices start to become a little tricky, you&#8217;re down to the people that you work with everyday.</p>
<p>You have to keep this simple and align yourselves with the strongest members of the team, after all this is survival of the fittest. Fit yourself nicely into the crowd and look for anyone that doesn&#8217;t quite fit, this is real back to basics school ground behaviour. Pick off the weak and vulnerable first as these shouldn&#8217;t put up much of a resistance, then work your way up the power hierarchy until you find your <a href="http://www.thefreedictionary.com/patsy">patsy</a>. So there you have it, those are the basic tactics for the blame game you might have to tweak as appropriate within your organisation but the general approach should apply.</p>
<p>The most important decision you face when presented with the blame game is do you <strong>really</strong> want to play? If you decide that it&#8217;s really not for you, the best way to deal with it is to simply throw out all of the rules, rip the board in half, stamp your feet as hard as you can and shout out loud, <em>&#8220;I refuse to play&#8221;</em>. It is often said that; <em>&#8220;we work in a blame free culture, until something goes wrong&#8221;</em>. Are you really interested in finding someone to blame when something goes wrong? Will it really help the customer solve their problem any sooner if you&#8217;ve found the person to carry the can for the failure? In the time it takes to sit there and rack your brains for potential candidates to take the blame, you could already be investigating the cause of the problems and attempting to fix them. In his recent <a href="http://www.artima.com/weblogs/viewpost.jsp?thread=246513">post</a> Sean Landis said;</p>
<blockquote><p><em>Successful Agile development presupposes that team members will all act like adults. That&#8217;s a euphemism for being competent and professional. Agile teams are expected to accept a high level of responsibility and accountability. When they don&#8217;t, things can fall apart really fast.</em></p></blockquote>
<p>Regardless of how bullet proof a process claims to be, there are always going to be issues that weren&#8217;t found prior to the release. If issues are always going to occur, should teams really be allowed to turn on each other in response to them, will this really lead to a better working relationship? The most important thing is that problems are dealt with promptly and professionally when they arise. Instead of trying to assign blame, people should be responsible for their own actions, they need to learn from the experience and measures should be put in place (if possible) to prevent this happening again. Next time your team is out celebrating your latest release and your mobile phone starts to ring, do you really want to start playing the blame game?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pramatr.com/blog/2009/02/10/playing-the-blame-game-a-better-way/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Rubik&#039;s Approach</title>
		<link>http://www.pramatr.com/blog/2009/01/29/the-rubiks-approach/</link>
		<comments>http://www.pramatr.com/blog/2009/01/29/the-rubiks-approach/#comments</comments>
		<pubDate>Thu, 29 Jan 2009 06:25:00 +0000</pubDate>
		<dc:creator>pramatr</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Opinion]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[Discipline]]></category>
		<category><![CDATA[Hiring]]></category>
		<category><![CDATA[Interview]]></category>
		<category><![CDATA[Team]]></category>

		<guid isPermaLink="false">http://pramatr.com/?p=222</guid>
		<description><![CDATA[Hiring new staff can be a long and drawn out process, at the end of which you hope you&#8217;ve found the right candidate. Vetting resumes, collating a list of potential candidates, telephone screening and then eventually bringing them in for an interview&#8230;&#8230;.. so what&#8217;s the plan? This is the most important decision you&#8217;re going to [...]]]></description>
			<content:encoded><![CDATA[<p>Hiring new staff can be a long and drawn out process, at the end of which you hope you&#8217;ve found the right candidate. Vetting resumes, collating a list of potential candidates, telephone screening and then eventually bringing them in for an interview&#8230;&#8230;.. so what&#8217;s the plan? This is the most important decision you&#8217;re going to make about your interview process; do you give them the list of technical questions, some example code or should you include the the rubik&#8217;s approach?</p>
<p><strong>The List of Technical Questions</strong></p>
<p>The candidate is presented with a list of technical questions that start with basic questions and slowly move towards more difficult ones. These could be about language specifics, API&#8217;s they claim to know or anything technical that is related to their potential position. Anyone with a basic knowledge of development principles stands a good chance of getting a reasonable score with the basic questions. Most people can memorise answers to the general technical questions, but does that really give you an insight into their ability?</p>
<p><strong>The Example Code Test</strong></p>
<p>The candidate is asked to write some general purpose code or possibly something resembling code they might be expected to work on. Anything general should be quite straight forward for the candidate, but anything that expects them to write code to specific API&#8217;s could produce undesirable results. If the candidate has claimed to have a good working knowledge of an API they have no excuse, but if they didn&#8217;t use the API yesterday, last month or ever, should that really sway your hiring decision? Is this candidate really better or worse than the one before?</p>
<p><strong>A Different Way?</strong></p>
<p>Joel Spolsky keeps his <a href="http://www.joelonsoftware.com/articles/GuerrillaInterviewing3.html">criteria</a> for hiring staff quite simple; <em>smart, and gets things done</em>. If we approach hiring with such simple criteria; development is about solving problems and a good developer needs to excel at this regardless of their chosen language. They need a natural aptitude to understand a problem, break it down and arrive at a a solution. Presenting a candidate with technical questions or example code rarely tests those natural problem solving abilities in any great deal.</p>
<p><strong>Rubik&#8217;s Research</strong></p>
<p>A recent batch of company branded merchandise contained a single <a href="http://en.wikipedia.org/wiki/Rubik's_cube">rubik&#8217;s cube</a>. Over the course of a couple of months, the rubik&#8217;s cube was passed around the office, each member of the team having differing degrees of success. One team member was a rubik&#8217;s cube wizard, spinning and flicking the squares around to complete the puzzle in what seemed like seconds. This team member also happens to be exceptional at their job and has amazing problem solving skills. This team member is not a developer, but I have no doubt that if they decided to turn their hand to it, they would be an exceptionally productive one.</p>
<p>Some of the other team members just couldn&#8217;t break the problem down and struggled to find the patterns that advanced the puzzle. Even after training from the rubik&#8217;s cube wizard and written instructions on how to solve the puzzle, some team members still couldn&#8217;t progress from the jumbled mess. Some of these individuals could be classified as average (not exceptional, but not bad) developers and this puzzle really seemed to highlight the distinction.</p>
<p>The rubik&#8217;s cube is only one example of a problem solving challenge (some would argue one of the hardest), but even when supplied with the answers it still provides a good challenge. Fan&#8217;s of the classic game show <a href="http://en.wikipedia.org/wiki/The_Krypton_Factor">Krypton Factor</a> might already have an idea of the kind of challenges a candidate could undertake; from the impossible to the absurd. The idea here is simply that by augmenting a normal interview with a puzzle element, it may add some insight into the candidates puzzle solving approach.</p>
<p><strong>Conclusion</strong></p>
<p>The difference between average, good and excellent developers can often be traced back to their aptitude to solve basic problems. If team members are given the solution to problems but still can&#8217;t progress further, does this give us an insight into their general analytical approach? Problem solving skills can be taught to some degree, but does the rest just come naturally, is there only so much you can teach? Typical interviews often only touch on this ability and don&#8217;t look at it from a pure approach.</p>
<p>Puzzles like the rubik&#8217;s cube are a great way to test an individuals problem solving abilities, potentially putting them on a level playing field. These kind of puzzles force individuals to look for patterns, understand the process and apply it; after all isn&#8217;t that what development is all about? Next time you have a candidate in for an interview, should you include the the rubik&#8217;s approach?</p>
<p><strong>Note:</strong> I have tried to find <a href="http://jwilson.coe.uga.edu/emt725/PSsyn/Pssyn.html">more</a> information on this subject but as yet I&#8217;ve found very little real research. I&#8217;d be interested to hear about the links between problem solving and programming ability.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pramatr.com/blog/2009/01/29/the-rubiks-approach/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Frequent Code Reviews The Key To Success?</title>
		<link>http://www.pramatr.com/blog/2009/01/27/frequent-code-reviews-the-key-to-success/</link>
		<comments>http://www.pramatr.com/blog/2009/01/27/frequent-code-reviews-the-key-to-success/#comments</comments>
		<pubDate>Tue, 27 Jan 2009 06:35:24 +0000</pubDate>
		<dc:creator>pramatr</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Opinion]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[Discipline]]></category>
		<category><![CDATA[Improvement]]></category>
		<category><![CDATA[Refactoring]]></category>
		<category><![CDATA[Smells]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Structure]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://pramatr.com/?p=218</guid>
		<description><![CDATA[Reviews are a widely used technique to analyse code for the presence of defects and potential improvements. Many successful teams continually review code to try to ensure a high level of quality and to constantly improve a developers ability to write good code. The arguments for and against code reviews have been made on many [...]]]></description>
			<content:encoded><![CDATA[<p>Reviews are a widely used technique to analyse code for the presence of defects and potential improvements. Many successful teams continually review code to try to ensure a high level of quality and to constantly improve a developers ability to write good code. The arguments for and against code reviews have been made on many <a href="http://www.codinghorror.com/blog/archives/000495.html">occasions</a>, but one common unknown factor for many teams is the frequency at which they should take place.</p>
<p><strong>Infrequent Reviews</strong></p>
<p>Many teams operate on a feature complete code review. At the end of the cycle of work, several developers sit down together with the author critiquing the delivered work. What often transpires here is that due to the huge mass of code delivered, the chances of a thorough review are rendered utterly <a href="http://www.osnews.com/story/19266/WTFs_m">impossible</a>. The plethora of code makes it difficult to find a starting point and thus potentially problematic code <a href="http://www.developerdotstar.com/community/node/5">isn&#8217;t</a> allocated the time it necessarily deserves. Any potential recommendations that come out of this kind of code may never see the light of day given the pressing work schedule (if the code was complete why are the changes necessary?). Most importantly for the team, reviewing code so infrequently can lead to demoralisation of its members.</p>
<p>Code reviews may pick apart the authors code; code that they have potentially sweat and cried over (ok maybe not) and worked hard to complete. Does it really make sense to save up all the potential criticism and deliver it in one skull crushing blow? Even if the criticism is perfectly valid, nobody likes to feel good about something only for it to be completely torn apart. Developers complain when customers only let them know what they actually want when they see what they don&#8217;t, is the same really acceptable for the code? If infrequent code reviews aren&#8217;t the answer, how often can code be successfully reviewed?</p>
<p><strong>Email Reviews</strong></p>
<p>Some teams never let the author of the code commit it to the repository. Instead, they email the code (typically in patch form) to the code owner or one of the principal reviewers. The idea behind this approach is the patches are always reviewed prior to them being committed, and the developers can work productively only focusing on the task in hand. This process has the ability to ensure that every change is scrutinised and verified to maintain the high quality standards that are set down. Having had to work with a system like this in the past, I can honestly say that it was fraught with problems and was one of the most frustrating I&#8217;ve ever worked with (I was one of the principal reviewers).</p>
<p>The person applying the patch quickly becomes a bottleneck in the process, how long can people really wait for the patch to be applied? What should the patch reviewer actually do with the patch, make the recommendations themselves or send an email back to the original author to apply the required changes. If multiple people are working on the code base, the chances of conflicts increase. If the patches are applied in the wrong order or peoples timing is just plain unlucky, the person applying the patch has a multitude of problems to deal with. The version control system is full of only one persons name, thus making it incredibly difficult to track down the original owner of the change. Lastly should the worst happen and the build fail&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.. guess who&#8217;s change it was that broke it?</p>
<p><strong>Frequent Reviews</strong></p>
<p>People like to know what and how they are doing with their work. If infrequent code reviews lead to a big bang delivery approach, then frequent code reviews take the inverse approach of small nudges in the right direction. By applying these frequent reviews, developers can deal with smaller suggestions and recommendations early in their development. Instead of developers feeling they have completed something only to be told it&#8217;s all wrong, they can be guided along the process to ensure they arrive at a right answer. The most difficult question here is; how frequent is frequent? This is a very developer specific metric.</p>
<p>Some developers require frequent attention and when I say frequent I mean every few hours (or more!). As developers become more experienced, this frequency typically reduces until the reviewed eventually becomes the reviewer. Depending on the type of project however, it&#8217;s still quite common for very experienced developers to like frequent code reviews. If frequent reviews become very frequent reviews, you might have unwittingly found yourself participating in quasi pair programming.</p>
<p><strong>Pair Programming</strong></p>
<p><a href="http://www.extremeprogramming.org/rules/pair.html">Pair programming</a> is not only a great way to develop but also to implicitly review code. A second developer sitting at the keyboard provides instantaneous reviewing of code. The second developer not only reviews the code, but also looks for potential problems and improvements to the evolving code. The second developer isn&#8217;t always necessarily the reviewer, and roles can switch between either developer during the exercise.</p>
<p>Having someone take over the keyboard encourages the development to be of higher quality and a second set of eyes prompts the coders to produce good code (obviously given a good pairing of developers). This instant review and feedback can actually reduce the number of bugs introduced into the system. As several developers produced the code, it also means that the team is never reliant on a single developer to address a given area of code. Pair programming is an excellent way of developing an reviewing code, but it&#8217;s not without it&#8217;s <a href="http://www.theregister.co.uk/2007/01/31/perils_pair_programming/">problems</a> with some people finding the feedback is just too often.</p>
<p><strong>Summary</strong></p>
<p>By reducing the time between code reviews, teams can provide better guidance about the eventual quality of code and prevent storing up potential problems. The less frequent the code reviews are the more problems (especially with less experienced staff) that occur. Developers want to feel like that are doing a good job and as such then need small bits of constructive criticism often instead of lots of criticism delivered all at once. Reviewing code is best addressed frequently, providing quicker feedback, and reducing the amount of rework involved. As a developers ability increases, these issues typically subside and they become active in reviewing other peoples code.</p>
<p>If infrequent code reviews are problematic, are frequent code reviews the key to success?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pramatr.com/blog/2009/01/27/frequent-code-reviews-the-key-to-success/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
