tag:blogger.com,1999:blog-86970493643832204812018-03-19T21:07:39.991+02:00Tales of Agile Software DevelopmentTrying to resolve the Software Development dilemmas!Amr Noamanhttp://www.blogger.com/profile/17439075869608575763noreply@blogger.comBlogger68125tag:blogger.com,1999:blog-8697049364383220481.post-4718698116010217122017-09-13T11:19:00.000+02:002017-09-13T11:24:24.849+02:00Write a Book Exactly as If You're Developing Code<div dir="ltr" style="text-align: left;" trbidi="on"><div style="margin-bottom: 1em;"><span style="background-color: white;"><span style="color: #1d2129;"><span style="font-size: 14px; letter-spacing: -0.12px;">A book is a product and writing books is exactly the same as developing a product. I'm using XP and Agile technical practices and techniques to write my first book&nbsp;</span></span></span><img alt="" class="img" height="16" role="presentation" src="https://www.facebook.com/images/emoji.php/v9/feb/2/16/1f642.png" style="background-color: white; border: 0px; color: #1d2129; font-size: 14px; letter-spacing: -0.12px; vertical-align: -3px;" width="16" /><span style="background-color: white;"><span style="color: #1d2129;"><span style="font-size: 14px; letter-spacing: -0.12px;">.&nbsp;</span></span></span><span style="background-color: white; color: #1d2129; font-size: 14px; letter-spacing: -0.12px;">Guess what? It works perfectly!</span><br /><span style="background-color: white;"><span style="color: #1d2129;"><span style="font-size: 14px; letter-spacing: -0.12px;"><br /></span></span></span><span style="background-color: white;"><span style="color: #1d2129;"><span style="font-size: 14px; letter-spacing: -0.12px;">The story started sometime ago when I heard about </span></span></span><a href="http://www.leanpub.com/" style="background-color: white; color: #1d2129; font-size: 14px; letter-spacing: -0.12px;" target="_blank">LeanPub</a><span style="background-color: white; color: #1d2129; font-size: 14px; letter-spacing: -0.12px;">. It was cool and I thought I'll use it once. Now,&nbsp;</span><span class="text_exposed_show" style="background-color: white; color: #1d2129; display: inline; font-family: inherit; font-size: 14px; letter-spacing: -0.12px;">I'm actively writing, or rather developing my first book: <a href="http://leanpub.com/RefactoringToCleanCode" target="_blank">Refactoring to Clean Code</a>:</span></div><div class="separator" style="clear: both; text-align: center;"><a href="http://leanpub.com/RefactoringToCleanCode" target="_blank"><img border="0" data-original-height="960" data-original-width="720" height="320" src="https://2.bp.blogspot.com/-5tpi60DujyA/Wbj3r8W1kVI/AAAAAAAAA9s/wD6dOq_BqyI5IBPGHdfCHHqRS3pf25A1gCLcBGAs/s320/title_page.png" width="240" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="text_exposed_show" style="background-color: white; color: #1d2129; display: inline; font-family: &quot;SF Optimized&quot;, system-ui, -apple-system, system-ui, &quot;.SFNSText-Regular&quot;, sans-serif; font-size: 14px; letter-spacing: -0.12px;"><div style="font-family: inherit; margin-bottom: 1em;">The experience is very similar to developing a software product. Or, I can say it is exactly the same.</div><div style="font-family: inherit; margin-bottom: 1em;">I'm not gonna talk about the book topics as features which may or may not suite your target customers, and how you should frequently pivot your strategy till you reach a solution market fit. These are very obvious similarities. Rather, I'll talk about the actual development of the book, producing book chapters, which is very similar to writing code modules.</div><div style="font-family: inherit; margin-bottom: 1em;">I'm using version control, issue tracking, and full traceability (using github). I'm also using continuous deployment. Hah? yes, it is that black magic in software which enables features to be instantly deployed on production with very little overheads (for this, I use automated hooks which links githup with leanpub. Leanpub automatically generates a new version of the book upon every push from my side on github)</div><div style="font-family: inherit; margin-bottom: 1em;">Finally, I'm using a full fledged development environment (Atom) which has realtime linter to check bugs on the fly (spelling and grammar mistakes). Atom in connects directly to github. So, I develop and commit changes on the same window.</div><div style="font-family: inherit; margin-bottom: 1em;">Later on, I will prepare a test environment for my early adopters and reviewers. They will receive special editions from leanpub. They may open issues on githup, and even they may fix parts of the book and send me pull requests on github&nbsp;<span class="_47e3 _5mfr" style="font-family: inherit; line-height: 0; margin: 0px 1px; vertical-align: middle;" title="smile emoticon"><img alt="" class="img" height="16" role="presentation" src="https://www.facebook.com/images/emoji.php/v9/feb/2/16/1f642.png" style="border: 0px; vertical-align: -3px;" width="16" /><span aria-hidden="true" class="_7oe" style="display: inline-block; font-family: inherit; font-size: 0px; width: 0px;">:)</span></span></div><div style="font-family: inherit; margin-bottom: 1em;">Those who love coding, if they thought of the book as a software product, they will love writing as well&nbsp;<span class="_47e3 _5mfr" style="font-family: inherit; line-height: 0; margin: 0px 1px; vertical-align: middle;" title="smile emoticon"><img alt="" class="img" height="16" role="presentation" src="https://www.facebook.com/images/emoji.php/v9/feb/2/16/1f642.png" style="border: 0px; vertical-align: -3px;" width="16" /><span aria-hidden="true" class="_7oe" style="display: inline-block; font-family: inherit; font-size: 0px; width: 0px;">:)</span></span></div><div style="font-family: inherit; margin-bottom: 1em;"><b>Would you like to become a reviewer (or early adopter)?</b></div><div style="font-family: inherit; margin-bottom: 1em;"><span style="font-family: inherit; letter-spacing: -0.12px;">If you would like to become one of the early adopters, please let me know. Here is a link to the book with highlights about the contents:</span></div><div style="font-family: inherit; margin-bottom: 1em;"><a data-ft="{&quot;tn&quot;:&quot;-U&quot;}" data-lynx-mode="async" href="https://l.facebook.com/l.php?u=https%3A%2F%2Fleanpub.com%2FRefactoringToCleanCode&amp;h=ATOOef0UVGjHBw4fKONq_QewKlVSIcZSub0aTCXYJ9-3_gH6OqJkUggGLcBkpkjQtE8hyVWmouf-GSfvhHnBGpSzWgefObAd_Hq3cwq7tVOxEtzTBOgKCzSySY78dwMJFf8dH9bysuHV3VJcl0zpUFePVgYcAk30GDZFVHZ4-Fm5_V1p14iLs7T31QxQOUhYoQj1YTwEs9sJ1o-ILIbkm5gOdcokauhjaTbUm3mH4Y_5ZCspkxSl4i6PfWxodZeYeh_RNegSXE_KC9iHEXsWv6L8aEmidaaUDdL2bnGgqnHTnjI" rel="noopener" style="color: #365899; cursor: pointer; font-family: inherit; text-decoration-line: none;" target="_blank">https://leanpub.com/RefactoringToCleanCode</a></div></div></div>Amr Noamanhttp://www.blogger.com/profile/17439075869608575763noreply@blogger.com0tag:blogger.com,1999:blog-8697049364383220481.post-80707526029379304222017-09-12T22:43:00.002+02:002017-09-12T22:43:52.627+02:00Guidelines for Reviewing my Book: Refactoring to Clean Code<div dir="ltr" style="text-align: left;" trbidi="on"><br /><ul style="text-align: left;"><li>If you found a typo, change it right away and submit a pull request</li><li>If you have a better wording or phrasing, you have two choices:</li><ul><li>Submit a pull request</li><li>Open an enhancement</li></ul><li>If you open an enhancement, please link it to the section you're commenting on as such:</li><ol><li>browse the file on github</li><li>hover on the section, you'll find a small link appearing as in the following screen shot. Copy the link and paste it in the issue.&nbsp;</li></ol></ul><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-0PKcalQShdM/WbhG4WZ0chI/AAAAAAAAA9c/HkHFGzJ5XR8oLdGjSHUPL-X6eL74OhptwCLcBGAs/s1600/Monosnap%2B2017-09-12%2B22-40-51.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="522" data-original-width="1036" height="161" src="https://1.bp.blogspot.com/-0PKcalQShdM/WbhG4WZ0chI/AAAAAAAAA9c/HkHFGzJ5XR8oLdGjSHUPL-X6eL74OhptwCLcBGAs/s320/Monosnap%2B2017-09-12%2B22-40-51.png" width="320" /></a></div><div><br /></div><br /><br /></div>Amr Noamanhttp://www.blogger.com/profile/17439075869608575763noreply@blogger.com0tag:blogger.com,1999:blog-8697049364383220481.post-33424082473037331192017-06-18T14:38:00.000+02:002017-06-18T18:41:00.816+02:00Lessons Learned from Mob Programming<div dir="ltr" style="text-align: left;" trbidi="on">Recently, I had enough time to experiment with mob programming, a revolutionary technique for developing software. It's like pair programming with 6-7 team members in stead of 2! Seems ridiculous, right? This is how extreme programming (XP) practices seam at first before they spread like wildfire!<br /><div dir="ltr" style="text-align: left;" trbidi="on"><div dir="ltr" style="text-align: left;" trbidi="on"><br />For those who didn't hear about it, please watch this video:<br /><div class="separator" style="clear: both; text-align: center;"><br /></div><div style="text-align: center;"><iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/dVqUcNKVbYg/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/dVqUcNKVbYg?feature=player_embedded" width="320"></iframe></div><div class="separator" style="clear: both; text-align: center;"><br /></div>To get a deeper dive, watch <a href="https://www.youtube.com/watch?v=5cvaCq1q9_E" target="_blank">this lecture</a> by Woody Zuill, the father of the idea.<br /><br />Currently, mob programming is spreading so fast in the world, and people are starting to realize so much value out of it. In the Agile Conference 2017 (which I'm on the reviewers list of its program), we have two sessions on mob programming, one talks about this technique used for on-boarding large number of people, and the other talks about it in teaching colledge students.<br /><br /><h3 style="text-align: left;">Working With Mob Programming Onsite</h3>Now, back to the topic. I worked with two teams to whom I introduced and used this technique. One of them in co-located, and the other is distributed. I'll introduce the setup of the onsite experiment, then will list some observations and lessons learned from both teams.<br /><br />We have restructured the room, got a projector, and started the session. Here is what we've done:<br /><ol style="text-align: left;"><li>We have dedicated an on-wall kanban board, other than the one on Jira</li><li>Started with three main tasks for the day, which are the most important ones so far</li><li>I have explained some basic rules for the game, one of which is that I'll act as the facilitator</li><li>Then we started!</li></ol><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-CkZ_2hurDPA/WUZscQ4L5ZI/AAAAAAAAA8Q/O8Ko9ums3II_lh8uZ94OpWD1b6Pr4lxTwCLcBGAs/s1600/mob_session%2Bsmall.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="319" data-original-width="900" height="225" src="https://4.bp.blogspot.com/-CkZ_2hurDPA/WUZscQ4L5ZI/AAAAAAAAA8Q/O8Ko9ums3II_lh8uZ94OpWD1b6Pr4lxTwCLcBGAs/s640/mob_session%2Bsmall.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div><h3 style="text-align: left;">Rules of the game</h3></div><div>Several basic rules are put into action:</div><div><ol style="text-align: left;"><li>We'll break every now and then, probably once every 1-2 hours</li><li>It's ok that you leave the room for any side task, not for so long though</li><li>Any emerging unplanned task will be put on the backlog. We've started with three tasks on board, and ended up with about 13!</li><li>Work is time-boxed from 10 am till 4 pm. No other "significant" work should take place outside these working hours</li></ol><div><h3 style="text-align: left;">How people felt about it:</h3><blockquote class="tr_bq"><i><span style="font-size: large;">"Some tasks would have never been carried-out without mob-programming them"&nbsp;</span></i><i><span style="font-size: large;">- one team member</span></i></blockquote>&nbsp;It's very interesting seeing how people interact and collaborate during the session. Here are some observations I noted:<br /><br /><ul style="text-align: left;"><li>Contrary to what I expected, technical leaders and development managers where happier with this technique. They felt more confident and more productive. Plus, they appreciated learning from other team members while mobbing!</li><li>Learning took place in all directions. seniors taught juniors and vice versa. Old team members taught new one and vice versa. This was amazing! One can never think of what new ideas, techniques, even inspirations he'll learn from other team members unless he start working with them hand-in-hand</li><li>Interaction and collaboration were high, definitely higher than solo-programming, probably a bit lower than pair-programming. Again, this is contrary to my expectation, which was that half of the team will take a long nap during the session :)</li></ul><br />&nbsp;Finally, here are some feedback points I got in the retrospective;<br /><br /><ul style="text-align: left;"><li>It was fun! and joyful</li><li>Some tasks would have never been carried-out without mob-programming them</li><li>We used to do the same task so many times. This way, we all do it one time!</li><li>Collaboration with the product owner is much better; we all ask him the same question, get the same answer, all at the same time</li><li>It's a better approach to reach the best solution for a problem</li><li>It's less suitable for small and easy tasks</li><li>It may be impossible to work this way if we're working under pressure</li></ul><br /><div>All-in-all, it was an excellent experience. Right now, I'm engaged with a company doing remote mobbing as a means to train new team members in a faster and more effective way. Guess what? Still the old team members learn from new ones!</div><div><br /></div></div></div></div></div></div>Amr Noamanhttp://www.blogger.com/profile/17439075869608575763noreply@blogger.com0tag:blogger.com,1999:blog-8697049364383220481.post-56273659658972720312017-03-12T14:11:00.002+02:002017-03-12T14:26:11.923+02:00Ground Rules for Refactoring Legacy Systems<div dir="ltr" style="text-align: left;" trbidi="on"><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-4xTaOcliDUY/WMU-A3aJTnI/AAAAAAAAA2A/9c0fH5yhJwMAZwkAGOUbOj--GDloNLsWQCLcB/s1600/rules.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://3.bp.blogspot.com/-4xTaOcliDUY/WMU-A3aJTnI/AAAAAAAAA2A/9c0fH5yhJwMAZwkAGOUbOj--GDloNLsWQCLcB/s200/rules.jpg" width="173" /></a></div><br />If you have a very poor code which is buggy, cluttered, ugly, scary, etc. If you have such code, &nbsp;do one of the following:<br /><ol style="text-align: left;"><li>Sunset this application</li><li>Ask your customers to stop asking for changes and fixes</li><li>Quit your job and switch to a more convenient one (other than software of course)</li></ol>If you can't do any of these, then you're stuck with refactoring this code base. This is possible and even exciting. <br /><br /><div>Here is a set of ground rules to take into consideration before you start doing that:</div><div><ol style="text-align: left;"><li>Zero "more" defects policy: That is, stop working the moment you find the <i>next</i>&nbsp;bug, and fix it immediately. The rule is adapted from the <i>Zero defects policy!</i> which is a bit overwhelming at this stage.</li><li>Any "new" code must be covered by tests. Period.</li><li>Peer review is part of our DNA (till we're able to automate parts of this review, or all of it)</li><li>The <a href="http://deviq.com/boy-scout-rule/" target="_blank">Boy-Scout Rule</a> applies to all of us.&nbsp;</li><li>Automate all donkey work, one script at a time! That is, everything we do in a systematic way, can be scripted. What we should do is to automate all this work.&nbsp;</li></ol><div>If you do that, you'll find things slightly improving at the beginning, but exponentially improving later on, insha'Allah :)</div></div></div>Amr Noamanhttp://www.blogger.com/profile/17439075869608575763noreply@blogger.com0tag:blogger.com,1999:blog-8697049364383220481.post-14728698299694723652017-03-03T18:02:00.001+02:002017-03-05T17:58:12.381+02:00How to find dead code?<div dir="ltr" style="text-align: left;" trbidi="on">Recently, I have read&nbsp;<a href="https://www.infoq.com/news/2017/02/dead-code?utm_source=infoqWeeklyNewsletter&amp;utm_medium=WeeklyNL_EditorialContent_culture-methods&amp;utm_campaign=02142017news#anch144792" target="_blank">this interview</a>&nbsp;with&nbsp;<span style="background-color: white; font-family: &quot;arial&quot; , &quot;helvetica&quot; , sans-serif; font-size: 14px;">Kevlin Henney, an independent consultant and a&nbsp;</span>great developer.<br /><br />These are some very good insights about ways to find dead code:<br /><div><ol style="text-align: left;"><li>Static analyzers are a good start</li><li>Search for files that has never changed since a while. "There are many reasons code may be stable — it’s just right, it’s just dead, it’s just too scary — but unless you investigate you’ll never know."</li><li>Runtime monitoring and Dynamic program analysis may be used to rule out parts of the code which is&nbsp;<b>not</b>&nbsp;dead code, effectively reducing the code under investigation</li></ol><div>One very interesting note is that:</div></div><blockquote class="tr_bq">"Deleting dead code is not a technical problem; it is a problem of mindset and culture."</blockquote>Furthermore, in this very interesting <a href="https://www.youtube.com/watch?v=IiGXq3yY70o" target="_blank">lecture</a> by Kevlin, he tells the very famous story about <a href="http://amr-noaman.blogspot.com.eg/2015/09/dead-code-is-it-really-harmful.html" target="_blank">Kinght corporation</a> which lost hundreds of millions due some dead code left over. Also, narrates some very interesting stories alike. I highly recommend any developer to watch this lecture. &nbsp;</div>Amr Noamanhttp://www.blogger.com/profile/17439075869608575763noreply@blogger.com2tag:blogger.com,1999:blog-8697049364383220481.post-84649790007533044542016-11-10T13:49:00.000+02:002016-11-10T13:49:00.350+02:00Agile Outside IT - Agile and Sales<div dir="ltr" style="text-align: left;" trbidi="on"><blockquote class="tr_bq"><i>"By following the steps in Scrum, management learned that sales can lend itself easily to an Agile environment. Individuals found that this shared work model led to more consistent revenue and compensation in addition to a more even workload. No longer did the 'sales stars' work much harder than everyone else. Each team member focused on his/her own domain expertise."</i></blockquote>This is a lesson learned mentioned in an <a href="http://www.leadingagile.com/2013/05/agile-and-sales-reflections-on-my-first-scrum-sales-team-2/" target="_blank">article by Eric Kristfelt</a>, a sales manager who worked for two Agile organizations. It gives a clear indication that an iterative agile process like Scrum was very helpful for a successful sales team.<br /><br />Agile has strongly affected Sales and selling in two ways.<br /><br /><h4 style="text-align: left;">The Sales 'Iterative' Process:</h4>First, sales is a process, sometimes described in 7 stages very similar to the waterfall process. This traditional process has become incompetent in dealing with today's fast market changes and fast learning customers. Scott Gillum discusses this deficient traditional process in his article at Forbes: <a href="http://www.forbes.com/sites/gyro/2013/01/07/the-disappearing-sales-process/#1e732a3d25d9" target="_blank">The Disappearing Sales Process</a>. Gillum relates a study which indicates that "57 percent of the sales process just disappeared", because today's knowledgable buyers already do this part on their own before they contact any provider.<br /><br />Scrum, in this regard, has improved the sales process so much. Team started talking about&nbsp;<a href="http://www.leadingagile.com/2013/05/agile-and-sales-reflections-on-my-first-scrum-sales-team-2/" target="_blank">adopting Scrum in sales</a>, and doing marketing and sales sprints to improve learning about opportunities and customer needs, and improve fast response to customers. In <a href="http://www.leadresponsemanagement.org/lrm_study" target="_blank">this study</a>, such fast response (when done within 5 minutes) makes the chance for a successful connection 100 times better, and the chance for successful qualification 21 times better!<br /><br /><h4 style="text-align: left;">Sales 'Cross-functional' Teams:</h4>Second, sales traditionally focuses on the individual sales person. Now, thanks to the agile mindset, sales people are talking about cross-functional sales teams! Refer to Eric Kristfell article above for an example how sales cross-functional teams has created a better collaborative and successful environment, and resulted in the best target achieved in the organization. Also, <a href="http://www.slideshare.net/wintonjkt/agile-sales-and-business-development" target="_blank">this presentation</a> is very useful example of how agile team roles maps to agile sales team roles.<br /><br />Finally, I'm quoting Jeff Sutherland, the co-author of Scrum, telling us about <a href="https://www.agilealliance.org/wp-content/uploads/2016/01/Scrum-in-Sales-vs20110210.pdf" target="_blank">this experiment adopting scrum with the sales team of ISence</a>:<br /><blockquote class="tr_bq"><i>"Company revenue increased by 100% after Scrum implementation in the first quarter. Although market changes also contributed to this result, the general manager indicates that at least 50% of the revenue increase can be contributed to the adoption of Scrum"</i></blockquote>The is enough for this episode, the next one to come tomorrow insha'Allah, about Agile in Finance and Budgeting :)<br /><br /></div>Amr Noamanhttp://www.blogger.com/profile/17439075869608575763noreply@blogger.com2tag:blogger.com,1999:blog-8697049364383220481.post-69971803297253708592016-11-09T16:18:00.002+02:002016-11-10T13:55:22.993+02:00Agile Outside IT - Agile Education<div dir="ltr" style="text-align: left;" trbidi="on">Agile is penetrating more and more fields everyday. This is a list of areas which agile have very strong impact nowadays:<br /><br /><ul style="text-align: left;"><li>Education</li><li>Sales and Marketing</li><li>Finance and Budgeting</li><li>Strategic Management&nbsp;</li><li>Manufacturing</li><li>...</li></ul><br />In short, any discipline which leans towards knowledge work will benefit one way or another from the agile values and principles.<br /><br />This is the first post in a series. In this episode, I will talk very briefly about Agile Education.<br /><br /><h2 style="text-align: left;">Agile in Education:</h2>The first reference is Steve Peha's Article at Infoq:&nbsp;<a href="https://www.infoq.com/articles/agile-schools-education" target="_blank">Agile Schools: How Technology Saves Education (Just Not the Way We Thought it Would)</a>. What interesting in this article is the the very similar Manifesto for Agile Education which Steve came out with, with minimal changes from it original agile manifesto. Steve has not only mapped the 4 values and the 12 principles, he had also put helpful discussion of team practices which also applies to education!<br /><br />Another attempt to mapping is done in <a href="https://www.youtube.com/watch?v=HNUT9E115MQ" target="_blank">this workshop by Hala Salah</a> with some school teachers. After introducing them to the Agile Manifesto, Hala has facilitated an exercise with the teachers to come out with a similar value statements for Education. The audience have very smoothly came out with several versions of value statements which reveals the very close correlation between the Agile Manifesto and the field of Education and Study.<br /><br />The second reference is<a href="http://www.agileineducation.org/" target="_blank"> www.agileineducation.org</a>. Probably, the most notable thing in this website is the Agile Education Compass:<br /><br /><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="http://www.agileineducation.org/" target="_blank"><img alt="" border="0" height="320" src="https://4.bp.blogspot.com/-OLlN5JRArmw/WBdaSCpClUI/AAAAAAAAAys/B0SJtYszFO0EtAh5uWPpaTsroEGuQr9IgCLcB/s320/9984463.png" title="Agile Education Compass" width="314" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div>This compass "was created by a group of passionate Agile Educators who met face-to-face at the Scrum Gathering in Orlando, Florida between April 16-20, 2016". What's interesting about his compass is that it describes transformation as a journey from traditional eduction notions which has been in the mindset of educators since long like 'content', 'competition', and 'evaluation' to more appealing and agile notions.<br /><br />The next episode will be about <a href="http://amr-noaman.blogspot.com.eg/2016/11/agile-outside-it-agile-and-sales.html" target="_blank">Agile and Sales</a>. Keep Alert!</div>Amr Noamanhttp://www.blogger.com/profile/17439075869608575763noreply@blogger.com0tag:blogger.com,1999:blog-8697049364383220481.post-80490131161725711352016-05-28T11:45:00.000+02:002016-05-28T11:46:10.270+02:00Detecting and Preventing Code Clones Mercilessly - workshop guide<div dir="ltr" style="text-align: left;" trbidi="on">Please follow these steps:<br /><br /><b>First</b>: Open the code project<br /><br />We will be working on the example project provided by ConQAT:<br /><ol style="text-align: left;"><li>Open Eclipse</li><li>Goto: New Project &gt; Examples &gt; ConQAT Examples &gt; ConQAT Examples Project</li></ol><div><b>Second</b>: Run the code clones analysis tools</div><div><ol style="text-align: left;"><li>Double click the clonedetection-example-junit.cqr&nbsp;</li><li>Click Launch ConQAT analysis</li><li>After it finishes, goto Menu: Clone Detection &gt; Open Clone Report, and select the clones.xml file in the output directory</li></ol><div><b>Third</b>: Detecting exact code clones</div></div><div><ol style="text-align: left;"><li>Back to the&nbsp;clonedetection-example-junit.cqr page</li><li>Scroll all the way to the right and click the 'New' button</li><li>Add the field 'equality', and enter value 1 in the threshold</li><li>Launch the analysis and reload the clones.xml file</li></ol><div><b>Forth</b>: Detecting similar code clones</div></div><ol><li>Back to the&nbsp;clonedetection-example-junit.cqr page</li><li>Scroll all the way to the right and click the 'New' button</li><li>Add the field 'similarity', and enter value 1 in the threshold</li><li>Remove the 'equality' parameter</li><li>Launch the analysis and reload the clones.xml file</li></ol><div><b>Fifth</b>: Detecting gapped clones</div><div><ol style="text-align: left;"><li>Goto the 'ConQat blocks' section at the top right of the configuration file</li><li>Click on 'Change' button</li><li>Select 'Code Clones &gt; JavaGappedClonesAnalysis'</li><li>Add a parameter called 'errors' and enter the value = 2</li><li>Add a parameter called 'gap' and enter the ratio = 0.2&nbsp;</li><li>Launch the analysis and reload the clones-gapped.xml file (notice the file name is different than the previous ones)</li></ol></div></div>Amr Noamanhttp://www.blogger.com/profile/17439075869608575763noreply@blogger.com0tag:blogger.com,1999:blog-8697049364383220481.post-80631328515461457432016-05-03T11:09:00.002+02:002016-05-03T11:09:52.518+02:00I'm Speaking at Agile2016<div dir="ltr" style="text-align: left;" trbidi="on"><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-UrzNEa_BL_U/VyhnEjB1LWI/AAAAAAAAAuk/ZFpfyW6B1LI_gfbeAvZc0wAR7N8-vSf3wCLcB/s1600/Imspeakingatagile2016.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-UrzNEa_BL_U/VyhnEjB1LWI/AAAAAAAAAuk/ZFpfyW6B1LI_gfbeAvZc0wAR7N8-vSf3wCLcB/s1600/Imspeakingatagile2016.png" /></a></div><br />I'm glad to announce that I will be speaking at the Agile Conference - Agile2016 organized by Agile Alliance. This is the biggest agile gathering in the world, featuring more than 2000 attendees and 200 sessions.<br /><br />I will be running a technical workshop titled: <a href="http://sched.co/6eef" target="_blank">Detecting and Preventing Code Clones Mercilessly</a>, at which I will go through different types of code clones and how to detect and prevent them.<br /><br /><br /></div>Amr Noamanhttp://www.blogger.com/profile/17439075869608575763noreply@blogger.com1tag:blogger.com,1999:blog-8697049364383220481.post-47081702981782471762016-01-12T13:56:00.000+02:002016-05-03T10:50:17.186+02:00Agile Egypt's 1st Open Space Experiment!<div dir="ltr" style="text-align: left;" trbidi="on">I like to call <a href="http://www.meetup.com/Agile-Egypt/events/227433638/" target="_blank">Agile Egypt's 1st Open Space Conference</a> an experiment rather than a conference. It was really an experiment working in large group without having an agenda :) We were worried while preparing, anticipating and looking around during the upstream activities, but we had a lot of fun and learning throughout the day! It is awesome and unbelievable!<br /><br />The dynamics of teams while cooperating and engaging in discussions and parallel activities were amazing. Some are moving around from team to another looking for something useful. One team closed up the topic in eager to participate in other one or two sessions before they time out. Two or three attendees had a lengthy side talk about a topic which wasn't on the original list. All of these are some notes of how dynamic and efficient the use of time was.<br /><br />Let me summarize how it went:<br /><br /><h2 style="text-align: left;">Starting (30 minutes)&nbsp;</h2>First, we spent sometime explaining the concept of <a href="https://en.wikipedia.org/wiki/Open_Space_Technology" target="_blank">open space technology</a>; the 5 principles and the law of two feet. Then, Mohamed Amr facilitated a group discussion about the topics that may be included during the day:<br /><br /><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-DhWx2pf-pKk/VpToorbudvI/AAAAAAAAAqQ/WgQNrdGT8gw/s1600/Mohamed%2BAmr.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="213" src="https://2.bp.blogspot.com/-DhWx2pf-pKk/VpToorbudvI/AAAAAAAAAqQ/WgQNrdGT8gw/s320/Mohamed%2BAmr.png" width="320" /></a></div><br /><h2 style="text-align: left;">Sessions (2 hours)</h2>We have split into 6 topics:<br /><ol style="text-align: left;"><li>Self-Organizing teams</li><li>Agile and freelance developers</li><li>Requirements in Agile</li><li>Measuring technical dept</li><li>Modeling Kanban issues in Diagrams of Effects</li><li>Agile adoption success stories</li></ol><br /><div class="separator" style="clear: both; text-align: center;"></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="http://4.bp.blogspot.com/-fyryGIRDTCo/VpTpCRRDiMI/AAAAAAAAAqY/3fKB5Ca5OFE/s1600/twogroups.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="138" src="https://4.bp.blogspot.com/-fyryGIRDTCo/VpTpCRRDiMI/AAAAAAAAAqY/3fKB5Ca5OFE/s320/twogroups.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Teams in parallel sessions</td></tr></tbody></table><div class="separator" style="clear: both; text-align: center;"><br /></div>And this is me facilitating the Kanban modeling session:<br /><br /><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-MBMc4MspfKk/VyhmPjDX2kI/AAAAAAAAAuc/nPTVkSUknvouAZ0-h4kSIGX1_-FjPC6PgCLcB/s1600/highres_445824101.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="187" src="https://1.bp.blogspot.com/-MBMc4MspfKk/VyhmPjDX2kI/AAAAAAAAAuc/nPTVkSUknvouAZ0-h4kSIGX1_-FjPC6PgCLcB/s320/highres_445824101.jpeg" width="320" /></a></div><br />To see more photos of this event, browse our <a href="http://www.meetup.com/Agile-Egypt/events/227433638/" target="_blank">event page on meetup.com</a><br /><br /><h2 style="text-align: left;">Summary of Sessions' Key Takeaways (1 hour)</h2>The last hour was very informative. Each group facilitator prepared a list of key takeaways which he/she shared with the whole audience in 5-10 minutes. Some members found this not interesting, because 1) If they were interested in the topic, they would have participated in the session and 2) the intent was to share key takeaways, while some facilitators narrated parts of the discussions instead :)<br /><br /><h2 style="text-align: left;">What's Next?</h2>I have done a brief evaluation at the end of the conference. All Attendees would like to attend similar meetups again. Most of them (about 60%) gave 4 and 5 (out of 5) to their learning experience in this meetup.<br /><br />I have observed how dynamic the meetup was. Learning is guaranteed! If you disliked a topic, you can instantly switch to another, which is several steps away. The fact that we are all co-located made the movement so easy.<br /><br />We are planning to do it again inshaAllah with one minor tweak: we will have one or two sessions predefined and announced in order to attract more audience. One of the things that makes people reluctant to attend is the fact that he doesn't know what the topics are!<br /><br />Although this is done on purpose (not announcing any topics), we think that announcing one or two topics would be a catalyst to attract more people. Once they are in, they can switch to any topic anytime!</div>Amr Noamanhttp://www.blogger.com/profile/17439075869608575763noreply@blogger.com0tag:blogger.com,1999:blog-8697049364383220481.post-66497004075648941852015-11-21T09:36:00.000+02:002015-11-23T23:34:41.713+02:00Is Scrum (and probably Agile) Dead?<div dir="ltr" style="text-align: left;" trbidi="on">Recently, I came across an interesting article: <a href="https://opensource.com/business/15/11/open-development-method" target="_blank">Scrum is dead: breaking down the new open development method</a>. I usually do have big problem with such big declarative statements like 'Scrum is dead'. Actually, it's pretty easy to refute the whole rationale by bringing about one counter example!<br /><br />But, to be frank, the article is good, with the author trying to put some basic principles for the profession of software development; principles that I fully agree with and promote. On the other hand, I strongly disagree with some very fundamental ideas in the article:<br /><br /><h2 style="text-align: left;">Agile is Not a Methodology</h2><br />First, I find the author builds upon a fundamental idea that "Agile is a methodology". Well, this is incorrect. Also, the article conveys an idea that Agile and Scrum are two sides of the same coin (a misconception about Agile. May be the author doesn't mean that, but this idea is there in the article). Actually, Agile does not prescribe any methods. Rather, there are methods which are built while Agile in mind. So, what is agile? I always preach Ahmed Sidky's definition of Agile:<br /><br /><blockquote class="tr_bq">"Agile is a mindset, that is in the software world, established through 4 values, grounded by 12 principles, and manifested through many many different practices"</blockquote><br />In this sense, there is no point of discussing whether Scrum, Kanban, or Open Development are useful methodologies or not. <b>Because the whole idea of usefulness is very situational. What is useful in one situation is not useful in another, what makes sense for one team is totally irrelevant for another.&nbsp;</b><br /><b><br /></b><br /><h2 style="text-align: left;"><b>Is Open Development an "Evolution of Scrum"?</b></h2><br />The other statement which I find misleading is that Open Development is an "evolution of Scrum". Well, this is also incorrect. The Open Development description as appears in the article is totally in accordance with the Agile mainstream since its inception. The stream upon which ideas like Scrum and XP was built. In such mainstream, major advances in Software development were invented, such as automated tests and Continuous Integration and Deployment; and major ideas were revived or re-established like IID (Iterative and Incremental Development) or self-organizing and cross-functional teams.<br /><br /><h2 style="text-align: left;">Well, when to use which? or shall we use None?</h2><br />Having said all of that, I do admit that Scrum (as per <a href="http://www.scrumguides.org/docs/scrumguide/v1/Scrum-Guide-US.pdf#zoom=100" target="_blank">the official Scrum guide</a>) is not suitable in many cases. A better statement is that: Iterative development is not useful in many cases. Some project types cannot be led using timeboxed iterations. Usually, the reason is that the demands of the business and the development pace are much faster than a one-week timebok, which is the smallest iteration timebox. The idea is very simple: <i>If business needs something now, and development is capable of providing this thing at this now, why wait till end of iteration, which may be 2-3 or even more than a week ahead?!</i><br /><br />On the other hand, I recently came to a situation where I couldn't use Kanban to manage my project. The unknowns of business are so much, and the availability of the business people is limited; besides great technical risks which needs prolonged time of team collaboration and deep thinking. In this specific case, we switched from Kanban to Scrum.<br /><br /><b>Managing Flow or Managing Iterations?</b><br />Actually, what we have done is to move <i>not</i> from Kanban to Scrum, but from <i>Managing Flow to Managing Iterations</i>. Kanban and Scrum nowadays are metaphors for two more fundamental management ideas: Managing flow versus managing iterations.<br /><br />So, In this project instance, I found that putting constraints on flow is stopping us rather that helping us. I found that a timebox of one or two weeks gives the team more room to act, react, and innovate. In the meanwhile, it gives us some very high level indicators about team progress.<br /><br /><b>When shall we use None?</b><br />One final thought is that even if you're doing Scrum or Kanban, it's just a starter. It just brings about a sense of discipline and cadence which enables the team to measure it's progress and improvement over time.<br /><br />So, if this is only a starter, you should expect that teams will move to other practices and probably invent their own process in the near future. At this time, I would say that this team is really Agile!</div>Amr Noamanhttp://www.blogger.com/profile/17439075869608575763noreply@blogger.com1tag:blogger.com,1999:blog-8697049364383220481.post-17842938230067427402015-10-26T10:02:00.003+02:002015-10-26T10:36:09.681+02:00Things are Inverted in Agile!<div dir="ltr" style="text-align: left;" trbidi="on"><br /><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-FgXoA1qFN8E/Vi3k-T01YPI/AAAAAAAAApk/yVUH-WD8UKQ/s1600/inverted.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="181" src="http://2.bp.blogspot.com/-FgXoA1qFN8E/Vi3k-T01YPI/AAAAAAAAApk/yVUH-WD8UKQ/s320/inverted.png" width="320" /></a></div><br /><br />It seems that many things in Agile are INVERTED !!<br /><br />I noticed two important aspects (so far):<br /><br /><h2 style="text-align: left;">Project Startup Activities</h2><div style="text-align: left;">We used to code then deploy. Just before deployment, we figure out how are we going to deploy, on which server, testing environment or staging environment. Usually, we may wait for sometime till these logistics are sorted out.&nbsp;</div><div style="text-align: left;">In agile, things are different. We start by preparing the deployment environment, set it up, link it to our code deployment scripts using some Continuous Integration and Deployment tool.&nbsp;</div><div style="text-align: left;"><br /></div><h2 style="text-align: left;">The Famous Design Phase</h2><div><div class="MsoNormal">"In TDD, there is no design stage; design is inverted and distributed.", I quoted this from the online TDD training from Industrial Logic. It is fairly true and powerful concept.&nbsp;<o:p></o:p></div><div class="MsoNormal">The idea is to code-test-design (or refactor) instead of design-code-test. Well, there has to be some upfront critical architectural decisions, but these are very few and takes several hours to several days at most.</div><div class="MsoNormal"><br /></div></div></div>Amr Noamanhttp://www.blogger.com/profile/17439075869608575763noreply@blogger.com1tag:blogger.com,1999:blog-8697049364383220481.post-18651739384984713982015-09-26T21:54:00.000+02:002015-12-03T13:33:03.267+02:00Dead Code; Is it Really Harmful?<div dir="ltr" style="text-align: left;" trbidi="on">The answer is YES, and can put you out of business in 45 minutes, like what happened with Knight Capital Group!<br /><br />Recently, I have been watching uncle Bob explaining his famous SOLID principles, and he mentioned a very interesting case of a bug. The code mistakenly set a flag which enabled the execution of a piece of dead code.<br /><br />The side effect of this execution is 440 million USD's losses which is 5 times the market value of the company :)<br /><br />Further read about this case:<br /><br /><a href="http://www.bloomberg.com/bw/articles/2012-08-02/knight-shows-how-to-lose-440-million-in-30-minutes">http://www.bloomberg.com/bw/articles/2012-08-02/knight-shows-how-to-lose-440-million-in-30-minutes</a></div>Amr Noamanhttp://www.blogger.com/profile/17439075869608575763noreply@blogger.com1tag:blogger.com,1999:blog-8697049364383220481.post-57522443460681382852015-07-14T15:50:00.001+02:002015-10-27T13:25:34.507+02:00Lean CMMI - My Presentation at Agile2015!<div dir="ltr" style="text-align: left;" trbidi="on"><div class="separator" style="clear: both; text-align: center;"><a href="http://agile2015.sched.org/event/096d4e20674bb9c25a1a8a94524569fa#.VaUQcPmqqko" target="_blank"><img border="0" src="http://3.bp.blogspot.com/-aeUsbqhgSXw/VaUQTa9B1wI/AAAAAAAAAnw/O2-IYs8xO6s/s1600/Agile2015_Speaker_Badge_200px.png" /></a></div><br />First&nbsp;and foremost, I'm&nbsp;so grateful and thankful to&nbsp;Allah (swt) for helping me getting through this research paper. Not only that, I got it accepted in the Agile Conference 2015; the biggest Agile conference in the world.<br /><br />I have published several papers before, but they were all industrial reports. Industrial reports (aka experience reports) document useful experiments done in the industry. As opposed to research papers, industrial reports do not necessarily use a scientific method to prove something.<br /><br />My personal opinion, Industrial Reports are very useful, and probably more valuable than research paper. They reflect real experience and one can draw benefit from it right away. So, if your audience are software practitioners, then research papers are not the right means to communicate your experience to them :)<br /><br />If this is the case, why did I write a paper? Two reasons:<br /><ol style="text-align: left;"><li>The first reason is that I had data! and found it interesting to experiment writing a paper.</li><li>The second reason is to write a proof that incremental approaches in process improvement is better that holistic approaches.&nbsp;</li></ol>Here is a link to the abstract of the paper:&nbsp;<a href="http://agile2015.sched.org/event/096d4e20674bb9c25a1a8a94524569fa#.VaUQcPmqqko" target="_blank">Lean CMMI: An Iterative and Incremental Approach to CMMI-Based Process Improvement</a>.<br /><br />In this paper, I'm comparing results of process improvement in Configuration Management process area of CMMI. The first group of results are based on traditional process improvement effort (one process area at a time). The second group of results are based on the <i>'Process Increments'</i>&nbsp;method, an iterative and incremental approach for software process improvement. This model divides improvements into small chunks as in the following model:<br /><br /><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-3UWYL98QTZ0/VaUmhjcPn6I/AAAAAAAAAoE/qRTIZaCseis/s1600/increments.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="337" src="http://3.bp.blogspot.com/-3UWYL98QTZ0/VaUmhjcPn6I/AAAAAAAAAoE/qRTIZaCseis/s640/increments.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"></div><br /><div>These Process Increments are dynamic. You can add, remove, re-prioritize them as needed. It's like user stories in software projects.<br /><br />The results of the study are in the following diagram. It's a box plot of SP ratings in semi-formal CMMI appraisals. As you see, the ratings in the second group of companies are much higher than ratings in the first group of companies. is as follows:<br /><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="http://1.bp.blogspot.com/-t-SQGes5aiM/VaUm5MwA3EI/AAAAAAAAAoI/YcTH-eM42r4/s1600/improvement.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="301" src="http://1.bp.blogspot.com/-t-SQGes5aiM/VaUm5MwA3EI/AAAAAAAAAoI/YcTH-eM42r4/s320/improvement.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;"><br /></td></tr></tbody></table>Those who knows six sigma or has experience in research would know that these results are real proof that iterative and incremental methods works better!</div></div>Amr Noamanhttp://www.blogger.com/profile/17439075869608575763noreply@blogger.com0tag:blogger.com,1999:blog-8697049364383220481.post-64100651203800580082015-04-25T14:07:00.000+02:002015-04-25T14:12:33.488+02:008 Months of Being Self-Employed!Today is my 8th month after resignation from SECC and becoming self-employed at Agile Academy. This was a challenge full of new experiences, problems, obstacles, failures and successes :)<br /><br />It's like any new startup experience, in which you're doing everything which you used to get them done by whoever else! Many things changed in my life like being with my wife and children for a longer time, setting in front of my laptop for a longer time, thinking about business and opening new opportunities. It's an experience in itself, not to be expecting any income at the beginning of every calendar month .. :(<br /><br />One thing I noticed is that what Allah gives you cannot be compared to your effort. Of course you have to exert all what you can so that Allah give you, but it's always Allah's will, and I felt so relieved when I finally understood that Allah will not let you down as long as you are doing all what you can .. Al7amdulillah.<br /><br />One very important thing to consider is that you have to always do what you like and what you know. Both are important. Then, الرزق will come along the way, whether through direct work you produce or through any other route.<br /><br />One more thing .. It's not appropriate to work day and night. You have other obligations in life which you have to fulfill, like your parents, your wife and children, your own self, and before all of that, your Lord Allah SWT.<br /><br />Amr Noamanhttp://www.blogger.com/profile/17439075869608575763noreply@blogger.com1tag:blogger.com,1999:blog-8697049364383220481.post-83453896511643346142015-03-13T22:10:00.000+02:002015-03-13T22:15:07.381+02:00My Article about Technical LeadershipMy second article published at infoq is for Technical Team Leaders. It's a post which I filled for many many years, and I have collected all my observations about what should a TTL be doing with the team in this article. <br /><br /><a href="http://www.infoq.com/articles/technical-leadership-overseen ">http://www.infoq.com/articles/technical-leadership-overseen<br /></a><br />good read :)Amr Noamanhttp://www.blogger.com/profile/17439075869608575763noreply@blogger.com0tag:blogger.com,1999:blog-8697049364383220481.post-79549130720194976522014-12-14T20:24:00.003+02:002015-12-24T09:33:24.830+02:00Tragedies of Performance Evaluation of Software People<div dir="ltr" style="text-align: left;" trbidi="on"><div class="MsoNormal" style="margin-bottom: 10pt;"><span style="line-height: 115%;">I'm constantly having conflicts with managers who insist on backward methods of performance evaluation for agile teams. It is one of the miseries of software teams, because</span><span style="line-height: 115%;">&nbsp;in most cases, such methods demotivate individuals and undermine team values. The issue is serious to the extent that Professor Edward Lawler wrote a recent </span>post<span style="line-height: 115%;"> in Forbes magazine titled:&nbsp;</span><a href="http://www.forbes.com/sites/edwardlawler/2014/03/25/eliminating-performance-appraisals/" target="_blank">Eliminating Performance Appraisals</a>. In this post, prof. Edward&nbsp;<span style="line-height: 115%;">questions whether organizations should stop doing performance appraisals altogether, because they <i>“do more damage than good”, and “when poorly done, they create a multitude of problems”!</i></span></div><div class="MsoNormal" style="margin-bottom: 10pt;"><span style="line-height: 115%;">I felt I have a moral obligation to write something in this regard. My contribution in this post is a collection of&nbsp;</span><span style="line-height: 18.3999996185303px;">resources</span><span style="line-height: 115%;">&nbsp;and an attempt to structure the topic into three high level subtitles:</span></div><div class="MsoNormal" style="margin-bottom: 10pt;"></div><ol><li style="line-height: 18.3999996185303px;"><span style="line-height: 18.3999996185303px;">What's evil about performance&nbsp;appraisals</span></li><li style="line-height: 18.3999996185303px;"><span style="line-height: 18.3999996185303px;">Should smarter people be rewarded more money (as a means of motivation)?</span></li><li><span style="line-height: 18.3999996185303px;">Using process data for the sake of individual performance</span></li></ol>If you are a smart person suffering from a performance evaluation scheme from the middle ages, send your HR manager this post, and let him read the resources mentioned below. May be (I'm not sure) it may help.<br /><div><br /><div><h3>1. What's evil about performance appraisals</h3><div><br /></div>First, this is an article:&nbsp;<a href="http://guides.wsj.com/management/recruiting-hiring-and-firing/should-i-rank-my-employees/" target="_blank">Should I Rank My Employees?</a> from the&nbsp;<a href="http://online.wsj.com/home-page"><img src="http://s.wsj.net/img/b.gif" /></a>Wall Street Journal. It mentions the following interesting survey:</div><blockquote class="tr_bq"><i>"Stanford professors Jeffrey Pfeffer and Robert Sutton are among the most fervent critics. They cited a survey of more than 200 human resources professionals from companies employing more than 2,500 people that found that even the more than half the companies used forced ranking, the respondents 'reported that forced ranking resulted in <b>lower productivity, inequity and skepticism, negative effects on employee engagement, reduced collaboration, and damage to morale and mistrust in leadership.</b>' … "</i></blockquote><div class="MsoNormal">Another blog by the famous software engineering management author: Esther Derby titled: <a href="http://www.estherderby.com/2010/07/should-a-scrummaster-or-any-coach-give-performance-appraisals.html#sthash.RyxivAm3.HB9yWVSQ.dpuf" target="_blank">Should a ScrumMaster (or any coach) Give Performance Appraisals?</a> In this blog, Esther asks how would it be good while <i>"psychologists know that 80 percent of people believe their performance is above average"</i></div><div class="MsoNormal"><br /></div><div class="MsoNormal">The topic of performance appraisal are very controversial to the extent that one of the so famous books in management in the last years is called: <a href="http://www.amazon.com/Abolishing-Performance-Appraisals-Backfire-Instead/dp/1576752003">"Abolishing Performance Appraisals: Why They Backfire and What to Do Instead"</a><o:p></o:p></div><div class="MsoNormal"><br /></div><h3><span style="line-height: 18.3999996185303px;">2. Should smarter people be rewarded more money (as a means of motivation)?</span></h3><div class="MsoNormal"><br /></div><div class="MsoNormal">We need to change our believes that a merit system will not work unless it ranks employees into classes and every class is motivated by some more money.</div><div class="MsoNormal"><o:p></o:p></div><div class="MsoNormal"><br /></div><div class="MsoNormal">This is a must-see master piece by RSA Animate:&nbsp;<a href="http://www.youtube.com/watch?v=u6XAPnuFjJc">Drive: The surprising truth about what motivates us</a>:</div><div class="MsoNormal"><br /></div><div class="separator" style="clear: both; text-align: center;"><iframe allowFullScreen='true' webkitallowfullscreen='true' mozallowfullscreen='true' width='320' height='266' src='https://www.youtube.com/embed/u6XAPnuFjJc?feature=player_embedded' FRAMEBORDER='0' /></div><div class="MsoNormal"></div><div class="MsoNormal">In this short animation,&nbsp;they attack very strongly the idea about motivation using financial incentives when it involves cognitive and knowledge work. At minute 1:50 till 4:15, this animation sites the results of a study done by three top universities in Engineering and Technology: MIT, University of Chicago, and Carnegie Mellon university:<o:p></o:p></div><blockquote class="tr_bq"><i>"As long as the task involve only mechanical skill, bonuses worked as expected (higher pay = better performance). But, once the task called for rudimentary [basic or simple] cognitive skill, <b>a larger reward led to poorer performance!</b>"</i></blockquote><div class="MsoNormal">Also, one of the most important books in software engineering history is <a href="http://www.amazon.com/Rapid-Development-Taming-Software-Schedules/dp/1556159005">Rapid Software Development: Taming Wild Software Schedules by Steve McConnell</a>. This book was named the best Software engineering book in the year by Software Development magazine's Jolt Award. Please refer to this book to understand what motivates Software engineers. Chapter 11: Motivation is the best reference I read about motivating software engineers. In page 262, you'll find this quote:&nbsp;</div><blockquote class="tr_bq"><i>"At least two-dozen studies over the last 30 years&nbsp;have shown conclusively that people who expect to receive a reward for&nbsp;doing their jobs successfully don't perform as well as those who expect no&nbsp;reward at all (Kohn 1993). The work itself is the greatest motivator, and the&nbsp;more a manager stresses an external reward, the less interested the developer&nbsp;becomes in the work itself, and the more potential motivation is lost."</i></blockquote><div class="MsoNormal">The author makes a very clear alarm that incentives has many forms which are non-monetary like:</div><ul><li>Dinners with company executives</li><li>Vacation-time bonuses</li><li>Gifts of appreciation (theater tickets or dinners for two)</li><li>Sincere praise directed at a specific accomplishment</li><li>Team T-shirts, polo shirts, rugby shirts, watches, pins, mugs, posters,</li><li>Humorous or serious awards in the form of plaques, certificates, trophies, and the like</li><li>Special events to celebrate significant accomplishments; depending on your team's preferences, and event might be a dinner at a favorite restaurant, a show, a trip, a ski day, or a dinner at the boss's house (or, for maximum effect, the boss's boss's house)</li><li>Exceptions to company policies for the team, such as casual-dress Friday, a Ping-Pong table in your team's section of the building, free&nbsp;soda pop in the team refrigerator, and so on</li><li>Special courses (outside the local area)</li><li>Sponsorship at conferences that the organization would not ordinarily sponsor</li><li>Grade-level promotions</li></ul><div class="MsoNormal"><o:p></o:p></div><div class="MsoListParagraph">You can download this book from this <a href="http://iclass.iuea.ac.ug/intranet/E-books/INFORMATION%20TECHNOLOGY/SOFTWARE%20ENGINEERING/Steve%20McConnell%20-%20Rapid%20Development%20-%20Taming%20Wild%20Software%20Schedules.pdf">location</a>.</div><div class="MsoNormal"><o:p></o:p></div><div class="MsoNormal"></div><div class="MsoNormal">One more article called <a href="http://wweb.uta.edu/management/Alankrita/3319/Readings/One%20more%20time%20how%20do%20you%20motivate%20employees.pdf">One More Time: How Do You Motivate Employees?</a>, which sold more than a million reprints making it the most popular article in the history of the Harvard Business Review. In this diagram, notice the particular position of the salary and it's weight as a demotivator rather than a motivator.&nbsp;</div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="http://4.bp.blogspot.com/-VzbPCI2tuOY/VI3RyS-XHsI/AAAAAAAAAj0/BtjPc5KX42U/s1600/motivators-demotivators-2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="552" src="http://4.bp.blogspot.com/-VzbPCI2tuOY/VI3RyS-XHsI/AAAAAAAAAj0/BtjPc5KX42U/s1600/motivators-demotivators-2.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Motivators and demotivators - Notice that salary (money) is not among the motivators, but rather a demotivator in case salary is not sufficient</td></tr></tbody></table><div class="MsoNormal">Actually, what this diagram tells us is the same exact phrase mentioned in the RSA movie above at minute 4:50:</div><blockquote class="tr_bq"><i>"If you don't pay enough, people won't be motivated. Pay people enough to take the issue of money off the table"</i></blockquote><br /><h3>3. Using process data for the sake of individual performance</h3><div><span style="font-size: xx-small;"><br /></span></div><div class="MsoNormal"><span style="font-size: xx-small;"></span></div><div class="MsoNormal">Forcing managers to use process data, like feature estimates, number of bugs, reported actual hours, etc. to evaluate team members will blow up the process metrics themselves. This, in turn, has a drastic effect on the process itself, making the team <i>process-blind</i> (not being able to improve the process based on process metrics) Being process-blind is the direct result of exploiting process metrics and reuse them as <i>Targets, </i>and as per <a href="http://en.wikipedia.org/wiki/Goodhart%27s_law" target="_blank">Goodhart's law</a>: <i>"When a measure becomes a target, it ceases to be a good measure."</i></div><div class="MsoNormal">Why this happens? To understand the dynamics, let's recall the general rule put by <a href="http://en.wikipedia.org/wiki/Tom_DeMarco" target="_blank">Tim DeMorko</a>, the author of the great book:&nbsp;<i style="background-color: white; color: #252525; font-family: sans-serif; font-size: 13.63636302948px; line-height: 20.3636360168457px;">Peopleware: Productive Projects and Teams</i>'s, a book which had an impact on the whole industry; the general rule is known as <i>DeMarko's Principle:</i><br /><blockquote class="tr_bq"><i>"Effort moves towards whatever is measured"</i></blockquote>This can happen subconsciously or even consciously; and this is considered one of the major pitfalls of measuring, as explained the this article: <a href="http://www.cimaglobal.com/Thought-leadership/Newsletters/Insight-e-magazine/Insight-September-2006/The-seven-pitfalls-of-performance-measurement/">The seven pitfalls of performance measurement</a>&nbsp;which considers: <i>Risk of manipulation of performance data </i>as one of them. When it comes to individual evaluation, use of process metrics becomes a real risk, and opportunity of manipulation is so widespread. Writers have been noting this again and again, to the extent that some writers like&nbsp;Eli Goldratt, the father of Theory of Constraints says: <br /><blockquote class="tr_bq"><i>"Tell me how you measure me, and I will tell you how I will behave!"</i></blockquote>In summary, using process metrics to evaluate individuals distorts the metrics and after a while, the metrics lose their meaning and cease to reflect real process data. <br /><br /><h3>A Final Word</h3><div class="MsoNormal"><span style="font-size: xx-small;"></span></div><span style="font-size: xx-small;"><br /></span>Finally, I have to say that this topic is vast and needs a lot of effort to make a shift in the mindset of project and HR managers of software in Egypt. It is not easy, but <i>impossible</i>&nbsp;is not on my dictionary :)<br /><br /></div><div class="MsoNormal"></div></div></div>Amr Noamanhttp://www.blogger.com/profile/17439075869608575763noreply@blogger.com3tag:blogger.com,1999:blog-8697049364383220481.post-7923174710942783592014-10-20T15:17:00.000+02:002014-10-20T15:19:43.790+02:00Integrating Jenkins and ConQAT to Enable Continuous Clone DetectionOne of the great features of ConQAT is its ability to detect code clones (duplicates). On the other hand, CI servers like Jenkins enables you to automatically check for code quality attributes. If we can merge both, this will become an invaluable tool for technical team leaders and will save them a lot of review effort.<br /><br />Here is how you can do this:<br /><br /><b><u>Step 1: Define Your Policy of Preventing Code Clones</u></b><br /><br />This is done by specifying the <i>ConQat Run </i>configuration files (.cqr) using eclipse. That is, create a cqr file which detects kinds of duplicates that you don't want to see in the code altogether.<br /><br />For example, you may define a cqr file which detects exact code clones of length greater than 10 lines of code. This is a screen shot of a cqr file which does exactly this job:<br /><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="http://1.bp.blogspot.com/-sDOI6pqI864/VEUFmrVMsbI/AAAAAAAAAiQ/U0oBO5kg1Co/s1600/cqr.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://1.bp.blogspot.com/-sDOI6pqI864/VEUFmrVMsbI/AAAAAAAAAiQ/U0oBO5kg1Co/s1600/cqr.png" height="248" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">ConQat Run conf file with parameters</td></tr></tbody></table><br /><b><u>Step 2: Invoke ConQAT cqr from Jenkins</u></b><br /><br />Ant can do this using shell scripts or command lines, as follows:<br /><blockquote class="tr_bq"><span style="font-family: Trebuchet MS, sans-serif;">cd &nbsp;&lt;ConQat Location&gt;\conqat\bin</span><span style="font-family: Trebuchet MS, sans-serif;">conqat -f &lt;cqr file location&gt;\JavaCloneAnalysis.cqr</span></blockquote><div class="MsoNormal"><span style="font-family: Trebuchet MS, sans-serif;"><o:p></o:p></span></div><div class="MsoNormal"><o:p>&nbsp;</o:p><b>Note: </b>Make sure that you specify the output directory in the configuration file appropriately, because Jenkins will be accessing it later in the next step</div><div class="MsoNormal"><o:p></o:p></div><div class="MsoNormal"><br /></div><div class="MsoNormal"><b><u>Step3: Introspect the clones.xml file, and fail the build if it has clones</u></b></div><div class="MsoNormal"><b><br /></b></div><div class="MsoNormal">Let Ant check the clones.xml file generated. This is an ant target that does this job, add it to your build.xml file:<o:p></o:p></div><div class="MsoNormal"><blockquote class="tr_bq"><div class="MsoNormal"><span style="color: maroon; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">&lt;!--=========================================================================</span><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;"><o:p></o:p></span></div><div class="MsoNormal"><span style="color: maroon; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">Check the file named in the property file.to.check (the clons.xml file) to see </span><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;"><o:p></o:p></span></div><div class="MsoNormal"><span style="color: maroon; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">if there are any clones.</span><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;"><o:p></o:p></span></div><div class="MsoNormal"><br /></div><div class="MsoNormal"><span style="color: maroon; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">The way this works is to find all lines containing the text "cloneClass" and put</span><span style="font-family: Consolas; font-size: 10pt;">&nbsp;</span><span style="color: maroon; font-family: Consolas; font-size: 10pt;">them into a separate file.</span><span style="color: maroon; font-family: Consolas; font-size: 10pt;">&nbsp; </span><span style="color: maroon; font-family: Consolas; font-size: 10pt;">Then it checks to see if this file has non-zero&nbsp;</span><span style="color: maroon; font-family: Consolas; font-size: 10pt;">length. If so, then there are errors, and it sets the property clones.found.&nbsp;</span><span style="color: maroon; font-family: Consolas; font-size: 10pt;">Then it calls the fail-if-clones-found target, which doesn't execute if the&nbsp;</span><span style="color: maroon; font-family: Consolas; font-size: 10pt;">clones.found property isn't set.</span></div><div class="MsoNormal"><span style="color: maroon; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">--&gt;</span><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;"><o:p></o:p></span></div><div class="MsoNormal"><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">&lt;target</span><span style="font-family: Consolas; font-size: 10pt;"> </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">name=</span><span style="color: green; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">"check-clones-file"</span><span style="font-family: Consolas; font-size: 10pt;"> </span><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;"><o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: Consolas; font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">description=</span><span style="color: green; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">"Checks the file (specified in ${file.to.check}) for clones"</span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">&gt;</span><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;"><o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: Consolas; font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">&lt;property</span><span style="font-family: Consolas; font-size: 10pt;"> </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">name=</span><span style="color: green; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">"file.to.check"</span><span style="font-family: Consolas; font-size: 10pt;"> </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">description=</span><span style="color: green; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">"The file to hold the clones"</span><span style="font-family: Consolas; font-size: 10pt;"> </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">/&gt;</span><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;"><o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: Consolas; font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">&lt;copy</span><span style="font-family: Consolas; font-size: 10pt;"> </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">file=</span><span style="color: green; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">"${file.to.check}"</span><span style="font-family: Consolas; font-size: 10pt;"> </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">tofile=</span><span style="color: green; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">"${file.clonecount}"</span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">&gt;</span><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;"><o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: Consolas; font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">&lt;filterchain&gt;</span><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;"><o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: Consolas; font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">&lt;linecontains&gt;</span><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;"><o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: Consolas; font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">&lt;contains</span><span style="font-family: Consolas; font-size: 10pt;"> </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">value=</span><span style="color: green; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">"cloneClass"</span><span style="font-family: Consolas; font-size: 10pt;"> </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">/&gt;</span><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;"><o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: Consolas; font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">&lt;/linecontains&gt;</span><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;"><o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: Consolas; font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">&lt;/filterchain&gt;</span><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;"><o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: Consolas; font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">&lt;/copy&gt;</span><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;"><o:p></o:p></span></div><div class="MsoNormal"><br /></div><div class="MsoNormal"><span style="font-family: Consolas; font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">&lt;condition</span><span style="font-family: Consolas; font-size: 10pt;"> </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">property=</span><span style="color: green; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">"clones.found"</span><span style="font-family: Consolas; font-size: 10pt;"> </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">value=</span><span style="color: green; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">"true"</span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">&gt;</span><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;"><o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: Consolas; font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">&lt;length</span><span style="font-family: Consolas; font-size: 10pt;"> </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">file=</span><span style="color: green; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">"${file.clonecount}"</span><span style="font-family: Consolas; font-size: 10pt;"> </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">when=</span><span style="color: green; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">"gt"</span><span style="font-family: Consolas; font-size: 10pt;"> </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">length=</span><span style="color: green; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">"0"</span><span style="font-family: Consolas; font-size: 10pt;"> </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">/&gt;</span><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;"><o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: Consolas; font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">&lt;/condition&gt;</span><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;"><o:p></o:p></span></div><div class="MsoNormal"><br /></div><div class="MsoNormal"><span style="font-family: Consolas; font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">&lt;antcall</span><span style="font-family: Consolas; font-size: 10pt;"> </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">target=</span><span style="color: green; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">"fail-if-clones-found"</span><span style="font-family: Consolas; font-size: 10pt;"> </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">/&gt;</span><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;"><o:p></o:p></span></div><div class="MsoNormal"><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">&lt;/target&gt;</span><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;"><o:p></o:p></span></div><div class="MsoNormal"><br /></div><div class="MsoNormal"><span style="color: maroon; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">&lt;!-- Fail the build if clones detected--&gt;</span><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;"><o:p></o:p></span></div><div class="MsoNormal"><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">&lt;target</span><span style="font-family: Consolas; font-size: 10pt;"> </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">name=</span><span style="color: green; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">"fail-if-clones-found"</span><span style="font-family: Consolas; font-size: 10pt;"> </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">if=</span><span style="color: green; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">"clones.found"</span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">&gt;</span><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;"><o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: Consolas; font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">&lt;echo</span><span style="font-family: Consolas; font-size: 10pt;"> </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">message=</span><span style="color: green; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">"Code clones found - setting build fail flag..."</span><span style="font-family: Consolas; font-size: 10pt;"> </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">/&gt;</span><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;"><o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: Consolas; font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">&lt;fail</span><span style="font-family: Consolas; font-size: 10pt;"> </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">message=</span><span style="color: green; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">"Code clones detected during ${codeline} build.&nbsp; Check logs."</span><span style="font-family: Consolas; font-size: 10pt;"> </span><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">/&gt;</span><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;"><o:p></o:p></span></div><div class="MsoNormal"><span style="color: navy; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">&lt;/target&gt;</span><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;"><o:p></o:p></span></div><div class="MsoNormal"><br /></div><div class="MsoNormal"><span style="color: maroon; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: &quot;Times New Roman&quot;;">&lt;!-- ================================================================== --&gt;<o:p></o:p></span></div></blockquote><pre></pre>Note: In order to pass parameters to the ant script, click on the advanced button and add parameters as in the following screen:</div><div><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="http://1.bp.blogspot.com/-rRk--cV_ihw/VEUJlmwtKAI/AAAAAAAAAic/7mAye7yR1jA/s1600/and_params.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://1.bp.blogspot.com/-rRk--cV_ihw/VEUJlmwtKAI/AAAAAAAAAic/7mAye7yR1jA/s1600/and_params.png" height="172" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Passing parameters to Ant</td></tr></tbody></table><div><br /></div></div>Amr Noamanhttp://www.blogger.com/profile/17439075869608575763noreply@blogger.com2tag:blogger.com,1999:blog-8697049364383220481.post-50412751430717687862014-09-29T08:48:00.001+02:002014-10-08T11:37:44.870+02:00Becoming a Technical Team Leader (TTL)2003 I was appointed a senior position at IBM and became a technical team leader. This appointment was based on two things. First, I have spent 3 years in development. Second, I was an excellent developer! Are these enough criteria to become a technical team leader? I've already experienced the answer myself. I have led the team the worst way one could imagine!<br /><br />Since then, I have been thinking about this topic, and read the excellent book of Gerald Weinberg, <a href="http://www.amazon.com/Becoming-Technical-Leader-Problem-Solving-Approach/dp/0932633021" target="_blank">Becoming a Technical Leader</a>. After years and years of leading technical teams, the idea became very clear in my mind about what it is like to be a technical team leader; what's expected from you, what's your necessary qualifications and what's you main responsibilities?<br /><br />This is an attempt to answer this question:<br /><br /><div class="separator" style="clear: both; text-align: center;"></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="http://1.bp.blogspot.com/-YWHzoyTn5Sw/VCj8rUu8ueI/AAAAAAAAAhM/LQFwoeCTsdA/s1600/Technical%2BLeadership.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="Technical leadership core responsibilities" border="0" src="http://1.bp.blogspot.com/-YWHzoyTn5Sw/VCj8rUu8ueI/AAAAAAAAAhM/LQFwoeCTsdA/s1600/Technical%2BLeadership.png" height="130" title="Technical_Leadership" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Technical Leadership Core Responsibilities</td></tr></tbody></table><br /><br /><div>A Technical Team Leader (TTL) should demonstrate capability in three main areas:</div><div><br /></div><div>First and most important: Team Support. He can motivate the team, he has the ability and art of facilitating team activities, and he can organize team work into a process oriented manner.&nbsp;</div><div><br /></div><div>Second, a TTL is responsible of nurturing/enforcing and monitoring the product technical excellence and high quality. More specifically, the TTL is not responsible of doing this, but he is responsible of making sure this is realized by the whole team. To be more clear, if the TTL has developed an excellent product by himself while the team is doing nothing, then he is still failing in this regard.&nbsp;</div><div><br /></div><div>Finally, a TTL should sponsor innovation in the team. This is different from technical excellence. It is related to the team spirit and desire to experiment and try new things and unconventional solutions. This is different for problem solving, because you can solve a problem in a dumb way! What the team needs here is someone to sponsor the activity whenever it is needed and make sure a problem is solved in an innovative, not dumb, way.</div><div><br /></div><div>In all of these responsibilities, there is a common component of organization. The TTL is responsible to organize accumulated knowledge and information gained by the team, and make it available and easy to find and use when necessary by any team member. Also, organizing the team process, which is a responsibility which may take a lot of time and effort to monitor and foster.</div><div><br /></div><div>If you are going to become a TTL, make sure you get enough knowledge about these topics above. It is your responsibility to become knowledgeable, or else you will spend years or fumbling in the darkness and learn by trial and error!</div>Amr Noamanhttp://www.blogger.com/profile/17439075869608575763noreply@blogger.com4tag:blogger.com,1999:blog-8697049364383220481.post-54668853281890689002014-08-30T00:21:00.000+03:002014-09-01T07:49:47.327+03:00Back From South Africa! Successful talk and Excellent Workshop<div class="separator" style="clear: both; text-align: center;"></div>&nbsp;Two weeks ago, I was invited to deliver a talk and a workshop at AgileAfrica 2014. In fact, this year's edition of the conference is amazing. It is very well organized, the venue is great, and most important, the content of the conference was very well selected.<br /><div><br /></div><div class="separator" style="clear: both; text-align: center;"></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td><a href="http://3.bp.blogspot.com/-Ab7w1rd0dKc/VADh_r0cq2I/AAAAAAAAAfo/q0DB6ErZy3o/s1600/IMG_20140814_181137.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://3.bp.blogspot.com/-Ab7w1rd0dKc/VADh_r0cq2I/AAAAAAAAAfo/q0DB6ErZy3o/s1600/IMG_20140814_181137.jpg" height="225" width="400" /></a></td></tr><tr><td class="tr-caption" style="font-size: 13px;">Joburg from the conference hotel roof. A place full of life!</td></tr></tbody></table><br /><h2><a href="http://agileafrica.jcse.org.za/node/46">How to Fail with Agile</a></h2>My talk was about <a href="http://agileafrica.jcse.org.za/node/46" target="_blank">How to Fail with Agile</a>. Several years ago, I have written an&nbsp;<a href="https://www.scrumalliance.org/community/articles/2014/january/agile-failure-patterns" target="_blank">article</a>&nbsp;about this topic at Scrum Alliance, which listed some failure patterns in agile practice adoption. But, after more years of experience, I have designed this talk into two parts:<br /><ul><li><b>Failure to adopt the agile mindset:</b>&nbsp;Successful agile transformation requires a mind-shift from traditional/fixed mentality to responsive/adaptive mentality. This is why I say that agile adoption is a transformation project of persons, not processes, tools, or customers! If persons fail to change the way they think about software development, it is likely they'll fail to apply scrum, use tools, or convince their customers to be more collaborative.</li><li><b>Failure to adopt some agile practices:</b>&nbsp;Even if people are succeeding in adopting the adaptive and agile mentality, they may still fail in adopting practices. The main reason in my opinion is that the team does not grasp the value of practices. The second reason is implementing one practice while it will never succeed except with another practice. I called this twin practices.&nbsp;</li></ul><div><h2></h2><h2></h2><h2><a href="http://agileafrica.jcse.org.za/workshops/noaman">Sustainable Legacy Code Refactoring Workshop</a></h2>I have also conducted a one-day&nbsp;<a href="http://agileafrica.jcse.org.za/workshops/noaman" target="_blank">refactoring workshop</a>,&nbsp;which I used to deliver in Egypt for many years now. However, in South Africa, I have introduced several changes to the way the workshop is delivered. This, in my opinion, was a turning point in the workshop effectiveness!<br /><br />In this edition of the workshop, I tried to resolve many issues faced &nbsp;in previous rounds. For example, issues with tools setup, being overwhelmed with the too many questions and issues faced by trainees, unable to track the progress of individuals doing the exercises; sometimes, I completely lost several attendees who check out from the exercise due to issues they face.<br /><br />These are some of the ideas I tried:<br /><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td><a href="http://4.bp.blogspot.com/-9a414ePPdOM/VADh_pjXYhI/AAAAAAAAAfs/3Q_dNZ5nIX0/s1600/IMG_20140813_130409.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://4.bp.blogspot.com/-9a414ePPdOM/VADh_pjXYhI/AAAAAAAAAfs/3Q_dNZ5nIX0/s1600/IMG_20140813_130409.jpg" height="360" width="640" /></a></td></tr><tr><td class="tr-caption" style="font-size: 13px;"><b>Working in pairs</b> was a great enabler. Even if you are a genius, you will need someone to remind you with a missing semicolon or an open bracket!</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td><a href="http://1.bp.blogspot.com/-xx3NM-WnXNY/VADh88R2xGI/AAAAAAAAAfY/JGCyQEtX6Hs/s1600/IMG_20140813_130351.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://1.bp.blogspot.com/-xx3NM-WnXNY/VADh88R2xGI/AAAAAAAAAfY/JGCyQEtX6Hs/s1600/IMG_20140813_130351.jpg" height="360" width="640" /></a></td></tr><tr><td class="tr-caption" style="font-size: 13px;">A <b>task board for every pair</b>, in which they show their progress with the workshop exercises. This gave me visibility of progress and problems, and enabled me adjust the pace accordingly.<br /><br /></td></tr></tbody></table><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td><a href="http://2.bp.blogspot.com/-_yWFVy2HoV0/VADkRc--DuI/AAAAAAAAAgA/C41TCWEYUu4/s1600/IMG_20140813_1303321.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://2.bp.blogspot.com/-_yWFVy2HoV0/VADkRc--DuI/AAAAAAAAAgA/C41TCWEYUu4/s1600/IMG_20140813_1303321.jpg" height="235" width="400" /></a></td></tr><tr><td class="tr-caption" style="font-size: 13px;"><b>On-Wall Reference.</b> A technique that I used to help the trainees. They can instantly get help about possible refactorings that they may apply to work with exercises.&nbsp;</td></tr></tbody></table>I have also introduced several key enhancements in the workshop, like writing detailed step-by-step guidelines, adding breaks in which I explain key concepts in between exercises, working in iterations, and some other enhancements in the training content.<br /><br />Here are some of the written feedback which I received from the workshop attendees:<br /><div><ul><li>A very enlightening workshop! The importance of refactoring code was greatly realized during this workshop&nbsp;</li><li>A very informative workshop. Very useful. Will try to incorporate the lessons learned&nbsp;</li><li>Great workshop. would be advantageous if it was spread out to two days. This would allow people to put to practice the tools and material learn. We then could see how we’ve absorbed the material better.&nbsp;</li><li>Helpful workshop. Fully appreciated the importance of code refactoring techniques&nbsp;</li><li>Very instructive course. I have learned how to refactor a code using modern tools than manual refactoring.</li><li>Awesome workshop. Thanks Amr !!</li></ul><div>Actually, it was amazing to receive all this positive feedback al7amdulillah (thanks for Allah). Soon inshaAllah, I will plan several other public rounds in Egypt and the Middle East.&nbsp;</div></div></div>Amr Noamanhttp://www.blogger.com/profile/17439075869608575763noreply@blogger.com1Johannesburg, South Africa-26.2041028 28.047305100000017-26.432114300000002 27.724581600000018 -25.9760913 28.370028600000015tag:blogger.com,1999:blog-8697049364383220481.post-65920566475200650102014-08-18T12:10:00.002+03:002014-08-24T13:44:45.034+03:00What Makes Maintenance Goes Awry?An excellent analysis of the maintenance profession in Dennis Smith's book: <a href="http://www.amazon.com/Designing-Maintainable-Software-Dennis-Smith/dp/0387987835" target="_blank">Designing Maintainable Software</a>. According to Dennis, the profession of maintenance makes programmers working on maintenance feel that they are inferior to their colleagues working on new development, and they are generally perceived to be less competent and doing less important job in the software team in general. According to Dennis, this positively complicates code because this process selects the most junior and least competent programmer to maintain code in an unprofessional and improper way, which makes code become poor, if not already very poor:<br /><br />Here is a book excerpt on page 8 describing the problem:<br /><blockquote class="tr_bq">"Careers in programming typically begin by maintaining computer software . Maintenance is considered a relatively harmless activity where entry level programmers can become proficient in the craft (Gorla 91; Rombach 91)"</blockquote>This, in my opinion is the basic assumption, which makes things go awry with maintenance, which is maintenance is relatively easy and does not need experienced programmers to perform.<br /><blockquote class="tr_bq">"While in maintenance, programmers are expected to obtain a thorough understanding of the department's software conventions, the idiosyncrasies of computer equipment, and the company's culture and methods of operation. Programmers in maintenance are aware that they are at the bottom of the professional hierarchy and look forward to leaving their present assignment. Maintainers demonstrating superior ability advance into more creative positions, such as development programmer, systems analyst, or information specialist. Other's migrate to different positions within the company, or gain employment in another concern where rewards and opportunity for professional growth are more promising. The rest have maintenance as a career."</blockquote>Then, he says the result of this approach:<br /><blockquote class="tr_bq">"That leaves the task of keeping software properly functioning to programmers who are poorly motivated, have low esteem, and possess marginal skills (Glass &amp; Noiseaux 81)"</blockquote>This is an excellent articulation of one of the problems that we face in this profession. There are other major differences which he lists among comparing working for maintenance or new development:<br /><ol><li>Maintainers usually work individually while new development work in teams</li><li>There are almost no planning which takes place. This opens the door for a lot of up's and down's in the maintainer's work. This in practice creates a non-sustainable career.</li><li>Maintainers usually does other tasks which are marginal an even less important than programming (in their opinion) so that to fill the gaps in their free time.&nbsp;</li></ol>Amr Noamanhttp://www.blogger.com/profile/17439075869608575763noreply@blogger.com0tag:blogger.com,1999:blog-8697049364383220481.post-31193896344464803542014-08-03T23:09:00.000+03:002014-08-03T23:09:38.656+03:00How Kanban Works<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-cXm0qt5mDLA/U96VcPyTvTI/AAAAAAAAAdA/ILv4KXW7CBk/s1600/kanban.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-cXm0qt5mDLA/U96VcPyTvTI/AAAAAAAAAdA/ILv4KXW7CBk/s1600/kanban.png" height="220" width="320" /></a></div><br /><br />This is the title of my first article on infoq.com: <a href="http://www.infoq.com/articles/how-kanban-works" target="_blank">How Kanban Works</a>, published on July 31st 2014. In this article, I have tried to explain using examples and case studies how (or why) kanban works in software development.<br /><br />Have a look at it and let me know your opinion.Amr Noamanhttp://www.blogger.com/profile/17439075869608575763noreply@blogger.com1tag:blogger.com,1999:blog-8697049364383220481.post-68827757191610999642014-05-18T13:48:00.001+03:002014-05-18T13:48:59.621+03:00Detect Code Duplicates Using ConQATFinally, I had sometime to do this simple and invaluable tutorial on your first steps with <a href="https://www.cqse.eu/en/products/conqat/tutorials/clone-detection/" target="_blank">ConQAT </a>to detect code clones.<br /><ul><li>Open eclipse with conqat enabled</li><li>From the file menu - New - Other - ConQAT - Run Config:</li></ul><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-vhrz3ywqhh8/U3iBTg8kVVI/AAAAAAAAAWs/bzaJtcPKg2w/s1600/New+Project_0.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-vhrz3ywqhh8/U3iBTg8kVVI/AAAAAAAAAWs/bzaJtcPKg2w/s1600/New+Project_0.png" height="247" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"></div><div><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-nhUY40ETCX8/U3iBVyuQQsI/AAAAAAAAAXQ/EY2zXXiNLNA/s1600/New_ConQAT_Run_Config.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-nhUY40ETCX8/U3iBVyuQQsI/AAAAAAAAAXQ/EY2zXXiNLNA/s1600/New_ConQAT_Run_Config.png" height="380" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-gMSMSADmg1o/U3iBWu4EpeI/AAAAAAAAAXc/vLG4uVwDrj0/s1600/New_ConQAT_Run_Config_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-gMSMSADmg1o/U3iBWu4EpeI/AAAAAAAAAXc/vLG4uVwDrj0/s1600/New_ConQAT_Run_Config_1.png" height="400" width="341" /></a></div><br /><ul><li>&nbsp;Select a parent project to create the conqat config. This may be any project or folder, even an empty project.&nbsp;</li></ul></div><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-kw5dBisrdLQ/U3iD8CBX8II/AAAAAAAAAYA/AdQaasgBCxw/s1600/Select_Project.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-kw5dBisrdLQ/U3iD8CBX8II/AAAAAAAAAYA/AdQaasgBCxw/s1600/Select_Project.png" height="367" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><br /><br /><div class="separator" style="clear: both;"></div><ul><li style="text-align: left;">Fill the missing parameters, then click the launch config link as in the next screen shot:&nbsp;</li></ul><div style="margin-left: 1em; margin-right: 1em; text-align: center;"><a href="http://3.bp.blogspot.com/-uao9q4G50Xo/U3iEPJELvWI/AAAAAAAAAYI/I_2--i_XqIo/s1600/Run_Config.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a><a href="http://3.bp.blogspot.com/-uao9q4G50Xo/U3iEPJELvWI/AAAAAAAAAYI/I_2--i_XqIo/s1600/Run_Config.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-uao9q4G50Xo/U3iEPJELvWI/AAAAAAAAAYI/I_2--i_XqIo/s1600/Run_Config.png" height="207" width="400" /></a></div><br /><div><div class="separator" style="clear: both;"></div><ul><li>After the run completes, and xml file containing all the clones are generated in the output folder. To view the clones, , goto clone detection - open clone file.&nbsp;</li></ul><div style="margin-left: 1em; margin-right: 1em; text-align: center;"><a href="http://1.bp.blogspot.com/-yq57YxXSAOk/U3iBXpWKU7I/AAAAAAAAAXo/JmfjbQf0iR4/s1600/Open_clones_file.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a><a href="http://1.bp.blogspot.com/-yq57YxXSAOk/U3iBXpWKU7I/AAAAAAAAAXo/JmfjbQf0iR4/s1600/Open_clones_file.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-yq57YxXSAOk/U3iBXpWKU7I/AAAAAAAAAXo/JmfjbQf0iR4/s1600/Open_clones_file.png" height="220" width="400" /></a></div><br /><ul><li>Here you are:</li></ul><a href="http://2.bp.blogspot.com/-81_O2K4p5g0/U3iBUl7hfbI/AAAAAAAAAXE/_VJAJ9Xk0lY/s1600/Clones_perspective.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" src="http://2.bp.blogspot.com/-81_O2K4p5g0/U3iBUl7hfbI/AAAAAAAAAXE/_VJAJ9Xk0lY/s1600/Clones_perspective.png" height="520" width="640" /></a><br /><div class="separator" style="clear: both; text-align: center;"></div><ul><li style="text-align: left;">Don't forget to open the clones perspective. This will help you visualize the clones.</li></ul><br /><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-fBq-vzOzuys/U3iBWw3GI0I/AAAAAAAAAXg/OdGDITTa8nY/s1600/Open_Clone_perspective.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-fBq-vzOzuys/U3iBWw3GI0I/AAAAAAAAAXg/OdGDITTa8nY/s1600/Open_Clone_perspective.png" /></a></div></div>Amr Noamanhttp://www.blogger.com/profile/17439075869608575763noreply@blogger.com0tag:blogger.com,1999:blog-8697049364383220481.post-82295804329538717662014-04-27T14:14:00.001+02:002014-04-27T14:28:26.095+02:00Diagrams of EffectsDiagrams of Effects were first introduced in the famous four-volume series: <a href="http://www.amazon.com/Quality-Software-Management-Systems-Thinking/dp/0932633722" target="_blank">Quality Software Management by Gerald Weinberg</a>. It is a great enabler when trying to understand the dynamics of a system exhibiting non-linear behavior, very similar to software development team systems. <br /><br />Diagrams of Effects are similar to <a href="http://systemsandus.com/2012/08/15/learn-to-read-clds/" target="_blank">Causal Loop Diagrams (CLD)</a>, but it is slightly different in notation and is more powerful in modeling human interventions in the system. A diagram of effects consists primarily of nodes and arrows. Each node corresponds to a measurable quantity. Easy arrow corresponds to an effect (whether positive or negative) which the source node exhibit on the target node. This is a description of the diagram elements:<br /><br /><table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-yfti-tbllook: 1184;"><tbody><tr> <td style="border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 99.9pt;" width="133"><div align="center" class="MsoEndnoteText" style="text-align: center;"><b>Element</b><o:p></o:p></div></td> <td style="border-left: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 1.5in;" width="144"><div align="center" class="MsoEndnoteText" style="text-align: center;"><b>Notation</b><o:p></o:p></div></td> <td style="border-left: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 234.9pt;" width="313"><div class="MsoEndnoteText"><div style="text-align: center;"><b>Description<o:p></o:p></b></div></div></td> </tr><tr style="height: 44.95pt; mso-yfti-irow: 1;"> <td style="border-top: none; border: solid windowtext 1.0pt; height: 44.95pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 99.9pt;" width="133"><div class="MsoEndnoteText">Node<o:p></o:p></div></td> <td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 44.95pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 1.5in;" width="144"><div align="center" class="MsoEndnoteText" style="text-align: center;"><u><strike><img border="0" src="http://4.bp.blogspot.com/-PhNq5fTGOXo/U1zl2wRF9CI/AAAAAAAAAUg/gA8PB5AaveE/s1600/node.png" /></strike></u></div></td> <td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 44.95pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 234.9pt;" width="313"><div class="MsoEndnoteText">A measured quantity. It can be actual measurement, or deduced from observation or by experience<o:p></o:p></div></td> </tr><tr> <td style="border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 99.9pt;" width="133"><div class="MsoEndnoteText">Cloud Node<o:p></o:p></div></td> <td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 1.5in;" width="144"><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-OykukOwHX-Q/U1zpXuMp2zI/AAAAAAAAAVA/_82i10U7VgU/s1600/cloud+node.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-OykukOwHX-Q/U1zpXuMp2zI/AAAAAAAAAVA/_82i10U7VgU/s1600/cloud+node.png" /></a></div><div align="center" class="MsoEndnoteText" style="text-align: center;"><o:p></o:p></div></td> <td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 234.9pt;" width="313"><div class="MsoEndnoteText">A measurable quantity, although actual measurement may not be done. Or, it may represent a conceptual measurement (like stress, pressure, etc.) which may be too expensive to measure, or just not worth the trouble. <o:p></o:p></div></td> </tr><tr> <td style="border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 99.9pt;" width="133"><div class="MsoEndnoteText">Natural Positive Effect<o:p></o:p></div></td> <td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 1.5in;" width="144"><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-3t244z2cTZQ/U1zl37Kb_TI/AAAAAAAAAUs/AXTJ6Yhon00/s1600/positive_natural_effect.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-3t244z2cTZQ/U1zl37Kb_TI/AAAAAAAAAUs/AXTJ6Yhon00/s1600/positive_natural_effect.png" /></a></div><div align="center" class="MsoEndnoteText" style="text-align: center;"><o:p></o:p></div></td> <td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 234.9pt;" width="313"><div class="MsoEndnoteText"><a href="https://www.blogger.com/blogger.g?blogID=8697049364383220481" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=8697049364383220481" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=8697049364383220481" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=8697049364383220481" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=8697049364383220481" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a>If A moves in one direction, B moves in the same direction. This effect is natural (without human intervention)<o:p></o:p></div></td> </tr><tr> <td style="border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 99.9pt;" width="133"><div class="MsoEndnoteText">Natural Negative Effect<o:p></o:p></div></td> <td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 1.5in;" width="144"><div align="center" class="MsoEndnoteText" style="text-align: center;"><a href="http://2.bp.blogspot.com/-ww9QcU8o_TA/U1zl1b_kJnI/AAAAAAAAAUc/L84p4sLzsZs/s1600/negative_natural_effect.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-ww9QcU8o_TA/U1zl1b_kJnI/AAAAAAAAAUc/L84p4sLzsZs/s1600/negative_natural_effect.png" /></a></div><br /></td><td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 234.9pt;" width="313"><div class="MsoEndnoteText">If A moves in one direction, B moves in the opposite direction. This effect is natural (without human intervention)<o:p></o:p></div></td> </tr><tr> <td style="border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 99.9pt;" width="133"><div class="MsoEndnoteText">Positive Human Intervention<o:p></o:p></div></td> <td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 1.5in;" width="144"><div align="center" class="MsoEndnoteText" style="text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-0vQrydzHPZg/U1zl4-WvHwI/AAAAAAAAAU4/7RHbbhY-KeA/s1600/positive_human_intervention.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-0vQrydzHPZg/U1zl4-WvHwI/AAAAAAAAAU4/7RHbbhY-KeA/s1600/positive_human_intervention.png" /></a></div></div></td><td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 234.9pt;" width="313"><div class="MsoEndnoteText"><a href="https://www.blogger.com/blogger.g?blogID=8697049364383220481" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=8697049364383220481" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=8697049364383220481" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=8697049364383220481" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=8697049364383220481" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a>Indicates a human intervention which makes the affected measurement move in the same direction as the movement of the cause.<o:p></o:p></div></td> </tr><tr> <td style="border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 99.9pt;" width="133"><div class="MsoEndnoteText">Negative Human Intervention<o:p></o:p></div></td> <td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 1.5in;" width="144"><div align="center" class="MsoEndnoteText" style="text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-LkwdaCENy-0/U1zl1AVlOVI/AAAAAAAAAUU/p15lYQ6-Zw8/s1600/negative_human_intervention.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-LkwdaCENy-0/U1zl1AVlOVI/AAAAAAAAAUU/p15lYQ6-Zw8/s1600/negative_human_intervention.png" /></a></div></div></td> <td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 234.9pt;" width="313"><div class="MsoEndnoteText">Indicates a human intervention which makes the affected measurement move in the opposite direction as the movement of the cause.<o:p></o:p></div></td> </tr><tr> <td style="border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 99.9pt;" width="133"><div class="MsoEndnoteText">Human intervention with open choice of Effect<o:p></o:p></div></td> <td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 1.5in;" width="144"><div align="center" class="MsoEndnoteText" style="text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-FE6LYf64zrQ/U1zl4oztgKI/AAAAAAAAAU0/MkepkwYKIxM/s1600/open_intervention.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-FE6LYf64zrQ/U1zl4oztgKI/AAAAAAAAAU0/MkepkwYKIxM/s1600/open_intervention.png" /></a></div></div></td> <td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0in 5.4pt 0in 5.4pt; width: 234.9pt;" width="313"><div class="MsoEndnoteText">Indicates a human intervention which makes the affected measurement move either in the same direction or the opposite direction, depending on the intervention. <o:p></o:p></div></td> </tr></tbody></table><br /><h3><a href="https://www.blogger.com/blogger.g?blogID=8697049364383220481" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=8697049364383220481" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=8697049364383220481" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=8697049364383220481" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=8697049364383220481" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=8697049364383220481" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=8697049364383220481" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a>Reinforcing &amp; Balancing Loops:</h3><div>What is interesting about Diagrams of Effects is that they reveal Reinforcing loops and Balancing loops. Reinforcing loops are cycles of effects which reinforce each other and may drive the system to failure. In the following example, more bugs lead to higher levels of stress which leads to more bugs. Also, it works in the other way as well, less bugs leads to less stress which leads to less bugs: <br /><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-7JXyiKbQ1Hw/U1zpa_uxJdI/AAAAAAAAAVU/kefvsk3QbMM/s1600/reinforcing_loop.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-7JXyiKbQ1Hw/U1zpa_uxJdI/AAAAAAAAAVU/kefvsk3QbMM/s1600/reinforcing_loop.png" /></a></div><br /><br />Another type of feedback loops is the Balancing loop, in which one effect balances another. In the following example, in case bugs increase, team exerts more effort in code review which leads to less bugs, which balances the effect of increasing bugs:<br /><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-qTnXUBIkATE/U1zpa6cF6DI/AAAAAAAAAVQ/B9H_5o7gok0/s1600/balancing_loop.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-qTnXUBIkATE/U1zpa6cF6DI/AAAAAAAAAVQ/B9H_5o7gok0/s1600/balancing_loop.png" /></a></div>Such dynamic is not possible to be studied using &nbsp;2-dimentional graphs. This is why Diagrams of Effects is an excellent tool for analyzing complex systems.<br /><br /><div><div class="MsoEndnoteText"></div><div class="MsoNormal"><!--[if gte vml 1]><v:shape id="Picture_x0020_67" o:spid="_x0000_i1025" type="#_x0000_t75" style='width:222.75pt; height:228.75pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\Users\Amr\AppData\Local\Temp\msohtmlclip1\01\clip_image017.emz" o:title=""/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]--><o:p></o:p></div></div></div>Amr Noamanhttp://www.blogger.com/profile/17439075869608575763noreply@blogger.com0tag:blogger.com,1999:blog-8697049364383220481.post-70799906400892123742014-03-29T15:49:00.000+02:002014-03-29T18:08:01.888+02:00Why change? Is your team aware of the value?As change agents, we introduce changes in organizations we work for. Sometimes, these changes are integrated smoothly into the way the team works. In other cases, we find a lot of friction and resistance.<br /><div><br /></div><div>One of the things which facilitates change and alleviates friction is explaining the value of change for your team. Although this seems straight forward, but we usually do not exert enough effort to do that!</div><div><br /></div><div>In one case, I didn't need to explain the value of change, although the change looked so naive and has no value. See what happened when I asked a crowd of 220 audience to change places, and they just did it with no single objection!!</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><span id="goog_1715391618"></span><span id="goog_1715391619"></span><br /></div><iframe allowFullScreen='true' webkitallowfullscreen='true' mozallowfullscreen='true' width='320' height='266' src='https://www.youtube.com/embed/1bX2w2-VrQ8?feature=player_embedded' FRAMEBORDER='0' /><br /><div><br /></div><div>This was part of my keynote last August at AgileAfrica 2013. I understand why would someone just follow a keynote speaker telling him to do something even he/she didn't know its value. If I were sitting at their place I would most probably think that there is value, and I would rather wait till I see it later on.&nbsp;</div><div><br /></div><div>I have done this experiment with smaller groups. The result was completely the opposite. They challenged this request (to change places). They felt skeptical about the value of this change. It was necessary to convince then with the value of change before they do it.&nbsp;</div><div><br /></div><div>Take care when you are leading change in organizations: In order to take the organization one step forward, you would better explain the value of change for the whole organization, or at least for the whole stakeholders who are affected by this change.&nbsp;</div><div><br /></div>Amr Noamanhttp://www.blogger.com/profile/17439075869608575763noreply@blogger.com0