tag:blogger.com,1999:blog-48066407902056838242024-03-06T17:17:29.713+11:00Software Antagonistic PleiotropyBecause whatever makes you stronger will also kill you.Anonymoushttp://www.blogger.com/profile/14224933549638075286noreply@blogger.comBlogger39125tag:blogger.com,1999:blog-4806640790205683824.post-47462006177047865092017-08-06T14:18:00.004+10:002017-08-06T14:30:54.887+10:00Tips on hiring more female developers<div style="-en-clipboard: true;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">For nearly a decade I witnessed ThoughtWorks change from being like every other IT company, struggling to have female developers, to a notable <a href="https://www.americaninno.com/chicago/chicagos-thoughtworks-was-just-named-the-top-company-for-women-in-tech/">59% female of entry level jobs</a>. </span><span style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); font-family: "arial" , "helvetica" , sans-serif; text-size-adjust: none;">I observed ThoughtWorks, as well as the industry at large, trying to change the gender landscape through a swarm of [insert tech here] Girls events and meet ups</span><span style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); font-family: "arial" , "helvetica" , sans-serif; text-size-adjust: none;">, trips to hig</span><span style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); font-family: "arial" , "helvetica" , sans-serif; text-size-adjust: none;">h</span><span style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); font-family: "arial" , "helvetica" , sans-serif; text-size-adjust: none;">-</span><span style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); font-family: "arial" , "helvetica" , sans-serif; text-size-adjust: none;">schools and</span><span style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); font-family: "arial" , "helvetica" , sans-serif; text-size-adjust: none;"> </span><span style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); font-family: "arial" , "helvetica" , sans-serif; text-size-adjust: none;">L</span><span style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); font-family: "arial" , "helvetica" , sans-serif; text-size-adjust: none;">inked</span><span style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); font-family: "arial" , "helvetica" , sans-serif; text-size-adjust: none;">-</span><span style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); font-family: "arial" , "helvetica" , sans-serif; text-size-adjust: none;">I</span><span style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); font-family: "arial" , "helvetica" , sans-serif; text-size-adjust: none;">n </span><span style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); font-family: "arial" , "helvetica" , sans-serif; text-size-adjust: none;">p</span><span style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); font-family: "arial" , "helvetica" , sans-serif; text-size-adjust: none;">osts. Don’t get me wrong. These are all valid, good and necessary, but unfortunately insufficient. When ThoughtWorks was planning how to disrupt themselve</span><span style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); font-family: "arial" , "helvetica" , sans-serif; text-size-adjust: none;">s</span><span style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); font-family: "arial" , "helvetica" , sans-serif; text-size-adjust: none;">,</span><span style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); font-family: "arial" , "helvetica" , sans-serif; text-size-adjust: none;"> </span><span style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); font-family: "arial" , "helvetica" , sans-serif; text-size-adjust: none;">I</span><span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><span style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); font-family: "arial" , "helvetica" , sans-serif; text-size-adjust: none;">often doubted that anything would ever change. Nevertheless they did it, and now several other companies like Envato, REA, Seek and MYOB are desperately trying to change their own landscapes with various degrees of success.</span></div>
<div style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); -webkit-text-stroke-width: 0px; color: black; font-variant-caps: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-size-adjust: none; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); -webkit-text-stroke-width: 0px; color: black; font-variant-caps: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-size-adjust: none; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">In my last recruitment journey to recruit people last year I saw eight new comers join REA. Four females, three being developers</span><span style="background-color: white; color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">;</span><span style="background-color: white; color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"> </span><span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">I</span> <span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">reckon something worked. </span><span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">This post is an attempt to list concrete actions and</span> <span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">good ideas that I believe will help with</span><span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"> </span><span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">hiring more female technologists.</span>
</span></div>
<div style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); -webkit-text-stroke-width: 0px; color: black; font-variant-caps: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-size-adjust: none; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); -webkit-text-stroke-width: 0px; color: black; font-variant-caps: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-size-adjust: none; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="color: black; font-weight: bold; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Be prepared to wait until you have females short-listed</span></span></div>
<div style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); -webkit-text-stroke-width: 0px; color: black; font-variant-caps: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-size-adjust: none; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">It’s very simple reasoning: there are less females looking for jobs, ergo, it takes longer to find them. Whenever there’s time pressure to hire, chances are that a male will be hired. The action here is to, well, not act. Wait until you have female candidates. One could say that you’d be rejecting males. That is not the case. Make it a fair competition by allowing females to come to the shortlist. I tell you, there will be males available to compete at most times. If you prefer to be blunt, and Victoria</span><span style="background-color: white; color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">,</span><span style="background-color: white; color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"> </span><span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">Australia is your jurisdiction, use the <a href="http://www.austlii.edu.au/au/legis/vic/consol_act/eoa2010250/s12.html">Special Measures of the Equal Opportunity Act 2010 - Sect 12</a></span><span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"> to focus on women only.</span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><br /></span></span></div>
<div style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); -webkit-text-stroke-width: 0px; color: black; font-variant-caps: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-size-adjust: none; text-transform: none; white-space: normal; word-spacing: 0px;">
</div>
<div style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); -webkit-text-stroke-width: 0px; color: black; font-variant-caps: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-size-adjust: none; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="color: black; font-weight: bold; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Aim to hire more females at junior level</span></span></div>
<div style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); -webkit-text-stroke-width: 0px; color: black; font-variant-caps: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-size-adjust: none; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">Few female programmers reach senior roles. This is due to long term cultural factors that actively discourages them and simply because it’s quite hard for young women to return to workforce after maternity</span> <span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">leave</span><span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"> </span><span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">and still be at the cusp of technology. ThoughtWorks has a program notable initiative</span><span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"> </span><span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">in this space called <a href="https://info.thoughtworks.com/vapasi">Vapasi</a></span><span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">. </span>
</span></div>
<div style="orphans: auto; text-align: start; text-indent: 0px; widows: auto;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">Aim your efforts at the more junior roles and create a work environment that encourages growth. REA has an internal programme</span><span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"> where junior females are paired from day one with senior female leaders to establish safety and growth opportunities. The action item here is be even more aggressive in tilting the hiring scales of grads to the female side. I’m also a fan of programs such as <a href="https://www.myob.com/au/careers/MYOB-developHER-program">DevelopHer</a></span><span style="text-indent: 0px;"> as a way to up-skill and subsequently offer roles to women.</span></span></div>
<div style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); -webkit-text-stroke-width: 0px; color: black; font-variant-caps: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-size-adjust: none; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); -webkit-text-stroke-width: 0px; color: black; font-variant-caps: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-size-adjust: none; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="color: black; font-weight: bold; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Create the right wording for job ads</span></span></div>
<div style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); -webkit-text-stroke-width: 0px; color: black; font-variant-caps: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-size-adjust: none; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">Technology job ads are notorious for being just a long list of</span><span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"> </span><span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">three </span><span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">letter acronyms sprinkled with leadership buzzwords. And these buzzwords are usually male lingo such as lead, drive, courage, ambition, decide, etc. Ads like this actively drive women away. I’d say that some ads drive humans away, but no one wants to work at these places anyway. There <a href="https://github.com/lovedaybrooke/gender-decoder">a tool to help assess how gender biased your ad is</a></span><span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">. Use it and potentially have a check to ensure all ads have a 2:1 ratio of female to male words. On top of that, write about things that women care. How safe and encouraging the workplace is. How togetherness is prevalent and how no one is belittled by being herself.</span></span></div>
<div style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); -webkit-text-stroke-width: 0px; color: black; font-variant-caps: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-size-adjust: none; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); -webkit-text-stroke-width: 0px; color: black; font-variant-caps: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-size-adjust: none; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="color: black; font-weight: bold; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Make interviews female friendly by having females carrying out interviews</span></span></div>
<div style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); -webkit-text-stroke-width: 0px; color: black; font-variant-caps: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-size-adjust: none; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Let’s say that your jobs ads are good and female developers applied for the role because they believe your company is right for them. Now it’s interview time and your female friendly company puts candidates in rooms with three men to assess their skills and cultural fit. That doesn’t sound very consistent, does it? The solution here is: have females interviewers for female candidates. Or at least a high ratio. If the immediate team doesn’t have any females yet, ask for help from other teams. This also helps growing internal senior female devs. Interviewing skills are core to senior technical folk. </span></span></div>
<div style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); -webkit-text-stroke-width: 0px; color: black; font-variant-caps: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-size-adjust: none; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); -webkit-text-stroke-width: 0px; color: black; font-variant-caps: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-size-adjust: none; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="color: black; font-weight: bold; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Remove bias on code reviews</span></span></div>
<div style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); -webkit-text-stroke-width: 0px; color: black; font-variant-caps: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-size-adjust: none; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">Often software companies require candidates to turn in a coding assignment. This is good practice. The action here is to ensure code reviewers can’t tell the gender. The assessment should be based on the code alone. An easy way is to create a pseudonym</span><span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">/code </span><span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">for the candidate that doesn’t give away gender. </span></span></div>
<div style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); -webkit-text-stroke-width: 0px; color: black; font-variant-caps: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-size-adjust: none; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); -webkit-text-stroke-width: 0px; color: black; font-variant-caps: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-size-adjust: none; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="color: black; font-weight: bold; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Encourage your female programmers to be code reviewers</span></span></div>
<div style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); -webkit-text-stroke-width: 0px; color: black; font-variant-caps: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-size-adjust: none; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">That goes hand in hand with creating senior technologies. </span></span></div>
<div style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); -webkit-text-stroke-width: 0px; color: black; font-variant-caps: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-size-adjust: none; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">Having the ability to discern good code from bad code is crucial. A great way to do that is by reviewing code submissions from candidates. Anecdotally female developer</span><span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">s</span><span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"> </span><span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">seem to be less inclined to pass judgement and often shy away from this task. If you are a hiring manager try and encourage a healthy gender balance on the review process</span><span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">.</span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: black; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><br /></span></span></div>
<div style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); -webkit-text-stroke-width: 0px; color: black; font-variant-caps: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-size-adjust: none; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="color: black; font-weight: bold; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Double referral money for female programmers</span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">Engaging with headhunters is expensive. They usually cost 10-15% of the role salary package</span><span style="font-family: "arial" , "helvetica" , sans-serif;">. </span><span style="font-family: arial, helvetica, sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Companies also believe that bringing people in that already have relationships with staff is a good thing as they can vouch for them. A way to accomplish that is by having referral bonuses paid to employees that indicate candidates that get successfully hired. Action here is you want to find people that are hard to find? How about upping the rewards to those that find them. ThoughtWorks used to have referral bonuses for females </span><span style="font-family: "arial" , "helvetica" , sans-serif;">being two times as those for men.</span></span></div>
<div style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); text-size-adjust: none;">
<br />
<div style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); -webkit-text-stroke-width: 0px; color: black; font-variant-caps: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-size-adjust: none; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="color: black; font-weight: bold; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Create a truly female friendly work environment</span></span></div>
<div style="orphans: auto; text-align: start; text-indent: 0px; widows: auto;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="text-indent: 0px;">This is a bit of a chicken and egg problem but I’d say that an all-male team isn't the best place to put newcomer female developers, especially by herself. For them to be happy and want to stay it’s to better to have a female heavy, long running,</span> <span style="text-indent: 0px;">performing</span><span style="text-indent: 0px;"> team and over time rotate newcomers into it. On this topic there’s a myriad of things to do to make the workplace more female friendly but simple things like language, encouraging pairing and flexible working hours work miracles.</span>
</span></div>
<div style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); -webkit-text-stroke-width: 0px; color: black; font-variant-caps: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-size-adjust: none; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.3); -webkit-text-stroke-width: 0px; color: black; font-variant-caps: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-size-adjust: none; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="color: black; font-weight: bold; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Educate your male leaders</span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">It’s not that men are intrinsically bad but at times when workplaces don’t have a balance it’s easy for the male kind to understand what women go through, their challenges and aspirations. The action item here is to invite all male leaders to read <a href="https://leanin.org/book/">Lean In by Sheryl Sandberg</a>, if you're time starved go for the <a href="https://www.youtube.com/watch?v=18uDutylDa4">TED video</a>. This is an excellent first step towards</span><span style="font-family: "arial" , "helvetica" , sans-serif;"> gender understanding.</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Special thanks to <a href="https://www.linkedin.com/in/catalina-p%C3%A9rez-92518068/">Catalina Perez</a> for reviews, ideas and patience.</span></div>
</div>
Anonymoushttp://www.blogger.com/profile/14224933549638075286noreply@blogger.com0tag:blogger.com,1999:blog-4806640790205683824.post-87978687103679056932014-03-19T11:05:00.003+11:002014-03-20T12:36:44.569+11:00Agile Documentation Zeitgeist<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt; text-align: right;">
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">“Truth can only be found in one place: the code.”</span><span style="background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> - Robert C. Martin</span></div>
<b id="docs-internal-guid-c7fcefa3-d7a5-2cb1-70c7-bf49f9f06f40" style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b>
<br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Documentation is unarguably expensive. What about its value? That’s highly questionable. From an Agile perspective, the question of value is ever present, particularly when the topic is documentation.</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span>
<span style="font-family: Arial; font-size: 15px; line-height: 1.15; white-space: pre-wrap;">However, Agile does require some level of formalisation and it is irresponsible to start a project without a backlog, a proper release plan or strategies on how to communicate and report progress.</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Arial; font-size: 15px; line-height: 1.15; white-space: pre-wrap;"><br /></span>
<span style="font-family: Arial; font-size: 15px; line-height: 1.15; white-space: pre-wrap;">The aim of this very << document >> is to singlehandedly save your organisation millions of dollars by avoiding creating documents that are instantaneously superseded, impossible to find in Sharepoint, hard to maintain and that no one ever reads. To achieve this I’ll employ a single, key Agile concept from the Manifesto: working software over comprehensive documentation. </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Arial; font-size: 15px; line-height: 1.15; white-space: pre-wrap;"><br /></span>
<span style="font-family: Arial; font-size: 15px; line-height: 1.15; white-space: pre-wrap;">Keep these in mind when deciding whether to spend time and money writing a document: </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<ul>
<li><span style="color: black; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><b>WRITE</b></span><span style="color: black; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> if the reader (person, not process) is clearly identified.</span></li>
<li><span style="color: black; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><b>WRITE</b></span><span style="color: black; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> if you can sit down (feedback via email doesn’t count) with the reader and confirm that the document delivers the expected value.</span></li>
<li><span style="color: black; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><b>DON’T WRITE</b></span><span style="color: black; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> when it’s a palliative measure to poor work, e.g. commenting code because no one understands it. Instead of writing the comment use the time to make the code self-explanatory instead.</span></li>
<li><span style="color: black; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><b>DON’T WRITE</b></span><span style="color: black; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> documents to use them as a shields in the future, work on building trust instead.</span></li>
<li><span style="color: black; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><b>DON’T WRITE</b></span><span style="color: black; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> documents that people have to be trained on to use.</span></li>
<li><span style="color: black; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><b>THINK</b></span><span style="color: black; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> hard about it if the word “Detailed” is part of the document’s title. The only time something can be truly detailed is at the end. Big upfront design documents are a no-no.</span></li>
<li><span style="color: black; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><b>TRACK</b></span><span style="color: black; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> how much effort is spent on producing documents using story cards in the same way you would with every other piece of work (on the wall and with estimates).</span></li>
</ul>
</div>
<span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Finally, if you are a lead of sorts, PM, IM, etc. let the team create whatever makes sense for them and focus exclusively on documents that must be produced to communicate with other teams.</span>Anonymoushttp://www.blogger.com/profile/14224933549638075286noreply@blogger.com0tag:blogger.com,1999:blog-4806640790205683824.post-44165365469710531552014-02-27T11:31:00.002+11:002014-02-27T11:37:53.600+11:00Installing Jenkins plugins in servers with no internet access<span style="font-family: Arial, Helvetica, sans-serif;">This is a simple task but I get a lot of questions on how to install plugins when a Jenkins server doesn't have access to the public internet, which is reality for most corporate setups.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">After you choose the plugin, go the <a href="https://updates.jenkins-ci.org/download/plugins">updates url</a> and directly grab the latest </span><span style="font-family: Courier New, Courier, monospace;">.hpi</span><span style="font-family: Arial, Helvetica, sans-serif;">. Let's say you want <a href="https://updates.jenkins-ci.org/download/plugins/conditional-buildstep/">Conditional Build Step</a>. Be aware that several plugins, including Conditional Build Step, have dependencies and you'll need to download and install them yourself. To find out what are the dependencies look up the relevant <a href="https://wiki.jenkins-ci.org/display/JENKINS/Plugins">wiki page</a> and download the equivalent </span><span style="font-family: 'Courier New', Courier, monospace;">.hpi</span><span style="font-family: Arial, Helvetica, sans-serif;">(s)</span><span style="font-family: Arial, Helvetica, sans-serif;">.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">Finally, to install the plugin simply go to the Jenkins web-ui under Manage Jenkins > Manage Plugins > Advanced or </span><span style="font-family: Courier New, Courier, monospace;">http://[JENKINS_URL]/pluginManager/advanced</span><span style="font-family: Arial, Helvetica, sans-serif;"> and upload the </span><span style="font-family: Courier New, Courier, monospace;">.hpi</span><span style="font-family: Arial, Helvetica, sans-serif;">(s), dependencies first.</span><br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQGxL17gd98Q-L1kkPuo56NlL0ob9lg4UjGtycgmDwDFyCTTQps4MAmnQZle4Hf1l59ucrfn19SaORpspllsgEOcWHr25uaBRi4xHoFQzaqt91tqgDw-nhTp4hrAzDUfFkCp0PIMGBPlRd/s1600/Screen+Shot+2014-02-27+at+11.21.35+am.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQGxL17gd98Q-L1kkPuo56NlL0ob9lg4UjGtycgmDwDFyCTTQps4MAmnQZle4Hf1l59ucrfn19SaORpspllsgEOcWHr25uaBRi4xHoFQzaqt91tqgDw-nhTp4hrAzDUfFkCp0PIMGBPlRd/s1600/Screen+Shot+2014-02-27+at+11.21.35+am.png" height="88" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: Arial, Helvetica, sans-serif;">If you accidentally forget a dependency it will look like this, note the </span><span style="font-family: Courier New, Courier, monospace;">java.io.IOException: Dependency run-condition (1.0) doesn't exist</span><span style="font-family: Arial, Helvetica, sans-serif;">.</span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5-PIQvdhedMmzb2Jyao1yKpli77e1Y2x4Uw58k5WQqPQ3Ka_W56qFUTxCzFaMUhyPrgIM9vCvgkauRZbY0It0ySL_XKoxO11FVV8zTWaEmFzXoixcVnTkEsdUIb1Ta1FMfutiSiTcH1sg/s1600/Screen+Shot+2014-02-27+at+11.34.22+am.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5-PIQvdhedMmzb2Jyao1yKpli77e1Y2x4Uw58k5WQqPQ3Ka_W56qFUTxCzFaMUhyPrgIM9vCvgkauRZbY0It0ySL_XKoxO11FVV8zTWaEmFzXoixcVnTkEsdUIb1Ta1FMfutiSiTcH1sg/s1600/Screen+Shot+2014-02-27+at+11.34.22+am.png" height="123" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<br />Anonymoushttp://www.blogger.com/profile/14224933549638075286noreply@blogger.com1tag:blogger.com,1999:blog-4806640790205683824.post-74491173941847397882014-02-25T21:55:00.002+11:002014-02-25T22:05:40.669+11:00Jenkins HP's ALM Quality Center (QC) REST integration<span style="font-family: Arial, Helvetica, sans-serif;">QC is definitely not something I'd spend money or time on, actually I'd try and stay away from it altogether. But at times bad decisions are made and these sub-optimal choices filled with blockers and tech-debt linger on.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">Enough ranting, the topic of this post is that it turns out there are still companies out there that don't have Continuous Integration at all. And introducing CI alone isn't enough to make people care about the build health it's health and whether it's alerting the team of bad things that no one was aware of. Still, at least in this particular place, QC reigns supreme. If bugs are logged in QC people will fight them. There are triage meetings and QC-report-fueled bug squashing rounds.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">So integration seemed like a good way to get people's attention. Simple plan. Every time a build in Jenkins fails it automagically creates a defect in QC, voila!</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">I started off down the wrong path by installing Quality Center in a Windows VM and started hunting for the elusive OTAClient.dll, that was a bad idea. First because I don't want my Jenkins instance running on Windows and second I can't install QC everywhere due to licencing constraints.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">Turns out that version 11 has an API and going straight to it via HTTP proved a to be a simple exercise. Now t</span><span style="font-family: Arial, Helvetica, sans-serif;">hings are slightly more elaborate than what I describe here but if you want the simplest solution possible with minimum coding, all you need to do is hook up a <a href="https://wiki.jenkins-ci.org/display/JENKINS/Conditional+BuildStep+Plugin">Conditional Step</a> in Jenkins and, if it FAILs, call the curl commands below in three separate shell execs.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;">curl -b qc_cookies -c qc_cookies -u </span><user_name:password style="font-family: 'Courier New', Courier, monospace;"><</user_name:password><span style="font-family: 'Courier New', Courier, monospace;">USERNAME:PASSWORD></span><span style="font-family: Courier New, Courier, monospace;"> <user_name:password>http:/<qc_server:port>/<</qc_server:port></user_name:password>QC_SERVER:PORT>/</span><span style="font-family: 'Courier New', Courier, monospace;">qcbin/authentication-point/authenticate</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;">curl -b qc_cookies -c qc_cookies -H "Content-Type: application/xml" -X POST -d @</span><user_name:password style="font-family: 'Courier New', Courier, monospace;"><</user_name:password><span style="font-family: 'Courier New', Courier, monospace;">QC_DEFECT_PAYLOAD.xml</span><span style="font-family: 'Courier New', Courier, monospace;">> </span><span style="font-family: Courier New, Courier, monospace;"><qc_defect_payload .xml="">http://</qc_defect_payload></span><user_name:password style="font-family: 'Courier New', Courier, monospace;"><</user_name:password><span style="font-family: 'Courier New', Courier, monospace;">QC_SERVER:PORT>/</span><span style="font-family: 'Courier New', Courier, monospace;">qcbin/rest/domains/</span><user_name:password style="font-family: 'Courier New', Courier, monospace;"><DOMAIN</user_name:password><span style="font-family: 'Courier New', Courier, monospace;">></span><span style="font-family: 'Courier New', Courier, monospace;">/</span><domain style="font-family: 'Courier New', Courier, monospace;">projects/</domain><user_name:password style="font-family: 'Courier New', Courier, monospace;"><</user_name:password><span style="font-family: 'Courier New', Courier, monospace;">PROJECT></span><span style="font-family: 'Courier New', Courier, monospace;">/</span><project style="font-family: 'Courier New', Courier, monospace;">defects</project><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;">curl -b qc_cookies -c qc_cookies http:/<qc_server:port>/</qc_server:port></span><user_name:password style="font-family: 'Courier New', Courier, monospace;"><</user_name:password><span style="font-family: 'Courier New', Courier, monospace;">QC_SERVER:PORT>/</span><span style="font-family: 'Courier New', Courier, monospace;">qcbin/authentication-point/logout</span><br />
<div>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;">These commands will, in order, login, create the new defect via POST according to the XML file in </span><span style="font-family: 'Courier New', Courier, monospace;">QC_DEFECT_PAYLOAD.xml</span><span style="font-family: Arial, Helvetica, sans-serif;"> and logout.</span></div>
<div>
<br /></div>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;">Things to keep in mind:</span></div>
<div>
<ul>
<li><span style="font-family: Arial, Helvetica, sans-serif;">Use a <a href="https://chrome.google.com/webstore/detail/hgmloofddffdnphfgcellkdfbfbjeloo">REST chrome extension</a> like to iron out details before putting everything in Jenkins</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">Don't forget to create </span><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: 'Courier New', Courier, monospace;">QC_DEFECT_PAYLOAD.xml</span> and put that in your Jenkins workspace or a known location</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;">Figuring out the mandatory fields is easy. Just do a GET on </span><span style="font-family: 'Courier New', Courier, monospace;">http:/<qc_server:port>/</qc_server:port></span><span style="font-family: Courier New, Courier, monospace;"><user_name:password><qc_server:port><</qc_server:port></user_name:password>QC_SERVER:PORT>/qcbin/rest/domains/<user_name:password><DOMAIN</user_name:password>>/<domain_name>projects<project_name>/<user_name:password><PROJECT</user_name:password>>/customization/entities/defect/fields?required=true</project_name></domain_name></span><span style="font-family: Arial, Helvetica, sans-serif;">. I'm not sure if it's a validation bug with the installation I was using but some fields that were coming back as mandatory from the endpoint didn't seem to cause trouble if they weren't present in the POST</span></li>
<li><span style="font-family: Arial, Helvetica, sans-serif;"><a href="http://support.openview.hp.com/selfsolve/document/KM997956/binary/ALM11.00_REST_API.html?searchIdentifier=-765a98c0%3a12de84ca170%3a-27ac&resultType=document">QC's api doco</a> is quite helpful (sign-in required)</span></li>
</ul>
</div>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;">A lot can be done with a little bit of <a href="http://curl.haxx.se/docs/manpage.html">CURL magic</a>.</span></div>
Anonymoushttp://www.blogger.com/profile/14224933549638075286noreply@blogger.com0tag:blogger.com,1999:blog-4806640790205683824.post-58945770054312451682014-01-17T14:05:00.000+11:002014-01-21T09:53:07.892+11:00From Fragile to Agile<div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt; text-align: left;">
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">The sun was just peeking through the window of an almost empty level 2 at Zmart Support Centre when Amy entered the Rice room and was quickly followed by Peter.</span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">Amy was a senior project manager. She was known for fixing projects that had gone sour and project Pink was a real lemon. Without delay, Peter got to the point: “You had a great delivery with the Stop&Shop project and I need you to get Pink back on track. You’re the third PM this project’s seen and I’m running out of time. I knew this Agile mumbo jumbo was going to end up badly. What’s wrong with PMP? That’s how we’ve always done things! Anyways, do you reckon you’re the person for the job?”</span></span><br />
<br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">Peter was Head of Special Sales and project Pink would allow Zmart to enter a brand new market segment. He’d been trying to do that for ages. Pink was going to be big for Zmart and for Peter’s career, if he delivered the outcomes outlined in the Business Case. Otherwise, he could kiss that promotion goodbye.</span></span><br />
<br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">Amy knew all of that too well and said: “Don’t worry Peter, I know how to make developers give their best. We’ll step up the pace and get Pink delivered on time and on budget.”</span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">Amy had to get her head around the project very quickly and started with the documents submitted to the Approval Committee: financials, Business Case, Resourcing, the lot. SharePoint had a BRD detailing the requirements as given by the business in workshops and a detailed tech spec with several Design Decisions properly signed off by all sorts of architects. Amy recognised the developers’ names on the resource plan. They were from the vendor’s Bangalore office and got onboarded as soon as requirements were finalised. </span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">“These are good developers,” she thought. </span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">There was a testing plan written by the local testing team, basically saying that they were mobilised and waiting for developers to finish coding and a stack of Outlook messages signed by John Stalton - Pink’s Iteration Manager. In one of them, John talked about how work was coordinated with Bangalore on a daily basis using stand-ups. Coincidently, John arrived in the room and shortly after introductions they were talking about Pink’s problems. </span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">“It’s impossible to get Peter’s time. I’m doing the best he can to fill in the void but we can’t waste time waiting for Peter to sign-off work. As soon as coding is done, I test and, if all works fine, I move the stories to the Done column. But I’ve just recently stopped all of that because we’re breaking existing functionality all the time. I’m always finding bugs! So I told the developers to stop doing new work for one iteration and to concentrate on making the system more stable, ” explained John.</span></span><br />
<br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">“Good idea. When will they finish?” asked Amy.</span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">“Two weeks tops,” said John.</span></span><br />
<br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">“How late is the project?”, Amy probed further.</span></span><br />
<br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">“We were on track, but Peter kept changing requirements all the time. And now, we’re late by at least a month! The previous project manager tried to talk some sense into his head… and, well, let’s say that explains why you’re here,” and John shrugged his shoulders.</span></span><br />
<br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">“Actually it’s six weeks late, four of scope changes and two of fixes,” inferred Amy.</span></span><br />
<br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">John just nodded a shy yes.</span></span><br />
<br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">After the chat with John, Amy wrote an email to Bangalore introducing herself and asking for confirmation on the date they would finish the overhaul. As she typed M-A-N, to add Manish who was one of the developers, Outlook auto-completed to “Manjula Wadhwa.” </span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">Manjula, like Amy, was a senior PM running an Agile project and it was called EPIC. Amy remembered going to one of EPIC’s Showcases and things looked good. The team was happy and on track with delivery dates. “Maybe I can do what Manjula’s doing”, thought Amy and promptly sent her an invite to talk about Pink.</span></span><br />
<br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">The two PMs met briefly and Amy felt slightly confused afterwards. Amy kept replaying Manjula’s words in her head: “Pink shouldn’t have gone Agile. See, your team isn’t collocated and Peter can commit no time. No way that’s Agile.” Amy did retort by saying: “But there are iterations, stand-ups and story cards. That’s Agile, isn’t it?” and Manjula’s facial expression said, without words: “Not at all!”</span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">Amy’s first action to improve Pink was a high priority email to Bangalore, and it read: “Do the bare minimum of fixes and get back to new features ASAP.” The iteration flew by and the more Amy and John tested, the more problems they found. Developers spent all of their effort in fixing bugs and made no real improvements. To make matters worse, in the last day, Peter stormed into the room with shocking news: “I just learnt that the competition is releasing a very similar solution! We must make some changes to ensure Zmart’s got the edge,” blurted Peter. </span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">Amy mustered her courage and said: “The system is unstable, we need to fix its foundations before any new changes happen or features are added.”</span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">“How long are we talking about here?” asked Peter.</span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">Amy had no idea and called John. He looked into spreadsheets and winged: “Another iteration should do.”</span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">“How can that be?” said Amy. “We found hundreds of bugs and haven’t even fixed the original problems, how can it only be two weeks?” she continued.</span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">“Here, check this out, if Bangalore work some late hours and weekends we can still catch up”, John explained.</span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">Amy wasn’t sure. Maybe it was possible. She wanted it to be possible. It had to be! And shortly after another go-even-harder themed email arrived in Bangalore. </span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">Another iteration went by and many bugs got fixed - the system seemed slightly more stable and the team charged towards the new features Peter had asked for. “The backlog still looks full, there’s no way we’re going to be able to finish it all,” says Amy to John who agreed and suggested adding some more developers and reducing the amount of testing that he and Amy were doing. “The testing team will check things when we’re done anyways”, John explained. And with this strategy the team suddenly sprung into incredible speed.</span></span><br />
<br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">Over the last month the Done column grew cobwebs. The extra developers changed that and stories were quickly finding their way to the east side of the Kanban. Amy still tested here and there, just to make sure things were OK. This routine repeated itself for another two iterations and at the end, 90% of the backlog had moved across the wall. </span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">The time to move code into QA finally came. John and Amy paired to plan the deployment activities across infrastructure, the testing team and Bangalore. Estimated effort: two point five days exactly.</span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">A week later Amy’s iPhone email notification chimed. It was the testing team. “Amy, we regret to inform but Pink didn’t pass smoke testing. The infrastructure guys concluded that one of RTS’ interfaces has changed and Pink is still using the old version. You must get Pink up to speed with the new API before any testing takes place. Please keep in mind that the testing environment is fully booked until the end of the quarter.”</span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">“WTF!! How come no one told us that this f@#$# interface changed?!” shouted Amy despairingly at her iPhone.</span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">Bangalore and the EAI team got together to discuss the API upgrade. The conclusion was everything Amy didn’t want to hear and meant redesigning half of what they had already finished. Before QA Pink was only late but now it was simply out of control.</span></span><br />
<br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">Amy knew she had to tell Peter about what happened. Pink wasn’t going to be delivered on time. Failure was not a word in Amy’s dictionary but this new way of working was simply too chaotic and feeling that she was out of her depth was unavoidable. </span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">Once more Amy promised Peter a rescue plan and once more Manjula crossed her mind. “I’ll see if she can help me with this new plan,” pondered Amy. Manjula was happy to try and help because, as a matter of fact, she had already heard about the QA debacle. </span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">“Amy, your team is Fragile, not Agile. If you want to change it, some big steps must be taken,” started Manjula.</span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">“I’m all ears,” replied Amy.</span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">“Pink started the wrong way. It should have never been an Agile project to begin with. The team isn’t physically co-located in the same room and Peter never committed to be part of the team. These two points alone are enough to not run Agile. Also, John keeps on creating stories as he sees fit, estimates them and decides when they’re Done. Bangalore is always overcommitted and, understandably, frustrated. Worst of all, testing is an afterthought. In Agile testing must be an integral part of every iteration, not a separate phase done by another group in isolation,” continued Manjula.</span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">“Yeah, but...” Amy tried to interject.</span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">“There’s more, there’s more,” said Manjula, and continued: ”Continuous Integration running regression tests is non-existent. The last deployment to QA clearly showed that Pink’s dependencies have no tests! How can you be sure any integration point works without tests? You see Amy, delaying integration may seem like a good idea at first because it feels like the team is moving faster, but it’s actually a huge risk. Early testing is key because it alerts the team when changes happen.”</span></span><br />
<br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">When Amy realised Manjula wasn’t going to stop, she opened a spreadsheet on her laptop and turned it to her. It was Pink’s backlog. </span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">“Wow! That’s a lot of stuff to do! How many points can you do per iteration?” asked Manjula.</span></span><br />
<br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">“20 points, but we’re getting better. I’m consistently giving the team a stretch goal of 30. How many points does your team do per iteration?” asked Amy.</span></span><br />
<br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">“12. But that doesn’t really matter. My points are different than yours. More points don’t immediately mean higher productivity because velocity is a mere progress metric. You shouldn’t use it as a target, let alone a stretch one. Overcommitted teams quickly get demotivated and produce even less,” explained Manjula. </span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">“I don’t really know what to say Manjula. With all the meetings and cards I really thought Pink was Agile. I guess it’s Agile only on the surface. It’s like an Agile veneer,” lamented Amy.</span></span><br />
<br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">“Yep and if you want to deliver anything at all, your need needs to implement CI and build some level of automated testing. You’ll need to make time for these to happen. And there’s only two ways to make up time in a project …” Manjula stared at Amy.</span></span><br />
<br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">“... massive de-scoping or pushing dates out, I know. Peter won't be happy with either of the options. On top of that, I don’t even have an environment to test anymore.” finished Amy.</span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">“Get your team together in a room and let them devise a plan,” said Manjula. “The people doing the work are the only ones who can actually estimate effort and commit to work. I suspect you’ll need to reset your project and figure out better ways of organising the team,” then Manjula got up, walked towards a white board, scribbled something and politely left the room wishing Amy the best of luck with trying and transforming Pink into a truly Agile project.</span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">Amy got up and took a photo of the white board, which read:</span></span><br />
<br />
<ul>
<li><span style="font-family: Arial; font-size: 15px; line-height: 17px; white-space: pre-wrap;">No co-location -> no Agile</span></li>
<li><span style="font-family: Arial; font-size: 15px; line-height: 17px; white-space: pre-wrap;">No business commitment -> no Agile</span></li>
<li><span style="font-family: Arial; font-size: 15px; line-height: 17px; white-space: pre-wrap;">No full time testing from offset -> no Agile</span></li>
<li><span style="font-family: Arial; font-size: 15px; line-height: 17px; white-space: pre-wrap;">Implement Continuous Integration (regression and interface integration included)</span></li>
<li><span style="font-family: Arial; font-size: 15px; line-height: 17px; white-space: pre-wrap;">The team decides what Done means</span></li>
<li><span style="font-family: Arial; font-size: 15px; line-height: 17px; white-space: pre-wrap;">Keep a sustainable pace, overtime isn’t manageable</span></li>
<li><span style="font-family: Arial; font-size: 15px; line-height: 17px; white-space: pre-wrap;">Velocity isn’t a target, use it to plan and communicate progress</span></li>
<li><span style="font-family: Arial; font-size: 15px; line-height: 17px; white-space: pre-wrap;">The team commits to the work. Managers don’t distribute stories and tasks</span></li>
</ul>
<br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">It was hot and dark outside when Amy arrived home. A glass of red was the perfect company for career musing. She rehearsed all the things she was going to tell Peter the next day and booked “the” meeting. The invitation’s subject read: “Moving Pink from Fragile to Agile”. Amy hit send and went to her kids' room, still hoping to spend some quality time with them. They were long asleep.</span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">Amy kickstarted the meeting with Pink’s burn-up chart. It had two lines, one with the cumulative number of points delivered so far and a second one with the total number points representing the entire backlog. The two clearly didn’t cross at the desired date, actually they didn’t cross at all!</span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">“Our only chance to deliver Pink is to fix the underlying technical practices and issues and cut back to the minimum number of features. With this approach, even though “incomplete”, some value can be realised and maybe, with the extra revenue flowing in we could justify extending the team to deliver more features in the future,” explained Amy. </span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">“You’re telling me that it’s either this or we run out of funds and nothing gets delivered?” asked Peter.</span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">Amy nodded positively.</span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">“This is our last go at it. If we fail, the project will be canned and we’ll be on the Director’s bad books for a long time. What are you thinking exactly?” queried Peter.</span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">“We hire a full time tester and bring the Bangalore devs here. Then, we run a series of focused workshops, similar to a mini-inception. The idea is to define three things: our minimum viable product - MVP, continuous integration implementation strategy and critical test coverage. Your presence Peter, in all workshops, is crucial,” said Amy.</span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">“Are you kidding me! I have no time as is and you want me to be there full time?” bursted Peter.</span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">“Precisely. Think about it Peter, we haven’t go much so far. Every time we need your input it takes days. We need to move fast and there’s no time for email threads and phone tag. We need you there to make decisions on the spot, inspire the team and keep us real,” explained Amy.</span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">“I guess you’re right. Every time I see the results I feel like if I had spoken with the devs I could explain better what I wanted. OK. I’ll do my best, but there’s a condition - I need an immovable delivery date,” completed Peter.</span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">This MVP inception was fundamental. Amy hired a couple of Agile facilitators to help out driving the workshops and a couple of days later the MVP backlog came to life. Estimates, this time, were given by developers and testers and the release plan was based on the team’s true velocity. It was a plan the team was happy to stand behind and commit to.</span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">Implementing critical automated tests and continuous integration were the first steps undertaken by the team. It wasn’t easy but having these in place created a safety net for the team. This net allowed for changes to be made safely and their confidence rose. The team kept moving forward, always developing tests before the implementation. Pace was sustainable and predictable and Peter no longer wondered what was happening with the project. He now knew it. He’d spent at least three hours daily in the project room and eventual changes to stories took place on the spot, as developers implemented them, safeguarding the deadline.</span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">Pink MVP went live as planned and Peter now believes his team’s capacity to follow through with commitments. He now believes because he was there, present in the room, he shared and influenced the decisive moments that made Pink MVP possible.</span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;"><br /></span></span>
<span style="font-family: Arial;"><span style="font-size: 15px; line-height: 17px; white-space: pre-wrap;">The sun is just peeking through the window of an almost empty level 2 at Zmart Support Centre on the day after go live. Amy is sitting in the Rice room when she feels a light tap on shoulder and hears: “Well done Amy. Tell me, what comes after MVP?” asks Peter with a broad grin on his face.</span></span></div>
Anonymoushttp://www.blogger.com/profile/14224933549638075286noreply@blogger.com0tag:blogger.com,1999:blog-4806640790205683824.post-53584463438235320512013-10-18T16:59:00.002+11:002013-10-18T16:59:28.310+11:00Practice makes perfect<div class="p1">
<span style="font-family: Verdana, sans-serif;">A while ago a study attempted to pinpoint the relationship between repetition and quality. The backdrop was pottery. Pottery students were separated into two groups in the beginning of the term and were told that they would be graded differently. The first group would obtain good marks based on quantity and had to produce as many vases as they could during the term. The second group would be assessed solely on the quality of their work and should turn in a single vase in the end of the term.</span></div>
<div class="p1">
<span style="font-family: Verdana, sans-serif;">When the term started, the quantity-grade students created as many vases as they could. Some were grotesque. But after a while they realised that there was a lot of time being wasted due to rejects and rework. They naturally created a rhythm to try and achieve a sustainable production pace.</span></div>
<div class="p1">
<span style="font-family: Verdana, sans-serif;">The quality-grade students spent most of their time devising the best strategy, investigating techniques and producing plans and designs containing detailed descriptions of how they were going to do the killer vase.</span></div>
<div class="p1">
<span style="font-family: Verdana, sans-serif;">At the end of the term the experiment revealed that the general quality of the quantity-graded students was actually better than the quality-graded ones. As a matter of fact some quality-graded students didn’t turn in a single vase! Through repetition students learned to focus on what gave them speed as well as what got in the way of quality. Because they could keep experimenting until they actually got the results they wanted they were not afraid of trying to get creative with their practices and processes. This result isn’t earth-shattering. As a matter of fact, it simply proves the ever present "practice makes perfect" cliché and, reflects the human need to iterate over and over in order to master a skill.</span></div>
<div class="p2">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div class="p1">
<span style="font-family: Verdana, sans-serif;">Now, let’s take this concept to software development. Teams must integrate, deploy, test and perform various other non-code related activities. When teams forfeit the chance to repeat and learn on such tasks they throw away the chance to master them. Agile teams that want to deliver quality products, fast, master the hard tasks early. Of course time can be a constraint and, in this case, manual execution rules repetition out. That's why we automate. High performance teams have good, well-thought-out Continuous Integration pipelines and invest in learning new skills and techniques that reduce time wasting. If your team has a Kanban wall, iterations and stand-ups but lacks the passion for improvement, automation or avoids dealing with tasks that are in the "too hard" basket, you're not being Agile, you're just doing agile. And you will fail.</span></div>
Anonymoushttp://www.blogger.com/profile/14224933549638075286noreply@blogger.com1tag:blogger.com,1999:blog-4806640790205683824.post-48413764921582241392013-09-07T20:24:00.001+10:002013-09-08T19:26:42.250+10:00The ideal Agile leadership.<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8ieLL72UdsGq1G7gXYZD6WLZggWC6rVuYBEMByOQSSQTNRrM3TZQpQtQ1A3MFtJbNuG_KYwZ8iMstyGFBxfXZqCSTfZ1V7DesNtTtd4zIcB2cMk7M9fK75_k71WlWZ_xlmSgWTYCBi1u4/s1600/leadership.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em; text-align: left;"><img border="0" height="140" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8ieLL72UdsGq1G7gXYZD6WLZggWC6rVuYBEMByOQSSQTNRrM3TZQpQtQ1A3MFtJbNuG_KYwZ8iMstyGFBxfXZqCSTfZ1V7DesNtTtd4zIcB2cMk7M9fK75_k71WlWZ_xlmSgWTYCBi1u4/s200/leadership.jpg" width="200" /></a></div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><span style="font-size: x-large;">I</span><span style="font-size: 13px;"> </span>was thinking about how most management jobs out there in the IT industry suck. So, if I could create the ideal position to lead transformation and foster a great technology department/company it would look somewhat like this.</span><br />
<ul>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Reduce time to respond to market changes and needs by systematically tracking what delivers value and what doesn't, no guesswork allowed</span></li>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Establish a minimalistic culture, where optimising the amount of work not done is at the core</span></li>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Have autonomy to guide teams and technologies to meaningful outcomes by creating products/services that customers want and actually help them</span></li>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Help all parts and roles in the organisation to work well together, through technology enlightenment and better understanding of each other's daily efforts</span></li>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Create a work environment that attracts talent and becomes the envy of other companies. It's key to focus on the roles required and not the people at hand</span></li>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Have a small, easy to use, budget to support pet projects, ideas, communities and encourage people to be innovative</span></li>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Keep work transparent, visible and mercilessly limit the amount of work in progress </span></li>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Create the culture, throughout the organisation, so IT is viewed and treated a business advantage as opposed to a mere cost</span></li>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Invest as much as possible in automating everything: tests, deployments, databases, environment creation, etc. Zero tolerance towards dumb repetitive work, or use Amazon Mechanical Turk for that</span></li>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Stay sharp and competent in relevant technologies by being a doer, keep hands dirty as much as possible</span></li>
</ul>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">On the other hand, these should be avoided:</span><br />
<ul>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Non-sense bureaucracy</span></li>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Taking no risks and spending most of the time keeping the status quo</span></li>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">The concept that downtime is waste and everybody should be working at 100% capacity continuously</span></li>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Getting involved in politics or playing games that only waste time and don't deliver any value to customers, even if inadvertedly</span></li>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Creating products in isolation or that take too long to get exposed to users</span></li>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Being afraid of cutting edge technology because you don't understand it yet</span></li>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Making decisions that can't be operationalised or have high cost of ownership</span></li>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Not carefully considering that some things can't be undone. Ergo, no rushing into development without putting the proper preparation time</span></li>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Having to succeed all of the time and being afraid of failing</span></li>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Grumpy people that have no fun at work</span></li>
</ul>
Anonymoushttp://www.blogger.com/profile/14224933549638075286noreply@blogger.com0tag:blogger.com,1999:blog-4806640790205683824.post-18442655967375258352013-08-23T15:17:00.000+10:002016-11-20T21:03:36.316+11:00Agile anti-patterns list grows stronger<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGq5p9S4A_k8EvJrxgSejOYM3pHgZfU9ZyVF9V2CivKDFdSchYwJAEChHJYSajl7M539tHlJjgxbjKGJwjXi52vVp8EBfAFwwihfRshSBT93OK1CNchYBOIFqWkm1EmycaC8sHgYZhapTR/s1600/121490.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGq5p9S4A_k8EvJrxgSejOYM3pHgZfU9ZyVF9V2CivKDFdSchYwJAEChHJYSajl7M539tHlJjgxbjKGJwjXi52vVp8EBfAFwwihfRshSBT93OK1CNchYBOIFqWkm1EmycaC8sHgYZhapTR/s200/121490.jpg" width="133" /></a><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><span class="Apple-style-span" style="font-size: large;">A</span></span><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">gile has gone mainstream. Companies do it, governments do it, consultants,contractors. Everybody does it. Right? Maybe not. The metaphor that comes to mind is a group of young men discussing sex. It’s cool, new and everybody wants in. The majority say they are doing but the sad fact is that most of them are lying and those that are actually doing it, are doing it wrong.</span><br />
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">After seen Agile done well, and badly I started to become aware of “smells”. These smells are signs that despite of an Agile veneer, it’s not agile at all. A side point is that the word Agile has lost its meaning. It became this silver-bullet-buzzwordy thing and now it’s close to worthless. See, the point is not Agile, the point is to get better at developing software. Hopefully these smells will give you ideas on how to get better at what you and your team do.</span><br />
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><br /></span><b style="background-color: white; color: #015782; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 18px;"><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/agile-smells.html" style="color: #015782; text-decoration: none;">Smells no. 1, 2</a>, </b><b style="color: #333333; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 18px;"><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/more-agile-smells.html" style="color: #015782; text-decoration: none;">3, 4, 5</a>,</b><b style="background-color: white; color: #015782; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 18px;"><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/even-more-agile-smells.html" style="color: #015782; text-decoration: none;"> 6, 7</a>,</b><b style="background-color: white; color: #015782; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 18px;"><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/the-agile-smells-go-on.html" style="color: #015782; text-decoration: none;"> 8, 9, 10</a>, <a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/the-agile-smells-go-on-and-on.html">11, 12</a><a href="http://antagonisticpleiotropy.blogspot.com/2013/08/agile-smells-agile-anti-patterns.html">, 13, 14</a><a href="http://antagonisticpleiotropy.blogspot.com/2013/08/agile-anti-patterns-list.html">, 15 and 16</a></b><br />
<br />
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><b>Smell no. 17 - It's iteration 3 and everything is going according to plan</b></span><br />
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;">In my experience teams don’t actually do that well in the first two or three iterations. It takes a little while to gel together and move stories smoothly across the wall. When I first played a Project/Iteration Manager role I freaked out when Iteration 1 ended and it yielded zero points. Yep, zip, nada. I even thought about cancelling the scheduled showcase because the team had delivered nothing. I carried through though, we had the showcase and clearly stated that despite our best efforts no points were delivered. I desperately attempted to demonstrate progress by enlisting every technical accomplishment to try and convince stakeholders that several stories were virtually done and we had missed them by "this much". Still that zero points was a nagging pebble in my shoe. Iteration 2 got slightly better and the third one almost hit the expected points. On I4 the point floodgates opened and the subsequent one normalised and points plateaued as expected.</span><br />
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;">Over the years I saw this pattern repeat itself a few times. In fact, I haven’t many teams, starting from scratch, create and maintain a steady velocity since offset. This may not a particularly strong smell but it’s a scent :P and I learned to get suspicious when I seeing top to bottom straight lines on a burn-up chart.</span><br />
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><br /></span>
<b style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Smell no. 18 - </b><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><b>No retrospectives</b></span><br />
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;">Teams don’t necessarily have to have every single ritual described in the textbook - (Is there an Agile textbook anyways?) as discussed in <a href="http://antagonisticpleiotropy.blogspot.com/2013/08/agile-anti-patterns-list.html">Too many, too long meeting</a>, but there’s one I never forfeit. A team's responsiveness relates to its ability to deal with constraints, limit work in progress and reduce waste by maximising the amount of things you don't do. To succeed at these three points a team must improve continuously through collective agreements on what they are doing well and should perpetuate and what they are poorly and need to be stopped/changed. And that folks is a Retrospective.</span><br />
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;">Retrospective is a simple, 30 minute get-together, potentially beer driven, that creates forum where all are heard and problems are effectively discussed, prioritised and selected for action.</span><br />
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;">A few pieces of advice on Retrospectives:</span><br />
<ul>
<li><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;">Keep it short, sweet and delivered in various formats</span></li>
<li><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;">Make sure to value everyone’s opinions equally</span></li>
<li><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;">Assume that people try their best. They do not wake up saying to themselves: “Today I will do shit work.” If outcomes weren't great this time around it is not pure evilness and Retrospectives are not inquisitions nor root cause analysis sessions</span></li>
<li><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;">Pick only one or two items to act on and make them cards on the wall, alongside with all of the other stories in the backlog. </span></li>
<li><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;">Don't generate a huge list of retrospective items, a.k.a unplanned work, because it will never get done. When this happens the team eventually looses faith in the ritual and retros become mere bitching sessions</span></li>
<li><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;">Dot voting is not only a great way to make it “democratic” but it also forces all participants to read and understand the topics raised by others</span></li>
</ul>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;">Retrospectives are a fantastic form of feedback. Feel free to ditch every other ritual except this one. If your team doesn’t do it, start now. Do it weekly to start off with – there’s probably a lot of stuff accumulated steam and few session will be required for people to vent it all. Once a calmer mood sets in, run a Retrospective session every iteration. Not having retros is smell. It's a smell that your team isn’t improving and has no mechanism to do so.</span><br />
<div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><b>Smell no. 19 - Now-and-then Manually-sudo-Automated Test Suite</b></span></div>
<div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span class="Apple-style-span" style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;">Test Driven Development - TDD is hard, only developers that made a genuine effort to write tests before code know what I'm talking about. TDD is a massive mind-shift because it forces proof before logic and understanding before hacking. But I digress. My point is that unit tests are scarce and often compensated by a suite of functional tests written in isolation by testers. In large corporations these tests are generated by the thousands using some ludicrous "smart" recording testing tools like QTP or Rational Functional Tester. The suite is then manually executed as little as once per release, which in some places means two or three time a year! Furthermore, execution is in complete isolation from a build process or continuous integration server, completely destroying the ability to provide developers with meaningful and timely feedback. The cherry on top is, as time goes by and no one has the time to maintain the scripts, they grow stale and start to fail. Making test run reports interpretation a a graphics designer exercise - it's all slightly different shades of red.</span><br />
<span class="Apple-style-span" style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;">Let's face it,</span><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"> if that's what your project have then you have no automation. You also probably have no tests and most likely have a big distraction to take care of.</span></div>
Anonymoushttp://www.blogger.com/profile/14224933549638075286noreply@blogger.com0tag:blogger.com,1999:blog-4806640790205683824.post-27459478387197541102013-08-22T10:21:00.000+10:002016-11-20T20:58:33.606+11:00Agile anti-patterns list<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGq5p9S4A_k8EvJrxgSejOYM3pHgZfU9ZyVF9V2CivKDFdSchYwJAEChHJYSajl7M539tHlJjgxbjKGJwjXi52vVp8EBfAFwwihfRshSBT93OK1CNchYBOIFqWkm1EmycaC8sHgYZhapTR/s1600/121490.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGq5p9S4A_k8EvJrxgSejOYM3pHgZfU9ZyVF9V2CivKDFdSchYwJAEChHJYSajl7M539tHlJjgxbjKGJwjXi52vVp8EBfAFwwihfRshSBT93OK1CNchYBOIFqWkm1EmycaC8sHgYZhapTR/s200/121490.jpg" width="133" /></a><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: x-large;">A</span><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">gile has gone mainstream. Companies do it, governments do it, consultants, and contractors. Everybody does it. Right? Maybe not. The metaphor that comes to mind is a group of young men discussing sex. It’s cool, new and everybody wants in. The majority say they are doing but the sad fact is that most of them are lying and those that are actually doing it, are doing it wrong.</span><br />
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">After seen Agile done well, and badly I started to become aware of “smells”. These smells are signs that despite of an Agile veneer, it’s not agile at all. A side point is that the word Agile has lost its meaning. It became this silver-bullet-buzzwordy thing and now it’s close to worthless. See, the point is not Agile, the point is to get better at developing software. Hopefully these smells will give you ideas on how to get better at what you and your team do.</span><br />
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><br /></span>
<b style="background-color: white; color: #015782; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 18px;"><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/agile-smells.html" style="color: #015782; text-decoration: none;">Smells no. 1, 2</a>, </b><b style="color: #333333; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 18px;"><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/more-agile-smells.html" style="color: #015782; text-decoration: none;">3, 4, 5</a>,</b><b style="background-color: white; color: #015782; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 18px;"><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/even-more-agile-smells.html" style="color: #015782; text-decoration: none;"> 6, 7</a>,</b><b style="background-color: white; color: #015782; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 18px;"><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/the-agile-smells-go-on.html" style="color: #015782; text-decoration: none;"> 8, 9, 10</a>, <a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/the-agile-smells-go-on-and-on.html">11, 12</a>, <a href="http://antagonisticpleiotropy.blogspot.com/2013/08/agile-smells-agile-anti-patterns.html">13 and 14</a></b><br />
<b><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><br /></span></b>
<b><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;">Smell no. 15 - Using story cards to look busy</span></b><br />
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;">Story cards should be used as placeholders for conversations. They show who is working on what and are meant to deliver some sort of business value when completed. It could be a philosophical discussion whether to split, or not, story cards into tasks. My personal preference is to avoid doing that. But regardless how your team handles playing stories at an implementation level, the smell to look out for is creating cards that have no reason to exist. </span><br />
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;">I've seen oceans of cards with menial tasks written on them. Activities that should take no longer than five minutes but instead linger for days and are shamelessly covered during stand up. They can look like “Send meeting invite to so and so”, “Talk to John about X”, “Create extra column on evaluation spreadsheet” or all time favourite “Wait for [somebody] to review document blah”.</span><br />
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><br /></span>
<b><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;">Smell no. 16 - Too many, too long meetings</span></b><br />
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;">I once heard the following remark from a team that had started with more responsive practices: “Agile is nice and all but there are too many meetings. Stand-ups, retrospectives, planning meetings, huddles, showcases, lunch-and-learns, our team is always in meetings!” You guys might have missed a thing or two. I say that because t</span><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;">here is no Agile certification or Agile rule book and certainly there is no end to doing it. It’s not like if you did x, y and z for 10,000 hours you’d suddenly become Agile. It’s not like you can define a process that applies across all projects like in ITIL, Prince2 or PMBOK cookie cutter. It just doesn't work like that! And if anyone tries to sell you “Agile in a box”, run away because it’s a scam. Agility requires applied common sense, creativity, deep respect for your team, ridiculous amounts of self-discipline and the willingness to play a game without instructions or rules.</span><br />
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;">Hence, if the team gets the feeling that they are spending too much time in rituals and not getting enough value out of them, that probably is the case! Then the team decide which meetings are worthwhile continuing and which ones to ditch. No one said that if you have no standups you’re not Agile. To preemptively avoid this smell start by clearly defining the problem you’re trying to solve by having a given ritual, then apply it, not the other way around.</span><br />
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><br /></span>
<b style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><a href="http://antagonisticpleiotropy.blogspot.com/2013/08/agile-anti-patterns-list-grows-stronger.html">Smells no. 17, 18 and 19</a></b>Anonymoushttp://www.blogger.com/profile/14224933549638075286noreply@blogger.com0tag:blogger.com,1999:blog-4806640790205683824.post-11125782741286326152013-08-21T10:51:00.002+10:002013-08-23T15:19:32.136+10:00Agile smells == Agile anti-patterns<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGq5p9S4A_k8EvJrxgSejOYM3pHgZfU9ZyVF9V2CivKDFdSchYwJAEChHJYSajl7M539tHlJjgxbjKGJwjXi52vVp8EBfAFwwihfRshSBT93OK1CNchYBOIFqWkm1EmycaC8sHgYZhapTR/s1600/121490.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGq5p9S4A_k8EvJrxgSejOYM3pHgZfU9ZyVF9V2CivKDFdSchYwJAEChHJYSajl7M539tHlJjgxbjKGJwjXi52vVp8EBfAFwwihfRshSBT93OK1CNchYBOIFqWkm1EmycaC8sHgYZhapTR/s200/121490.jpg" width="133" /></a><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: x-large;">A</span><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: small;">gile has gone mainstream. Companies do it, governments do it, consultants, and contractors. Everybody does it. Right? Maybe not. The metaphor that comes to mind is a group of young men discussing sex. It’s cool, new and everybody wants in. The majority say they are doing but the sad fact is that most of them are lying and those that are actually doing it, are doing it wrong.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: small;">After seen Agile done well, and badly I started to become aware of “smells”. These smells are signs that despite of an Agile veneer, it’s not agile at all. A side point is that the word Agile has lost its meaning. It became this silver-bullet-buzzwordy thing and now it’s close to worthless. See, the point is not Agile, the point is to get better at developing software. Hopefully these smells will give you ideas on how to get better at what you and your team do.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: small;"><br /></span>
<b style="background-color: white; color: #015782; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 18px;"><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/agile-smells.html" style="color: #015782; text-decoration: none;">Smells no. 1, 2</a>, </b><b style="color: #333333; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 18px;"><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/more-agile-smells.html" style="color: #015782; text-decoration: none;">3, 4, 5</a>,</b><b style="background-color: white; color: #015782; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 18px;"><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/even-more-agile-smells.html" style="color: #015782; text-decoration: none;"> 6, 7</a>,</b><b style="background-color: white; color: #015782; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 18px;"><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/the-agile-smells-go-on.html" style="color: #015782; text-decoration: none;"> 8, 9, 10</a>, <a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/the-agile-smells-go-on-and-on.html">11 and 12</a></b><br />
<br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><b>Smell no. 13 - Invisible work - 2AM commits</b></span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><b><br /></b></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">When starting new projects it is a good idea to come up with a Team Charter. This charter can be a simple piece of A4 paper on the wall containing the basic rules all team members must abide by. It has things like pairing hours, what to do when late for stand-up and general guidelines like speaking English at all times. It should also contain a bullet point with acceptable commit times.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">I’ve seen individuals that are really excited about the project, or maybe because they lack something else more interesting to do, consistently go home after a day’s of work and continue testing/coding for hours. This kind of behaviour may seem harmless, or even perceived as true commitment to the project, but it can turn out ugly. In this particular project I was in no one spotted a problem until the rogue night committer left the team. Suddenly our velocity dropped far more than anyone expect. The issue with workaholics is that they set a pace hard to follow and create “ghost” points that no one tracks, making planning releases harder and masking the team's true capacity.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">The smell here is invisible work. Should the entire team agree that it is OK to continue working after hours, then fine, make it official in the Team Charter, track the work and watch out to prevent burn outs.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span><b style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Smell no. 14 - </b><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><b>Using cards to not get it done</b></span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><b><br /></b></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Grooming a backlog to keep it healthy and meaningful is hard work and requires a great deal of self-discipline. However to make a mess of it doesn’t take much. To create a new story card is simple, it only takes a card, a Sharpie and a little Bluetac. Such simplicity can lead to problems. I’ve witnessed teams that deliberately create new cards as an easy way to get rid of work. Their backlogs were big and messy and a billboard could very well get lost in there. When the business, architects or anyone else requested work they’d say: “Sure, let’s create a card and put in the backlog.”, when in reality there was no real intention to ever play that card.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">There are several reasons why we make work visible, amongst them is to enable meaningful conversations to take place. I’ve heard teams complaining about how hard it is to find information and how impossible it is to know what people are doing. Simply increasing backlog to pretend work will get done only compounds to the problem. There’s no visibility with hidden agendas and the false expectations created that will eventually make the entire process collapse due to the loss of trust.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<b style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/agile-anti-patterns-list.html">Smells no. 15, 16</a></b><b style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><a href="http://antagonisticpleiotropy.blogspot.com/2013/08/agile-anti-patterns-list-grows-stronger.html">, 17, 18 and 19</a></b>Anonymoushttp://www.blogger.com/profile/14224933549638075286noreply@blogger.com0tag:blogger.com,1999:blog-4806640790205683824.post-57241969680909389432013-08-20T11:10:00.000+10:002013-08-23T15:19:19.300+10:00The Agile Smells go on and on<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGq5p9S4A_k8EvJrxgSejOYM3pHgZfU9ZyVF9V2CivKDFdSchYwJAEChHJYSajl7M539tHlJjgxbjKGJwjXi52vVp8EBfAFwwihfRshSBT93OK1CNchYBOIFqWkm1EmycaC8sHgYZhapTR/s1600/121490.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGq5p9S4A_k8EvJrxgSejOYM3pHgZfU9ZyVF9V2CivKDFdSchYwJAEChHJYSajl7M539tHlJjgxbjKGJwjXi52vVp8EBfAFwwihfRshSBT93OK1CNchYBOIFqWkm1EmycaC8sHgYZhapTR/s200/121490.jpg" width="133" /></a><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: x-large;">A</span><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: small;">gile has gone mainstream. Companies do it, governments do it, consultants, and contractors. Everybody does it. Right? Maybe not. The metaphor that comes to mind is a group of young men discussing sex. It’s cool, new and everybody wants in. The majority say they are doing but the sad fact is that most of them are lying and those that are actually doing it, are doing it wrong.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: small;">After seen Agile done well, and badly I started to become aware of “smells”. These smells are signs that despite of an Agile veneer, it’s not agile at all. A side point is that the word Agile has lost its meaning. It became this silver-bullet-buzzwordy thing and now it’s close to worthless. See, the point is not Agile, the point is to get better at developing software. Hopefully these smells will give you ideas on how to get better at what you and your team do.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: small;"><br /></span>
<b style="background-color: white; color: #015782; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 18px;"><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/agile-smells.html" style="color: #015782; text-decoration: none;">Smells no. 1, 2</a>, </b><b style="color: #333333; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 18px;"><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/more-agile-smells.html" style="color: #015782; text-decoration: none;">3, 4, 5</a>,</b><b style="background-color: white; color: #015782; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 18px;"><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/even-more-agile-smells.html" style="color: #015782; text-decoration: none;"> 6, 7</a>,</b><b style="background-color: white; color: #015782; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 18px;"><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/the-agile-smells-go-on.html" style="color: #015782; text-decoration: none;"> 8, 9 and 10</a></b><br />
<br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><b>Smell no. 11 - Points obsession</b></span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Points are a key Agile metric. They represent the relative size of a given story in relationship to the other stories. Over time the team will go over a series of cards and the points are all added up. Instinctively points represent how much a team can do and is often used as a measure of capacity. This is perfectly valid and harmless. The smell to watch out for is when points become the only thing people care and talk about or track as the idealized demonstration of success.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Looking up to the Agile Manifesto for guidance one will see that working software trumps comprehensive documentation and change trumps plan. Points aren't what a team delivers, working software is and velocity is a plan that most likely will change. Often when people are new to the game they tend to focus too much on the wrong things. People that experimented with intraday stock trading certainly can relate to what I'll describe. Obsessively checking the price of a stock over and over again like an addicted lab rat, c</span><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">uriously enough</span><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> doesn't make you a better trader, nor gives insights nor teaches the fundamentals of the market. </span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Set your project goals, trust your team and work on the fundamentals. The points will come.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">A corollary smell is ever rising points. Unless something changes drastically, teams should expect points to go up only marginally, and that is OK. We aspire for sustainable pace and when points plateau that doesn't mean that your team is bad, it only means that that’s what they can realistically do you without comprising quality and sustainability.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<b style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Smell no. 12 - </b><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><b>Cards pile in one lane and it's not the DONE column</b></span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Teams use card walls to make work visible and ensure optimal throughput. Think of it as being a highway. It certainly makes very little sense to say that a given road can hold a certain number of cars. What’s the point of that? It isn't a parking lot. What’s the numbers that cross from A to B every hour? That’s a question worthwhile answering.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Now image that for a car to move you need to do more to it than just press the gas pedal. Imagine that you need, every mile or so change the tyres. And every other mile stop for an inspection to make sure your car passes emission tests. Assuming that both tasks take the same amount of time to be completed what do you think will happen if the tyre job had ten people and the emissions check only two? Yeah emissions queue. </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">With software it isn't too dissimilar. The main difference is that time is a variable factor, which means that work may or may queue. The smell here is a team that doesn't care whether cards are queuing and impairing the overall throughput. This smell is a side effect of another smell - <a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/even-more-agile-smells.html">Developers only develop, testers only test, analysts only analyse, and managers only manage</a>. </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">A simple solution for cards accumulation in one column is to <a href="http://www.personalkanban.com/pk/tag/limiting-wip">limit WIP – Work in Progress</a>. This forces a pull behaviour to happen and highlights bottlenecks. </span><br />
<br />
<b style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><a href="http://antagonisticpleiotropy.blogspot.com/2013/08/agile-smells-agile-anti-patterns.html">Smells no. 13, 14</a></b><b style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/agile-anti-patterns-list.html">, 15, 16</a></b><b style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><a href="http://antagonisticpleiotropy.blogspot.com/2013/08/agile-anti-patterns-list-grows-stronger.html">, 17, 18 and 19</a></b>Anonymoushttp://www.blogger.com/profile/14224933549638075286noreply@blogger.com0tag:blogger.com,1999:blog-4806640790205683824.post-20891316137567815932013-08-19T11:38:00.002+10:002013-08-23T15:19:07.546+10:00The Agile Smells go on<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGq5p9S4A_k8EvJrxgSejOYM3pHgZfU9ZyVF9V2CivKDFdSchYwJAEChHJYSajl7M539tHlJjgxbjKGJwjXi52vVp8EBfAFwwihfRshSBT93OK1CNchYBOIFqWkm1EmycaC8sHgYZhapTR/s1600/121490.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGq5p9S4A_k8EvJrxgSejOYM3pHgZfU9ZyVF9V2CivKDFdSchYwJAEChHJYSajl7M539tHlJjgxbjKGJwjXi52vVp8EBfAFwwihfRshSBT93OK1CNchYBOIFqWkm1EmycaC8sHgYZhapTR/s200/121490.jpg" width="133" /></a><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: x-large;">A</span><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: small;">gile has gone mainstream. Companies do it, governments do it, consultants, and contractors. Everybody does it. Right? Maybe not. The metaphor that comes to mind is a group of young men discussing sex. It’s cool, new and everybody wants in. The majority say they are doing but the sad fact is that most of them are lying and those that are actually doing it, are doing it wrong.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: small;">After seen Agile done well, and badly I started to become aware of “smells”. These smells are signs that despite of an Agile veneer, it’s not agile at all. A side point is that the word Agile has lost its meaning. It became this silver-bullet-buzzwordy thing and now it’s close to worthless. See, the point is not Agile, the point is to get better at developing software. Hopefully these smells will give you ideas on how to get better at what you and your team do.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: small;"><br /></span>
<b style="background-color: white; color: #015782; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 18px; text-decoration: none;"><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/agile-smells.html" style="background-color: white; color: #015782; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 18px; text-decoration: none;">Smells no. 1, 2</a>,</b><b style="color: #333333; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 18px;"><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/more-agile-smells.html" style="color: #015782; text-decoration: none;"> 3, 4, 5</a></b><b style="background-color: white; color: #015782; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 18px;"><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/even-more-agile-smells.html" style="color: #015782; text-decoration: none;">, 6 and 7</a></b><br />
<br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><b>Smell no. 8 - Special purpose teams</b></span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">It’s not uncommon for companies or government departments to have to deal with changes that are imposed on them. Regulation changes or another unstoppable forces such as Micro$oft releasing a new version or their Operating System force compliance changes. Dedicated teams whose backlog is nothing but compliance changes is a smell. Giving some poor souls the ungodly task to keep up with mandatory changes is the easy way out and smells. It smells of “out of sight out of mind”. </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">But it comes back to bite you in the behind. When it’s the same codebase there are merges to be dealt with, tests to be updated and potential impacts on the new “important” features. See, it’s code, just like your bank account doesn't care whether you spent money at the pub or the supermarket, the system doesn't care whether it’s compliance or new-feature work. A better alternative is to turn compliance changes into regular stories and have one team handle of all the work as they normally would. This way the effort is visible, prioritised by the business and built like everything else.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><b>Smell no. 9 - Pilot Champions to change the company</b></span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">In order to adopt Agile a few strategies tend to take place. A common one is to create a pilot project to try and see whether Agile works. A team comprised of the best and brightest is assembled. These fortunate individuals are encumbered with the delivery task and, upon success, “spread” their learnings or “champion” the change across the organisation. This rarely works. Not because the pilot team isn't good, they often are and they often succeed in delivering the project. The problem starts when they return to their original places. It’s quite hard for an individual alone to change the culture of an entire group. </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Another approach is to allow the new Agile team to go through the form-storm-norm-perform cycle and instead of disbanding it in the end, keep it running. Then progressively rotate a few inexperienced people through it. This way the team doesn't lose momentum and, overall, it’s much easier for an entire performing team to influence a few individuals. In conclusion, pay attention to how your organisation is approaching adopting Agile, if it involves making a few individuals into “Agile heroes”, that’s a smell.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><b>Smell no. 10 - Big upfront [UX design/architecture/performance]</b></span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Several things can go wrong when developing software. The long list of problems range from usability issues, infrastructure, poor performance, integration, etc., etc. The number of things that can go wrong vastly surpass a team’s capacity to solve them. From a systems theory perspective software development is complex. Complicated too, but complex in a sense that there are too many variables at play and the prediction of an outcome is impossible. Despite the clear disadvantage many still believe that if they put enough effort before starting they will be able to cater for all scenarios, all questions and prevent certain doom. Yeah, that never works.</span><br />
<br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">I’m not suggesting to ignore risks, or not to invest in solutions for known issues. But spending time and effort trying to answer questions that will never be asked is just waste. All companies want millions of users, but there is only a handful of Twitters, Facebooks and Googles. It’s a smell doing upfront work to solve problems that are mere reflections of wishful growth projections. Creating pixel perfect designs before development without ever putting it in front of an end user, developing the “perfect” multi-layer, multi-queue, architecture that can’t be deployed into production in parts or investing heavily to preemptively solve “web scale” problems are smells. The rule of thumb is do the bare minimum, nothing else, learn from it and improve as you go.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<b style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><a href="http://antagonisticpleiotropy.blogspot.com/2013/08/the-agile-smells-go-on-and-on.html">Smells no. 11, 12</a></b><b style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><a href="http://antagonisticpleiotropy.blogspot.com/2013/08/agile-smells-agile-anti-patterns.html">, 13, 14</a></b><b style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/agile-anti-patterns-list.html">, 15, 16</a></b><b style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><a href="http://antagonisticpleiotropy.blogspot.com/2013/08/agile-anti-patterns-list-grows-stronger.html">, 17, 18 and 19</a></b>Anonymoushttp://www.blogger.com/profile/14224933549638075286noreply@blogger.com0tag:blogger.com,1999:blog-4806640790205683824.post-30710141905221583332013-08-17T10:47:00.000+10:002013-08-23T15:18:55.766+10:00Even more Agile Smells<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGq5p9S4A_k8EvJrxgSejOYM3pHgZfU9ZyVF9V2CivKDFdSchYwJAEChHJYSajl7M539tHlJjgxbjKGJwjXi52vVp8EBfAFwwihfRshSBT93OK1CNchYBOIFqWkm1EmycaC8sHgYZhapTR/s1600/121490.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGq5p9S4A_k8EvJrxgSejOYM3pHgZfU9ZyVF9V2CivKDFdSchYwJAEChHJYSajl7M539tHlJjgxbjKGJwjXi52vVp8EBfAFwwihfRshSBT93OK1CNchYBOIFqWkm1EmycaC8sHgYZhapTR/s200/121490.jpg" width="133" /></a><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: x-large;">A</span><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: small;">gile has gone mainstream. Companies do it, governments do it, consultants, and contractors. Everybody does it. Right? Maybe not. The metaphor that comes to mind is a group of young men discussing sex. It’s cool, new and everybody wants in. The majority say they are doing but the sad fact is that most of them are lying and those that are actually doing it, are doing it wrong.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: small;">After seen Agile done well, and badly I started to become aware of “smells”. These smells are signs that despite of an Agile veneer, it’s not agile at all. A side point is that the word Agile has lost its meaning. It became this silver-bullet-buzzwordy thing and now it’s close to worthless. See, the point is not Agile, the point is to get better at developing software. Hopefully these smells will give you ideas on how to get better at what you and your team do.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: small;"><br /></span><b style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/agile-smells.html" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Smells no. 1, 2</a></b><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: small;"><b><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/more-agile-smells.html">, 3, 4 and 5</a></b></span><br />
<br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><b>Smell no. 6 - Developers only develop, testers only test, analysts only analyse, and managers only manage</b></span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Most companies struggle with knowledge management. There are applications that only one single developer or a few know how to maintain. The more complex projects are the less people tend to spend time in making sure all understand what the heck is going on. </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">The default solution is more documents explaining “exactly” how the system work and more controls to “guarantee” everyone is doing what they were told to. In a desperate attempt to scale companies create centres of excellence and group all people that execute similar work together, i.e. testers, developers, project managers, business, etc. With functional work division comes a nasty side effect. People create reinforcing feedback loops that justify that what they do is the most important thing to be done, regardless of the world around them. </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Collective Ownership doesn't come for free. Teams have to deliberately spend time and effort to share knowledge, viewpoints and progress. Only then people will be able to help each other and be appreciative of the complexity each team member has to face when getting a task done. How many times have we heard that the business views IT as a bunch of expensive slackers? Or IT people saying that the business is just too stupid to get how complicated things are? That’s a smell. It’s a corporate smell that most organisations pretend isn’t there. If people don’t have the time share, or teams aren't set up in a way that people can become familiar with others do, that’s a smell. Teams should fight growing insensitive to other roles problems. A truly responsive team lives and dies together, hence the more you understand of what goes on in someone else’s patch the better. Time spent pairing Business Analysts and Developers, Testers and Project Managers, Developers and Business is time well spent. </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<b><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Smell no. 7 -</span><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> </span><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Who reports to who is clearly defined</span></b><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Lines of reporting imply hierarchy and hierarchy impairs creativity because people are always asking for permission to do things. If you want a team to be responsive then don’t hinder them with the “who reports to who” game. Note that hierarchy is different than stakeholder management. A successful team must communicate adequately with all interested parties and ensure that the right level of information is been spread across the organisation. Managers that aren't part of a team’s daily struggles and come around from time to time telling people how to behave is a smell. A stand-up where people talk to the manager instead of the team is a smell. A team that has to ask for permission to create cards, change how they work, talk to the business or pair reeks of waste and inefficiency. </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">If you are a person whose entire job is to report upwards, please move out of the way and introduce that team to those that care. Progress reporting in teams that make work visible just happens and there’s no need to spend time wordsmithing messages in the “best” way.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<b style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/the-agile-smells-go-on.html">Smells no. 8, 9, 10</a></b><b style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><a href="http://antagonisticpleiotropy.blogspot.com/2013/08/the-agile-smells-go-on-and-on.html">, 11, 12</a><a href="http://antagonisticpleiotropy.blogspot.com/2013/08/agile-smells-agile-anti-patterns.html">, 13, 14</a></b><b style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/agile-anti-patterns-list.html">, 15, 16</a></b><b style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><a href="http://antagonisticpleiotropy.blogspot.com/2013/08/agile-anti-patterns-list-grows-stronger.html">, 17, 18 and 19</a></b>Anonymoushttp://www.blogger.com/profile/14224933549638075286noreply@blogger.com0tag:blogger.com,1999:blog-4806640790205683824.post-47068453302360097262013-08-16T13:44:00.002+10:002013-08-23T15:18:41.760+10:00More Agile Smells<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGq5p9S4A_k8EvJrxgSejOYM3pHgZfU9ZyVF9V2CivKDFdSchYwJAEChHJYSajl7M539tHlJjgxbjKGJwjXi52vVp8EBfAFwwihfRshSBT93OK1CNchYBOIFqWkm1EmycaC8sHgYZhapTR/s1600/121490.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGq5p9S4A_k8EvJrxgSejOYM3pHgZfU9ZyVF9V2CivKDFdSchYwJAEChHJYSajl7M539tHlJjgxbjKGJwjXi52vVp8EBfAFwwihfRshSBT93OK1CNchYBOIFqWkm1EmycaC8sHgYZhapTR/s200/121490.jpg" width="133" /></a><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: x-large;">A</span><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: small;">gile has gone mainstream. Companies do it, governments do it, consultants, and contractors. Everybody does it. Right? Maybe not. The metaphor that comes to mind is a group of young men discussing sex. It’s cool, new and everybody wants in. The majority say they are doing but the sad fact is that most of them are lying and those that are actually doing it, are doing it wrong.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: small;">After seen Agile done well, and badly I started to become aware of “smells”. These smells are signs that despite of an Agile veneer, it’s not agile at all. A side point is that the word Agile has lost its meaning. It became this silver-bullet-buzzwordy thing and now it’s close to worthless. See, the point is not Agile, the point is to get better at developing software. Hopefully these smells will give you ideas on how to get better at what you and your team do. </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: small;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: small;"><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/agile-smells.html"><b>Smells no. 1 and 2</b></a></span><br />
<br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><b>Smell no. 3 - Latent/dead code</b></span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><b><br /></b></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Complexity grows alongside with the codebase. More code means more maintenance and potentially more problems. With Agile the business can quickly change which features are relevant and which aren't. The team should keep the codebase in sync with these decisions. Don’t keep a feature that has been deemed unnecessary. Doesn't matter if it happened because of a change of heart or because the feature failed to actually deliver the expected value. Keeping the code and tests, and maintaining it all is a smell. Delete it! Don’t comment it out. Delete it. That’s why we use source control systems like Git or SVN. If we need historical code it’s easy to rollback and bring the old feature back from the dead.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><b>Smell no. 4 - Cubicles</b></span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Collocation is a key practice. Most of the practices and principles in Agile are about communication. In reality it feels like a huge excuse to keep people talking to each other. If your team after stand-up disbands and sits isolated from each other, the business in another floor and testers in another building that’s a smell. Granted that in some cases collocation is impossible, e.g. distributes teams across countries. The smell here is when people can collocate and won’t. Usually there’s a justification like "it’s too hard to concentrate" or "we can’t move partitions", etc. How serious are you about getting better? The value of spontaneous conversations and the ability to overhear team members making decisions on the fly is enormous and instantaneous! No meetings or emails required to relay information. It just happens! Bottom line, if your team still organised around functions instead of work and chooses to avoid sitting closer to each other you have a nasty smell in your hands, or nose.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><b>Smell no. 5 - Test phases</b></span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">An often misinterpreted concept is testing. Testing isn't about catching bugs, testing isn't about defining a plan, testing isn't about black box. The sole purpose of software testing is to provide quick feedback so the person who wrote code that isn't adequate gets alerted, ideally instantaneously. Testing has to be part of development and vice-versa to ensure time proximity. Long feedback cycles are wasteful and don’t foster learning. Humans tend to learn poorly when the reaction to an action is spread over a long period of time. Consider someone putting a finger into an electric outlet and nothing happening. Then two weeks later, when merrily walking down the road, that someone gets zapped. Will that person learn not to stick finger in outlets? Probably not. </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">When action and reaction (or code change and defect) are too far apart in time the person who should have been alerted will already have changed contexts and most likely will be working on something else. This forces task switching and loss of precious details that are now long forgotten. The smell here can present itself in several ways. It can look like three iterations of development followed by one iteration of testing, an iteration dedicated to UAT (User Acceptance Testing), phases that only involve testers doing testing or, my favourite, story cards piling on the "Testing" column and all developers crunching code non stop.</span><br />
<div>
<br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><b><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/even-more-agile-smells.html">Smells no. 6, 7</a></b></span><b style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/the-agile-smells-go-on.html">, 8, 9, 10</a></b><b style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><a href="http://antagonisticpleiotropy.blogspot.com/2013/08/the-agile-smells-go-on-and-on.html">, 11, 12</a><a href="http://antagonisticpleiotropy.blogspot.com/2013/08/agile-smells-agile-anti-patterns.html">, 13, 14</a></b><b style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/agile-anti-patterns-list.html">, 15, 16</a></b><b style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><a href="http://antagonisticpleiotropy.blogspot.com/2013/08/agile-anti-patterns-list-grows-stronger.html">, 17, 18 and 19</a></b></div>
Anonymoushttp://www.blogger.com/profile/14224933549638075286noreply@blogger.com0tag:blogger.com,1999:blog-4806640790205683824.post-74173990298234309552013-08-16T11:53:00.000+10:002013-08-23T15:18:31.247+10:00Agile Smells<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGq5p9S4A_k8EvJrxgSejOYM3pHgZfU9ZyVF9V2CivKDFdSchYwJAEChHJYSajl7M539tHlJjgxbjKGJwjXi52vVp8EBfAFwwihfRshSBT93OK1CNchYBOIFqWkm1EmycaC8sHgYZhapTR/s1600/121490.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGq5p9S4A_k8EvJrxgSejOYM3pHgZfU9ZyVF9V2CivKDFdSchYwJAEChHJYSajl7M539tHlJjgxbjKGJwjXi52vVp8EBfAFwwihfRshSBT93OK1CNchYBOIFqWkm1EmycaC8sHgYZhapTR/s200/121490.jpg" width="133" /></a></div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: x-large;">A</span><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: small;">gile has gone mainstream. Companies do it, governments do it, consultants, and contractors. Everybody does it. Right? Maybe not. The metaphor that comes to mind is a group of young men discussing sex. It’s cool, new and everybody wants in. The majority say they are doing but the sad fact is that most of them are lying and those that are actually doing it, are doing it wrong.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: small;">After seen Agile done well, and badly I started to become aware of “smells”. These smells are signs that despite of an Agile veneer, it’s not agile at all. A side point is that the word Agile has lost its meaning. It became this silver-bullet-buzzwordy thing and now it’s close to worthless. See, the point is not Agile, the point is to get better at developing software. Hopefully these smells will give you ideas on how to get better at what you and your team do. </span><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: small;">I've created a reasonably long list of smells to write up and my goal is to post a couple every day or so.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: small;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><b>Smell no. 1 - Only process is covered, technical practices - meh too hard</b></span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><b><br /></b></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: small;">
Several Agile adoptions start from the management layer. Often only touch how projects are managed. Often there is a tool of sorts, Jira with Greenhopper, Mingle, Rally etc. There are iterations and people use virtual walls, rarely real ones. Developers and testers still sit where they sat and do what they did. There is no CI Server, no one does TDD and pairing is impossible because everybody is busy. When management is asked whether there’s an appetite to change the technical practices the answer is usually in the lines of “we will try the process first and see if it’s worth changing the technical practices but now they’re really busy delivering”. Have you smelled that somewhere?</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: small;"><br /></span><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: small;"><b>Smell no. 2 - Few/no production releases</b></span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: small;"><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: small;"><br /></span>
In software development there are two crucial moments of real learning. The first one during ideation and the second once software hits production and real people use it. Everything in between is done just so the product can be released often with little or no real learning happening. If your team is developing in iterations and every fortnight they complete new features that never hit production, the learning is delayed. Teams go on for months, sometimes a year, without a push to production. Agility comes from delivering in smaller chunks. Delivery means production. If a team only releases in to production in the end of all development that is upfront work and is big smell.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: small;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif; font-size: small;"><b><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/more-agile-smells.html">Smells no. 3, 4, 5</a></b></span><b style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/even-more-agile-smells.html" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">, 6, 7</a><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/the-agile-smells-go-on.html">, 8, 9, 10</a><a href="http://antagonisticpleiotropy.blogspot.com/2013/08/the-agile-smells-go-on-and-on.html">, 11, 12</a><a href="http://antagonisticpleiotropy.blogspot.com/2013/08/agile-smells-agile-anti-patterns.html">, 13, 14</a><a href="http://antagonisticpleiotropy.blogspot.com.au/2013/08/agile-anti-patterns-list.html">, 15, 16</a><a href="http://antagonisticpleiotropy.blogspot.com/2013/08/agile-anti-patterns-list-grows-stronger.html">, 17, 18 and 19</a></b>Anonymoushttp://www.blogger.com/profile/14224933549638075286noreply@blogger.com0tag:blogger.com,1999:blog-4806640790205683824.post-27719152016867751572012-08-17T22:06:00.001+10:002013-08-22T10:46:41.212+10:00Running Jenkins in Windows with regular user account to see executables in PATH<span style="font-family: Arial, Helvetica, sans-serif;">Went through a very irritating "feature" of Jenkins in Windows, the fact that it runs as the default system user.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">From there you have to options:</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">- Change the system user to have the dependencies you need, or</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">- Use a regular account</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">I went with the later.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">The symptom is that commands executed in the Build - Execute Windows batch command step will not be able to find executables, despite the fact that they are defined in %PATH%.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">A good way to diagnose is to check that you really have the %PATH% properly set and identify who's running the command. Use these two lines:</span><br />
<br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">echo %PATH%</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">echo %USERDOMAIN%\%USERNAME%</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD6VARjv_n5vhKxzaD6oUdAWFe1Mj_BmPM1WmobzrD80jUhooWKCMkZeeAM34zy9zJ2x14-ElXJ3ZwDI28XZ7aHBNJtCo9-ECq-UI5Jnfq2MqXuqtF8DtPMFXlQacSqF12tvVBEjkwQsUM/s1600/Diagnosis.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD6VARjv_n5vhKxzaD6oUdAWFe1Mj_BmPM1WmobzrD80jUhooWKCMkZeeAM34zy9zJ2x14-ElXJ3ZwDI28XZ7aHBNJtCo9-ECq-UI5Jnfq2MqXuqtF8DtPMFXlQacSqF12tvVBEjkwQsUM/s1600/Diagnosis.PNG" /></span></a></div>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">To solve set the properties in the Jenkins service to use the user you wan and that should marry things just nicely. There are drawbacks in using user accounts like that but it's much easier and have the expected behaviour.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCypq6rVIVpLdLTuzeNAcvKEYPNhF8byHhuucCkjdkJOa8WFamAQjQ9yuWLY_UtC-dMe8JeEkZmQU8IyhA_EBDYAM0fB90_w6Yew62ByTDAi3dUclfSZIxHH4CeFB8OrkrFRI1De5OrkLo/s1600/RunningAsUser.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCypq6rVIVpLdLTuzeNAcvKEYPNhF8byHhuucCkjdkJOa8WFamAQjQ9yuWLY_UtC-dMe8JeEkZmQU8IyhA_EBDYAM0fB90_w6Yew62ByTDAi3dUclfSZIxHH4CeFB8OrkrFRI1De5OrkLo/s1600/RunningAsUser.PNG" /></span></a></div>
<br />Anonymoushttp://www.blogger.com/profile/14224933549638075286noreply@blogger.com16tag:blogger.com,1999:blog-4806640790205683824.post-38698560904197162632012-05-31T11:24:00.004+10:002013-08-22T10:46:53.518+10:00Simple things to develop public speaking and presenting confidence<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKzn15qUWM3VSS7BDih6vR1u57wqiHEX_BZ7M3KH62uyKqWZ2XZbnTDEAlyiIEv_FJHkSWAnmnvON6VgWoF0InPBr8efJqO4adTahyphenhyphenjMsiVXaA-fvQBOPXy73TfUL6Nei1rUy0PHs3fdq1/s1600/Martin_Luther_King_-_March_on_Washington.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKzn15qUWM3VSS7BDih6vR1u57wqiHEX_BZ7M3KH62uyKqWZ2XZbnTDEAlyiIEv_FJHkSWAnmnvON6VgWoF0InPBr8efJqO4adTahyphenhyphenjMsiVXaA-fvQBOPXy73TfUL6Nei1rUy0PHs3fdq1/s320/Martin_Luther_King_-_March_on_Washington.jpg" width="305" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKzn15qUWM3VSS7BDih6vR1u57wqiHEX_BZ7M3KH62uyKqWZ2XZbnTDEAlyiIEv_FJHkSWAnmnvON6VgWoF0InPBr8efJqO4adTahyphenhyphenjMsiVXaA-fvQBOPXy73TfUL6Nei1rUy0PHs3fdq1/s1600/Martin_Luther_King_-_March_on_Washington.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><br /></a></div>
<span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">It's quite common to fear public speaking. Getting in front of everybody and defending your point of view can be daunting. If you aren't good at it and would like, or need to, get better, here some tips.</span><br />
<ul>
<li><span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><b>Stand up</b>. Literally. When in meetings or at a restaurant, get out of the chair and stand up. You can use whatever excuse you want. Say you’re stretching. The point here is to get used to you standing while others are seated. Stay up as long as you can.</span></li>
<li><span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">This is a corollary of standing up. You need to <b>enjoy the silence</b> while standing up. A good presentation has good pauses. They are powerful. Don't be a chatterbox. </span></li>
<li><span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><b>Present it! </b>Present to your dog, children or stranger at the bus stop. Get used to talking about the things you do to people that don’t necessarily care or understand them. They will give you feedback on how to dumb things down.</span></li>
<li><span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><b>Watch</b> as many <b>presentations</b> as you can on the subject you’re trying to get better at. Observe how presenters and consultants behave, the things they say and how they say them. </span></li>
<li><span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Present other people’s ideas and presentations. <b>Get a random slide deck from slideshare.com and present it.</b> Don’t forget to give proper credits, of course. Then see what you’d have done differently if you were to create the slides yourself. </span></li>
<li><span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><b>Learn to keep track of time.</b> It’s crucial to gain peoples trust that you will guide them through the meeting/presentation on time. Let people know you’re tracking time and what’s left of it. You can do this by going to have coffee with your work mates. Establish a time to do the task and track it.</span></li>
</ul>
Anonymoushttp://www.blogger.com/profile/14224933549638075286noreply@blogger.com0tag:blogger.com,1999:blog-4806640790205683824.post-21657269870048888502012-02-15T16:19:00.000+11:002013-08-22T10:46:27.184+10:00Implementing a real build pipeline with Jenkins<div>
<span class="Apple-style-span" style="font-family: arial;"><a href="http://jenkins-ci.org/">Jenkins</a> is a popular, open source, continuous integration (CI) server. I quite often find it being used in the wild. Equally often I</span><span class="Apple-style-span" style="font-family: arial;"> find builds that are too complex, time consuming. Most teams try to break it down into a pipeline, either under the spirit of quick-feedback or as an attempt to kickstart some sort of continuous delivery process. </span><span class="Apple-style-span" style="font-family: arial;">The knee reflex reaction is to look for a plugin that implements a pipeline and I too ended up installing the <a href="http://code.google.com/p/build-pipeline-plugin">BuildPipeline</a> only to realise that it doesn't really do what I'd like it to. Hence I've</span><span class="Apple-style-span" style="font-family: arial;"> decided to invest a bit of time and see whether it was possible to implement a real pipeline using the bits and bobs that are already available and avoiding to cut code.</span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;"><br /></span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;">Good news is that yes it's possible and it isn't too hard. The Jenkins community has made tremendous progress and we can leverage their efforts. The bad news is that there's a myriad of plugins out there and trawling through them all can be a laborious task, hopefully this blog entry will save you some time.</span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;"><br /></span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;">A pipeline to be a real one needs:</span></div>
<div>
<ul>
<li><span class="Apple-style-span" style="font-family: arial;">to ensure that the change-set version that started the pipeline is the same used in all steps, this should be preferably done with onl</span><span class="Apple-style-span" style="font-family: arial;">y one check-out from source control</span></li>
<li><span class="Apple-style-span" style="font-family: arial;">steps that can be triggered independently and without the need to re-run previous steps (this is a controversial item but reality is that few builds are always stable)</span></li>
<li><span class="Apple-style-span" style="font-family: arial;">to trigger steps automatically or manually according to need (e.g. you may not want to trigger a deploy to a TEST environment an indadvertedly stuff up manual tests)</span></li>
<li><span class="Apple-style-span" style="font-family: arial;">only one number that represents a given build across all pipeline steps</span></li>
<li><span class="Apple-style-span" style="font-family: arial;">artefacts to be produced only once and reused in later steps that require them</span></li>
<li><span class="Apple-style-span" style="font-family: arial;">to allow easily identifying what code is in the build. I reckon that using the change-set number is good, conversely git SHA's aren't that readable</span></li>
</ul>
</div>
<div>
<span class="Apple-style-span" style="font-family: arial;"><br /></span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;">Here's the list of plug-ins I used to create a real pipeline in Jenkins:</span></div>
<div>
<ul>
<li><a href="https://wiki.jenkins-ci.org/display/JENKINS/Token+Macro+Plugin"><span class="Apple-style-span" style="font-family: arial;">Token Macro Plugin</span></a></li>
<li><a href="https://wiki.jenkins-ci.org/display/JENKINS/Build+Name+Setter+Plugin"><span class="Apple-style-span" style="font-family: arial;">Build Name Setter Plugin</span></a></li>
<li><a href="https://wiki.jenkins-ci.org/display/JENKINS/Clone+Workspace+SCM+Plugin"><span class="Apple-style-span" style="font-family: arial;">Clone Workspace SCM Plugin</span></a></li>
<li><a href="https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Trigger+Plugin"><span class="Apple-style-span" style="font-family: arial;">Parameterized Trigger Plugin</span></a></li>
<li><a href="https://wiki.jenkins-ci.org/display/JENKINS/Conditional+BuildStep+Plugin"><span class="Apple-style-span" style="font-family: arial;">Conditional BuildStep Plugin</span></a></li>
<li><a href="https://wiki.jenkins-ci.org/display/JENKINS/CopyArchiver+Plugin"><span class="Apple-style-span" style="font-family: arial;">CopyArchiver Plugin</span></a></li>
<li><span class="Apple-style-span" style="font-family: arial;">Your favourite source control plugin to get the version number from</span></li>
</ul>
</div>
<div>
<span class="Apple-style-span" style="font-family: arial;"><span class="Apple-style-span" style="font-size: 100%;">T</span>he Token Macro Plugin let's you provide an expression that evaluates to text. This is a dependency for Build Name Setter and it's installed by default in Jenkins. The gotcha here was that prior to version 1.432 it doesn't have the the key tag - ENV - that allows using environment variables. It also doesn't show it as a plugin on the Plugins page, when it fails it doesn't tell you why :( Solution here is to install a version higher than 1.432 which has the proper ENV implementation</span><span class="Apple-style-span" style="font-family: arial;">.</span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;"><br /></span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;">With Build Name Setter Plugin I chose the following number format: PL#123-456. PL# is for PipeLine number. 123 is the change-set number that triggered it. This way I know exactly which code is in the build just by looking at this number. The 456 part is the regular Jenkins BUILD_NUMBER and it gives the run of a given step. So imagine a pipe line with 3 steps that got triggered by commit number 4922. Individual step numbers look like this: PL#4922-7654, PL#4922-324 and PL#4922-8. Step 1 could be a fast unit-test step, hence builds a lot, step 2 could be functional tests, so it builds less often and step 3 deploys to staging, and rarely happens. To configure Build Name Setter find the 'Build Environment' section of the build configuration, check 'Set Build Name' and enter an expression that will be evaluated to text:</span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;"><br /></span></div>
<div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoN0UsDnW02VL_4qRXymjoEP2Y9Ks431_LrrdqZREJFngGyYf1Sdo0EJ6WBWBM2tMMtwafkt77UqYpLvhgiieJ0oDPCNqXVmZWNqITRKy3zxaYZND6XvlVO9alDyMRJA3ZXk6PXCcNF-q8/s1600/BuildNameSetter.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><span class="Apple-style-span" style="font-family: arial;"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5709229320932068834" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoN0UsDnW02VL_4qRXymjoEP2Y9Ks431_LrrdqZREJFngGyYf1Sdo0EJ6WBWBM2tMMtwafkt77UqYpLvhgiieJ0oDPCNqXVmZWNqITRKy3zxaYZND6XvlVO9alDyMRJA3ZXk6PXCcNF-q8/s400/BuildNameSetter.png" style="cursor: pointer; height: 57px; width: 400px;" /></span></a></div>
<div>
<span class="Apple-style-span" style="font-family: arial;"><br /></span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;">In 'PL#${ENV,var="CHANGESET_NUMBER"}-${BUILD_NUMBER}' CHANGESET_NUMBER is an environment variable created by the source control plugin and set at check out time. You may have to figure out the details of the specific source control plugin you're using. BUILD_NUMBER is given by Jenkins.</span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;"><br /></span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;">Clone Workspace SCM Plugin allows you to reuse the workspace of a job, in the pipeline, a step, in another one. This avoids going to SCM again and re-checking out the code. This is key to a real pipeline. Remember? One check-out only.</span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;">After you installed </span><span class="Apple-style-span" style="font-family: arial;">Clone Workspace</span><span class="Apple-style-span" style="font-family: arial;"> a Post-build Action should be available. i.e.:</span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;"><br /></span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;"><span class="Apple-style-span" style="font-family: Georgia, serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiz8lrC231SMs2QlVzIXK8fKLa_OQw6Ax9NE7ietoDHS5E8HXyEhYnfX2LSN0uUQHHRyEDftsyfOLnfePdnScMoarjGIU_9RCShtWGucR6wowsMRYNu8dAusH7tWk_efAGlHsWmwcwDlJjD/s1600/WorkspaceClone1.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5709230225210403570" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiz8lrC231SMs2QlVzIXK8fKLa_OQw6Ax9NE7ietoDHS5E8HXyEhYnfX2LSN0uUQHHRyEDftsyfOLnfePdnScMoarjGIU_9RCShtWGucR6wowsMRYNu8dAusH7tWk_efAGlHsWmwcwDlJjD/s400/WorkspaceClone1.png" style="cursor: pointer; height: 128px; width: 400px;" /></a></span></span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;"><br /></span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;">You have to think about the workspace as it progresses in the pipeline. If the pipeline makes modifications to the workspace and there modifications are needed in future steps, then you need to re-clone again - very pleonastic :) If the workspace never changes then one clone at the end of step 1 should do the trick.</span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;"> </span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;">The subsequent steps will need to refer to the cloned workspace. For instance in Step 2 you should set the Source Code Management section to use the cloned version instead of pulling it from source control, i.e.:</span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;"><br /></span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;"><span class="Apple-style-span" style="font-family: Georgia, serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6Zpu2h0ZlzYaSShRzHDSPzH-S5a3hItcATwEg6_DDStIVM40SujhOJE6MnayiUmo_rrtQ8xdi2tdxQ0G55aQwfwUdWD0lfz5xEfsF3c6tobzE6-6M8HCGhlPhuZZxY2SB2SGdLhBTLtY8/s1600/WorkspaceClone2.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5709230412829388210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6Zpu2h0ZlzYaSShRzHDSPzH-S5a3hItcATwEg6_DDStIVM40SujhOJE6MnayiUmo_rrtQ8xdi2tdxQ0G55aQwfwUdWD0lfz5xEfsF3c6tobzE6-6M8HCGhlPhuZZxY2SB2SGdLhBTLtY8/s400/WorkspaceClone2.png" style="cursor: pointer; height: 77px; width: 400px;" /></a></span></span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;"><br /></span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;">I used Parameterized Trigger Plugin to invoke downstream steps and to pass the needed information so that the step can run. In this example all we need to pass is the change-set number. To configure it look for the 'Trigger parameterized build on other projects' on the Post-build Actions:</span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;"><br /></span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;"><span class="Apple-style-span" style="font-family: Georgia, serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaSK5T_fACB_xyZMszChAEEXqL-7rtUQWUTOaTEMoWgdgI9tElvJ4PlYV19_ZCEzFSYDLlTBl4T46pG3Sta1Fmsqi_AYHbJvTjzCfi30Kfjtobz_SGM916-ZAhzHmAiGP-vcfhYMWRteBK/s1600/ParameterizedBuild.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5709230588211216322" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaSK5T_fACB_xyZMszChAEEXqL-7rtUQWUTOaTEMoWgdgI9tElvJ4PlYV19_ZCEzFSYDLlTBl4T46pG3Sta1Fmsqi_AYHbJvTjzCfi30Kfjtobz_SGM916-ZAhzHmAiGP-vcfhYMWRteBK/s400/ParameterizedBuild.png" style="cursor: pointer; height: 159px; width: 400px;" /></a></span></span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;"><br /></span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;">The called step should also state that it needs a parameter to work. This parameter will be met from the invoking step when triggered automatically and if the step is triggered manually you'll need to provide it. To set it up look for the 'This build is parameterized' in the main section of the job configuration screen:</span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;"><br /></span></div>
<div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB8lBMxDO9jpUzkrjrxPwnDY3bTyVAjo0IlRkVyq4vSAM_e0ppyPau0578abt0pHlKpC9YQOxWWpNn7PRyD7xhU0H5t-bBA0ILpsNHyeqsHdysSZWkxo3kVss5Hri9XXBmBDax-4-pOsR_/s1600/ParameterizedBuild2.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5709230786110806674" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB8lBMxDO9jpUzkrjrxPwnDY3bTyVAjo0IlRkVyq4vSAM_e0ppyPau0578abt0pHlKpC9YQOxWWpNn7PRyD7xhU0H5t-bBA0ILpsNHyeqsHdysSZWkxo3kVss5Hri9XXBmBDax-4-pOsR_/s400/ParameterizedBuild2.png" style="cursor: pointer; height: 103px; width: 400px;" /></a></div>
<div>
<span class="Apple-style-span" style="font-family: arial;"><br /></span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;">Finally to ensure that the version building is the expected one I used a conditional check. First in step one I have a simple script that writes a file with the version number in the workspace. The file name is the change-set number itself. Note that because we're cloning the workspace this file will always be copied across but won't exist in source control per se. Second I have Conditional BuildStep Plugin check that the change-set number file exists and that its name matches the passed change-set parameter. This way the step won't accidentally run the wrong thing, this is particularly relevant when manually triggering steps. The Conditional BuildStep can be found under the build section.</span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;"><br /></span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;"><span class="Apple-style-span" style="font-family: Georgia, serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQsCt1Kbgr0j3WKZzRhzubH4oaUYQuPyOwsEv-VbATj-F7gL7Ff0Mj9-4XbF3TCLtyq1RzxJNGyZUSYyLrKwMYO16nSDaieYct4_mPdCMvoOT-wbZyLuyeIi6WGXUzp1LZ-ZrJSAHljoF4/s1600/ConditionalStep.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5709230962523663394" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQsCt1Kbgr0j3WKZzRhzubH4oaUYQuPyOwsEv-VbATj-F7gL7Ff0Mj9-4XbF3TCLtyq1RzxJNGyZUSYyLrKwMYO16nSDaieYct4_mPdCMvoOT-wbZyLuyeIi6WGXUzp1LZ-ZrJSAHljoF4/s400/ConditionalStep.png" style="cursor: pointer; height: 193px; width: 339px;" /></a></span></span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;"><br /></span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;">Other tasks I found important to do were:</span></div>
<div>
</div>
<div>
<ul>
<li><span class="Apple-style-span" style="font-family: arial;">aggregation of test results. To do this you can configure the self explanatory 'Aggregate downstream test results' Post-build Action</span></li>
</ul>
</div>
<div>
<span class="Apple-style-span" style="font-family: arial;"><span class="Apple-style-span" style="font-family: Georgia, serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7nhWvLIShYZj0S-rzb8S8PxONMOWKchxB_WZhM7qkgjeEVv9WKKFHkXXfarvL6-nhcPHaxFaE9dMKrlzBx2j_3gVXx1jOYUp_s0IQ_KI6xd6EmGCB7alIXqb2TaesEhp4wNXbQ5aRRgvc/s1600/AggregateTestResults.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5709231211673587442" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7nhWvLIShYZj0S-rzb8S8PxONMOWKchxB_WZhM7qkgjeEVv9WKKFHkXXfarvL6-nhcPHaxFaE9dMKrlzBx2j_3gVXx1jOYUp_s0IQ_KI6xd6EmGCB7alIXqb2TaesEhp4wNXbQ5aRRgvc/s400/AggregateTestResults.png" style="cursor: pointer; height: 81px; width: 400px;" /></a></span></span></div>
<div>
<ul>
<li><span class="Apple-style-span" style="font-family: arial;">archive artefacts in a central location/share that can be accessed from Jenkins slaves. T</span><span class="Apple-style-span" style="font-family: arial;">o do this I used CopyArchiver Plugin</span></li>
</ul>
</div>
<div>
<span class="Apple-style-span" style="font-family: arial;"><br /></span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;"><span class="Apple-style-span" style="font-family: Georgia, serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5NNoXFulxs8vZOp983V1idFUYS-e9Q8PNebX0NgGpcHnzvesudYoSerhcYHMilZobyYmYq_FWAS3EC_3vyVD9eTyRiKLsjIOHrMrVoq3Huaq8ETzFhqbGBKJ-HurHZMZXkPjgQBEvjnKI/s1600/CopyArtefacts.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5709231373685393826" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5NNoXFulxs8vZOp983V1idFUYS-e9Q8PNebX0NgGpcHnzvesudYoSerhcYHMilZobyYmYq_FWAS3EC_3vyVD9eTyRiKLsjIOHrMrVoq3Huaq8ETzFhqbGBKJ-HurHZMZXkPjgQBEvjnKI/s400/CopyArtefacts.png" style="cursor: pointer; height: 215px; width: 400px;" /></a></span></span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;"><br /></span></div>
<div>
<span class="Apple-style-span" style="font-family: arial;">There are downsides of using Jenkins to implement a pipeline. One of them is that there are heaps of configuration to do and lots of repetition. Another problem is that the configuration itself isn't maintained in source control and figuring out who changed what can be tricky. I recommend making sure that you at least have Jenkins back-ups configured.</span></div>
Anonymoushttp://www.blogger.com/profile/14224933549638075286noreply@blogger.com6tag:blogger.com,1999:blog-4806640790205683824.post-19624698174080914702010-01-13T13:15:00.000+11:002013-08-16T11:54:46.322+10:00Oz Citizenship iPhone releasedI had a lot of fun developing my first iPhone app. I was a bit disappointed with the Objective-C/XCode community though, it's so different than the Ruby and Java ones. Anyways, kudos to Brian Knorr from UISPec, you rock dude!<br />
<div>
<br />
<div>
<img alt="" border="0" id="BLOGGER_PHOTO_ID_5426054333704779010" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUBIp6N0BxB435H9whl5f-w5aTZn7oXeRwiHSgSorc-M-7C-o5s7Y7PJQVC4sfw3MAeZHVZDeZIpZ-3kOODKYPDtJS9IxWwMLJlkSLZPnlSdTRcR1-ZUu7aiCps5Z_URh24WN8izv27_2_/s320/app_store_buy_button_large.png" style="cursor: hand; cursor: pointer; float: left; height: 40px; margin: 0 10px 10px 0; width: 109px;" /></div>
<div>
<a href="http://itunes.apple.com/au/app/oz-citizenship/id346993058?mt=8">Check the Oz Citizenship app in iTunes</a> </div>
<div>
<br /></div>
<div>
<br /></div>
<div>
I found these tools very useful while developing my app:</div>
<div>
<br /></div>
<div>
<ul>
<li><a href="http://www.pivotaltracker.com/">Pivotal Tracker</a> (agile project management)</li>
<li><a href="http://code.google.com/p/uispec">UISpec</a> (functional tests - hope I find the time to blog about it, it's really cool!)</li>
<li><a href="http://github.com/gabriel/gh-unit">GHUnit</a> (unit tests)</li>
<li><a href="http://github.com/enormego/egodatabase">EGODatabase</a> (sqlite3 ORMish)</li>
<li><a href="http://www.mulle-kybernetik.com/software/OCMock">OCMock</a> (mocking framework)</li>
</ul>
</div>
<div>
<div>
One piece of advice for devs: don't use IB at all and write the UI by hand. Over and over code generation proves to be a bad choice.</div>
<div>
<br /></div>
<div>
Thanks to <a href="http://lawrencesong.net/">Lawrence Song</a> for the help with development, <a href="http://kevin.oneill.id.au/">Kevin O'neill</a> for tips and tricks and Christof Wildermuth for the german translations. Curious that it was <a href="http://www2.appzapp.de/App/Oz-Citizenship-346993058.html">indexed in german</a> before any other language.</div>
</div>
</div>
Anonymoushttp://www.blogger.com/profile/14224933549638075286noreply@blogger.comtag:blogger.com,1999:blog-4806640790205683824.post-18520070971581591682008-09-20T23:26:00.000+10:002008-09-20T23:42:43.407+10:00Yet Another Validator<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj31NEVEjg8enILDRQacmNY6y0BaEJUs9kginUfruaabhQC4Xk5TX1eD2EGGLXGqXpoNRVlVP8FS0QoPE0ytCFDyCsUPPT0BZoJufkEymGj14GYQEf420zFWKO7euQ2cYFs8wndJY5YNUkO/s1600-h/big_tick.jpg"><img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj31NEVEjg8enILDRQacmNY6y0BaEJUs9kginUfruaabhQC4Xk5TX1eD2EGGLXGqXpoNRVlVP8FS0QoPE0ytCFDyCsUPPT0BZoJufkEymGj14GYQEf420zFWKO7euQ2cYFs8wndJY5YNUkO/s200/big_tick.jpg" alt="" id="BLOGGER_PHOTO_ID_5248097390376833554" border="0" /></a>Sick of writing validators? Sick of XML? Sick of framework specific validation? Sick of complex formats and extra stuff you never use? Well, I was too and now I've outsourced something that might help you too reducing these pains.<br />Check out <a href="http://sourceforge.net/projects/y-a-v/">YAV</a>.<br />YAV is a simple, framework independent, lightweight Java validation tool. It applies validations directly to domain models through annotations. It checks for mandatoriness, email, range and regex. If you need, create your own methods to perform more complex validations. It is JSR-303 non-compliant - thank goodness :)<br />Currently integrates nicely with Spring2.5, Struts2 is on the way.<br />It also has ValidationTestCases that minimize annoyingly repetitive testing tasks.<br />As always, there are a few edges to trim, but it works.Anonymoushttp://www.blogger.com/profile/14224933549638075286noreply@blogger.com0tag:blogger.com,1999:blog-4806640790205683824.post-5886399086931970702008-08-11T18:45:00.000+10:002008-08-11T19:04:07.577+10:00Momentary Autism and Business Blindness on Software Development<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGilfG0afGIStWQ_N2b46JRvycgJH3KphZIg8Ghp-lQhxeMVq554-uqFRFnTXsPidrJavCObmkYNR5B0V6CO4_L4RuFqlb5LdCke78sTUtALFOgi7Khd30rxID8UusQxl1d3t6ZJwp6gMG/s1600-h/police.jpg"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGilfG0afGIStWQ_N2b46JRvycgJH3KphZIg8Ghp-lQhxeMVq554-uqFRFnTXsPidrJavCObmkYNR5B0V6CO4_L4RuFqlb5LdCke78sTUtALFOgi7Khd30rxID8UusQxl1d3t6ZJwp6gMG/s400/police.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5233183177676277010" /></a><br />I finished reading Blink a couple of weeks ago and the anecdotes keep on coming back to me all the time. The book has several support stories for the author’s arguments and in general they are very well constructed. There is one in especial that is closely related to software development. It is the one that talks about how police officers get into a state of momentary autism on situations of extreme pressure. Far from me saying that software developers are under the gun in the same fashion as police people, but there are similarities.<br /><br />In the book Gladwell discusses why highly trained professionals can bluntly fail to recognize true danger. The most probable reason is that once inside of complex situations the human mind tends to fail intercepting external stimuli. He suggests that a way to avoid getting caught on such mind blanking traps is to repeat safety steps. Most people can handle complex situations but few know how to avoid creating them in the first place. In software production, frequent codebase commits and updates, rigorous test writing (preferably in TDD way) and the use a continuous fast build are as important as keeping a gun away from suspects or holding the torch with the weak hand. If the process provides safety use it always.<br /><br />In his research Gladwell found that police officers working in pairs do things differently than those working alone. Actually partners tend to speed up when working together. For the police speed can be bad because failing to correctly interpret signals in life threatening situations may be disastrous. Software, on the other hand, needs to be produced quickly, so let’s pair. Developers working together are more confident and like police officers tend to be bolder and charge more. It's a pity that police doesn’t have test frameworks to find out if the suspect was holding a gun or a wallet by the time they decided to open fire.<br /><br />The autistic condition reported by officers has striking resemblance with the business blindness that plagues developers. Officers say that the fear of gunfire is such that they react without considering external factors. They are trained gunmen but the last thing they want is to fire a gun. Don’t go on writing code unless you know it has business value. It is every developer’s job to challenge requirements for purpose and need. Don’t allow yourself into a condition where everything is self-justified. Don’t use your experience to simply write more code instead make sure that every line delivers value.Anonymoushttp://www.blogger.com/profile/14224933549638075286noreply@blogger.com0tag:blogger.com,1999:blog-4806640790205683824.post-42667266390786563872008-07-26T17:58:00.002+10:002013-08-22T10:47:14.789+10:00Tips and tricks to deploy JRuby apps onto heavy J2EE containersThis is a list of things to note when developing Rails/JRuby applications that will be deployed to java web containers such as Tomcat, WebSphere <span style="font-style: italic;">et alli</span>. It's obviously incomplete but it is much longer than I thought it would be when I first started.<br />
<ul>
<li><span style="font-style: italic;">RAILS_ROOT</span> becomes the context therefore your traditional Rails folders aren't where you'd expect them to be. In a java container the public area is usually context's root. Warbler helps be copying the files from the application's Rails public folder and you can also modify how it packs the app by changing the entries in warbler.rb.</li>
<li>Rails caching usually depends on where public files are and things tend to go bezerk unless you set where the public folder lives. So, place this in your environment.rb: <span style="font-style: italic;">Rails.public_path="#{RAILS_ROOT}/.."</span></li>
<li>Try to stick to one interpreter only. It's quite confusing managing dependencies and versions when having too many rubys installed, and it's very easy to end up with:</li>
</ul>
<ol>
<li>the IDE's JRuby</li>
<li>the JRuby you installed</li>
<li>the JRuby that comes with warbler</li>
<li>the C-ruby install</li>
</ol>
<ul>
<li>Assuming the app will run in JRuby prefer NOT to use a C-ruby interpreter at all, not even in development. This doesn't necessarily means giving up Mongrel/Webrick. Java containers won't refresh changes to view files so it is very handy to use Mongrel/Webrick for the minor css/html changes, otherwise you'll loose rails quick feedback cycle.</li>
<li>Make sure that the version you're developing in is the same the app will be running when in production.</li>
<li>Don't use warbler's (v. 0.9.9) JRuby version (1.1.1) it will most certainly cause you grief. Delete it from the installed GEM and get the latest <a href="http://repository.codehaus.org/org/jruby/jruby-complete">jruby-complete.jar</a>, then place it in the lib directory so warbler picks it up when packing the war.</li>
<li>Check <span style="font-style: italic;">config.webxml.rails.env</span> in <span style="font-style: italic;">warble.rb</span> to make sure the warbled app is configured with the environment you want it to be. This variable creates an entry in the generated web.xml that defines which <span style="font-style: italic;">RAILS_ENV</span> will be executed. </li>
<li>JDBC adapters seem to be a problem still. When running RSpec the <span style="font-style: italic;">test</span> environment crashes because <span style="font-style: italic;">recreate-database</span> method isn't implemented yet. It seems that Derby is the only one fully implemented.</li>
<li>Gems dependencies (Rails 2.1) aren't working properly. It seems that it has issues with java gems. I failed to install/unpack hpricot and activerecord-jdbc. So use other ways to freeze gems into the project. Don't forget to use <span style="font-style: italic;">config.load_paths</span> to tell where the gems are in relation to the app in the java container.</li>
<li>Deploy as frequently as possible to the target java container to avoid surprises. I can assure you that there will bad surprises if you don't do it.</li>
<li>Autotest (<a href="http://www.zenspider.com/ZSS/Products/ZenTest/">ZenTest</a>) doesn't seem to like the <span style="font-style: italic;">script/spec</span> command. A cheap way to overcome this is to create a softlink called <span style="font-style: italic;">script</span> in JRuby's bin directory that points to the bin directory itself.</li>
<li>I'm using <a href="http://www.h2database.com/">H2</a> (file based) in development and it is a cool database but there is one annoyance in Windows. Windows locks H2 log file even if the connection is explicitly saying that it shouldn't - <span style="font-style: italic;">url: jdbc:h2:file:db/development;FILE_LOCK=NO</span>. In Linux/MacOS it behaves properly.</li>
<li>JNDI resources are available for databases only, if you need to grab a hold of other JNDI resources some code has to be cooked to do the lookup. I wrote this very <a href="http://antagonisticpleiotropy.blogspot.com/2008/06/reading-jndi-resources-in-jruby.html">simple JNDI adapter</a>.</li>
<li>Let database adapters do their jobs, it's a little more code but it guarantees you won't run into type conversion problems. For instance:</li>
</ul>
<ol>
<li>GOOD -><span style="font-style: italic;"> Person.find_by_name name, :conditions => ["alive = :breathing", {:breathing => true}] </span></li>
<li>BAD -><span style="font-style: italic;"> Person.find_by_name name, :conditions => ["alive = true"]</span></li>
</ol>
<ul>
<li>Use <a href="http://svn.rubyonrails.org/rails/plugins/exception_notification/">Exception Notification</a>. It provides a very nice snapshot of the state of affairs and you'll need it.</li>
<li>Use <a href="http://haml.hamptoncatlin.com/">HAML</a>, it really makes things simpler. This not a JRuby thing but a still a good recommendation.</li>
<li>Pay attention to links. Strive to use rails resolvers to create links and urls, as traditionally, in a java container you'll usually have a context. In regular rails it looks like this: <span style="font-style: italic;">http://localhost:3000/persons</span> and in java-land most likely this: <span style="font-style: italic;">http://localhost:8080/appName/persons</span></li>
<li>Netbeans 6.1 made me smile after frustrated weeks using <a href="http://www.aptana.org/">Aptana</a> and <a href="http://www.e-texteditor.com/">E</a>. I know IDE's are religious war starters but this is my take on it. Netbeans works the others don't.</li>
<li>If possible prefer NOT to develop in Windows, especially because it is definitely much slower. If you must use Cygwin. BTW there is this cool tool called <a href="http://software.jessies.org/terminator/">Terminator</a>, it keeps all terminals together in tabs.</li>
<li>I had problems making controllers see some modules. More specifically cache sweeping. In my controller I had to add these 2 lines, or it doesn't work:</li>
</ul>
<ol style="font-style: italic;">
<li>require File.expand_path("#{RAILS_ROOT}/vendor/rails/actionpack/lib/action_controller/caching/sweeping") unless defined? cache_sweeper</li>
<li>include ActionController::Caching unless defined? cache_sweeper</li>
</ol>
<ul>
<li>Protect from forgery has problems with WebSphere. It always complains about the generated tokens not been compatible. Is any one using it?</li>
</ul>
Anonymoushttp://www.blogger.com/profile/14224933549638075286noreply@blogger.com0tag:blogger.com,1999:blog-4806640790205683824.post-50294204392048033552008-06-24T22:46:00.001+10:002008-06-24T23:10:24.162+10:00Slight difference on defined? resultsSome piece of ruby logic was depending on a <span style="font-style: italic;">defined?</span> check to identify <span style="font-style: italic;">local-variable</span>s. It was working fine in C-Ruby but it failed when ported to JRuby.<br />So what we found out was that the <span style="font-style: italic;">defined?</span> keywork/method/check/thingy in JRuby gives a slightly different response.<br />Try it out. In your terminal bring up <span style="font-style: italic;">irb</span> and type:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUQzudpbWKKDhq50PMwghZ6dA39pVtT9XicAuTHGSk3Ix1hMgiC5Pat3Gk_USTG0VhxzF66B9W1B7lf7uy66ihU1JpZlCAuwHaAANtrtwcP3gryCqmdNUsp9q0CwoAn9QZlV-UjgcSdMMJ/s1600-h/irb.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUQzudpbWKKDhq50PMwghZ6dA39pVtT9XicAuTHGSk3Ix1hMgiC5Pat3Gk_USTG0VhxzF66B9W1B7lf7uy66ihU1JpZlCAuwHaAANtrtwcP3gryCqmdNUsp9q0CwoAn9QZlV-UjgcSdMMJ/s400/irb.png" alt="" id="BLOGGER_PHOTO_ID_5215431720430371890" border="0" /></a><br />Then try it with Jruby:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUgg-hGhsd2yPpz9ygZpL6AdBs2GmN_A_0mjMrE-E8dv6rH1wdwUXUsukuj5ESkQXNpoLHOKAEN-yrZSvwP6mouTOtPyJjW5Z2Rtz5mWgsZSnyfovrJub2OvryU2wbpypFBkLk9HMWt4Ip/s1600-h/jruby-irb.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUgg-hGhsd2yPpz9ygZpL6AdBs2GmN_A_0mjMrE-E8dv6rH1wdwUXUsukuj5ESkQXNpoLHOKAEN-yrZSvwP6mouTOtPyJjW5Z2Rtz5mWgsZSnyfovrJub2OvryU2wbpypFBkLk9HMWt4Ip/s400/jruby-irb.png" alt="" id="BLOGGER_PHOTO_ID_5215432002295189842" border="0" /></a><br />JRuby spits out a<span style="font-style: italic;"> local-variable(in-block)</span> whilst C-ruby gives back <span style="font-style: italic;">local-variable</span> only. I suppose this is intentional, although I didn't go down the rabbit hole to confirm it. If you know the rationale I'd like to know it too. Anyways, just a heads up that they are different.Anonymoushttp://www.blogger.com/profile/14224933549638075286noreply@blogger.com0tag:blogger.com,1999:blog-4806640790205683824.post-64758752981397742008-06-23T23:42:00.000+10:002008-06-24T00:16:35.043+10:00Reading JNDI resources in JRuby<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSTpc8w2L41CNOOc-Vyx04p1iPGanO1ZnnFU-nTjMrBvjlUqV3es21g05W9R1qwBsy9_kimjn4HVfX5JVx0EuqbZeeZnVrxuBCGxeybr8rDcDAkZIXudkLFW-1C2CzGz3jfPRKNyknIuXD/s1600-h/dukewithrubyax7.thumbnail.png"><img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSTpc8w2L41CNOOc-Vyx04p1iPGanO1ZnnFU-nTjMrBvjlUqV3es21g05W9R1qwBsy9_kimjn4HVfX5JVx0EuqbZeeZnVrxuBCGxeybr8rDcDAkZIXudkLFW-1C2CzGz3jfPRKNyknIuXD/s400/dukewithrubyax7.thumbnail.png" alt="" id="BLOGGER_PHOTO_ID_5215078994472243314" border="0" /></a>The most common use of a JNDI resource in JRuby-land is for configuring datasources. But now I wanted to have ActionMailer send emails using a JNDI config. So how to do it?<br />Do not fear! JRuby is your friend and every old java trick can be used.<br /><br />So let's create the JNDI resource which is an javax.mail.Session pointing to localhost. This is what one would normally find in Tomcat's context.xml file (<a href="http://pastie.org/220348">pastie</a>):<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhM-4W2pmcd_ySahqeF6xK8kFhXAjeamxzkLLslET8lVawpcUlVCWpRvmCa4jkF_Qep6VGdFsy0lt9nISLJJ-aNgp4pDLYqYj6GdTtuh2kZALvlF7uhBfZ0Z7j1qIfpSar1o5jAD2M5U2vQ/s1600-h/context.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhM-4W2pmcd_ySahqeF6xK8kFhXAjeamxzkLLslET8lVawpcUlVCWpRvmCa4jkF_Qep6VGdFsy0lt9nISLJJ-aNgp4pDLYqYj6GdTtuh2kZALvlF7uhBfZ0Z7j1qIfpSar1o5jAD2M5U2vQ/s400/context.png" alt="" id="BLOGGER_PHOTO_ID_5215074513770025154" border="0" /></a><br />Then let's create an adapter to do look ups for us (<a href="http://pastie.org/220347">pastie</a>):<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnbqDth7cOjpZ_IbPnpdG1b90shMHnyTU1lzg2rQLycr_KASobyPFfO4di276LK2lDTYjPbNcaMcCUOEkhf3TdtdZ90tgTN64gQUOPz1MVBxEZj6rhF1H4SzWYJa-2CuA4NULyqvu6SB8E/s1600-h/adapter.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnbqDth7cOjpZ_IbPnpdG1b90shMHnyTU1lzg2rQLycr_KASobyPFfO4di276LK2lDTYjPbNcaMcCUOEkhf3TdtdZ90tgTN64gQUOPz1MVBxEZj6rhF1H4SzWYJa-2CuA4NULyqvu6SB8E/s400/adapter.png" alt="" id="BLOGGER_PHOTO_ID_5215075844772127378" border="0" /></a><br />And finally a simple test to see if it works (<a href="http://pastie.org/220352">pastie</a>):<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5OF6Q_xfcQa4QuJRGDnx06UmdUAz520M_Ws5Mgy_JC7I52w_zuJGHf73EhbPfSAFWurKodsDasIR0R2vipDOPsh6yUnFjam0o6N7_ef1JJ4I7D-xyroY6hBMp6EoS5hw6ifojwT-oOrQo/s1600-h/lookup.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5OF6Q_xfcQa4QuJRGDnx06UmdUAz520M_Ws5Mgy_JC7I52w_zuJGHf73EhbPfSAFWurKodsDasIR0R2vipDOPsh6yUnFjam0o6N7_ef1JJ4I7D-xyroY6hBMp6EoS5hw6ifojwT-oOrQo/s400/lookup.png" alt="" id="BLOGGER_PHOTO_ID_5215076434063955810" border="0" /></a><br />Pretty easy huh?Anonymoushttp://www.blogger.com/profile/14224933549638075286noreply@blogger.com0tag:blogger.com,1999:blog-4806640790205683824.post-66509327976275017762008-05-27T20:23:00.000+10:002008-05-27T21:26:40.048+10:00The Omen strikes again! JRuby on Rails on, yikes, Websphere.<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQmyVPD7Lr1zjyR5s4TmoD2g6RKng7lMn88WHWVx9aiBOxVVAGJqA9XdoKUYSfnHCar7VcWRVpIBC1-TqLxES5ovOf1aEuhpjsdgdgptIuYMg_ddRA5YJWVsTfe_QOEQTvPjKxEt7AX1zu/s1600-h/websphere.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQmyVPD7Lr1zjyR5s4TmoD2g6RKng7lMn88WHWVx9aiBOxVVAGJqA9XdoKUYSfnHCar7VcWRVpIBC1-TqLxES5ovOf1aEuhpjsdgdgptIuYMg_ddRA5YJWVsTfe_QOEQTvPjKxEt7AX1zu/s200/websphere.jpg" alt="" id="BLOGGER_PHOTO_ID_5205009553604732082" border="0" /></a>Recently I kept my self busy, and highly frustrated trying to get a <a href="http://jruby.codehaus.org/">JRuby</a> application working on WebSphere 6.1. The recipe was pretty straight forward: <a href="http://caldersphere.rubyforge.org/warbler/">warble</a> it and deploy it. Truthfully, there are a few steps that you need to be taken care of, such as configuring database.yml to point to the right place and making sure warbler.rb config file includes the proper jdbc-adapters, but that is all OK.<br /><br />So, after trying the generated .war in Tomcat and confirming that it was working fine, it was time to hit WebSphere land, and guess what!, didn't work, duh!<br /><br />The default web.xml configuration doesn't play well in WebSphere. The worst part is that there are no error messages, not even a trace in the logs to help.<br /><br />The default web.xml spat out by warbler reads:<br /><br /><span style="font-style: italic;"><filter></filter></span><span style="font-style: italic;"><filter-name></filter-name></span> <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvhs6JxKa_sHvjIazM5RDzeB5IeHfWi1Gd_O749PrjMrhmrEC2sId5zLZZQ2jsF2vnEB3WPdpwhZ-RMnfTBDPTEquCwLHNHMc1kx6SWHZi4s90csJUWpiZM7uITqVk-S_c_w4IukAaOj5p/s1600-h/b4.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvhs6JxKa_sHvjIazM5RDzeB5IeHfWi1Gd_O749PrjMrhmrEC2sId5zLZZQ2jsF2vnEB3WPdpwhZ-RMnfTBDPTEquCwLHNHMc1kx6SWHZi4s90csJUWpiZM7uITqVk-S_c_w4IukAaOj5p/s400/b4.png" alt="" id="BLOGGER_PHOTO_ID_5205014698975552722" border="0" /></a><br />The filter doesn't work in WebSphere, but the servlet does the trick. So I changed the web.xml.erb within the installed gem to produce this:<br /><span style="font-style: italic;"> <listener></listener></span> <span style="font-style: italic;"><listener-class></listener-class></span><span style="font-style: italic;"><listener-class></listener-class></span><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxIf9GWy-yTnozTpn9P-EEXRBnctA0reuLY16nnU6TTlm_L97LQrkDc7qKxErpks13raNoErZIRRYe1NNCXEIfu-_xNRt1nUOi580BI5Bj01iZEwkucxYbKe0U20-4W2VTxyaV83dtqu-A/s1600-h/after.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxIf9GWy-yTnozTpn9P-EEXRBnctA0reuLY16nnU6TTlm_L97LQrkDc7qKxErpks13raNoErZIRRYe1NNCXEIfu-_xNRt1nUOi580BI5Bj01iZEwkucxYbKe0U20-4W2VTxyaV83dtqu-A/s400/after.png" alt="" id="BLOGGER_PHOTO_ID_5205015068342740194" border="0" /></a><br />Note that I've repeated the listener tag, it was intentional. WebSphere will complain if the listener declaration came after the servlet tag, it must be before, duh! again!Anonymoushttp://www.blogger.com/profile/14224933549638075286noreply@blogger.com0