<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;D04CSXk6eCp7ImA9WxBaEU0.&quot;"><id>tag:blogger.com,1999:blog-7501180114730436648</id><updated>2010-03-20T13:26:08.710-04:00</updated><title>The Hacker Chick Blog</title><subtitle type="html">The Hacker Chick Blog provides unconventional wisdom on creating extraordinary software. It is for those of us who are truly passionate about building better software; those of us who look at the edge and wonder what's beyond…</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.thehackerchickblog.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.thehackerchickblog.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>abby</name><uri>http://www.blogger.com/profile/14805958673888992905</uri><email>haxrchick@gmail.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>45</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/TheHackerChickBlog" /><feedburner:info uri="thehackerchickblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/3.0/" /><logo>http://creativecommons.org/images/public/somerights20.gif</logo><feedburner:emailServiceId>TheHackerChickBlog</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;CUcNQX0ycCp7ImA9WxBaEE4.&quot;"><id>tag:blogger.com,1999:blog-7501180114730436648.post-505782587121383323</id><published>2010-03-19T14:20:00.009-04:00</published><updated>2010-03-19T17:11:30.398-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-19T17:11:30.398-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WPF" /><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft" /><title>Evangelist Chick: Preachin’ the Good Word to Devs</title><content type="html">&lt;p&gt;&lt;font color="#408080"&gt;&lt;em&gt;I wrote the start of this post after returning from a full day of interviews, what Microsoft has endearingly termed&lt;/em&gt; &lt;strong&gt;Finals Day&lt;/strong&gt;&lt;em&gt;… I had no idea I’d actually get to post it now, 2 weeks later, as I get ready to start this awesome new job…&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="Final Exam" border="0" alt="Final Exam" align="left" src="http://lh6.ggpht.com/_dkYqgGG4VVU/S6PAcNoiIyI/AAAAAAAAAsg/Gh0hxdssBnE/Final-Exam%5B4%5D.gif?imgmax=800" width="237" height="160" /&gt;I just got back from my &lt;strong&gt;Finals Day&lt;/strong&gt; with Microsoft. I’m interviewing for a &lt;strong&gt;Developer Evangelist&lt;/strong&gt; position, which is beyond exciting. Not to mention a tad mind blowing. If anyone had told me a few months ago I’d be interviewing for this job I would have laughed them right out of the room. &lt;/p&gt;  &lt;p&gt;And yet, here I am. So, in the spirit of fellow hax0r turned Microsoft Evangelist, &lt;a title="The Journey Begins by Joey DeVilla" href="http://www.globalnerdy.com/2008/10/20/the-journey-begins/" target="_blank"&gt;Joey DeVilla&lt;/a&gt; (aka &lt;a title="@AccordionGuy (Twitter)" href="http://twitter.com/accordionguy/" target="_blank"&gt;@AccordionGuy&lt;/a&gt;), I thought I’d blog about just WTF I’m thinking.&lt;/p&gt;  &lt;p&gt;If you’ve read anything of mine, you probably know my &lt;em&gt;shtick, &lt;/em&gt;I like to say:  &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;em&gt;&lt;font color="#6633ff"&gt;“Java, C#, C/C++… it ain’t about the language but the wonderful things we build.”&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;And this is true – for languages, platforms, technologies, practices… I pride myself on being technology agnostic and just picking the right tool for the right job.&lt;/p&gt;  &lt;p&gt;So, how am I interviewing for a &lt;em&gt;Microsoft&lt;/em&gt; &lt;em&gt;Evangelist &lt;/em&gt;role?? Good question! Let’s step back into our &lt;a title="Wikipedia: WABAC machine" href="http://en.wikipedia.org/wiki/WABAC_machine" target="_blank"&gt;WABAC machine&lt;/a&gt;...&lt;a name='more'&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="center"&gt;&lt;em&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="Mr. Peabody, Sherman, and the WABAC Machine" border="0" alt="Mr. Peabody, Sherman, and the WABAC Machine" align="right" src="http://lh4.ggpht.com/_dkYqgGG4VVU/S6PAdMCMetI/AAAAAAAAAsk/7FRjIhE4--0/WayBackmachine%5B8%5D.png?imgmax=800" width="284" height="191" /&gt;Sherman, take us back to April, 2008…&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;At MIX 08, Daniel Makoski gave this &lt;em&gt;amazing&lt;/em&gt; presentation called &lt;a title="Beneath the Surface: The Natural Experience Vision" href="http://videos.visitmix.com/MIX08/UX08" target="_blank"&gt;Beneath the Surface: The Natural Experience Vision&lt;/a&gt;. In it is this quote of his that I love so much:&lt;/p&gt;  &lt;p&gt;&lt;font color="#6633ff"&gt;“The last 30 years of computing have been about people learning the language of computers… &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#6633ff"&gt;The next 30 will be about computers learning the language of people.”&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Watching the video of this presentation was one of those career-altering moments, where you see something and go “Forget &lt;strong&gt;everything&lt;/strong&gt; that I’ve done for the last 15 years, &lt;strong&gt;THIS &lt;/strong&gt;right here is what I want to be doing.” &lt;/p&gt;  &lt;p&gt;And so, I set about learning the technology to help get me there. I taught myself WPF, because Surface’s UI was built with WPF. I hadn’t actually done Microsoft development since my C++/Win32 API days&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#000000" face="Courier New"&gt;#include &amp;lt;windows.h&amp;gt;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;pre&gt;&lt;code&gt;&lt;font color="#000000"&gt;LRESULT CALLBACK WindowProc( HWND, UINT, WPARAM, LPARAM );
int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                     PSTR szCmdParam, int iCmdShow )&lt;/font&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;and so that meant I also had to learn this (not so) new fangled .NET and C#. The last time I looked at C#, it had struck me as the perfect combination of stripping away &lt;strong&gt;all &lt;/strong&gt;the power of C++ with a dumbed down version of Java. Awesome! So I was pretty blown away by not only how far it’s come but how much it’s clearly left Java in the &lt;strong&gt;dust&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;After a year or so playing with these tools and seeing what they can do, I concluded that these &lt;em&gt;are&lt;/em&gt; the right tools for building out the next generation of software that’s &lt;em&gt;natural&lt;/em&gt; for people to use. The type of software &lt;em&gt;I&lt;/em&gt; want to be building.&lt;/p&gt;

&lt;p&gt;And so, I decided to found my own company around this notion of building better software: &lt;a title="Digital Muse" href="http://www.digitalmusesoftware.com" target="_blank"&gt;Digital Muse&lt;/a&gt;. I even gave it a tagline inspired by Daniel Makoski’s presentation &lt;font color="#6633ff"&gt;&lt;em&gt;teaching computers the language of people&lt;/em&gt;.&lt;/font&gt; And, I signed up for &lt;a title="BizSpark" href="http://www.microsoft.com/BizSpark/" target="_blank"&gt;BizSpark&lt;/a&gt;, Microsoft’s program that gives &lt;em&gt;free software&lt;/em&gt; (yay!) to startups. Awesome!&lt;/p&gt;

&lt;p&gt;Now, I just had to figure out how the heck to get customers. Hmmm.&lt;/p&gt;

&lt;p&gt;So I’m looking around at all things WPF &amp;amp; Silverlight, and I come across this &lt;em&gt;crazy&lt;/em&gt; job opening: &lt;strong&gt;Microsoft Developer Evangelist: Boston Startups&lt;/strong&gt;. Hmm, what &lt;em&gt;does&lt;/em&gt; a Developer Evangelist do anyway? Kinda’ curious, I click in and proceed to read a description that eerily describes me to a T. Here are some of the highlights:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Must demonstrate a passion for technology and previous experience showing developers “how to” (check!) &lt;/li&gt;

  &lt;li&gt;Possess current technical background in &lt;em&gt;both &lt;/em&gt;Microsoft &lt;em&gt;&amp;amp; &lt;/em&gt;competing technologies (Java, Silverlight, WPF–check!) &lt;/li&gt;

  &lt;li&gt;Exceptional skills creating and driving solutions to unexpected challenges (Hacker Chick, present!) &lt;/li&gt;

  &lt;li&gt;Opportunity to innovate by engagement, working with startups (*drooool* I &lt;em&gt;love&lt;/em&gt; startups!) &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Of course, there is no way in hell they’ll contact me back. But, what the hell, I post my resume to Microsoft and &lt;em&gt;attempt &lt;/em&gt;to submit it for this position. Apparently, I wasn’t 10% smarter then their Careers website (tip: when applying to a Microsoft position, you probably want to use IE) and so failed. It made it into the system, but not for that job. The &lt;strong&gt;&lt;em&gt;next day &lt;/em&gt;&lt;/strong&gt;I get an email from a Microsoft recruiter saying that someone forwarded my resume to her and she was wondering if I might be interested in this position. It’s for a Developer Evangelist for Startups in the Boston area.&lt;/p&gt;

&lt;p align="center"&gt;&lt;em&gt;… fade back to today …&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Despite channeling &lt;a href="http://www.youtube.com/watch?v=hQkf-LmsGZw" target="_blank"&gt;Jordan from Real Genius&lt;/a&gt; throughout the entire slew of phone &amp;amp; in-person interviews –- getting so excited and talking so fast I was sure I was just going to pass right out (exactly the right impression whilst trying to demonstrate your ‘leet communication skills), I somehow managed to land the job without the need for smelling salts.&lt;/p&gt;

&lt;p&gt;Now, I’ll get to work with &lt;em&gt;other&lt;/em&gt; devs who are like-mindedly crazy passionate &amp;amp; trying to start &lt;em&gt;their&lt;/em&gt; own companies, and I’ll get to help them with all these amazing technologies. I honestly can’t think of a single thing I would rather be doing.&lt;/p&gt;

&lt;p&gt;Everyone I tell says to me, “oh yeah! You’ll be a &lt;strong&gt;great&lt;/strong&gt; evangelist!” and I keep thinking wow! really?? That is so &lt;strong&gt;weird&lt;/strong&gt;, I’m just a hacker chick. Is being the type of person that would make a great evangelist a &lt;em&gt;good &lt;/em&gt;thing?&lt;/p&gt;

&lt;p&gt;But then, I think about how many devs I’ll get to reach to help promote software goodness and I think &lt;em&gt;yeah. Yeah, I think that &lt;/em&gt;&lt;strong&gt;IS&lt;/strong&gt; &lt;em&gt;a good thing after all.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So just call me Evangelist Chick… &lt;em&gt;preachin' the good word to developers&lt;/em&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501180114730436648-505782587121383323?l=www.thehackerchickblog.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=CM9Qe8_ixyY:F5O_Gmk0YNY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=CM9Qe8_ixyY:F5O_Gmk0YNY:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=CM9Qe8_ixyY:F5O_Gmk0YNY:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=CM9Qe8_ixyY:F5O_Gmk0YNY:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?i=CM9Qe8_ixyY:F5O_Gmk0YNY:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=CM9Qe8_ixyY:F5O_Gmk0YNY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheHackerChickBlog/~4/CM9Qe8_ixyY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thehackerchickblog.com/feeds/505782587121383323/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thehackerchickblog.com/2010/03/evangelist-chick-preachin-good-word-to_19.html#comment-form" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/505782587121383323?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/505782587121383323?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheHackerChickBlog/~3/CM9Qe8_ixyY/evangelist-chick-preachin-good-word-to_19.html" title="Evangelist Chick: Preachin’ the Good Word to Devs" /><author><name>abby</name><uri>http://www.blogger.com/profile/14805958673888992905</uri><email>haxrchick@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02745342225111277233" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">6</thr:total><feedburner:origLink>http://www.thehackerchickblog.com/2010/03/evangelist-chick-preachin-good-word-to_19.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMBQ3o_eyp7ImA9WxBUE0U.&quot;"><id>tag:blogger.com,1999:blog-7501180114730436648.post-1664349988266833860</id><published>2010-02-25T20:35:00.031-05:00</published><updated>2010-02-28T13:40:52.443-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-28T13:40:52.443-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="lean" /><title>Are We Agile Yet?</title><content type="html">&lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="Are We There Yet? (Norman Rockwell)" border="0" alt="Are We There Yet? (Norman Rockwell)"" align="right" src="http://lh6.ggpht.com/_dkYqgGG4VVU/S4clTjyIJtI/AAAAAAAAAr4/64pWp6vNogg/NormanRockwell-Car_thumb.jpg?imgmax=800" height="195" /&gt;I read somewhere that a large number of software teams think they’re Agile because they do Daily Scrums.&lt;/p&gt;  &lt;p&gt;Now I don’t like to get religious, and I &lt;em&gt;certainly&lt;/em&gt; don’t believe you have to follow some list of &lt;strong&gt;&lt;font color="#6633ff"&gt;Ten Specific Practices&lt;/font&gt;&lt;/strong&gt; to &lt;strong&gt;&lt;font color="#6633ff"&gt;“Be Agile.”&lt;/font&gt;&lt;/strong&gt; But I do think that sometimes companies get a little overly anxious to jump on the agile bandwagon and before we know it we’re regaled with horror stories of agile project failures. But were they really agile? Or were they just doing Daily Scrums?&lt;/p&gt;  &lt;p&gt;What should you do if your company is trying to go agile? How can you make sure that – even if you’re not following some &lt;em&gt;textbook-perfect&lt;/em&gt; definition – that you’re actually doing &lt;em&gt;enough &lt;/em&gt;of the &lt;em&gt;right stuff&lt;/em&gt; to reap agile’s benefits?&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt;  &lt;p&gt;&lt;font color="#008080"&gt;&lt;strong&gt;&lt;em&gt;Focus on Intent, Not Practices&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Agile is a set of values (see: &lt;a title="Manifesto for Agile Software Development" href="http://agilemanifesto.org/" target="_blank"&gt;Agile Manifesto&lt;/a&gt;), &lt;em&gt;not &lt;/em&gt;practices. Of course, we’ve got all these super smart people in software and so we’re continually discovering new practices to help us achieve those values. But here’s the thing:&lt;/p&gt;  &lt;p align="center"&gt;&lt;font color="#6633ff"&gt;The practices are tools to &lt;em&gt;help us&lt;/em&gt;, they’re not what &lt;em&gt;makes us agile&lt;/em&gt;. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;What this means is, you can’t just whip out your handy dandy &lt;strong&gt;List o’ Agile Practices&lt;/strong&gt; and pick out 1 or 2 that look easy (“&lt;em&gt;Hey, I bet even WE could handle these Daily Scrum things! And ooh, let’s stop Big Up Front Design too – we’re not very good at design anyway”) &lt;/em&gt;and think it’s going to make you Agile.&lt;/p&gt;  &lt;p&gt;Instead, we need to focus on agile’s &lt;strong&gt;intent&lt;/strong&gt; – which is defined in the &lt;a title="Principles behind the Agile Manifesto" href="http://agilemanifesto.org/principles.html" target="_blank"&gt;Principles behind the Agile Manifesto&lt;/a&gt;. Things like:&lt;/p&gt;  &lt;p align="center"&gt;&lt;em&gt;&lt;font color="#008080"&gt;Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Think about what you most want to &lt;em&gt;achieve&lt;/em&gt; with agile, and then select some practices that will help you achieve it. This is helpful, because if you know what you’re trying to achieve, then you can evaluate your progress.&lt;/p&gt;  &lt;p&gt;If you’re just trying to “be agile” – that makes it a little fuzzier. &lt;em&gt;Are we agile yet? Sure, why not!&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;So how do you measure if you’re staying true to agile’s intent with the practices you select? I like to think of Lean as the foundation under agile – the principles that explain why it works. And so, I find that Lean provides a good compass for helping us evaluate whether the practices we select are helping us… or taking us in the wrong direction. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#008080"&gt;&lt;em&gt;The 7 Principles of Lean Software Development&lt;/em&gt;&lt;/font&gt;&lt;/strong&gt;     &lt;br /&gt;(adapted from &lt;a title="Implementing Lean Software Development: From Concept to Cash by Mary and Tom Poppendieck (Amazon)" href="http://www.amazon.com/Implementing-Lean-Software-Development-Concept/dp/0321437381" target="_blank"&gt;Implementing Lean Software Development&lt;/a&gt; by Mary &amp;amp; Tom Poppendieck)&lt;/p&gt;  &lt;p&gt;The following questions can (and should) be applied not only to the &lt;em&gt;new&lt;/em&gt; agile practices you select, but also to the existing practices your team is following. Keep in mind that becoming more agile means not only adopting new, agile practices, but also &lt;strong&gt;eliminating&lt;/strong&gt; the old ones that are holding you back from that agile nirvana…&lt;/p&gt;  &lt;p&gt;1.&lt;font color="#000000"&gt; &lt;strong&gt;Eliminate Waste&lt;/strong&gt; &lt;/font&gt;– &lt;em&gt;“Add Nothing But Value.”&lt;/em&gt; Can you articulate the value your practice is adding to the business or the team? Bonus Question: Is it the best practice your team can do &lt;strong&gt;right now&lt;/strong&gt; to achieve this value? Just because a practice adds value doesn’t mean it’s the right place for your particular team to start.&lt;/p&gt;  &lt;p&gt;Daily Scrums, for example, are intended to help the team. If the team finds them a waste of time, that should be a red flag. Maybe the Daily Scrums are being run incorrectly (hint: they’re not status meetings), so you need to start with learning or coaching. Or maybe your project hasn’t implemented the other parts of Scrum (teams with shared goals, sprints with backlogs, definitions of “Done”) that the Daily Scrum is there to &lt;em&gt;support – &lt;/em&gt;so you need to start with those. &lt;/p&gt;  &lt;p&gt;Until you resolve those issues, ask yourself if the Daily Scrums are really providing value? Or just waste?&lt;/p&gt;  &lt;p&gt;» See Martin Fowler’s &lt;a title="It’s Not Just Standing Up: Patterns of Daily Stand-Up Meetings by Martin Fowler" href="http://martinfowler.com/articles/itsNotJustStandingUp.html" target="_blank"&gt;It’s Not Just Standing Up: Patterns of Daily Stand-Up Meetings&lt;/a&gt; for correctly run Daily Scrums.     &lt;br /&gt;» See Mike Cohn’s &lt;a title="An Overview of Scrum for Agile Software Development by Mike Cohn" href="http://www.mountaingoatsoftware.com/scrum/overview" target="_blank"&gt;An Overview of Scrum&lt;/a&gt; for the building blocks of Scrum that the Daily Scrums support.&lt;/p&gt;  &lt;p&gt;2. &lt;strong&gt;&lt;font color="#000000"&gt;Build Quality In&lt;/font&gt; – &lt;/strong&gt;&lt;em&gt;You can’t test quality in at the end.&lt;/em&gt; Does your practice help ensure the team has what they need to build features right the first time? Or does it result in rework by identifying issues after the developer is “done”?&lt;/p&gt;  &lt;p&gt;Acceptance Test-Driven Development, for example, captures the customer’s requirements as executable tests that the team can use to validate the features &lt;em&gt;as they build them&lt;/em&gt;. Having exploratory testing in your definition of “done” means issues are identified &lt;em&gt;real time&lt;/em&gt; so they can be corrected before moving onto the next task. &lt;/p&gt;  &lt;p&gt;Alternately, having devs hand their code over to testers to validate so the devs can move onto the next feature results in rework and an ever growing pile of bugs as the testers find bugs in code the devs thought they were done with.&lt;/p&gt;  &lt;p&gt;» See &lt;a title="Where Do The Testers Go In Agile? by Abby Fichtner" href="http://www.thehackerchickblog.com/2009/06/where-do-testers-go-in-agile.html" target="_blank"&gt;Where Do The Testers Go In Agile?&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;3. &lt;strong&gt;&lt;font color="#000000"&gt;Create Knowledge&lt;/font&gt; – &lt;/strong&gt;&lt;em&gt;“Software development is a knowledge-creating process.” &lt;/em&gt;Does your practice encourage systematic learning that enables the team to stay on track and make good decisions? And does it include mechanisms for the team to rapidly respond to this new knowledge? &lt;/p&gt;  &lt;p&gt;A number of Agile practices are intended to provide the team with frequent and regular feedback that they can learn from. This includes demoing the product to the customer at the end of each sprint to get the customer’s feedback and regular retrospectives to get the team’s. Also, automated tests that get run with TDD and continuous integration practices to provides rapid feedback on the integrity of the software. &lt;/p&gt;  &lt;p&gt;Of course, if no one examines the results of the Continuous Integration tests, or no changes are made as a result of the retrospectives, then it’s clearly failing to meet its intent and so not providing value (see Principle #1).&lt;/p&gt;  &lt;p&gt;4. &lt;font color="#000000"&gt;&lt;strong&gt;Defer Commitment&lt;/strong&gt;&lt;/font&gt; – Because software is a knowledge-creating process, the more we build, the more we know. The best time to make decisions is &lt;em&gt;Just In Time&lt;/em&gt;. Does your practice enable you to defer decisions or clarifying details until the last responsible moment? Or is there pressure to nail things down as early as possible?&lt;/p&gt;  &lt;p&gt;For example, User Stories allow us to capture the features we want to implement, while deferring the specifics of &lt;em&gt;how&lt;/em&gt; to implement them until we’re actually ready to build them. Once we’re ready, we’ll likely have some of the application built out so it is clearer what the new features should look like. Alternately, Big Up Front Design, where we flesh out all the architectural details and build them up front (because we know we will need them) often results in rework the first time we write application code to use that architecture and discover what we &lt;em&gt;really &lt;/em&gt;need from it.&lt;/p&gt;  &lt;p&gt;5. &lt;strong&gt;&lt;font color="#000000"&gt;Deliver Fast&lt;/font&gt;&lt;/strong&gt; – &lt;em&gt;“Speed is the absence of waste.”&lt;/em&gt; What is most interesting is that the Poppendiecks equate “fast” with “quality”. This isn’t about hacking something together as quickly as possible. They say:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p align="left"&gt;&lt;em&gt;“There are two ways to achieve high quality. You can slow down and be careful, or you can develop people who continually improve their processes, build quality into their product, and develop the capability to repeatedly and reliably respond to their customers many times faster than their competitors.”&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I don’t know about the rest of you, but the 2nd way sounds a lot more enjoyable to me. So… I think this gives us a few questions we can ask about our practice: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Does it enable the team to &lt;em&gt;repeatedly&lt;/em&gt; deliver working software &lt;em&gt;quickly&lt;/em&gt; to their customers? (No waste!) &lt;/li&gt;    &lt;li&gt;Does it promote internal quality to enable the team to sustain it’s fast pace over time, as the code base grows? &lt;/li&gt;    &lt;li&gt;Does it allow the team to do what they feel needs to be done to respond effectively to the customers? &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;6.&lt;strong&gt; &lt;/strong&gt;&lt;font color="#000000"&gt;&lt;strong&gt;Respect People&lt;/strong&gt;&lt;/font&gt; – In her paper &lt;a title="Principles of Lean Thinking by Mary Poppendieck" href="http://www.poppendieck.com/papers/LeanThinking.pdf" target="_blank"&gt;Principles of Lean Thinking&lt;/a&gt;, Mary Poppendieck says:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;“It is sometimes thought that a benefit of good software engineering is to allow low skilled programmers to        &lt;br /&gt;produce code while a few high skilled architects and designers do the critical thinking. With this in mind, a         &lt;br /&gt;project is often divided into requirements gathering, analysis, design, coding, testing, and so on, with         &lt;br /&gt;decreasing skill presumably required at each step. A ‘standard process’ is developed for each step, so that         &lt;br /&gt;low-skilled programmers, for example, can translate design into code simply by following the process.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&lt;font color="#800000"&gt;&lt;strong&gt;This kind of thinking… is the antithesis of lean thinking and devalues the skills of the developers&lt;/strong&gt;.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;Centering on the people who add value means upgrading the skills of developers through training and        &lt;br /&gt;apprenticeships. It means forming teams that design their own processes and address complete problems. It         &lt;br /&gt;means that staff groups and managers exist to support developers, not to tell them what to do.”&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This is a hard one to capture because there is much that is felt but not seen, but I think we can still glean good questions to consider when evaluating our practice:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Does it create teams that are able to design their own processes and address complete problems? (Or does it break things down by role and state that only certain people can do certain tasks)? &lt;/li&gt;    &lt;li&gt;Does it push responsibility and decision making to the lowest level possible? (Or does it tell people how to do their jobs?) &lt;/li&gt;    &lt;li&gt;Does it give people the training, resources, and support they need to be effective? &lt;/li&gt;    &lt;li&gt;Does it foster pride in workmanship – creating engaged, thinking team members who are continually improving? &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Per the Poppendiecks, if you implement &lt;em&gt;all&lt;/em&gt; the principles except this one, you’ll “reap only a shadow of the potential advantages.” Yet if you implement &lt;em&gt;only&lt;/em&gt; this principle, “you will position the people in your organization to discover and implement the remaining lean principles.”&lt;/p&gt;  &lt;p&gt;7. &lt;strong&gt;&lt;font color="#000000"&gt;Optimize The Whole&lt;/font&gt;&lt;/strong&gt; – When we optimize for a subset of the whole, we almost always end up &lt;em&gt;sub-optimizing&lt;/em&gt; the whole. Does your practice reward people for providing actual business value? Or does it reward them for intermediate steps of the process?&lt;/p&gt;  &lt;p&gt;For example, some projects rewards developers for lines of code, or testers for # of bugs found. However, more lines of code means more code to maintain and so will actually &lt;em&gt;slow&lt;/em&gt; the overall delivery of features. Similarly, more bugs is obviously working against the organization’s goals of delivering quality software. These types of measurements tend to be the result of teams that are structured to only provide one piece of the value chain (e.g., coding or testing) and so measure the output of those teams and reward for things that &lt;i&gt;suboptimize&lt;/i&gt; overall delivery. Alternately, cross-functional feature teams that include all of the members/skills required to provide the required business value can not only &lt;em&gt;optimize&lt;/em&gt; the process of developing and delivering each feature, but can be measured and rewarded on this facet as well.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What about the practices you’re following on your projects? Are they capturing the intent of Agile?&lt;/strong&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501180114730436648-1664349988266833860?l=www.thehackerchickblog.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=k7O9RGOQZDE:V6uMo0VTU10:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=k7O9RGOQZDE:V6uMo0VTU10:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=k7O9RGOQZDE:V6uMo0VTU10:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=k7O9RGOQZDE:V6uMo0VTU10:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?i=k7O9RGOQZDE:V6uMo0VTU10:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=k7O9RGOQZDE:V6uMo0VTU10:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheHackerChickBlog/~4/k7O9RGOQZDE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thehackerchickblog.com/feeds/1664349988266833860/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thehackerchickblog.com/2010/02/are-we-agile-yet.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/1664349988266833860?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/1664349988266833860?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheHackerChickBlog/~3/k7O9RGOQZDE/are-we-agile-yet.html" title="Are We Agile Yet?" /><author><name>abby</name><uri>http://www.blogger.com/profile/14805958673888992905</uri><email>haxrchick@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02745342225111277233" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.thehackerchickblog.com/2010/02/are-we-agile-yet.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUARHk6eSp7ImA9WxBVEUU.&quot;"><id>tag:blogger.com,1999:blog-7501180114730436648.post-2264509366091706701</id><published>2010-02-14T17:11:00.011-05:00</published><updated>2010-02-14T17:57:25.711-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-14T17:57:25.711-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="emergent design" /><category scheme="http://www.blogger.com/atom/ns#" term="tdd" /><category scheme="http://www.blogger.com/atom/ns#" term="user stories" /><title>Just Do It: A Quick Intro to Agile’s Technical Practices</title><content type="html">&lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="Just Do It" border="0" alt="Just Do It" align="left" src="http://lh4.ggpht.com/_dkYqgGG4VVU/S3h1F98YfCI/AAAAAAAAArk/hW0evgl8jSA/JustDoIt%5B3%5D.jpg?imgmax=800" width="253" height="174" /&gt;A lot of people think Agile is about working faster, but that really isn’t right. It would be more accurate – and perhaps alleviate many of the arguments against agile practices – if we thought of agile as being about working &lt;em&gt;slower&lt;/em&gt; because we’re being more deliberate. BUT, at the same time getting rid of all the crap that doesn’t add value, so that we do, indeed, end up delivering more functionality in a shorter period of time.&lt;/p&gt;  &lt;p&gt;I like to think of Agile as the &lt;strong&gt;&lt;font color="#6633ff"&gt;Just Do It&lt;/font&gt;&lt;/strong&gt; methodology. In software development, we’re really great at this thing called “yak shaving.” If you’re not familiar with the term then take a moment to read: &lt;a title="So There I Am, Shaving a Yak…" href="http://theagileadvisors.com/the-agile-team/so-there-i-am-shaving-a-yak/" target="_blank"&gt;So There I Am, Shaving a Yak…&lt;/a&gt;. Go ahead, I’ll wait. It’s really funny, I promise.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font color="#6633ff"&gt;“So there I was at the zoo, shaving a yak, all so I could take a few pictures of my dogs at the park.”&lt;/font&gt; – Bill Gaiennie&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;A really huge part of yak shaving – at least for me – is trying to figure &lt;strong&gt;everything out&lt;/strong&gt; so that I can make sure I’m going about things the right way. Oh boy, I can plan and research and do proof of concepts like &lt;em&gt;nobody’s business&lt;/em&gt;. But at the end of the day, I’ve got a bunch of “stuff” with no actual working software for the app I’m supposed to be building.&lt;/p&gt;  &lt;p&gt;Agile instead says “You’re never going to know everything about the app until it’s already been written. Cope.” and instead gives us tools to continue to move forward by focusing on what we &lt;em&gt;do&lt;/em&gt; know. And then, a funny thing happens. The more of the application that we build, the more we learn. And so, we’re able to move forward, not by focusing our time on what we &lt;em&gt;don’t&lt;/em&gt; know, but rather by focusing on what we &lt;em&gt;do&lt;/em&gt; know and building actual value out of it.&lt;/p&gt;&lt;a name='more'&gt;&lt;/a&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#008080"&gt;User Stories&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Raise your hand if you’ve ever spent hours and hours around conference tables debating the minute details of how a feature should work in an application that hasn’t even been built yet. Now keep it raised if this is something you’d prefer to do over, say, poking yourself in the eye with a sharp stick. Yeah, I thought so.&lt;/p&gt;  &lt;p&gt;It’s all but impossible to design the details for &lt;em&gt;anything&lt;/em&gt; when we don’t have visuals – or some kind of shared understanding - to guide us by, and even more so in software, which not only has form and function but also interactive &lt;em&gt;behaviors&lt;/em&gt;. So, let’s give it up and just &lt;strong&gt;move forward&lt;/strong&gt; with what we do know.&lt;/p&gt;  &lt;p&gt;User stories are reminders of the features we think we’d like to implement, but for which we’re &lt;em&gt;deferring decisions&lt;/em&gt; on their details until we’re actually at a point where we have enough information to provide them. They’re purposefully short and informal, “As a [type of user] I’d like to X so that Y” and they’re scribbled on 3x5 cards that can be easily viewed and priority ordered by customers or product owners. And since they’re low ceremony, we can all intuitively understand that it’s no problem for the customer to add, update, remove, or reorder them at any time up until the point we’re actually working on them in an iteration because, hey, we’re agile like that.&lt;/p&gt;  &lt;p&gt;Yes, we’ll eventually need to understand their details – but not until we’re ready to work on them. Which brings us to…&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#008080"&gt;Emergent Design&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This is a hard one because intuitively we feel that if we could know, up front, every last aspect of how the software should look and behave, that we can come up with an optimal design. We think that if we only build one feature at a time, without considering upcoming features, that we’ll end up with a band aided, glued together, duct taped nightmare that will fall over before we ever make it to the first release.&lt;/p&gt;  &lt;p&gt;And, to be fair, if we add every new feature without any consideration for the overall design then um, yeah – I’ve worked on those systems before. I believe they’re called &lt;a title="Big Ball of Mud (Architectural Pattern)" href="http://www.laputan.org/mud/" target="_blank"&gt;big balls of mud&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;However, I’ve also worked on systems where the more functionality we build out, the more we learn about what type of design makes sense. In fact, I’d have to say this is actually true for &lt;em&gt;every system I’ve ever worked on&lt;/em&gt;. Just like our user stories, the more of the application that gets built, the more we understand about what works and doesn’t work, and the better equipped we are to make good decisions.&lt;/p&gt;  &lt;p&gt;So I’d actually argue that it’s a &lt;em&gt;misnomer &lt;/em&gt;that we can come up with the optimal design by knowing all the requirements up front. That, in fact, we can only come up with the optimal design by implementing functionality and then using the knowledge gained to &lt;em&gt;evolve&lt;/em&gt; our design with each new feature.&lt;/p&gt;  &lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; “no design”, this is &lt;em&gt;emergent design. &lt;/em&gt;It means that with each new feature that we add, we determine what the optimal design should be for our current functionality plus this new feature and then we …&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#008080"&gt;Refactor&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Refactoring is not something we spend days, weeks, or, god forbid, months (!) on because we made a mess out of our code. Refactoring is the act of &lt;em&gt;continuous design&lt;/em&gt; while we code. It is something we do continuously, several times every day, and ideally according to guiding design principles, such as the &lt;a title="SOLID Code with Emergent Design" href="http://www.thehackerchickblog.com/2008/05/solid-code-with-emergent-design-part-1.html" target="_blank"&gt;SOLID Principles&lt;/a&gt;, to keep our code clean.&lt;/p&gt;  &lt;p&gt;If you’ve worked on a legacy system, the mere thought of such a thing will elicit screams reminiscent of bad horror movies because you can just &lt;em&gt;hear&lt;/em&gt; the sound of code breaking with each new refactor, right?&lt;/p&gt;  &lt;p&gt;This is where we get to the point that the agile technical practices are really meant to work &lt;em&gt;together&lt;/em&gt; and so yes, refactoring is going to be pretty scary unless you’ve built yourself a safety-net via…&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#008080"&gt;Test-Driven Development&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;TDD is the ultimate &lt;strong&gt;Just Do It&lt;/strong&gt; for how we implement each of our user stories. &lt;/p&gt;  &lt;p&gt;Ideally, we are following &lt;a title="Driving Development with Tests: ATDD and TDD by Elisabeth Hendrickson," href="http://testobsessed.com/wordpress/wp-content/uploads/2008/12/atddexample.pdf" target="_blank"&gt;Acceptance Test Driven Development&lt;/a&gt; so that we have objective (executable!) acceptance criteria to &lt;strong&gt;know&lt;/strong&gt; exactly what is expected of this user story. And, we’ve broken the user story down into individual tasks that can each be done in about a day. So, we’re hard core focused on a single task that we can get our brain wrapped around and know precisely what it needs to do.&lt;/p&gt;  &lt;p&gt;Now, all we need to figure out is how to design and code it in.&amp;#160; But rather than spinning our wheels figuring out the optimal way to handle the entire task, TDD provides us a structured way to walk through designing and developing it – one step at a time, always keeping the focus on exactly what it is that our code needs to accomplish and what we want our design (e.g., the public interface for our classes) to look like to access this functionality.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;em&gt;Okay, to bill the customer, we’re going to need a Customer class and it should provide us with a method to obtain it’s Balance. Great, how should that method look? Let’s solidify that in a test, and then write the code to make it pass.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Even so, this can sometimes be easier said then done. Particularly if we’re working with a new technology or in a new area of the application that we haven’t spent much time before. And so, here is where we can get even more focused help on moving forward with…&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#008080"&gt;Pair Programming&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;You don’t have to do this for every line of code written!&amp;#160; But even if you’re an introverted programmer like me, you have to admit that pairing is a great way to share knowledge, get people up to speed on new technologies or unfamiliar parts of the system, and to just get a second set of eyes for working through a particularly tough problem.&lt;/p&gt;  &lt;p&gt;It’s also a great way to keep things moving forward. The pair can bounce ideas off one another, and often when one is stumped, the other has an idea to move it forward.&lt;/p&gt;  &lt;p&gt;Of course, at the end of the day, the most important thing is that the &lt;em&gt;entire team &lt;/em&gt;is moving forward in the &lt;strong&gt;same direction&lt;/strong&gt; – not one person adding features that break another person’s features (that would never happen, right?).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#008080"&gt;Continuous Integration&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Our CI box makes sure the team is moving forward &lt;strong&gt;together&lt;/strong&gt;, not working against one another, by automatically running the automated tests that have been built up through ATDD and TDD every time someone checks in code.&lt;/p&gt;  &lt;p&gt;If someone’s check in &lt;em&gt;does&lt;/em&gt; happen to break the build or the tests, the CI box has the team’s back so the problem is caught immediately and the offender can often quickly resolve the issue while it’s still fresh on their mind.&lt;/p&gt;  &lt;p&gt;--&lt;/p&gt;  &lt;p&gt;Do these practices add more time?&amp;#160; Sure, but the team is also delivering faster because they’ve cut out the crap that doesn’t add value. No code built that isn’t specifically for a user story that’s been chosen as a top customer priority.&amp;#160; No discussions wasted on a requirement that never ends up getting implemented.&amp;#160; And the code is tested and integrated &lt;em&gt;as we go&lt;/em&gt; so by the end of the iteration, it’s already tested and integrated!&amp;#160; We can actually &lt;em&gt;demo&lt;/em&gt; it to the customer to get their feedback and then &lt;em&gt;everyone learns&lt;/em&gt; so we now &lt;strong&gt;know a little bit more&lt;/strong&gt; and so can implement new features in the next iteration. &lt;/p&gt;  &lt;p&gt;Mike Cohn also has some good data in &lt;a title="Succeeding with Agile by Mike Cohn (Amazon)" href="http://www.amazon.com/Succeeding-Agile-Software-Development-Using/dp/0321579364" target="_blank"&gt;Succeeding with Agile&lt;/a&gt; that you might find surprising:&lt;/p&gt;  &lt;p&gt;» TDD takes only 15% longer than not doing TDD and leads to fewer defects (and so less debugging/fixing time)    &lt;br /&gt;» Pair Programming takes more man hours, but shorter project duration (getting that feature out the door faster) as well as fewer defects.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;So what are you waiting for?&amp;#160; Just do it!&lt;/strong&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501180114730436648-2264509366091706701?l=www.thehackerchickblog.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=9WW99yAVM1w:xWwyYftKBfw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=9WW99yAVM1w:xWwyYftKBfw:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=9WW99yAVM1w:xWwyYftKBfw:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=9WW99yAVM1w:xWwyYftKBfw:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?i=9WW99yAVM1w:xWwyYftKBfw:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=9WW99yAVM1w:xWwyYftKBfw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheHackerChickBlog/~4/9WW99yAVM1w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thehackerchickblog.com/feeds/2264509366091706701/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thehackerchickblog.com/2010/02/just-do-it-quick-intro-to-agiles.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/2264509366091706701?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/2264509366091706701?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheHackerChickBlog/~3/9WW99yAVM1w/just-do-it-quick-intro-to-agiles.html" title="Just Do It: A Quick Intro to Agile’s Technical Practices" /><author><name>abby</name><uri>http://www.blogger.com/profile/14805958673888992905</uri><email>haxrchick@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02745342225111277233" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.thehackerchickblog.com/2010/02/just-do-it-quick-intro-to-agiles.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMERHs4fSp7ImA9WxBVEUs.&quot;"><id>tag:blogger.com,1999:blog-7501180114730436648.post-4555496266016300565</id><published>2009-12-23T12:02:00.004-05:00</published><updated>2010-02-14T11:53:25.535-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-14T11:53:25.535-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WPF" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>More LINQ Goodness: Now with WPF!</title><content type="html">&lt;p&gt;Apologies for the slow down in posts, I’ve been head’s down in code bringing you more tutorials on LINQ to SQL and&lt;a title="My LINQ Tutorials on CodeProject" href="http://www.codeproject.com/KB/linq/linqtutorial.aspx" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="LINQ Tutorials with WPF" border="0" alt="LINQ Tutorials with WPF" align="right" src="http://lh4.ggpht.com/_dkYqgGG4VVU/SzJNEekgbdI/AAAAAAAAArY/VnymG073vDo/BookCatalog%5B14%5D.jpg?imgmax=800" width="229" height="234" /&gt;&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160; how to use it with my current obsession, &lt;a title="The Future Is Now! (Hacker Chick Blog post on WPF)" href="http://www.thehackerchickblog.com/2008/08/future-is-now.html"&gt;Windows Presentation Foundation&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;It has now been expanded into 3 parts – aka, everything you ever-never wanted to know about LINQ to SQL:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;a title="A LINQ Tutorial: Mapping Tables to Objects" href="http://www.codeproject.com/KB/linq/linqtutorial.aspx" target="_blank"&gt;Mapping Tables to Objects&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="A LINQ Tutorial: Adding/Updating/Deleting Data" href="http://www.codeproject.com/KB/linq/linqtutorial2.aspx" target="_blank"&gt;Adding/Updating/Deleting Data&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="A LINQ Tutorial: WPF Data Binding with LINQ to SQL" href="http://www.codeproject.com/KB/linq/linqtutorial3.aspx" target="_blank"&gt;WPF Data Binding with LINQ to SQL&lt;/a&gt; &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;These tutorials describe how to manually map your classes to database tables with LINQ to SQL so you can have support for M:M relationships as well as WPF data binding using my own &lt;del&gt;hack&lt;/del&gt; &lt;del&gt;workaround&lt;/del&gt; &lt;font color="#008080"&gt;solution&lt;/font&gt; to providing this functionality.&amp;#160; One person even claimed my code was &lt;em&gt;cleaner&lt;/em&gt; then the auto-generated code, but I’ll leave that for you to decide yourself.&lt;/p&gt;  &lt;p&gt;But… even if you do choose to auto-generate your classes, understanding how these techniques work will allow you to expand the code to better fit your application's needs and troubleshoot issues when they arise.&lt;/p&gt;  &lt;p&gt;I hope these help you out in your own encounters with LINQ to SQL!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501180114730436648-4555496266016300565?l=www.thehackerchickblog.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=LIa9fRpfSx4:R9LzOehGYcA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=LIa9fRpfSx4:R9LzOehGYcA:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=LIa9fRpfSx4:R9LzOehGYcA:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=LIa9fRpfSx4:R9LzOehGYcA:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?i=LIa9fRpfSx4:R9LzOehGYcA:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=LIa9fRpfSx4:R9LzOehGYcA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheHackerChickBlog/~4/LIa9fRpfSx4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thehackerchickblog.com/feeds/4555496266016300565/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thehackerchickblog.com/2009/12/more-linq-goodness-now-with-wpf.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/4555496266016300565?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/4555496266016300565?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheHackerChickBlog/~3/LIa9fRpfSx4/more-linq-goodness-now-with-wpf.html" title="More LINQ Goodness: Now with WPF!" /><author><name>abby</name><uri>http://www.blogger.com/profile/14805958673888992905</uri><email>haxrchick@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02745342225111277233" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.thehackerchickblog.com/2009/12/more-linq-goodness-now-with-wpf.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIDR38ycSp7ImA9WxNUFE8.&quot;"><id>tag:blogger.com,1999:blog-7501180114730436648.post-7954116230787114521</id><published>2009-11-05T08:01:00.002-05:00</published><updated>2009-11-05T08:09:36.199-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-05T08:09:36.199-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="collaboration" /><category scheme="http://www.blogger.com/atom/ns#" term="management" /><title>Doing It Right: A Manager’s Perspective</title><content type="html">&lt;p&gt;&lt;strong&gt;&lt;font color="#8080ff"&gt;A Hacker Chick &lt;/font&gt;&lt;font color="#8080ff"&gt;Guest post by Trudy Prins&lt;/font&gt;&lt;/strong&gt;&lt;em&gt;&lt;font color="#8080ff"&gt;, a wonderfully &lt;/font&gt;&lt;font color="#8080ff"&gt;passionate software development manager at RIPE NCC in The Netherlands. I asked if she might share what she believes makes a successful software team. I hope you enjoy her answer and this glimpse into how she leads her teams as much as I do...&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#8080ff"&gt;&lt;strong&gt;&lt;em&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="Trudy Prins" border="0" alt="Trudy Prins" align="left" src="http://lh6.ggpht.com/_dkYqgGG4VVU/SvLMnLQn-cI/AAAAAAAAApI/e-TIYpaB5ms/TrudyPrins1.jpg?imgmax=800" width="204" height="190" /&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;As a Software Engineering Manager, I believe a successful engineering team is a happy team. Happiness boosts productivity, creates an environment for excellence, and offers fertile ground for growth on both a company and a personal level.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#008080" size="3"&gt;So, what makes a happy team?&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#808000"&gt;Frequent knowledge transfers&lt;/font&gt;.&lt;/strong&gt; Team members should have the opportunity to schedule presentations in front of their peers, engage in discussions, follow trends, try out new solutions, have spikes on all kind of topics, go to conferences together and whatever they find suited to share their knowledge &amp;amp; enthusiasm.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;font color="#808000"&gt;Immediate feedback on their performance&lt;/font&gt;. &lt;/b&gt;I tell them constantly, clearly, and on the fly what I think they did good, great, or not good at all, without making a big fuss about it or waiting a year until their performance review is up. Their annual review shouldn't hold any big surprises.&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt;  &lt;p&gt;&lt;b&gt;&lt;font color="#808000"&gt;Team-spark, cooperation, concentration and energy&lt;/font&gt;&lt;/b&gt;. A general feeling of friendship and focus is in the air -- this is an intuition and experience thingy, I just know this. I feel it when it's there and I notice when there's trouble and friction. Of course, I share the same room with them! Otherwise, you miss out on these very important signals and you can't identify your team-specific energy signature. Or trouble-thermometer.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;font color="#808000"&gt;Be proud of accomplishments&lt;/font&gt;&lt;/b&gt;. Do frequent deployments and sprint demos.&amp;#160; The team can show off their accomplishments -- their work, which they are proud of. Stakeholders can provide them feedback and pay them compliments when deserved and challenge them when needed. Make process improvements like delivered business value, rising velocity, better code coverage and decreasing bug counts visible to all.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;font color="#808000"&gt;Good company!&lt;/font&gt;&lt;/b&gt; This is something you need to be very aware of when hiring people -- make sure they add to the team cohesion. No lone wolves! If someone is technically brilliant but their social skills are lacking, I never hire the guy/girl. Has to be both, 50-50. Great coder and communicator, otherwise it's not going to work.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;font color="#808000"&gt;Apply the big 3:&lt;/font&gt;&lt;/b&gt; test driven development, requirement driven test cases, and agile methodology.&lt;/p&gt;  &lt;p&gt;&lt;font color="#808000"&gt;&lt;b&gt;Keep it simple, keep it clear&lt;/b&gt;.&lt;/font&gt; It always works. No super complex architecture, ideas from Mars, tools from outer space or far-fetched solutions. Simple and clear is always the best choice.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;font color="#808000"&gt;Pair programming.&lt;/font&gt; &lt;/b&gt;A great way for the team to interact, learn from one another, review each other's code in real-time, help each other to overcome obstacles, share brain waves, cooperate! &lt;/p&gt;  &lt;p&gt;A short anecdote -- when I interviewed one of my current engineers, we asked him if he cloned himself 10 times to create a team of 10 of him, what would go well and what would go wrong?&amp;#160; For the latter, he thought for a bit, and when &lt;b&gt;&lt;font color="#808000"&gt;&lt;a href="http://lh3.ggpht.com/_dkYqgGG4VVU/SvLMngU22XI/AAAAAAAAApM/ZciJkp-Eh7U/s1600-h/sciencepapasteam4.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="Science Papa Team (Image by Kotaku, from Activision)" border="0" alt="Science Papa Team (Image by Kotaku, from Activision)" align="right" src="http://lh3.ggpht.com/_dkYqgGG4VVU/SvLMnxFxhYI/AAAAAAAAApQ/-GL5VjW_9es/sciencepapasteam_thumb2.gif?imgmax=800" width="268" height="204" /&gt;&lt;/a&gt;&lt;/font&gt;&lt;/b&gt;he spoke he said, &amp;quot;Well, in the end, I guess, &lt;strong&gt;&lt;em&gt;everything&lt;/em&gt;&lt;/strong&gt; could go wrong. You are always thinking in a certain direction, and when you don't get a second or third perspective, it's inevitable that you're eventually going to reach a dead end. It may take a long time to happen, but in the end you will fail&amp;quot;.&amp;#160; Isn't that brilliant?&amp;#160; Of course I hired the guy :)&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;font color="#808000"&gt;Empowerment.&lt;/font&gt;&lt;/b&gt; Engineers should be empowered to implement any solutions they think fit the requirements, within the high level framework decided up-front. It's useless to interfere or try to micromanage this. Don't interrupt their flow when they are doing fine. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;font color="#808000"&gt;Experiment with roles.&lt;/font&gt;&lt;/b&gt; I give them specialties to show their greatness in, but also leave them room to experiment with new roles they find appealing (ScrumMaster, product owner, UI designer). Keep on learning!&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;font color="#808000"&gt;Don't demand elaborate reports and documentation&lt;/font&gt;&lt;/b&gt; solely for the fact that you then possess this information. Knowledge is power? No way -- it means nothing out of context. Reporting &amp;amp; documentation should always satisfy a direct business need -- I don't believe in knowing for the sole purpose of knowing.&lt;/p&gt;  &lt;p&gt;&lt;font color="#808000"&gt;&lt;b&gt;Treat them right&lt;/b&gt;.&lt;/font&gt; Make sure they know you care for their well-being. Buy them cake, call them when they are miserable, make sure they get better chairs and monitors when they need them. Be sensitive to their needs and show empathy. They are great people and deserve your care and respect, right?&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;font color="#808000"&gt;Stimulate them to explore their limits&lt;/font&gt;.&lt;/b&gt; Go further. Dig deeper. Boldly go where no-one has gone before. :) Show us something spectacular!&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;font color="#808000"&gt;Let them take the glory of their successes&lt;/font&gt;&lt;/b&gt;. I won't snitch it away from them.&amp;#160; My team presents their own ideas and implementations to senior management and clients and takes full credit for them! &lt;/p&gt;  &lt;p&gt;&lt;font color="#808000"&gt;&lt;b&gt;Provide them with everything they need to succeed&lt;/b&gt;.&lt;/font&gt; Buy them shiny new MacBook Pros that they love to work with (it will pay itself back, no worries ;) ), provide them with a nice, light, spacious and quite room with lots of white boards where they can all sit together and be happy, let them buy stuff when they need it: books, licenses, whatever they think is needed to match our expectations.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;-- Trudy Prins, fellow hacker chick&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501180114730436648-7954116230787114521?l=www.thehackerchickblog.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=HjzdVBL2NXs:7njmn5Fe0IY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=HjzdVBL2NXs:7njmn5Fe0IY:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=HjzdVBL2NXs:7njmn5Fe0IY:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=HjzdVBL2NXs:7njmn5Fe0IY:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?i=HjzdVBL2NXs:7njmn5Fe0IY:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=HjzdVBL2NXs:7njmn5Fe0IY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheHackerChickBlog/~4/HjzdVBL2NXs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thehackerchickblog.com/feeds/7954116230787114521/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thehackerchickblog.com/2009/11/doing-it-right-managers-perspective.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/7954116230787114521?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/7954116230787114521?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheHackerChickBlog/~3/HjzdVBL2NXs/doing-it-right-managers-perspective.html" title="Doing It Right: A Manager’s Perspective" /><author><name>abby</name><uri>http://www.blogger.com/profile/14805958673888992905</uri><email>haxrchick@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02745342225111277233" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.thehackerchickblog.com/2009/11/doing-it-right-managers-perspective.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UEQn0_fip7ImA9WxNWFkw.&quot;"><id>tag:blogger.com,1999:blog-7501180114730436648.post-5117223088333435711</id><published>2009-10-15T10:00:00.001-04:00</published><updated>2009-10-15T10:00:03.346-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-15T10:00:03.346-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tdd" /><category scheme="http://www.blogger.com/atom/ns#" term="management" /><title>Check It Out: Micromanagement, TDD, and Nonsense</title><content type="html">&lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="ha! ha! I&amp;#39;m using the internets!" border="0" alt="ha! ha! I&amp;#39;m using the internets!" align="right" src="http://lh5.ggpht.com/_dkYqgGG4VVU/StPop1vGdbI/AAAAAAAAApA/jXbbPuS1RrQ/hahaimusingtheinternet5.jpg?imgmax=800" width="244" height="176" /&gt;Goodness on the Internets:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a title="An Open Letter to Micromanagers by Scott Berkun" href="http://www.scottberkun.com/blog/2009/letter-to-micromanagers/" target="_blank"&gt;An Open Letter to Micromanagers&lt;/a&gt;&lt;/strong&gt; by Scott Berkun.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;“Owners of thoroughbreds never stop their horses during a race, every ten seconds, to remind&amp;#160; the horse and jockey how to run, where the finish line is, or that it’d be a good idea to finish first. Why? It would slow them down. Only an idiot would do this…”&lt;/em&gt; &lt;/p&gt;  &lt;p&gt;and so begins Scott’s letter to micromanagers everywhere. Complete with a link to anonymously send the letter to your favorite micromanager and signed, &lt;em&gt;Hugs and Kisses, The People You are Micromanaging.&lt;/em&gt;&amp;#160; I love this guy.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a title="TDD Triage by Uncle Bob" href="http://blog.objectmentor.com/articles/2009/10/08/tdd-triage" target="_blank"&gt;TDD Triage&lt;/a&gt;&lt;/strong&gt;.&amp;#160; Bob Martin addresses a number of questions around Test-Driven Development, hopefully dispelling some of the religious extremist views on the topic and showing where TDD works and where it doesn’t. These include:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Is TDD a replacement for architecture? (Nope) &lt;/li&gt;    &lt;li&gt;Is TDD a replacement for design? (Not even) &lt;/li&gt;    &lt;li&gt;Should TDD be used for every line of code? (Usually, but... actually, no) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;&lt;a title="NY Times: How Nonsense Sharpens the Intellect" href="http://www.nytimes.com/2009/10/06/health/06mind.html" target="_blank"&gt;How Nonsense Sharpens the Intellect&lt;/a&gt;&lt;/strong&gt;. Alright, this is just awesome and reminiscent of Kathy Sierra's suggestions to insert a little randomness into what we do. A NY Times article explains the science behind why nonsense and randomness actually help us &lt;em&gt;understand&lt;/em&gt; things better. And, with that advice, I'll end this here.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501180114730436648-5117223088333435711?l=www.thehackerchickblog.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=kC1rVC0bT7w:MQOwPoi5zYg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=kC1rVC0bT7w:MQOwPoi5zYg:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=kC1rVC0bT7w:MQOwPoi5zYg:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=kC1rVC0bT7w:MQOwPoi5zYg:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?i=kC1rVC0bT7w:MQOwPoi5zYg:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=kC1rVC0bT7w:MQOwPoi5zYg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheHackerChickBlog/~4/kC1rVC0bT7w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thehackerchickblog.com/feeds/5117223088333435711/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thehackerchickblog.com/2009/10/check-it-out-micromanagement-tdd-and.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/5117223088333435711?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/5117223088333435711?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheHackerChickBlog/~3/kC1rVC0bT7w/check-it-out-micromanagement-tdd-and.html" title="Check It Out: Micromanagement, TDD, and Nonsense" /><author><name>abby</name><uri>http://www.blogger.com/profile/14805958673888992905</uri><email>haxrchick@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02745342225111277233" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.thehackerchickblog.com/2009/10/check-it-out-micromanagement-tdd-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUBQH49fCp7ImA9WxNWFUk.&quot;"><id>tag:blogger.com,1999:blog-7501180114730436648.post-2493683939136703538</id><published>2009-10-13T09:56:00.005-04:00</published><updated>2009-10-14T13:10:51.064-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-14T13:10:51.064-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WPF" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>A LINQ Tutorial</title><content type="html">&lt;p&gt;For the source code inclined in each of you, I just posted an application and tutorial on &lt;a title="MSDN: LINQ" href="http://msdn.microsoft.com/en-us/data/cc299380.aspx" target="_blank"&gt;LINQ&lt;/a&gt;,&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="Open Source Code (Img by J.Anderson)" border="0" alt="Open Source Code (Img by J.Anderson)" align="left" src="http://lh3.ggpht.com/_dkYqgGG4VVU/StSHCrmowxI/AAAAAAAAApE/pT8fyV63zBk/OpenSourceCode_thumb3.jpg?imgmax=800" width="254" height="171" /&gt; .NET’s Language Integrated Query, on &lt;a href="http://www.codeproject.com/SiteRes/CP/Img/Std/logo225x90.gif" target="_blank"&gt;The Code Project&lt;/a&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;It shows how to map database tables to classes with LINQ and then retrieve the data in the very cool LINQ-manner that makes me ooh and ahh for doing more with C#.&amp;#160; It also includes a simple WPF GUI that uses data binding to display the data and navigate the relationships because, well, WPF data binding is sexy.&amp;#160; &lt;/p&gt;  &lt;p&gt;I hope you enjoy!&lt;/p&gt;  &lt;p&gt;&lt;a title="A LINQ Tutorial: Mapping Tables to Objects" href="http://www.codeproject.com/KB/linq/linqtutorial.aspx" target="_blank"&gt;A LINQ Tutorial: Mapping Tables to Objects&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Gratuitous brag update: This article was just selected as Editor's Choice on The Code Project (w00t!)&lt;/i&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501180114730436648-2493683939136703538?l=www.thehackerchickblog.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=fSd5zY3Xuao:wVCPSd6v98c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=fSd5zY3Xuao:wVCPSd6v98c:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=fSd5zY3Xuao:wVCPSd6v98c:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=fSd5zY3Xuao:wVCPSd6v98c:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?i=fSd5zY3Xuao:wVCPSd6v98c:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=fSd5zY3Xuao:wVCPSd6v98c:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheHackerChickBlog/~4/fSd5zY3Xuao" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thehackerchickblog.com/feeds/2493683939136703538/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thehackerchickblog.com/2009/10/linq-tutorial.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/2493683939136703538?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/2493683939136703538?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheHackerChickBlog/~3/fSd5zY3Xuao/linq-tutorial.html" title="A LINQ Tutorial" /><author><name>abby</name><uri>http://www.blogger.com/profile/14805958673888992905</uri><email>haxrchick@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02745342225111277233" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.thehackerchickblog.com/2009/10/linq-tutorial.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MFRHs6cSp7ImA9WxNUFE8.&quot;"><id>tag:blogger.com,1999:blog-7501180114730436648.post-8696730797330851255</id><published>2009-09-29T09:26:00.012-04:00</published><updated>2009-11-05T08:56:55.519-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-05T08:56:55.519-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="collaboration" /><category scheme="http://www.blogger.com/atom/ns#" term="management" /><title>Agile Leadership: Methodology Ain't Enough</title><content type="html">&lt;p&gt;A lot of people say you can’t be a good software manager without really understanding software development.&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="What behaviors do we want in our agile leaders?" border="0" alt="What behaviors do we want in our agile leaders?" align="right" src="http://lh4.ggpht.com/_dkYqgGG4VVU/SsIK6jzrB_I/AAAAAAAAAoM/F7dAIVPU9BA/TechievsManager31.jpg?imgmax=800" width="260" height="233" /&gt; But, let's face it, people who understand software development are a dime a dozen in our industry. What we really need are people who understand &lt;strong&gt;&lt;em&gt;leadership&lt;/em&gt;&lt;/strong&gt; &amp;amp; &lt;strong&gt;&lt;em&gt;management&lt;/em&gt;&lt;/strong&gt;. I mean... you know the drill – when was the last time a software project failed for &lt;em&gt;technical &lt;/em&gt;reasons?&lt;/p&gt;  &lt;p&gt;And so, it was very cool to hear &lt;a title="Cutter Consortium: David Spann" href="http://www.cutter.com/meet-our-experts/spannd.html" target="_blank"&gt;David Spann&lt;/a&gt; share his research on &lt;strong&gt;Finding and Developing Agile Leader’s&lt;/strong&gt; at last week’s &lt;a title="Nashua ScrumClub" href="http://nashua.scrumclub.org/" target="_blank"&gt;ScrumClub&lt;/a&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;It’s simply not enough to know the latest agile practices. In order for agile projects to succeed, they need leaders who exhibit agile &lt;em&gt;behaviors&lt;/em&gt; and, here’s a hint – &lt;font color="#ff0000"&gt;being a technical guru ain’t one of them&lt;/font&gt;.&lt;/p&gt;  &lt;p&gt;Now, I don’t want to mislead – David isn’t saying agile leaders don’t have to know anything about software development. What he &lt;strong&gt;is&lt;/strong&gt; saying is that the success criteria for leading agile teams is dependent on the leader’s beliefs and behaviors. That is, how they think and act is just as - if not more - important than what they know.&lt;/p&gt;&lt;a name='more'&gt;&lt;/a&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#008080"&gt;&lt;font size="3"&gt;Beliefs&lt;br/&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="Check" border="0" alt="Check" align="left" src="http://lh5.ggpht.com/_dkYqgGG4VVU/SsIK7V-FvFI/AAAAAAAAAoU/IHaMyZ5xz0I/Checkbox_thumb13.gif?imgmax=800" width="55" height="48" /&gt;&lt;/p&gt;  &lt;p&gt;David identified 5 underlying beliefs that a successful agile leader should hold.    &lt;br/&gt;&lt;strong&gt;&lt;font color="#6633ff"&gt;How many of these do &lt;em&gt;you&lt;/em&gt; hold? How many does your manager?&lt;br/&gt;&lt;br/&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;1. A group of well intentioned, skilled people will make a better decision through consensus then I can on my own. &lt;/p&gt;  &lt;p&gt;2. Five or more people with a single, clear purpose can (and often do!) change the world.&lt;/p&gt;  &lt;p&gt;3. Asking the right &lt;em&gt;questions&lt;/em&gt; will always create better outcomes then making a series of well-crafted &lt;em&gt;statements&lt;/em&gt;. &lt;/p&gt;  &lt;p&gt;4. The leadership role is about creating a great &lt;em&gt;environment&lt;/em&gt; in which others can succeed. &lt;/p&gt;  &lt;p&gt;5. &lt;strong&gt;Trust&lt;/strong&gt; is the foundational component of any relationship and it must be tended to with care, integrity and humility.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#008080" size="3"&gt;Behaviors&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;David identified the &lt;em&gt;behaviors&lt;/em&gt; that make agile leaders successful and from that came two very interesting observations:&lt;/p&gt;  &lt;p align="center"&gt;&lt;em&gt;&lt;font color="#008080"&gt;The behaviors that make agile leaders successful are, largely, the same behaviors that make Facilitators successful.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;em&gt;&lt;font color="#800000"&gt;The behaviors that cause agile leaders to fail are, largely, the same behaviors we seek when hiring Project Managers.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="In the Fight Between Good and Evil..." border="0" alt="In the Fight Between Good and Evil..." src="http://lh6.ggpht.com/_dkYqgGG4VVU/SsIK7tE5vvI/AAAAAAAAAoY/ZZckIMjbjIU/AgileLeadersGoodBadBehaviors5.gif?imgmax=800" width="278" height="203" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#008080" size="3"&gt;Behaviors We Want in our Agile Leaders&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font color="#000000"&gt;Strategic&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;. Agile is very pragmatic, with a strong emphasis on the here &amp;amp; now. &lt;a title="You Aren&amp;#39;t Gonna Need It" href="http://c2.com/xp/YouArentGonnaNeedIt.html" target="_blank"&gt;YAGNI&lt;/a&gt;, &lt;a title="The Last Responsible Moment" href="http://www.codinghorror.com/blog/archives/000705.html" target="_blank"&gt;defer decisions&lt;/a&gt;, no Big Up Front anything. And so, it's interesting to see &lt;em&gt;strategic&lt;/em&gt;, &amp;quot;taking a long range approach,&amp;quot; as a key success criteria for agile leaders. I think this underscores the importance of having a clear vision for the team to rally around, and the need for our leaders to be thinking ahead to make sure that we're not just moving forward - but moving in the &lt;em&gt;right direction&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#000000"&gt;Tactical&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;. At the same time, agile &lt;strong&gt;is&lt;/strong&gt; very pragmatic, delivery focused. So our leaders need to emphasize the importance of continuously delivering value by focusing on &amp;quot;short-range, hands-on, practical strategies.&amp;quot; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#000000"&gt;Innovative&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;. We are out there, every day, responding to change, creating things no one has before. Our leaders should be open to new ideas, willing to take risks, and comfortable with agile's level of change.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#000000"&gt;Excitement&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;. We want our leaders to be passionate! To have excitement and energy and enthusiasm, and to pass that passion on to the team and make it felt by all who come in contact with it.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#000000"&gt;Communication&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;. Agile is about bringing people together to produce more than they could individually. Those 5 people with a clear purpose out there changing the world. This requires &lt;em&gt;communication,&lt;/em&gt; &amp;quot;stating clearly what you want and expect... clearly expressing your thoughts and ideas; maintaining a precise and constant flow of information.&amp;quot;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font color="#000000"&gt;Consensual&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;. Agile teams are about respect. Leaders value their team's ideas and opinions and demonstrate this by using their position to help the team gain consensus on how to proceed rather than just telling them what to do.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font color="#000000"&gt;Delegation&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;. Agile teams are about trust. Leaders encourage this by enlisting team member's strengths to achieve results and giving the team autonomy to make their own judgments about the best way to meet objectives.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#000000"&gt;Empathy&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;. Agile leaders empathize with and support their team members.&lt;/p&gt;  &lt;p&gt;&lt;font color="#008080" size="3"&gt;&lt;strong&gt;Behaviors that Hurt Agile Teams&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font color="#000000"&gt;Authority&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;. Leaders who are - and believe others should be - deferential to authority, tend to be liabilities on agile teams. Agile teams need to be continuously on the look out for new and better ways to do things and a great way to kill that that is by saying &amp;quot;nope, we don't allow new ideas unless they come from/are approved by the guy at the top.&amp;quot;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font color="#000000"&gt;Structuring&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;. The Plan-Driven Manager who spends weeks devising the &amp;quot;perfect plan&amp;quot; and the rest of the project aligning everything back to that is in direct opposition to the team's agility. Per the &lt;a title="Manifesto for Agile Software Development" href="http://agilemanifesto.org/" target="_blank"&gt;manifesto&lt;/a&gt;, agile teams value responding to change over following a plan.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font color="#000000"&gt;Conservative&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;. If it ain't broke don't fix it, says the conservative leader, while agile says, &amp;quot;what can we do better?&amp;quot;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font color="#000000"&gt;Technical&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;. While some technical understanding is good, being an expert is not only unnecessary but, as we've all seen, can be detrimental. We need our leaders helping us with communication and vision and supporting us to get the work done, not busy doing it all - or coming up with all the answers - themselves. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#6633ff"&gt;When we look for managers in our organizations, what kinds of traits do we look for?&lt;/font&gt;&lt;/strong&gt; Managers should have Authority, right? And, just look at the PMP - you know, the thing that tells us how to manage projects - about 90% of it's Body of Knowledge is around planning, so Structuring must be important too. Conservative? Sure, old white guys in suits, right? ;-)&amp;#160; And technical... well, we all know what role the techies get promoted to when they do a good job.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What about YOU: Which beliefs and behaviors do you see in your own agile leaders? What about in yourself?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;--   &lt;br /&gt;Learn more in &lt;a title="Agile Adaptive Management Reports" href="http://www.aamngt.com/" target="_blank"&gt;David Spann's articles&lt;/a&gt; on his research into Agile Management Behaviors: &lt;a title="Nashua ScrumClub" href="http://nashua.scrumclub.org/"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="ScrumClub" border="0" alt="ScrumClub" align="right" src="http://lh6.ggpht.com/_dkYqgGG4VVU/SsIK79-sYNI/AAAAAAAAAoc/yRJXngaeQz4/ScrumClub4.jpg?imgmax=800" width="64" height="34" /&gt;&lt;/a&gt;     &lt;br /&gt;» &lt;a href="http://www.aamngt.com/files/agilemngt.pdf" target="_blank"&gt;Agile Management Behaviors: What to Look For and Develop&lt;/a&gt;     &lt;br /&gt;» &lt;a href="http://www.aamngt.com/files/thefacilitativemindofagile.pdf" target="_blank"&gt;The Facilitative Mind of Agile&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#6633ff"&gt;&lt;b&gt;New!&lt;/b&gt;&lt;/font&gt; See Patrick Wilson Welsh's response: &lt;a href="http://patrickwilsonwelsh.com/?p=170"&gt;Agile Team Lead : Useful New Role?&lt;/a&gt;&lt;br/&gt;which takes this idea to the next level, and join in the conversation!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501180114730436648-8696730797330851255?l=www.thehackerchickblog.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=RlDEzAzgbn8:sofMCqRzaSQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=RlDEzAzgbn8:sofMCqRzaSQ:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=RlDEzAzgbn8:sofMCqRzaSQ:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=RlDEzAzgbn8:sofMCqRzaSQ:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?i=RlDEzAzgbn8:sofMCqRzaSQ:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=RlDEzAzgbn8:sofMCqRzaSQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheHackerChickBlog/~4/RlDEzAzgbn8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thehackerchickblog.com/feeds/8696730797330851255/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thehackerchickblog.com/2009/09/agile-leadership-methodology-ain-enough.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/8696730797330851255?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/8696730797330851255?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheHackerChickBlog/~3/RlDEzAzgbn8/agile-leadership-methodology-ain-enough.html" title="Agile Leadership: Methodology Ain&amp;#39;t Enough" /><author><name>abby</name><uri>http://www.blogger.com/profile/14805958673888992905</uri><email>haxrchick@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02745342225111277233" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.thehackerchickblog.com/2009/09/agile-leadership-methodology-ain-enough.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MAR3k7fCp7ImA9WxNRF0U.&quot;"><id>tag:blogger.com,1999:blog-7501180114730436648.post-6068647272686890103</id><published>2009-09-08T10:38:00.013-04:00</published><updated>2009-09-12T17:04:06.704-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-12T17:04:06.704-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="lean" /><category scheme="http://www.blogger.com/atom/ns#" term="testing" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Poka-Yoke Your Code</title><content type="html">&lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="Pokeymon says &amp;quot;Don&amp;#39;t forget to Poka-Yoke your code, kids!&amp;quot;" border="0" alt="Pokeymon says &amp;quot;Don&amp;#39;t forget to Poka-Yoke your code, kids!&amp;quot;" align="left" src="http://lh4.ggpht.com/_dkYqgGG4VVU/SqRBL9OQJKI/AAAAAAAAAmc/THzdQekScJI/Poka-Yoke-Pokeymon%5B4%5D.gif?imgmax=800" width="200" height="276" /&gt;&lt;a title="Poppendieck.LLC" href="http://www.poppendieck.com/" target="_blank"&gt;Mary Poppendieck&lt;/a&gt; tells this &lt;a title="Google Tech Talks: Competing on the Basis of Speed by Mary Poppendieck" href="http://video.google.com/videoplay?docid=-5105910452864283694 " target="_blank"&gt;great story&lt;/a&gt; about when the manufacturing plant she worked for transitioned to Lean. When they started, she says, they had this separate QA group whose job it was to find defects in the products &lt;em&gt;after they were already made&lt;/em&gt; (sound familiar?). But then they took these QA folks and moved them &lt;em&gt;out onto the production line &lt;/em&gt;to figure out how to &lt;strong&gt;&lt;font color="#6633ff"&gt;make stuff without defects in the first place&lt;/font&gt;&lt;/strong&gt;. Huh! Wouldn’t it be cool if we could do that for software?&lt;/p&gt;  &lt;p&gt;This is the idea behind &lt;strong&gt;&lt;a title="The Toyota System: Poka-Yoke | You Can&amp;#39;t Go Wrong" href="http://www.thetoyotasystem.com/lean_inventions/poka_yoke-you-can&amp;rsquo;t-go-wrong.php" target="_blank"&gt;Poka-Yoke&lt;/a&gt;&lt;/strong&gt;, or mistake proofing. It means setting things up in such a way that prevents people from making mistakes.&lt;/p&gt;  &lt;p&gt;You’ve probably seen this before in product design – monitor cables with male &amp;amp; female ends that prevent us from plugging them in the wrong way. Or in software with controls like dropdown lists (male, female) that prevent users from&lt;a href="http://lh4.ggpht.com/_dkYqgGG4VVU/SqRBMWvqgFI/AAAAAAAAAmg/EhJD_xPXZ_A/s1600-h/monitor-cables%5B8%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="Monitor cables have male &amp;amp; female ends to prevent us from plugging them in the wrong way" border="0" alt="Monitor cables have male &amp;amp; female ends to prevent us from plugging them in the wrong way" align="right" src="http://lh4.ggpht.com/_dkYqgGG4VVU/SqRBMhlB5rI/AAAAAAAAAmk/DM6Kmsa-KaA/monitor-cables_thumb%5B6%5D.gif?imgmax=800" width="120" height="97" /&gt;&lt;/a&gt; entering incorrect values (I’ll let you use your imagination).&lt;/p&gt;  &lt;p&gt;Toyota brings this idea onto their &lt;strong&gt;production lines&lt;/strong&gt; with devices that prevent incompatible parts from fitting together. But also with &lt;a title="A Study of the Toyota Production System: Poka-yoke Inspection Methods" href="http://books.google.com/books?id=RKWU7WElJ7oC&amp;amp;pg=PA21&amp;amp;lpg=PA21&amp;amp;dq=poka+yoke+toyota+production&amp;amp;source=bl&amp;amp;ots=nh6P1BzwcI&amp;amp;sig=c1r_xVAguSJweFWuFoxgB9f1n38&amp;amp;hl=en&amp;amp;ei=QwykSq6kFY2M8QaHrbzrDw&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=2#v=onepage&amp;amp;q=poka-yoke&amp;amp;f=false" target="_blank"&gt;poka-yoke &lt;em&gt;methods&lt;/em&gt;&lt;/a&gt; that detect problems and &lt;strong&gt;shut down &lt;/strong&gt;the machine (stop the line) or activate alarms so people are immediately alerted to correct it. So even when it’s not possible to completely prevent errors from occurring, they still prevent those errors from entering production. And they can then fix those errors immediately before they get a chance to compound into serious problems.&lt;/p&gt; So the question is, &lt;font color="#6633ff"&gt;how can we poka-yoke our code&lt;/font&gt;?&lt;span name="summary"&gt;&lt;br/&gt;&lt;br /&gt;&lt;/span&gt;&lt;a name='more'&gt;&lt;/a&gt; And I think the answer, like Toyota’s, is a range of techniques…    &lt;br /&gt;    &lt;br /&gt;    &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#008080"&gt;Compilers.&lt;/font&gt; &lt;/em&gt;&lt;/strong&gt;If we’re using a compiled language then our &lt;strong&gt;compiler&lt;/strong&gt; prevents language-specific errors from entering the software –- it won’t even build the software if it detects errors, right? So we can start by designing our code in a way that &lt;em&gt;actively &lt;/em&gt;pushes things up from run-time detection to compile time detection. Using thing like using generics and favoring &lt;a title="Code Monkeyism: Never, never, never use String in Java (or at least less often :) )" href="http://codemonkeyism.com/never-never-never-use-string-in-java-or-at-least-less-often/" target="_blank"&gt;objects over primitives&lt;/a&gt;. And &lt;em&gt;avoiding&lt;/em&gt; hacks like hiding things in String or Object types that might feel&lt;strong&gt;&lt;em&gt;&lt;font color="#008080"&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#008080"&gt;&lt;a title="IBM 29 card punch" href="http://www-03.ibm.com/ibm/history/exhibits/vintage/vintage_4506VV4002.html" target="_blank"&gt;&lt;img style="display: inline; margin-left: 0px; margin-right: 0px" title="IBM 29 card punch machine (NOT a modern langauge)" alt="IBM 29 card punch machine (NOT a modern langauge)" align="right" src="http://www-03.ibm.com/ibm/history/exhibits/vintage/images/4506VV4002.jpg" width="200" height="205" /&gt;&lt;/a&gt;&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt; flexible but that allow errors to sneak right past our first poka-yoke.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#008080"&gt;Modern Languages.&lt;/font&gt; &lt;/em&gt;&lt;/strong&gt;We can build on this idea by using modern languages that are specifically designed to prevent common programming errors. Things like functional languages that use immutable values and methods with no side effects that make our code safer by &lt;em&gt;preventing&lt;/em&gt; us from making those mistakes in the first place. &lt;/p&gt;    &lt;p&gt;And if we’re stuck with older languages, we can still learn about the newer languages &amp;amp; incorporate some of their ideas into our own code to make it less error-prone. Stephan Schmidt (&lt;a title="@CodeMonkeyism on Twitter" href="http://twitter.com/CodeMonkeyism" target="_blank"&gt;@CodeMonkeyism&lt;/a&gt;) wrote an excellent post on this &lt;a title="Code Monkeyism: Go Ahead: Next Generation Java Programming Style" href="http://api.postrank.com/log?url=http%3A%2F%2Fcodemonkeyism.com%2Fgeneration-java-programming-style%2F" target="_blank"&gt;Go Ahead: Next Generation Java Programming Style&lt;/a&gt; that I highly recommend.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#008080"&gt;Automated Tests.&lt;/font&gt; &lt;/em&gt;&lt;/strong&gt;Well, this is all lovely, but of course it won’t find even the most basic of application errors. So, like Toyota, we need to &lt;em&gt;supplement &lt;/em&gt;our builds with poka-yoke methods that detect problems and alert us to correct them. We’re probably already using automated tests to validate our application logic –- issues our compiler can't catch. So what we can do are employ our own poka-yoke techniques to give us better coverage and that truly “stop the line” to prevent errors from moving forward. Things like:&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;Using &lt;a title="Driving Development with Tests: ATDD and TDD by Elisabeth Hendrickson" href="http://testobsessed.com/wordpress/wp-content/uploads/2008/12/atddexample.pdf" target="_blank"&gt;TDD &amp;amp; ATDD&lt;/a&gt; to ensure we don’t write a line of production code without test coverage to poka-yoke it. &lt;/li&gt;      &lt;li&gt;Continuous integration boxes that alarm when these tests fail so we’re immediately alerted to fix them. &lt;/li&gt;      &lt;li&gt;Tools &amp;amp; scripting languages that automatically run the appropriate test suites on check ins and deployments and to &lt;strong&gt;prevent &lt;/strong&gt;(or at least alarm) us from taking those actions upon failure.&lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;&lt;font color="#008080"&gt;&lt;strong&gt;&lt;em&gt;Exploratory Testers.&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; Okay, but what about all the stuff we don’t &lt;strong&gt;think&lt;/strong&gt; to put in our tests (&lt;em&gt;it breaks when you do &lt;strong&gt;what&lt;/strong&gt;?&lt;/em&gt;!). This is where we need to take our Testers (aka “QA Folks”) and move them out onto the production line (yep, right there in our programming spaces!) to figure out how we can &lt;font color="#6633ff"&gt;make stuff without defects in the first place&lt;/font&gt;.&lt;/p&gt;    &lt;p&gt;I know, we’re really super smart and all, but software development is &lt;strong&gt;hard&lt;/strong&gt;. And if we knew how to make software without defects in the first place, well… then you probably wouldn’t have read this far down in this post by now (and if you did, feel free to share your secret with the rest of us in the comments).&lt;/p&gt;    &lt;p&gt;We &lt;strong&gt;are&lt;/strong&gt; really good at building software. But we need another perspective. While we’re focused on how to make things &lt;em&gt;work&lt;/em&gt;, it’s helpful to have people focused on how things might &lt;em&gt;break&lt;/em&gt; so that we can then feed that knowledge into what we’re building to prevent those defects from happening in the first place. This means things like pairing programmers &amp;amp; testers on each story so we’ve got that tester &lt;em&gt;right there on our coding floor&lt;/em&gt; with us doing exploratory testing early &amp;amp; often. And it means feeding their results into new automated tests that then become part of our poka-yoke.&lt;/p&gt;    &lt;p&gt;Even at Toyota they can’t know from day 1 all the things that might break. Instead, they employ processes that are continually inspecting for problems in the system and, when one is found, they take steps like adding new poka-yoke methods to prevent it from ever occurring again. Wouldn’t it be neat in software if we found a way to stop repeating our same mistakes over again? :-)&lt;/p&gt;    &lt;p&gt;&lt;font color="#000000"&gt;&lt;strong&gt;I have obviously only barely scratched the surface here, so am hoping this post will generate more ideas. What ways &lt;/strong&gt;&lt;strong&gt;can &lt;em&gt;you&lt;/em&gt; see for poka-yoking your code? How can we evolve these ideas to really make them work?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501180114730436648-6068647272686890103?l=www.thehackerchickblog.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=gNnVLXPqbTI:lSP2OUQEvuo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=gNnVLXPqbTI:lSP2OUQEvuo:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=gNnVLXPqbTI:lSP2OUQEvuo:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=gNnVLXPqbTI:lSP2OUQEvuo:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?i=gNnVLXPqbTI:lSP2OUQEvuo:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=gNnVLXPqbTI:lSP2OUQEvuo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheHackerChickBlog/~4/gNnVLXPqbTI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thehackerchickblog.com/feeds/6068647272686890103/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thehackerchickblog.com/2009/09/poka-yoke-your-code.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/6068647272686890103?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/6068647272686890103?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheHackerChickBlog/~3/gNnVLXPqbTI/poka-yoke-your-code.html" title="Poka-Yoke Your Code" /><author><name>abby</name><uri>http://www.blogger.com/profile/14805958673888992905</uri><email>haxrchick@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02745342225111277233" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total><feedburner:origLink>http://www.thehackerchickblog.com/2009/09/poka-yoke-your-code.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UBR3gyeyp7ImA9WxNUFE8.&quot;"><id>tag:blogger.com,1999:blog-7501180114730436648.post-4911958376644924760</id><published>2009-08-31T10:00:00.008-04:00</published><updated>2009-11-05T08:54:16.693-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-05T08:54:16.693-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="lean" /><category scheme="http://www.blogger.com/atom/ns#" term="testing" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="communication" /><title>Where Does Developer Testing End and Tester Testing Begin?</title><content type="html">&lt;p&gt;Thanks so much to all of the awesome people who attended Nate Oster &amp;amp; I’s &lt;a title="Where Does Developer Testing End and Tester Testing Begin?" href="http://agile2009.com/node/3205" target="_blank"&gt;workshop at Agile 2009&lt;/a&gt;.&amp;#160; &lt;/p&gt; &lt;center&gt;   &lt;div style="text-align: center; width: 500px"&gt;&lt;object type="application/x-shockwave-flash" data="http://media.roytanck.com/flickrwidget.swf" width="500" height="400"&gt;&lt;param name="movie" value="http://media.roytanck.com/flickrwidget.swf" /&gt;&lt;param name="bgcolor" value="#ffffff" /&gt;&lt;param name="flashvars" value="feed=http%3A//api.flickr.com/services/feeds/photoset.gne%3Fset%3D72157622189557300%26nsid%3D26451203@N04%26lang%3Den-us" /&gt;&lt;param name="AllowScriptAccess" value="always" /&gt;&lt;p&gt;&lt;a href="http://www.roytanck.com"&gt;Roy Tanck&lt;/a&gt;'s Flickr Widget requires Flash Player 9 or better.&lt;/p&gt;&lt;/object&gt;&lt;/div&gt; &lt;div style="text-align: center; font-size: 9px"&gt;You can also &lt;a href="http://www.flickr.com/photos/26451203@N04/sets/72157622189557300/show/" target="new"&gt;click here to view as slide show&lt;/a&gt;&lt;/div&gt; &lt;/center&gt; &lt;br /&gt; &lt;p&gt;We used games and ideas to look at how testers and programmers can &lt;em&gt;&lt;font color="#6633ff"&gt;really work together&lt;/font&gt;&lt;/em&gt; on agile projects in ways that &lt;em&gt;&lt;font color="#6633ff"&gt;makes sense&lt;/font&gt;&lt;/em&gt; on our teams.&lt;span class="summary"&gt; [&lt;a href="/2009/08/where-does-developer-testing-end-and.html#more"&gt;Read More…&lt;/a&gt; to view the slides]&lt;/span&gt;&lt;/p&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;p&gt;In agile, we love to talk about “all together” but the truth is a lot of times our teams are structured in ways that force us into &lt;font color="#ff0000"&gt;testing &lt;em&gt;smells&lt;/em&gt;&lt;/font&gt; that make it really hard for us to succeed, no matter how hard we try. Things like: &lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;Testing at the end &lt;/li&gt;      &lt;li&gt;Repeating manual tests &lt;/li&gt;      &lt;li&gt;Using testers as a safety-net &lt;/li&gt;      &lt;li&gt;Not aligning rewards with goals &lt;/li&gt;      &lt;li&gt;Programmers &amp;amp; testers not working towards the same goal &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;You can view our slides below.&amp;#160; I’ll try to post more about these smells in the coming weeks.&amp;#160; And if there’s one thing I learned from Agile 2009, it’s the power of ideas when you’re working with brilliant and passionate people, of which we have so many in this field.&amp;#160; So, would really love to hear your thoughts on these concepts.&amp;#160; How can we make them better and how do we take them to the next level?&lt;/p&gt;   &lt;center&gt;     &lt;div style="width: 500px" id="__ss_1928609"&gt;       &lt;p align="left"&gt;&lt;object style="margin:0px" width="500" height="420"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=wheredoesdevelopertestingendandtestertestingbegin-090830160358-phpapp01&amp;amp;stripped_title=where-does-developer-testing-end-and-tester-testing-begin-1928609" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=wheredoesdevelopertestingendandtestertestingbegin-090830160358-phpapp01&amp;amp;stripped_title=where-does-developer-testing-end-and-tester-testing-begin-1928609" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="500" height="420"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;        &lt;div style="text-align: center; font-size: 9px"&gt;&lt;a href="http://www.slideshare.net/HackerChick/where-does-developer-testing-end-and-tester-testing-begin-1928609" title="Where Does Developer Testing End And Tester Testing Begin?"&gt;Click here to view on Slide Share&lt;/a&gt;&lt;br/&gt;This presentation is licensed under a &lt;a href="http://creativecommons.org/licenses/by-sa/3.0/us/"&gt;Creative Commons Attribution-Share Alike 3.0 License&lt;/a&gt;.&lt;/div&gt;        &lt;p&gt;&lt;/p&gt;     &lt;/div&gt;   &lt;/center&gt;    &lt;p&gt;&lt;b&gt;What do &lt;i&gt;you&lt;/i&gt; think: How do the programmers &amp;amp; testers work together on your projects? How do we get programmers &amp;amp; testers pairing effectively on projects?&lt;/b&gt;&lt;/p&gt; --     &lt;br /&gt;» Photo widget courtesy of &lt;a href="http://www.roytanck.com/" target="new"&gt;http://www.roytanck.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501180114730436648-4911958376644924760?l=www.thehackerchickblog.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=Wne1DV5-Y94:y0RXiiNanHo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=Wne1DV5-Y94:y0RXiiNanHo:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=Wne1DV5-Y94:y0RXiiNanHo:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=Wne1DV5-Y94:y0RXiiNanHo:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?i=Wne1DV5-Y94:y0RXiiNanHo:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=Wne1DV5-Y94:y0RXiiNanHo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheHackerChickBlog/~4/Wne1DV5-Y94" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thehackerchickblog.com/feeds/4911958376644924760/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thehackerchickblog.com/2009/08/where-does-developer-testing-end-and.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/4911958376644924760?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/4911958376644924760?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheHackerChickBlog/~3/Wne1DV5-Y94/where-does-developer-testing-end-and.html" title="Where Does Developer Testing End and Tester Testing Begin?" /><author><name>abby</name><uri>http://www.blogger.com/profile/14805958673888992905</uri><email>haxrchick@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02745342225111277233" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://www.thehackerchickblog.com/2009/08/where-does-developer-testing-end-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MMSXc5fSp7ImA9WxNRF0U.&quot;"><id>tag:blogger.com,1999:blog-7501180114730436648.post-3018347503483644988</id><published>2009-06-16T09:00:00.008-04:00</published><updated>2009-09-12T17:04:48.925-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-12T17:04:48.925-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="testing" /><title>Where Do the Testers Go in Agile?</title><content type="html">&lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="Rumpelstiltskin" border="0" alt="Rumpelstiltskin" align="left" src="http://lh5.ggpht.com/_dkYqgGG4VVU/SjeiPjF7kgI/AAAAAAAAAls/Wqvrqzn9xv8/rumpelstiltskin%5B2%5D.jpg?imgmax=800" width="225" height="190" /&gt; While I love to write, I occasionally prefer the role of reviewer or editor. I find it a nice break to sit on the other side and evaluate someone &lt;strong&gt;else’s&lt;/strong&gt; work for a change.&amp;#160; How much more comfortable to critique someone else’s product then to summon the courage to create something myself! &lt;/p&gt;  &lt;p&gt;But how much easier would it be to create if we had a magical safety-net that guaranteed whatever we did would turn out well?&amp;#160; How much more would we accomplish if we knew our every endeavor would be a success? Imagine a kick ass editor or, in software, a fabulous tester who had our back.&amp;#160; Let’s call them Rumpelstiltskin. Able to take &lt;font color="#6633ff"&gt;Garbage In&lt;/font&gt;, and turn &lt;font color="#6633ff"&gt;Greatness Out&lt;/font&gt;.&lt;/p&gt;  &lt;p&gt;We might find that the tables had turned.&amp;#160; That the need for courage had passed from the creator to the tester.&amp;#160; We only have to give them straw.&amp;#160; They have to find a way to turn it to gold.&lt;/p&gt;I have seen this happen on software projects, where the senior developers’ time has been deemed &lt;em&gt;too valuable&lt;/em&gt; to “waste” on bug fixes.&amp;#160; Have you seen this?&amp;#160; A team of developers up in their ivory tower, banging out new features, while a test and bug team come in to clean up behind them.&amp;#160; All so the senior folks can go work on the next big thing.&lt;br&gt;&lt;br&gt;&lt;a name='more'&gt;&lt;/a&gt;I just can’t imagine this situation is satisfactory for anyone involved.&amp;#160; Not for the senior developers because we ask them to invest all that hard work but then deprive them the satisfaction of a job well done by forcing them to stop short of learning whether they got it right or allowing them to sculpt it into the final solution.&amp;#160; Not for the testers or bug team, because they’re left with the onus of getting it right, while the senior developers get all of the credit.&lt;br&gt;&lt;br&gt;&lt;p&gt;Even when the developers are writing unit tests to ensure their code “works,” so many of the problems we find in software are communication, rather than technical, issues.&amp;#160; And the further we remove developers from the process of validating whether their software does what the customer &lt;em&gt;really wants&lt;/em&gt;, the more the problem gets compounded.&lt;/p&gt;    &lt;p&gt;In agile, we seek a better answer with our notion of &lt;font color="#6633ff"&gt;&lt;strong&gt;All Together&lt;/strong&gt;&lt;/font&gt;. One where we &lt;strong&gt;all&lt;/strong&gt; require courage, but where finding that courage is made easier by the safety nets we put in place.&amp;#160; If testers are really good at working with &lt;em&gt;completed&lt;/em&gt; software to ensure it meets the customers needs, why not just allow&lt;a href="http://lh3.ggpht.com/_dkYqgGG4VVU/SjVW-J5ZLhI/AAAAAAAAAlg/-vnIEMCEkrE/s1600-h/7Dwarfs11.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="The Seven Dwarfs" border="0" alt="The Seven Dwarfs" align="right" src="http://lh6.ggpht.com/_dkYqgGG4VVU/SjVW-sxCSqI/AAAAAAAAAlk/ynhy65RgkTA/7Dwarfs_thumb9.jpg?imgmax=800" width="204" height="330" /&gt;&lt;/a&gt; them to do this &lt;em&gt;throughout&lt;/em&gt;&lt;em&gt;?&amp;#160; &lt;/em&gt;Let’s skip the separate bug team and it’s test/fix cycle and just &lt;em&gt;&lt;font color="#6633ff"&gt;get it right the first time&lt;/font&gt;&lt;/em&gt;.&lt;/p&gt;    &lt;p&gt;Testers can work with customers up front, &lt;em&gt;before&lt;/em&gt; a feature has been developed. They can dig beyond the stated requirement to learn what it will take for the feature to actually be &lt;em&gt;usable&lt;/em&gt;. The criteria by which users will judge it. In the end, success is defined by the software's &lt;em&gt;usefulness&lt;/em&gt; to the user, not by its adherence to documents.&amp;#160; And so if testers are going to have to figure out how to validate that it meets those user needs, why not figure that out up front – and allow that knowledge to help drive development in the right direction?&lt;/p&gt;    &lt;p&gt;The truth is, it’s a waste of testers’ skills and an exercise in frustration to leave them until the end - trying to inject quality into something that’s already built.&amp;#160; &lt;/p&gt;    &lt;p&gt;So, agile puts testers at the &lt;strong&gt;&lt;font color="#008080"&gt;beginning&lt;/font&gt;&lt;/strong&gt;. It gets them involved with the customer, helping elicit acceptance criteria in terms of objective tests. And sharing these with developers so they can design the right solution to build from the start.&lt;/p&gt;    &lt;p&gt;And it puts testers in the &lt;strong&gt;&lt;font color="#008080"&gt;middle&lt;/font&gt;&lt;/strong&gt;. We talk a lot about having developers testing their own code. Well good! As developers, we &lt;strong&gt;should&lt;/strong&gt; be able to test our own code.&amp;#160; But the truth is, most developers haven’t been trained in testing and so figuring out what to test can sometimes be daunting.&amp;#160; Why not let testers sit down and pair with us while we’re writing some of our tests? Give us a second set of eyes and help us find techniques for writing effective tests as simply as possible.&lt;/p&gt;    &lt;p&gt;And it put testers at the &lt;strong&gt;&lt;font color="#008080"&gt;end&lt;/font&gt;&lt;/strong&gt;.&amp;#160; Not the end of a release, but the end of a feature. As we integrate our new features, testers provide us with their wonderful safety net of tests to ensure that our software continues working as expected.&amp;#160; And since most defects will have been prevented or dealt with by this point, it allows testers to look further. To inspect the software and feed ideas for improvement back into the process we use as we move on to the next feature.&lt;/p&gt;    &lt;p&gt;I know that for a long time our industry has believed that to be effective, tests must be independent.&amp;#160; But in agile, we value the &lt;strong&gt;customer’s&lt;/strong&gt; opinion as the final say, not some techie’s.&amp;#160; So lets allow our testers to instead work &lt;strong&gt;with&lt;/strong&gt; the team and help us move forward with the confidence of knowing that it is &lt;strong&gt;within&lt;/strong&gt; our ability to deliver success.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Where does &lt;em&gt;your &lt;/em&gt;project put its testers?&lt;/strong&gt;       &lt;br /&gt;--&lt;/p&gt;    &lt;p&gt;» See &lt;a title="Agile Testing by Lisa Crispin, Janet Gregory" href="http://www.amazon.com/Agile-Testing-Practical-Addison-Wesley-Signature/dp/0321534468" target="_blank"&gt;Agile Testing&lt;/a&gt; by &lt;a title="Lisa Crispin" href="http://lisa.crispin.home.att.net/" target="_blank"&gt;Lisa Crispin&lt;/a&gt; and &lt;a title="Janet Gregory" href="http://janetgregory.blogspot.com/" target="_blank"&gt;Janet Gregory&lt;/a&gt; for more information and wonderful ideas on testing in agile.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501180114730436648-3018347503483644988?l=www.thehackerchickblog.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=tBsui2cpWfA:EkVe_iit3lA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=tBsui2cpWfA:EkVe_iit3lA:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=tBsui2cpWfA:EkVe_iit3lA:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=tBsui2cpWfA:EkVe_iit3lA:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?i=tBsui2cpWfA:EkVe_iit3lA:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=tBsui2cpWfA:EkVe_iit3lA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheHackerChickBlog/~4/tBsui2cpWfA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thehackerchickblog.com/feeds/3018347503483644988/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thehackerchickblog.com/2009/06/where-do-testers-go-in-agile.html#comment-form" title="11 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/3018347503483644988?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/3018347503483644988?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheHackerChickBlog/~3/tBsui2cpWfA/where-do-testers-go-in-agile.html" title="Where Do the Testers Go in Agile?" /><author><name>abby</name><uri>http://www.blogger.com/profile/14805958673888992905</uri><email>haxrchick@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02745342225111277233" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">11</thr:total><feedburner:origLink>http://www.thehackerchickblog.com/2009/06/where-do-testers-go-in-agile.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YBQXg4eyp7ImA9WxNRF0U.&quot;"><id>tag:blogger.com,1999:blog-7501180114730436648.post-5076178869495934473</id><published>2009-05-20T01:31:00.014-04:00</published><updated>2009-09-12T15:52:30.633-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-12T15:52:30.633-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="management" /><category scheme="http://www.blogger.com/atom/ns#" term="communication" /><title>Plane Crashes, Software Failures, and other Human Errors</title><content type="html">&lt;img title="Oops" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin-left: 0px; margin-right: 0px; border-right-width: 0px" height="184" alt="Plane Crash" src="http://lh3.ggpht.com/_dkYqgGG4VVU/ShOVq6785iI/AAAAAAAAAko/QGY9zM10opM/PlaneCrash4.jpg?imgmax=800" width="244" align="left" border="0" /&gt;Want to know if your team is effective? &lt;font color="#6633ff"&gt;&lt;strong&gt;Listen&lt;/strong&gt; to them.&lt;/font&gt;   &lt;br /&gt;  &lt;br /&gt;We can learn a lot about team effectiveness through research that's been done on teams whose work can mean the difference between life and death. Namely, operating room teams and airline cockpit crews.   &lt;br /&gt;  &lt;br /&gt;The airline industry, which gets such a bad rap, actually has a phenomenal safety record. An airline like United only loses a plane from an accident about once in every &lt;em&gt;four million&lt;/em&gt; flights.   &lt;br /&gt;  &lt;br /&gt;Hospitals, on the other hand, which we tend view as &lt;em&gt;safe, &lt;/em&gt;are the cause of &lt;a title="Institute of Medicine: To Err is Human Report" href="http://www.iom.edu/Object.File/Master/4/117/ToErr-8pager.pdf" target="_blank"&gt;44,000 – 98,000 preventable deaths in the US each year&lt;/a&gt;. Even at the low end, this tops the death rate from things we actually know to fear like breast cancer (~40,000), car accidents (~40,000) or, of course, airplane fatalities (~120).   &lt;br /&gt;  &lt;br /&gt;So, clearly, the aviation industry is doing better in this respect, and the healthcare industry is now actively working to adopt some of their training, known as &lt;a title="Operating Rooms Take Cue from the Cockpit (article on CRM)" href="http://www.saferpatients.com/news/Nebraska%20Medical%20Center%20CRM.pdf" target="_blank"&gt;Crew Resource Management&lt;/a&gt;, or CRM for short.   &lt;br /&gt;  &lt;br /&gt;What is it that they've learned? And, can it help us in software? Well, as I like to say, stop me if this sounds familiar...&lt;a name="more"&gt;&lt;/a&gt;&lt;a name='more'&gt;&lt;/a&gt;    &lt;br /&gt;    &lt;br /&gt;About 80% of all (airline) crashes are caused by human, rather then technical (mechanical) errors. And, in fact, many of these are the result of errors in communication. Okay, this makes sense for software errors, right? We all know how horrible everyone is at communicating with one another. But, it's one thing when the risk of miscommunication is frustrated users. If we put ourselves in a situation where failing to communicate could result in &lt;font color="#ff0000"&gt;&amp;quot;oh my God, we're all going to die!!&amp;quot;&lt;/font&gt; then it seems we'd be able to do just a little better, right?     &lt;br /&gt;    &lt;br /&gt;Let's take the 1982 Air Florida crash in Washington DC that killed 74 of it's 79 occupants &lt;strong&gt;plus&lt;/strong&gt; 4 motorists on the 14th Street Bridge that it struck. The first officer tried several times to tell the captain that the plane had a dangerous amount of ice on its wings, enough to cause all of these deaths. And yet, listen to how he reports the problem:     &lt;br /&gt;    &lt;br /&gt;Try #1: &amp;quot;Look how the ice is just hanging on his, ah, back, back there, see that?&amp;quot;     &lt;br /&gt;    &lt;br /&gt;Try #2: &amp;quot;See all those icicles on the back there and everything?&amp;quot;     &lt;br /&gt;    &lt;br /&gt;Try #3: &amp;quot;Boy, this is a, this is a losing battle here on trying to de-ice those things, it [gives] you a false feeling of security, that's all it does.&amp;quot;     &lt;br /&gt;    &lt;br /&gt;I don't know about you, but when I picture myself in a situation where my life, and the lives of 78 people around me, is at risk, I'm picturing a &lt;strong&gt;very direct and crystal clear&lt;/strong&gt; &lt;strong&gt;warning&lt;/strong&gt; and if that doesn't work, screaming, with potentially some jumping up and down and arms waving around. Not &amp;quot;&lt;em&gt;ahhh&lt;/em&gt;, see all those icicles back there and everything?&amp;quot;     &lt;br /&gt;    &lt;br /&gt;The captain clearly didn't take him seriously either until at the end when the first officer finally says, &lt;em&gt;&amp;quot;Larry, we're going down, Larry,&amp;quot;&lt;/em&gt; and the captain responds, &lt;em&gt;&amp;quot;I know it.&amp;quot; &lt;/em&gt;Crash. Boom. Bam. 78 dead.     &lt;br /&gt;    &lt;br /&gt;But even more amazingly, what researchers found was that this exact problem was actually &lt;strong&gt;common &lt;/strong&gt;in airline cockpit crews. A famous crash in aviation is the 1990 Columbian Avianca 052 crash that slammed into tennis champion John McEnroe's father's estate in New York, killing 73 passengers. The reason? Plane ran out of fuel. Ran out of fuel because it had to go further then expected? No, ran out of fuel while &lt;em&gt;politely waiting for air traffic control at Kennedy airport to give it permission to land&lt;/em&gt;. Why didn't the co-pilot just tell air traffic control they were about to run out of fuel? They were trying to be &lt;em&gt;polite&lt;/em&gt; rather than pushy. Peace, love and happiness. Have a flower. 73 dead.     &lt;br /&gt;    &lt;br /&gt;Korean Air Flight 801, almost the same exact situation as Air Florida. In trying to warn the captain of severe weather problems that would eventually lead to the deaths of 228 of the 254 people on board, the first officer says, &amp;quot;&lt;em&gt;Don't you think it rains more? In this area, here?&amp;quot;&lt;/em&gt; and &amp;quot;&lt;em&gt;Captain, the weather radar has helped us a lot&amp;quot;&lt;/em&gt;…     &lt;br /&gt;    &lt;br /&gt;Captain, the weather radar has helped us a lot?! What are these people doing? They're &lt;em&gt;hinting&lt;/em&gt; at the impending problem, in hopes that the guy who's a little busy with the whole &amp;quot;flying an airplane&amp;quot; or &amp;quot;trying to bring 99 planes circling Kennedy airport in for a landing&amp;quot; thing is going to catch on, read their mind, and solve the problem for them self. All without losing face. All without getting upset at the &lt;em&gt;hinter&lt;/em&gt; for being too pushy or impolite. Wouldn't want any hurt feelings, now would we?     &lt;br /&gt;    &lt;br /&gt;The official term for this is &amp;quot;mitigated speech&amp;quot; and &lt;a title="Gladwell.com" href="http://www.gladwell.com/" target="_blank"&gt;Malcolm Gladwell&lt;/a&gt; provides a fascinating account of how it has effected the airline industry in his book &lt;a title="Outliers by Malcolm Gladwell" href="http://www.amazon.com/Outliers-Story-Success-Malcolm-Gladwell/dp/0316017922" target="_blank"&gt;Outliers&lt;/a&gt;. He defines it as &lt;em&gt;&amp;quot;any attempt to downplay or sugarcoat the meaning of what is being said.&amp;quot;&lt;/em&gt; and explains that &amp;quot;we mitigate when we're being polite, or when we're ashamed or embarrassed, or when we're being deferential to authority.&amp;quot;     &lt;br /&gt;    &lt;br /&gt;Amazingly, this mitigated speech actually explains a &lt;strong&gt;major source&lt;/strong&gt; of airline crashes in the past, and since implementing CRM training to combat it, preventable accidents in aviation have decreased by &lt;strong&gt;&lt;font color="#6633ff"&gt;50%&lt;/font&gt;&lt;/strong&gt;. And so now the healthcare profession is looking to benefit from it too, because, wow, 44,000 – 98,000 preventable deaths per year!     &lt;br /&gt;    &lt;br /&gt;The crazy common point in both operating rooms and cockpit crews, the thing that makes this all so damning is that research into both fields has shown that &lt;font color="#ff0000"&gt;errors occur &lt;strong&gt;most often&lt;/strong&gt; when a &lt;strong&gt;senior, experienced person&lt;/strong&gt; is performing.&lt;/font&gt; In other words, even in these highly trained professions, it is &lt;strong&gt;not&lt;/strong&gt; just about being skilled or knowledgeable enough – in fact, the &lt;strong&gt;more&lt;/strong&gt; skilled you are, the more it can hurt you!     &lt;br /&gt;    &lt;br /&gt;» In surgery, &lt;a title="Harvard Medical Review: Mistakes Happen When Experienced Surgeons Doing Routine Procedures Meet Patient Complexity" href="http://focus.hms.harvard.edu/2007/121407/surgery.shtml" target="_blank"&gt;errors occur most often with experienced surgeons&lt;/a&gt;, typically resulting from a breakdown in communications such as a resident failing to effectively communicate vital information (&lt;em&gt;ahh&lt;/em&gt;, see all those icicles?).     &lt;br /&gt;    &lt;br /&gt;» In commercial airlines, planes are flown with 2 pilots –- the captain and a first officer –- who split the flying duties equally. And yet, crashes occur most often when the &lt;strong&gt;captain&lt;/strong&gt; is flying. Why? &amp;quot;&lt;em&gt;Planes are safer when the least experienced pilot is flying, because it means the second pilot isn't going to be afraid to speak up&lt;/em&gt;.&amp;quot; (Gladwell)     &lt;br /&gt;    &lt;br /&gt;And so the question we have to ask ourselves is – can this also be true in software development? Is being skilled or knowledgeable enough? Or can it &lt;a title="Johanna Rothman: Is the Most Productive Employee Really the Most Productive?" href="http://jrothman.com/blog/mpd/2009/05/is-the-most-productive-employee-really-the-most-productive.html" target="_blank"&gt;sometimes hurt us&lt;/a&gt;? Do we work in environments where people are encouraged to speak up, to &lt;a title="Toyota &amp;quot;Stop the Line&amp;quot; Mentality" href="http://blog.perfectapi.com/2009/02/toyota-stop-the-line-mentality/" target="_blank"&gt;stop the line&lt;/a&gt; when they see things going wrong?&amp;#160; &lt;a href="http://lh5.ggpht.com/_dkYqgGG4VVU/ShQdWvayvPI/AAAAAAAAAk0/i3RoV-CeRSo/s1600-h/Man%20behind%20the%20curtain-bw%5B3%5D.jpg"&gt;&lt;img title="Pay no attention to the man behind the curtain" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin-left: 0px; margin-right: 0px; border-right-width: 0px" height="164" alt="Pay no attention to the man behind the curtain" src="http://lh4.ggpht.com/_dkYqgGG4VVU/ShQdW864OAI/AAAAAAAAAk4/TYD-rXwQTeY/Man%20behind%20the%20curtain-bw_thumb%5B1%5D.jpg?imgmax=800" width="244" align="right" border="0" /&gt;&lt;/a&gt;Or might we have senior team members and managers that are intimidating or difficult to raise issues to? Do we find ourselves &lt;em&gt;hinting&lt;/em&gt; to save face in the light of possible problems? Or, perhaps, just remaining silent on issues? (&lt;em&gt;pay no attention to the man behind the curtain&lt;/em&gt;).     &lt;br /&gt;    &lt;br /&gt;Part of the research behind CRM found that, even among highly skilled professions, human errors are still going to happen. However, we can compensate for this and drastically reduce the consequences of those errors if we have a team that is effectively communicating with one another. A team where its members, regardless of position, are able to speak up and clearly communicate when they notice a problem. And thus, we don't have to be infallible if we can work with others we can rely on to have our back and catch issues that might miss our attention.     &lt;br /&gt;    &lt;br /&gt;I like this quote from the &lt;a title="Operating Rooms Take Cue from the Cockpit" href="http://www.saferpatients.com/news/Nebraska%20Medical%20Center%20CRM.pdf" target="_blank"&gt;Nebraska Medical Center&lt;/a&gt;, one of the medical centers adopting CRM for their operating rooms:     &lt;br /&gt;    &lt;br /&gt;&lt;center&gt;&lt;em&gt;&lt;font color="#6633ff"&gt;&amp;quot;The use of CRM creates an atmosphere of mutual responsibility not only for making sure everyone does his or her job, but also for making sure everyone else on the team is informed.&amp;quot;&lt;/font&gt;&lt;/em&gt;&lt;/center&gt;    &lt;br /&gt;Sounds a little like agile, doesn't it?     &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;I'm curious for people's opinions. Do you think this is an issue in software development? I know us developers can be almost obnoxiously outspoken when we see problems in our areas of expertise... but what about when we see problems in the areas we may not consider ourselves "the expert" at?&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501180114730436648-5076178869495934473?l=www.thehackerchickblog.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=9-yt2PcZg10:kz96_FbH6nQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=9-yt2PcZg10:kz96_FbH6nQ:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=9-yt2PcZg10:kz96_FbH6nQ:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=9-yt2PcZg10:kz96_FbH6nQ:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?i=9-yt2PcZg10:kz96_FbH6nQ:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=9-yt2PcZg10:kz96_FbH6nQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheHackerChickBlog/~4/9-yt2PcZg10" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thehackerchickblog.com/feeds/5076178869495934473/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thehackerchickblog.com/2009/05/plane-crashes-software-failures-and.html#comment-form" title="12 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/5076178869495934473?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/5076178869495934473?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheHackerChickBlog/~3/9-yt2PcZg10/plane-crashes-software-failures-and.html" title="Plane Crashes, Software Failures, and other Human Errors" /><author><name>abby</name><uri>http://www.blogger.com/profile/14805958673888992905</uri><email>haxrchick@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02745342225111277233" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">12</thr:total><feedburner:origLink>http://www.thehackerchickblog.com/2009/05/plane-crashes-software-failures-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQBRX46fSp7ImA9WxJSGE0.&quot;"><id>tag:blogger.com,1999:blog-7501180114730436648.post-5068307541387333238</id><published>2009-05-08T13:20:00.009-04:00</published><updated>2009-05-08T13:39:14.015-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-08T13:39:14.015-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>A Brief, Incomplete, and Mostly Wrong History of Programming Languages</title><content type="html">&lt;p&gt;&lt;b&gt;This&lt;/b&gt; is priceless:&lt;br&gt;» &lt;a href="http://james-iry.blogspot.com/2009/05/brief-incomplete-and-mostly-wrong.html" title="A Brief, Incomplete, and Mostly Wrong History of Programming Languages" target="new"&gt;A Brief, Incomplete, and Mostly Wrong History of Programming Languages&lt;/a&gt; by James Iry on the One Div Zero blog.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501180114730436648-5068307541387333238?l=www.thehackerchickblog.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=2AHuO7IsEoU:vANF3zIKKfs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=2AHuO7IsEoU:vANF3zIKKfs:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=2AHuO7IsEoU:vANF3zIKKfs:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=2AHuO7IsEoU:vANF3zIKKfs:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?i=2AHuO7IsEoU:vANF3zIKKfs:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=2AHuO7IsEoU:vANF3zIKKfs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheHackerChickBlog/~4/2AHuO7IsEoU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thehackerchickblog.com/feeds/5068307541387333238/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thehackerchickblog.com/2009/05/brief-incomplete-and-mostly-wrong.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/5068307541387333238?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/5068307541387333238?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheHackerChickBlog/~3/2AHuO7IsEoU/brief-incomplete-and-mostly-wrong.html" title="A Brief, Incomplete, and Mostly Wrong History of Programming Languages" /><author><name>abby</name><uri>http://www.blogger.com/profile/14805958673888992905</uri><email>haxrchick@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02745342225111277233" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.thehackerchickblog.com/2009/05/brief-incomplete-and-mostly-wrong.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YMRH8yeyp7ImA9WxNRF0U.&quot;"><id>tag:blogger.com,1999:blog-7501180114730436648.post-1223441011142869989</id><published>2009-04-28T10:00:00.009-04:00</published><updated>2009-09-12T15:53:05.193-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-12T15:53:05.193-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="collaboration" /><category scheme="http://www.blogger.com/atom/ns#" term="management" /><category scheme="http://www.blogger.com/atom/ns#" term="communication" /><title>Beautiful Teams</title><content type="html">&lt;p&gt;&lt;a title="Building Better Software (Andrew &amp;amp; Jenny&amp;#39;s blog)" href="http://www.stellman-greene.com/" target="_blank"&gt;&lt;img title="Ok, On Three... Two... One... Be an Effective Team! (courtesy of Stellman &amp;amp; Greene)" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin-left: 0px; margin-right: 0px; border-right-width: 0px" height="225" alt="Ok, On Three... Two... One... Be an Effective Team! (curtesy of Stellman &amp;amp; Greene)" src="http://lh6.ggpht.com/_dkYqgGG4VVU/SfSWSwFanPI/AAAAAAAAAg8/b6ZJkSXpGG0/when-cheering-fails%5B9%5D.png?imgmax=800" width="280" align="right" border="0" /&gt;&lt;/a&gt;Last Tuesday,&lt;a title="Building Better Software (Andrew &amp;amp; Jenny&amp;#39;s blog)" href="http://www.stellman-greene.com/" target="_blank"&gt; Andrew Stellman and Jenny Greene&lt;/a&gt; came to the &lt;a title="Boston Software Process Improvement Network" href="http://www.boston-spin.org/" target="_blank"&gt;Boston SPIN&lt;/a&gt; to talk about &lt;a title="Beautiful Teams" href="http://www.boston-spin.org/topic.html" target="_blank"&gt;Beautiful Teams&lt;/a&gt;, the topic of a wonderful book they’ve just published. A book I believe &lt;a title="Scott Berkun" href="http://www.scottberkun.com/"&gt;Scott Berkun&lt;/a&gt; captured best when he said, “Stop complaining about your coworkers. Instead, get your team and your boss to read &lt;a title="Beautiful Teams: Inspiring and Cautionary Tales from Veteran Team Leaders" href="http://www.amazon.com/Beautiful-Teams-Inspiring-Cautionary-Veteran/dp/0596518021" target="_blank"&gt;&lt;em&gt;Beautiful Teams&lt;/em&gt;&lt;/a&gt;.” And of course, once you hear Andrew &amp;amp; Jenny talk, or read their book, you just can’t help but think about the teams you’ve worked on… what makes the good ones great? What makes the awful ones so unbearable? Is there a recipe out there for creating those wonderful, beautiful teams that are so exhilarating to be a part of?     &lt;br /&gt;    &lt;br /&gt;The best damn team I ever worked on was a startup. Right in the Internet hey day. It was exciting. It was fast paced. We worked 80+ hour work weeks, slept at the office, rarely had enough money for anything beyond the next couple of payrolls. But we were developing things no one had ever developed before and getting written up in magazines and had the ultimate brag factor over the cool things we were doing with audio and video. We had Microsoft begging us to tell them our secrets, AOL wanting to buy us (they eventually did). We took trips to the WinAmp and MTVi offices and went to RealNetworks parties hosted in museums. Man, we were HOT.&lt;a name='more'&gt;&lt;/a&gt;     &lt;br /&gt;      &lt;br /&gt;We were, in fact, certifiably bad-ass in the sheer amounts of innovation we were able to deliver. We had this amazing VP of Engineering who would come in and tell us we were going to do these absolutely insane things and we’d all look at her like she’d finally lost it. But then, the craziest thing would happen and we’d actually find a way to do them.       &lt;br /&gt;      &lt;br /&gt;But then… one day, it became not so hot. We grew big enough to need a “real” CEO, and with him came a team of “real” business executives. And these business folks thought they knew all the answers and so before we knew what was happening they’d booted that VP of Engineering – the absolute heart and soul behind our software – right out the door. They brought in a new VP who told us that he thought perhaps our reputation “exceeded” us, and you can just imagine the developers couldn’t find the exit door fast enough. And, of course, nothing was ever the same after.       &lt;br /&gt;      &lt;br /&gt;What happened?! How could we have created such greatness? And then, how could it be ripped away from us so easily?       &lt;br /&gt;      &lt;br /&gt;In software development, we give a &lt;strong&gt;lot&lt;/strong&gt; of weight to the practices we follow – is your project agile? Are you doing TDD? Continuous Integration? Daily Scrums? And it’s not that these things aren’t important. They’re &lt;strong&gt;extremely &lt;/strong&gt;important. But, the thing is that they’re not &lt;strong&gt;most&lt;/strong&gt; important. And, when you stand them up next to what &lt;strong&gt;is&lt;/strong&gt; most important – the &lt;strong&gt;people&lt;/strong&gt; and the &lt;strong&gt;teams – &lt;/strong&gt;it really puts them in perspective. We weren’t doing any of these things in our hey day and yet it was by far the most productive team I have ever – and probably will ever – have the pleasure of working on.       &lt;br /&gt;      &lt;br /&gt;On the flip side, how many of us have been on teams where we’ve been handed a whole laundry list of “best practices” we &lt;strong&gt;must&lt;/strong&gt; follow and have found those to be the most miserable, ineffective teams we’ve ever worked on? How does this make sense when we’re talking &lt;strong&gt;proven &lt;/strong&gt;&lt;strong&gt;practices &lt;/strong&gt;that are considered the &lt;strong&gt;best&lt;/strong&gt; our industry has to offer? And I would say they were doomed from the start when someone decided they had so little respect for the team that they felt the need to &lt;em&gt;dictate&lt;/em&gt; those best practices to us rather than giving us goals and training and having enough respect for us, the team, to find our &lt;em&gt;own&lt;/em&gt; best practices.       &lt;br /&gt;      &lt;br /&gt;And when I think back to that great startup, that’s exactly how it was. Sure, the goals were &lt;strong&gt;out there&lt;/strong&gt; – seemingly impossible pipe dreams. &lt;a href="http://lh4.ggpht.com/_dkYqgGG4VVU/SfSWTKUjouI/AAAAAAAAAhA/XOb5-ISieX4/s1600-h/Soylent%20Green.jpg"&gt;&lt;img title="It&amp;#39;s People!" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin-left: 0px; margin-right: 0px; border-right-width: 0px" height="244" alt="It&amp;#39;s People!" src="http://lh4.ggpht.com/_dkYqgGG4VVU/SfSWTwowZGI/AAAAAAAAAhE/tiKYTyH4aNo/Soylent%20Green_thumb.jpg?imgmax=800" width="244" align="left" border="0" /&gt;&lt;/a&gt;But we were given time and space to learn what we needed, and the autonomy to figure the best way to achieve those goals on our own. That, and a wonderful, brilliant set of people, and we were unstoppable.       &lt;br /&gt;      &lt;br /&gt;There’s a lot of recipes for successful teams in &lt;em&gt;Beautiful Teams. &lt;/em&gt;But for me, personally, I can’t help but think the #1 factor – the thing that trumps all else – is simple &lt;strong&gt;&lt;span style="color: #6633ff"&gt;respect&lt;/span&gt;.&lt;/strong&gt; And it is a wonder that we put so much time and energy into buying the right books, going to the right conferences, reading the right blogs if we’re going to ignore this most vital component of software development. Just like Soylent Green, that secret ingredient -- &lt;span style="color: #ff0000"&gt;&lt;em&gt;It’s people!&lt;/em&gt;&lt;/span&gt;       &lt;br /&gt;      &lt;br /&gt;&lt;strong&gt;What was the best team you ever worked on? What about the worst? What do you think made them so?&lt;/strong&gt;      &lt;br /&gt;      &lt;br /&gt;      &lt;br /&gt;&lt;strong&gt;&lt;font color="#6633ff"&gt;Update:&lt;/font&gt; &lt;/strong&gt;Abbot of Unreason answers these with his own stories of beautiful teams in &lt;a title="Abbot of Unreason: Coding Cats" href="http://theabbotofunreason.blogspot.com/2009/04/coding-cats.html"&gt;Coding Cats&lt;/a&gt;. Check it out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501180114730436648-1223441011142869989?l=www.thehackerchickblog.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=Bj4Il6jKT_o:TfghV-XBB1k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=Bj4Il6jKT_o:TfghV-XBB1k:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=Bj4Il6jKT_o:TfghV-XBB1k:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=Bj4Il6jKT_o:TfghV-XBB1k:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?i=Bj4Il6jKT_o:TfghV-XBB1k:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=Bj4Il6jKT_o:TfghV-XBB1k:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheHackerChickBlog/~4/Bj4Il6jKT_o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thehackerchickblog.com/feeds/1223441011142869989/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thehackerchickblog.com/2009/04/beautiful-teams.html#comment-form" title="20 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/1223441011142869989?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/1223441011142869989?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheHackerChickBlog/~3/Bj4Il6jKT_o/beautiful-teams.html" title="Beautiful Teams" /><author><name>abby</name><uri>http://www.blogger.com/profile/14805958673888992905</uri><email>haxrchick@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02745342225111277233" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">20</thr:total><feedburner:origLink>http://www.thehackerchickblog.com/2009/04/beautiful-teams.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0INQno6fCp7ImA9WxNRF0U.&quot;"><id>tag:blogger.com,1999:blog-7501180114730436648.post-5841339361433200646</id><published>2009-03-02T10:30:00.013-05:00</published><updated>2009-09-12T17:06:33.414-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-12T17:06:33.414-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="iterative" /><category scheme="http://www.blogger.com/atom/ns#" term="collaboration" /><category scheme="http://www.blogger.com/atom/ns#" term="management" /><category scheme="http://www.blogger.com/atom/ns#" term="scrum" /><title>Scrum: A Framework for (Finding) Failure</title><content type="html">&lt;img title="Scrumbut!" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin-left: 0px; margin-right: 0px; border-right-width: 0px" height="204" alt="Scrumbut!" src="http://lh3.ggpht.com/_dkYqgGG4VVU/Saq6RkYeLbI/AAAAAAAAAgo/YxxHPQ5whBc/Rugby%20Pileup%205%5B6%5D.jpg?imgmax=800" width="302" align="left" border="0" /&gt;&lt;a title="Ken Schwaber: Scrum Alliance Profile" href="http://www.scrumalliance.org/profiles/7-ken-schwaber" target="_blank"&gt;Ken Schwaber&lt;/a&gt;, co-developer of Scrum, just gave an interesting &lt;a title="Boston Agile: Ken Schwaber on Scrum" href="http://www.newtechusa.com/agileboston/previous/20090225.htm" target="_blank"&gt;talk&lt;/a&gt; at the &lt;a title="Agile Boston" href="http://www.newtechusa.com/agileboston/default.asp" target="_blank"&gt;Agile Project Leaders Network&lt;/a&gt;. Scrum, he explained, is not a methodology, but a &lt;em&gt;framework&lt;/em&gt; for developing complex products.   &lt;br /&gt;  &lt;br /&gt;The thing about complexity is that the more of it we have, the less likely it is that an external entity can dictate our way to success. There are just way too many variables and too many unknowns. Instead, what we need is a safe, supportive environment in which the team can generate ideas to dynamically deal with this complexity.   &lt;br /&gt;  &lt;br /&gt;Scrum serves as a container for this environment. It’s not a methodology, it doesn’t tell us &lt;strong&gt;what&lt;/strong&gt; to do (we still have to figure that part out). Instead, it exposes the weaknesses and, dare I say, failures in &lt;strong&gt;how&lt;/strong&gt; we’re doing it.   &lt;br /&gt;&lt;a name="more"&gt;&lt;/a&gt;&lt;center&gt;&lt;em&gt;&lt;font color="#ff0000"&gt;Scrum is not going to solve your problems, it’s just going to make them in-your-face obvious, every day.&lt;/font&gt;&lt;/em&gt;&lt;/center&gt;   &lt;br /&gt;&amp;quot;Do you have a mother-in-law?&amp;quot; Ken asks one of the men at the session.&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt; &amp;quot;Of course,&amp;quot; the man laughs. &amp;quot;Now imagine that your mother-in-law believed her daughter could do better,&amp;quot; Ken proposes. &amp;quot;And then imagine that she moved in with you. That’s what Scrum is like.&amp;quot;     &lt;br /&gt;    &lt;br /&gt;You see, the other thing about complexity is that it’s &lt;em&gt;really hard&lt;/em&gt; (as a customer of mine recently reminded me). No matter how smart we are, we’re still going to get &lt;em&gt;some&lt;/em&gt; things wrong – either because we misunderstood, or the conditions of success changed, or just because that’s what it means to be human rather than a machine. And so which is more helpful? A process that pats us on the back and tells us everything is going to be &lt;em&gt;just fine&lt;/em&gt; (see, it says so right here in the plan!)? Or one that provides us with immediate feedback when we get something wrong?     &lt;br /&gt;    &lt;br /&gt;Think of the &lt;font color="#ff0000"&gt;red&lt;/font&gt; &lt;font color="#ff0000"&gt;x&lt;/font&gt;’s in our IDEs that show us errors before we even request a compile. Or, the &lt;font color="#ff0000"&gt;squiggly red underlines&lt;/font&gt; letting us know that &amp;quot;squigly&amp;quot; is misspelled (it has 2 g’s). It may sound counterintuitive, but if we can be notified of what’s wrong before we even think to ask; in a simple, non-intrusive manner, it allows us to to correct problems so easily that we hardly have to stop and think about them. Before those errors can domino out to impact other, larger things that are harder to fix. Before incorrect assumptions can kick off a trail of bad decisions. Before they grow to be complex problems in and of themselves that require massive amounts of rework and frustration.     &lt;br /&gt;    &lt;br /&gt;Our goal is not to avoid all errors in software development (the mere act of creating new things &lt;strong&gt;requires&lt;/strong&gt; a process of trial &amp;amp; error). But rather to spot them as quickly as possible, before they become a problem. Scrum is not as automated as our IDEs or text editors. But then, building software is a lot more complex then just banging out code or documentation. It requires &lt;em&gt;really hard&lt;/em&gt; things like understanding what the customer wants. Which, of course, is never the same as what they &lt;em&gt;say &lt;/em&gt;they want. So, there’s a bit of mind reading involved, which can be rather challenging. And then there’s making sure our code works. Not just on its own, but also with &lt;em&gt;other people’s &lt;/em&gt;code, which of course is never as good as our own, so that’s a challenge as well.     &lt;br /&gt;    &lt;br /&gt;So, we have these really hard parts in software development – and they’re mostly the parts that involve other people. And since we can’t just pull out our red sharpies and go around marking red X’s on people’s foreheads when they do things we don’t like, we have to find a different approach.&lt;img title="RugbyScrum" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin-left: 0px; margin-right: 0px; border-right-width: 0px" height="210" alt="RugbyScrum" src="http://lh6.ggpht.com/_dkYqgGG4VVU/Sarts9qcb7I/AAAAAAAAAgw/y3v_w4XNpws/RugbyScrum%5B7%5D.jpg?imgmax=800" width="254" align="right" border="0" /&gt; In Scrum, we do this by putting a framework into place that makes detection of errors as automatic as possible:     &lt;br /&gt;    &lt;br /&gt;1. Scrum forces us all to work on the same pieces at the same time until each piece is completed to everyone’s satisfaction. This is done quickly and efficiently – the pieces are time boxed to fit into sprints that are, at most, 30 days in length. So, if there is an error or misunderstanding (you wanted the software to do &lt;em&gt;what?!&lt;/em&gt;), it will be caught &lt;em&gt;while &lt;/em&gt;we are working on the item. Each sprint produces production ready software, so we can move forward with confidence, knowing that we can reliably build upon what’s already in place.     &lt;br /&gt;    &lt;br /&gt;2. We can’t automate error detection in human communication and understanding, so Scrum builds in human inspections at regular intervals that are designed to catch these types of errors as quickly &amp;amp; non-intrusively as possible:     &lt;ul&gt;     &lt;li&gt;Each day, we inspect our progress towards meeting our commitments in the &lt;a title="The Daily Scrum" href="http://www.mountaingoatsoftware.com/daily-scrum" target="_blank"&gt;Daily Scrum&lt;/a&gt;. &lt;/li&gt;      &lt;li&gt;Each sprint, our customers inspect what we’ve developed against the product they want at the &lt;a title="Sprint Review Meeting" href="http://www.mountaingoatsoftware.com/sprint-review-meeting" target="_blank"&gt;Sprint Reviews&lt;/a&gt;. &lt;/li&gt;   &lt;/ul&gt; I say non-intrusively because in Scrum, these inspections are done as such a natural part of the process that they become second nature, like those red squiggly underlines (&lt;em&gt;hey, something is wrong here if you’d like to fix it&lt;/em&gt;).     &lt;br /&gt;    &lt;br /&gt;And so, Scrum’s benefit is &lt;strong&gt;not&lt;/strong&gt; that it tells us how to do things. But, rather, that it recognizes that only the &lt;em&gt;team&lt;/em&gt; is in position to adapt and respond quickly enough to the unknowns and changing variables in order to drive the product to success. Scrum instead focuses on ensuring that feedback is always available to keep the team on track; moving in the right direction, closer and closer to their target.     &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;--&lt;/strong&gt;     &lt;br /&gt;&lt;strong&gt;Ken says when people do Scrumbut (&lt;em&gt;We’re using Scrum, but… we don’t do X)&lt;/em&gt;, the &amp;quot;but&amp;quot; often removes the parts of Scrum that expose problems (&lt;em&gt;we’re doing Scrum, but… we don’t do Daily Scrums every day&lt;/em&gt;), thus defeating the purpose of Scrum. Does your project do Scrumbut? Does your but negate your Scrum?&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501180114730436648-5841339361433200646?l=www.thehackerchickblog.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=mpAMUtNsKOI:hDphPx2pJkE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=mpAMUtNsKOI:hDphPx2pJkE:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=mpAMUtNsKOI:hDphPx2pJkE:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=mpAMUtNsKOI:hDphPx2pJkE:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?i=mpAMUtNsKOI:hDphPx2pJkE:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=mpAMUtNsKOI:hDphPx2pJkE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheHackerChickBlog/~4/mpAMUtNsKOI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thehackerchickblog.com/feeds/5841339361433200646/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thehackerchickblog.com/2009/03/scrum-framework-for-finding-failure.html#comment-form" title="14 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/5841339361433200646?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/5841339361433200646?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheHackerChickBlog/~3/mpAMUtNsKOI/scrum-framework-for-finding-failure.html" title="Scrum: A Framework for (Finding) Failure" /><author><name>abby</name><uri>http://www.blogger.com/profile/14805958673888992905</uri><email>haxrchick@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02745342225111277233" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">14</thr:total><feedburner:origLink>http://www.thehackerchickblog.com/2009/03/scrum-framework-for-finding-failure.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UBR3gyfCp7ImA9WxNUFE8.&quot;"><id>tag:blogger.com,1999:blog-7501180114730436648.post-3410993956979809282</id><published>2009-02-14T14:00:00.003-05:00</published><updated>2009-11-05T08:54:16.694-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-05T08:54:16.694-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="iterative" /><category scheme="http://www.blogger.com/atom/ns#" term="emergent design" /><category scheme="http://www.blogger.com/atom/ns#" term="tdd" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="Bob Martin" /><title>Craftsmanship and Ethics</title><content type="html">&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="Japanese swordmaker practicing his craft" border="0" alt="Japanese Swordmaker" align="left" src="http://lh5.ggpht.com/_dkYqgGG4VVU/SZcTIiGLikI/AAAAAAAAAgI/-i81cQcxN-E/TraditionalJapaneseSwordMaking6.jpg?imgmax=800" width="235" height="204" /&gt;   &lt;p&gt;Bob Martin’s &lt;a title="Bob Martin&amp;#39;s Presentation on Craftsmanship and Ethics (InfoQ)" href="http://www.infoq.com/presentations/craftmanship-ethics" target="_blank"&gt;Craftsmanship and Ethics&lt;/a&gt; presentation is now freely available. Think of it as a 45 minute video on the key principles of agile programming. Or, if you’d prefer, a tutorial on how to become a professional developer.&lt;/p&gt;  &lt;p&gt;As developers, our main product is our code. And, so, to be considered professionals, we must craft our product (code) in a disciplined manner. We should always, for example, check in the code a little cleaner then we found it so that our systems are always improving (as opposed to degrading). However, in this industry, one of our biggest problems is that we almost always check it in &lt;strong&gt;worse &lt;/strong&gt;then we found it. Uncle Bob jokes,&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;&lt;em&gt;“It’s difficult to call ourselves professionals when our primary outcome is a huge, stinking mess!”&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;quot;How many times have you been significantly slowed down by bad code? Martin asks and we can be sure all programmer &lt;a title="Craftsmanship and Ethics - Robert Martin presentation on InfoQ" href="http://www.infoq.com/presentations/craftmanship-ethics" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="Robert Martin presentation on Craftsmanship and Ethics" border="0" alt="Robert Martin presentation on Craftsmanship and Ethics" align="right" src="http://lh4.ggpht.com/_dkYqgGG4VVU/SZcTJELgOmI/AAAAAAAAAgM/vhFsMMdbWAI/CraftsmanshipAndEthics4.jpg?imgmax=800" width="244" height="163" /&gt;&lt;/a&gt;hands went up. &lt;strong&gt;“Then why did you write it?”&lt;/strong&gt; he asks. There is laughter because of the truth in his question. We have all been slowed by bad code and yet, we continue to allow bad code to be written on our projects. And why? Because we didn’t have &lt;em&gt;time&lt;/em&gt; to write it well? &lt;/p&gt;  &lt;p&gt;We fool ourselves into thinking we can defer the problems of bad code until later. But the problem is that the slow down is not something that occurs months from now, it’s &lt;strong&gt;immediate&lt;/strong&gt;. “How many of you have stared at code you wrote &lt;em&gt;2 hours ago&lt;/em&gt; and thought, ‘what the hell does that &lt;strong&gt;do&lt;/strong&gt;?!'”&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;&lt;em&gt;“Bad code is not something that slows someone else down months from now. It slows us down immediately. We must not write bad code. Period. This is a fundamental issue of professional behavior.”&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;And, so, Uncle Bob presents us with a number of principles we can follow if we want to become professionals. In doing so, he offers justification behind many of the agile practices – iterative development, pair programming, TDD, avoiding Big Up Front Designs (only Uncle Bob likes to call them “Turgid, Viscous Architectures”). And, what I think is arguably one of the most important lessons of agile, which is that &lt;font color="#6633ff"&gt;&lt;strong&gt;“the only way to go fast is to go well.”&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501180114730436648-3410993956979809282?l=www.thehackerchickblog.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=EVhTFfLBoyI:aBg5N3C3KpY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=EVhTFfLBoyI:aBg5N3C3KpY:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=EVhTFfLBoyI:aBg5N3C3KpY:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=EVhTFfLBoyI:aBg5N3C3KpY:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?i=EVhTFfLBoyI:aBg5N3C3KpY:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=EVhTFfLBoyI:aBg5N3C3KpY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheHackerChickBlog/~4/EVhTFfLBoyI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thehackerchickblog.com/feeds/3410993956979809282/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thehackerchickblog.com/2009/02/craftsmanship-and-ethics.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/3410993956979809282?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/3410993956979809282?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheHackerChickBlog/~3/EVhTFfLBoyI/craftsmanship-and-ethics.html" title="Craftsmanship and Ethics" /><author><name>abby</name><uri>http://www.blogger.com/profile/14805958673888992905</uri><email>haxrchick@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02745342225111277233" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://www.thehackerchickblog.com/2009/02/craftsmanship-and-ethics.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UCQ30-fyp7ImA9WxNRF0U.&quot;"><id>tag:blogger.com,1999:blog-7501180114730436648.post-8449028870930305</id><published>2009-02-03T09:00:00.009-05:00</published><updated>2009-09-12T15:54:22.357-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-12T15:54:22.357-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="Bob Martin" /><title>Religious War #48,293: Single Vs. Multiple Returns</title><content type="html">&lt;p&gt;A few months ago, a reader emailed me for my views on single versus multiple return statements in a method…&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="Nobody expects the Spanish Inquisition" border="0" alt="inquisition-wheel" align="right" src="http://lh4.ggpht.com/_dkYqgGG4VVU/SYe3uMHcGfI/AAAAAAAAAgE/3Gm_Hr92_hg/inquisition-wheel_thumb%5B20%5D.jpg?imgmax=800" width="234" height="233" /&gt;&lt;font color="#6633ff"&gt;&lt;em&gt;&amp;quot;What's your take on single-vs-multiple returns in a method?&lt;/em&gt;      &lt;p&gt;Personally, I don't mind multiple returns. It often makes code more readable, less if-nesting, etc. But it has almost become a war here at my workplace, with a few people saying it's “bad programming&amp;quot; to have more than one exit from a method.”&lt;/p&gt;   &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;And I thought – wow, are people really still fighting over this? But then, I'm reviewing some code with an otherwise totally competent coworker the other day and he mentions how much he dislikes methods with multiple returns. Huh!&lt;/p&gt;  &lt;p&gt;&lt;a name="more"&gt;&lt;/a&gt;So, I thought I'd post my response and see what others think.&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt;   &lt;p&gt;&amp;quot;I believe if you have a function that, in certain scenarios, completes all of it's required processing before it's reached the end of the function block, then by failing to return at that point, you're:&lt;/p&gt;    &lt;p&gt;a) risking the chance that additional processing will incorrectly occur, and     &lt;br /&gt;b) forced to add if/else nesting to ensure your function's additional processing does not occur for this scenario.&lt;/p&gt;    &lt;p&gt;As you eluded to, the additional nesting of if/else blocks makes the code harder to read and more difficult to maintain, thus increasing the likelihood of errors and the amount of effort to maintain it.&lt;/p&gt;    &lt;p&gt;But the worst part is that if you're setting a value and you choose - even after setting the appropriate value for this scenario - to keep processing, you risk inadvertently changing the value from the right one to an incorrect one. Honestly, this is how I was taught to code (always prefer a return an else{}), so I've never really understood the justification to continue processing after you're – well - &lt;strong&gt;done&lt;/strong&gt;!&amp;quot;&lt;/p&gt;    &lt;p&gt;It's like continuing to loop through a list after you've already found the value you were looking for. What's the point?&lt;/p&gt;    &lt;p&gt;Bob Martin also addresses this in &lt;a title="Clean Code" href="http://haxrchick.blogspot.com/2008/08/clean-code.html" target="_blank"&gt;Clean Code&lt;/a&gt;, stating that while it was good practice at one point, that doesn't mean we should just blindly enforce the rules of structured program in today's object oriented world:&lt;/p&gt;    &lt;p&gt;&lt;font color="#6633ff"&gt;&amp;quot;Some programmers follow &lt;a title="Edsger Dijkstra" href="http://en.wikipedia.org/wiki/Edsger_W._Dijkstra" target="_blank"&gt;Edsger Dijkstra&lt;/a&gt;'s rules of structured programming. Dijkstra said that every function, and every block within a function, should have one entry and one exit. Following these rules means there should only be one return statement in a function, no break or continue statements in a loop...&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#6633ff"&gt;While we are sympathetic to the goals and disciplines of structured programming, those rules serve little benefit when functions are very small. It is only in larger functions that such rules provide significant benefit. So, if you keep your functions small, then the occasional multiple return, break, or continue statement does no harm and can sometimes even be more expressive then the single-entry, single-exit rule.&amp;quot;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;What do YOU think about multiple returns? Good programming practice or devil spawn?&lt;/strong&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501180114730436648-8449028870930305?l=www.thehackerchickblog.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=yx9pVcTdgZA:7XqJKGOFs0g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=yx9pVcTdgZA:7XqJKGOFs0g:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=yx9pVcTdgZA:7XqJKGOFs0g:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=yx9pVcTdgZA:7XqJKGOFs0g:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?i=yx9pVcTdgZA:7XqJKGOFs0g:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=yx9pVcTdgZA:7XqJKGOFs0g:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheHackerChickBlog/~4/yx9pVcTdgZA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thehackerchickblog.com/feeds/8449028870930305/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thehackerchickblog.com/2009/02/religious-war-48293-single-vs-multiple.html#comment-form" title="11 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/8449028870930305?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/8449028870930305?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheHackerChickBlog/~3/yx9pVcTdgZA/religious-war-48293-single-vs-multiple.html" title="Religious War #48,293: Single Vs. Multiple Returns" /><author><name>abby</name><uri>http://www.blogger.com/profile/14805958673888992905</uri><email>haxrchick@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02745342225111277233" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">11</thr:total><feedburner:origLink>http://www.thehackerchickblog.com/2009/02/religious-war-48293-single-vs-multiple.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UBR3gyfCp7ImA9WxNUFE8.&quot;"><id>tag:blogger.com,1999:blog-7501180114730436648.post-687847757980280046</id><published>2009-01-22T01:55:00.012-05:00</published><updated>2009-11-05T08:54:16.694-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-05T08:54:16.694-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="iterative" /><category scheme="http://www.blogger.com/atom/ns#" term="management" /><category scheme="http://www.blogger.com/atom/ns#" term="communication" /><title>The (Schedule) Games Managers Play</title><content type="html">&lt;p&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="TV Game Show: What&amp;#39;s My Line?" border="0" alt="TV Game Show: What&amp;#39;s My Line?" align="left" src="http://lh5.ggpht.com/_dkYqgGG4VVU/SXizioaKo5I/AAAAAAAAAe4/mpCHh4uiSEo/whats-my-line%5B6%5D.jpg?imgmax=800" width="254" height="179" /&gt;I went to see &lt;a title="Johanna Rothman" href="http://www.jrothman.com/" target="_blank"&gt;Johanna Rothman&lt;/a&gt; speak last week at the &lt;a title="Software Quality Group of New England" href="http://www.swqual.com/SQGNE/main.html" target="_blank"&gt;Software Quality Group of New England&lt;/a&gt;. I like Johanna because, as an expert in management, she can spot a line of management B.S. from a mile away.&lt;/p&gt;  &lt;p&gt;I don't have this skill. As a coder, my special power is spotting crappy code. If another developer shows me crappy code, I can describe 7 ways to Sunday why it's a bad idea and 10 ways to fix it. But management B.S., that's harder. Kind of like those game shows that turn seemingly intelligent folks into complete idiots... that's pretty much the effect management B.S. has on me. I will actually sit there, stupefied, trying to &lt;em&gt;reason some sense&lt;/em&gt; out of what they tell me. &lt;font color="#ff0000"&gt;&amp;quot;Well, of &lt;em&gt;course&lt;/em&gt; there's no time for us to do things the right way. BUT, if you can just deliver this 6 month project in a 3 month period, that leaves you a whole 3 extra months to clean things up!&amp;quot;&lt;/font&gt; Uhhhhh. &lt;/p&gt;  &lt;p&gt;So, I liked Johanna's presentation, &lt;a title="Johanna&amp;#39;s Schedule Games Presentation" href="http://www.swqual.com/SQGNE/presentations/2008-09/January%20Rothman.pdf" target="_blank"&gt;Schedule Games: Recognizing and Avoiding the Games We Play&lt;/a&gt;, because it makes me think there might be hope for us managerially-challenged developers yet.&lt;/p&gt;&lt;a name='more'&gt;&lt;/a&gt;    &lt;p&gt;Here's the first game she described - stop me if this sounds familiar:&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;Manager:&lt;/strong&gt; How long will this project take?      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;You&lt;/strong&gt;: 3 months      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;Manager:&lt;/strong&gt; Can you do it faster?      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;You&lt;/strong&gt;: Well, maybe... if we got another developer we might be able to finish it in 2 1/2 months      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;Manager:&lt;/strong&gt; Can you do it faster?      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;You&lt;/strong&gt;: Um, well, maybe, if everything goes perfectly, it's possible it would come in a few days earlier      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;Manager&lt;/strong&gt;: Can you do it faster?      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;You&lt;/strong&gt;: No.      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;Manager&lt;/strong&gt;: Well, what can you give me in 1 month?&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;This, my friend, is the &lt;strong&gt;&lt;font color="#6633ff"&gt;Bring Me a Rock&lt;/font&gt;&lt;/strong&gt; schedule game and it has been the cause of many a management cursing. &lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Fighting the Bull" border="0" alt="Fighting the Bull" align="right" src="http://lh5.ggpht.com/_dkYqgGG4VVU/SXgYeq-2JFI/AAAAAAAAAe8/ei_OrEBxc_M/bull-matador%5B4%5D.jpg?imgmax=800" width="244" height="210" /&gt;&lt;/p&gt;    &lt;p&gt;Her suggestion: turn the conversation around. At that very first &amp;quot;can you do it faster?&amp;quot; explain to the manager what they &lt;strong&gt;get&lt;/strong&gt; for that 3 months. And then, if they continue to ask, explain what they'd &lt;strong&gt;get&lt;/strong&gt; for 1 month. Features cost time. The more time you're given, the more features you provide. &lt;/p&gt;    &lt;p&gt;Somehow, while we all understand that side of the equation, we get kind of stupid on the flip side and decide that while more time == more features, less time == we just have to find a way to go faster. &lt;/p&gt;    &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;Bzzzzzzt!&lt;/font&gt;&lt;/strong&gt; Wrong answer.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Less time == less features&lt;/strong&gt;, no matter how optimistic we happen to be feeling at the moment. So, instead of &amp;quot;well, maybe we can go faster&amp;quot;, explain what &lt;strong&gt;complete, quality, production ready&lt;/strong&gt; functionality can be delivered if the time is chopped in 1/2 or 1/3rd. I know, this can feel like an impossible task if you're thinking in terms of complex functionality that requires months worth of work to complete. So instead, think in terms of small features or &lt;a title="User Stories" href="http://www.agilemodeling.com/artifacts/userStory.htm" target="_blank"&gt;user stories&lt;/a&gt; - what &lt;em&gt;complete&lt;/em&gt; user stories could you deliver in that time? Specified, designed, developed, tested, production-level quality stories. What stories can you complete in 1 month? 2 months? 3 months? Ask the manager for a prioritized list so you can work them in priority order and get through as many as you can within the time period given. &lt;/p&gt;    &lt;p&gt;Whereas in the first scenario, you've hidden the downside to less time (&amp;quot;we'll just work faster&amp;quot;) and so, of course, there is nothing but upside to the manager in asking for less and less time. In the new scenario, you've made the tradeoffs visible to the manager and you've given him control to not only select the balance that makes the most sense from a business perspective, but also to prioritize the order that will provide the most value. Smart developer, smart manager.&lt;/p&gt;    &lt;p&gt;Of course, as we see, it takes a bit of work to get to the &lt;em&gt;smart&lt;/em&gt; side of things. Here's a few more games Johanna described - let me know if you've heard them before: &lt;/p&gt;    &lt;p&gt;&lt;em&gt;&lt;em&gt;&lt;em&gt;&lt;em&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="Ring the bell and Name That Tune!" align="left" src="http://lh6.ggpht.com/_dkYqgGG4VVU/SXizjQZQXxI/AAAAAAAAAfA/F9E6fA49qyw/Name%20That%20Tune%5B10%5D.jpg?imgmax=800" width="204" height="248" /&gt;&lt;/em&gt;&lt;/em&gt;&lt;/em&gt;We've never done anything like this and we totally don't have the experience/resources/training/knowledge for it, but that's okay because we really think we can do it!&lt;/em&gt; -- &lt;strong&gt;&lt;font color="#6633ff"&gt;Hope is our Most Important Strategy&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;You may think it's impossible, but I have&lt;/em&gt; &lt;strong&gt;faith&lt;/strong&gt; &lt;em&gt;in you, I know you'll find a way!&lt;/em&gt;      &lt;br /&gt;-- &lt;strong&gt;&lt;font color="#6633ff"&gt;Queen of Denial&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;Even though it has absolutely no relation whatsoever to our product schedule, we just HAVE to release something on this particular date because &amp;lt;insert silly reason here - e.g., &amp;quot;It's the boss's birthday!&amp;quot;&amp;gt;&lt;/em&gt; -- &lt;strong&gt;&lt;font color="#6633ff"&gt;Happy Date&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;Even though you had absolutely no input into this schedule, this is &lt;/em&gt;&lt;strong&gt;THE SCHEDULE&lt;/strong&gt;&lt;em&gt; and therefore, you will be held accountable for it.&lt;/em&gt; -- &lt;strong&gt;&lt;font color="#6633ff"&gt;Schedule == Commitment&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;If you're like me, you hear these and &lt;strong&gt;&lt;font color="#ff0000"&gt;panic&lt;/font&gt;&lt;/strong&gt;. &lt;em&gt;Oh my God, how will I ever make it work?!&lt;/em&gt; And, like the &amp;quot;we'll just go faster&amp;quot; answer, all this does is to force the team to shoulder an unreasonable burden while completely hiding the problem from the manager. No downside to manager, so manager keeps pushing. Stupid manager, pissed developer.&lt;/p&gt;    &lt;p&gt;So what do we do instead? We start by &lt;em&gt;recognizing&lt;/em&gt; these for what they are. Recognize that they're &lt;strong&gt;not&lt;/strong&gt; reasonable. Recognize that it's the managers job to make the project &lt;em&gt;successful, &lt;/em&gt;not doomed to failure. And, recognize that in all likelihood, the manager really does &lt;em&gt;want &lt;/em&gt;to make the project successful - so helping them once again become smart manager by presenting options that &lt;em&gt;can&lt;/em&gt; work.&lt;/p&gt;    &lt;p&gt;Want to take on a project we know nothing about? Let's not just blindly assume we know all the answers up front and just &lt;strong&gt;Hope&lt;/strong&gt; everything will go right (read: Waterfall). Instead, let's do some short, time boxed iterations that run through a &amp;quot;Hello, World&amp;quot; equivalent of the project to try to gather more information about what the work will entail and what issues and questions we'll need to address moving forward. Let's be flexible and follow a process that can accommodate the continual changes we're going to run into as we learn more about this new area.&lt;/p&gt;    &lt;p&gt;Got a flaky senior executive that likes asking for releases on random dates? Work in short iterations that always result in production-ready product so that you can be ready to deliver at almost any time.&lt;/p&gt;    &lt;p&gt;I don't know why manager's play games. Of course, developers play games too. Maybe its just our knee jerk reaction to the ridiculous levels of complexity we have to deal with. It seems so much easier to &lt;em&gt;Deny&lt;/em&gt; the facts, declare a &lt;em&gt;Happy Date&lt;/em&gt; and &lt;em&gt;Hope&lt;/em&gt; beyond hope that it will work because the &lt;em&gt;Schedule&lt;/em&gt; says it will. But then, of course, there's reality...&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;What schedule games do you play on your projects? And how do you deal with them?&lt;/strong&gt;&lt;/p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501180114730436648-687847757980280046?l=www.thehackerchickblog.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=8TKnHI-eoK4:R61rOdSOlOs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=8TKnHI-eoK4:R61rOdSOlOs:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=8TKnHI-eoK4:R61rOdSOlOs:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=8TKnHI-eoK4:R61rOdSOlOs:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?i=8TKnHI-eoK4:R61rOdSOlOs:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=8TKnHI-eoK4:R61rOdSOlOs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheHackerChickBlog/~4/8TKnHI-eoK4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thehackerchickblog.com/feeds/687847757980280046/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thehackerchickblog.com/2009/01/schedule-games-managers-play.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/687847757980280046?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/687847757980280046?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheHackerChickBlog/~3/8TKnHI-eoK4/schedule-games-managers-play.html" title="The (Schedule) Games Managers Play" /><author><name>abby</name><uri>http://www.blogger.com/profile/14805958673888992905</uri><email>haxrchick@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02745342225111277233" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://www.thehackerchickblog.com/2009/01/schedule-games-managers-play.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UBR3gyfSp7ImA9WxNUFE8.&quot;"><id>tag:blogger.com,1999:blog-7501180114730436648.post-2455866905421314870</id><published>2009-01-12T17:43:00.016-05:00</published><updated>2009-11-05T08:54:16.695-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-05T08:54:16.695-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="lean" /><category scheme="http://www.blogger.com/atom/ns#" term="management" /><title>Why You Should Let Your Developers Surf</title><content type="html">&lt;p&gt;A lot of managers don't think twice about every day things that slow down developers...&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="If everybody had an ocean, across the U.S.A...." border="0" alt="If everybody had an ocean, across the U.S.A...." align="left" src="http://lh4.ggpht.com/_dkYqgGG4VVU/SWvHhGvIqQI/AAAAAAAAAeg/kYTw5AL2mms/Beach%20Party%5B19%5D.jpg?imgmax=800" width="224" height="231" /&gt;&lt;/p&gt;  &lt;p&gt;• Slow or unstable development machines    &lt;br /&gt;• Delays from business folks in clarifying requirements     &lt;br /&gt;• Little to no feedback on the product until it's already &amp;quot;done&amp;quot;     &lt;br /&gt;• Loss of focus from repeated interruptions&lt;/p&gt;  &lt;p&gt;And yet, these same managers will often go out of their way to make sure the developers are busy 100% of the time in the name of &amp;quot;getting things done faster.&amp;quot; It's a little counterintuitive if you stop and think about it. As any good developer knows, optimizing a part of your system that isn't the bottleneck doesn't actually speed anything up. In fact, it can actually do more harm then good as optimized code can be more difficult to understand and to work with.&lt;/p&gt;  &lt;p&gt;But, anyway, what are those developers so busy working on if they don't have the information &amp;amp; feedback they need to build the product correctly? Whenever this happens on my projects, all it does is muddy up the code for the rest of us with unnecessary or incorrect functionality that degrades quality and slows us all down. Sort of like Wally's anti-work...&lt;/p&gt; &lt;center&gt;   &lt;p&gt;&lt;em&gt;&lt;font color="#ff0000"&gt;&amp;quot;This week I did equal amounts of work and anti-work.          &lt;br /&gt;For every unit of work I did, I generated an equal amount of unnecessary work for co-workers.           &lt;br /&gt;I figure I broke even.&amp;quot;&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; &lt;/center&gt;&lt;a name='more'&gt;&lt;/a&gt;   &lt;p&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Wally and Dilbert, I did NOTHING today and still got paid" border="0" alt="Wally and Dilbert, I did NOTHING today and still got paid" align="right" src="http://lh6.ggpht.com/_dkYqgGG4VVU/SWvHhYelx0I/AAAAAAAAAek/dVqLkxomueM/Wally%5B6%5D.jpg?imgmax=800" width="204" height="204" /&gt;In &lt;a title="Alan Shalloway" href="http://www.netobjectives.com/bio-alan-shalloway" target="_blank"&gt;Alan Shalloway's&lt;/a&gt; &lt;a href="http://www.netobjectives.com/courses/lean-online-training" target="_blank"&gt;Lean Online Training&lt;/a&gt;, we're learning about the &lt;strong&gt;Myth of Optimization Through Decomposition,&lt;/strong&gt; which states that trying to go faster by optimizing each individual piece &lt;strong&gt;does not speed up the system&lt;/strong&gt;.&lt;/p&gt;    &lt;p&gt;In the physical world of manufacturing, attempting to run every single machine at 100% utilization results in large piles of unfinished product just sitting around waiting to get through the next step of the pipeline or for a buyer. These unfinished products incur significant costs in terms of inventory and storage. And, whenever the product line is changed or stopped, whatever is sitting in that pipeline winds up being thrown away. This is why physical operations do best when they use a &lt;a title="Wikipedia: Just In Time" href="http://en.wikipedia.org/wiki/Just-in-time_(business)" target="_blank"&gt;Just In Time&lt;/a&gt; strategy -- creating &lt;strong&gt;only what they need and no more&lt;/strong&gt;. It turns out that operating each machine at 100% utilization is actually a really bad business decision.&lt;/p&gt;    &lt;p&gt;In the world of software development, the parallel to running every machine at 100% utilization is making sure every employee is busy 100% of the time. And, just like in the physical world, this results in large amounts of unfinished works in progress that incur significant costs and risks. Knowledge degrades quickly, requirements get out of date, the feedback loop is delayed so we don’t learn what we’re doing wrong. The result is unfinished, untested, misunderstood, and often flat-out unnecessary code bogging down our product, degrading its quality, and, actually &lt;strong&gt;slowing us down&lt;/strong&gt;. &lt;/p&gt;    &lt;p&gt;• It's difficult implementing a feature that was specified so long ago that no one can remember what it's for.&lt;/p&gt;    &lt;p&gt;• It's hard tracking down an error in code developed so long ago that no one remembers how it was implemented.&lt;/p&gt;    &lt;p&gt;• It's slow adding new features when the software is muddled with unfinished, untested code (that isn't even needed!).&lt;/p&gt;    &lt;p&gt;Thus, Lean teaches us that striving for 100% utilization is &lt;strong&gt;not the answer&lt;/strong&gt;. It doesn't get the product completed any more quickly, and the only thing it creates is &lt;strong&gt;waste&lt;/strong&gt;. &lt;/p&gt;    &lt;p&gt;The only way to go faster is the optimize the &lt;strong&gt;whole&lt;/strong&gt;. In other words, find your bottlenecks -- the things that are slowing down the process, incurring delays, and adding waste -- and remove &lt;strong&gt;those&lt;/strong&gt;. And when you do, a funny thing happens, &lt;strong&gt;it lets your developers work faster&lt;/strong&gt;! They're happier, you're happier, and ultimately the customer is happier.&lt;/p&gt;    &lt;p&gt;&lt;a title="Jeff Sutherland" href="http://jeffsutherland.com/" target="_blank"&gt;Jeff Sutherland&lt;/a&gt; describes this nicely:&lt;/p&gt;    &lt;p&gt;&lt;font color="#6633ff"&gt;&amp;quot;The task then is to refine the code base to better meet customer need. If that is not clear, the programmers should not write a line of code. Every line of code costs money to write and more money to support. &lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#6633ff"&gt;&lt;strong&gt;It is better for the developers to be surfing then writing code that won't be needed&lt;/strong&gt;. &lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#6633ff"&gt;If they write code that ultimately is not used, I will be paying for that code for the life of the system... If they went surfing, they would have fun, and I would have a less expensive system and fewer headaches to maintain.&amp;quot; &lt;/font&gt;&lt;/p&gt;    &lt;p&gt;So let's take their advice and stop wasting our time trying to speed up the things that &lt;strong&gt;are&lt;/strong&gt; working (e.g., writing code against understood requirements). Let's, instead, spend our time minimizing or eliminating the things that &lt;strong&gt;aren't&lt;/strong&gt; working. Our goal should be to spend 100% of our &lt;em&gt;working&lt;/em&gt; time on productive &amp;amp; useful things, rather than to spend 100% of our time working in the Wally fashion of equal parts work and anti-work.&lt;/p&gt;    &lt;p&gt;--      &lt;br /&gt;With thanks to &lt;a title="Alan Shalloway" href="http://www.netobjectives.com/bio-alan-shalloway" target="_blank"&gt;Alan Shalloway&lt;/a&gt; &amp;amp; &lt;a title="NetObjectives" href="http://www.netobjectives.com/" target="_blank"&gt;NetObjectives&lt;/a&gt; for the fantastic free &lt;a href="http://www.netobjectives.com/courses/lean-online-training" target="_blank"&gt;Lean Online Training&lt;/a&gt; they're providing as well as the most excellent chapters of their upcoming book on Lean that they've made available on their web site:&lt;/p&gt;    &lt;p&gt;» &lt;a href="http://www.netobjectives.com/resources/books/lean-software-development" target="_blank"&gt;Lean Software Development: Scaling Agile to the Enterprise&lt;/a&gt; (free online!) by &lt;a href="http://www.netobjectives.com/bio-alan-shalloway"&gt;Alan Shalloway&lt;/a&gt;, &lt;a href="http://www.netobjectives.com/bio-guy-beaver"&gt;Guy Beaver&lt;/a&gt;, &lt;a href="http://www.netobjectives.com/bio-jim-trott"&gt;Jim Trott&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501180114730436648-2455866905421314870?l=www.thehackerchickblog.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=3BUTv0yEkxc:nJHTonSdf2M:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=3BUTv0yEkxc:nJHTonSdf2M:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=3BUTv0yEkxc:nJHTonSdf2M:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=3BUTv0yEkxc:nJHTonSdf2M:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?i=3BUTv0yEkxc:nJHTonSdf2M:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=3BUTv0yEkxc:nJHTonSdf2M:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheHackerChickBlog/~4/3BUTv0yEkxc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thehackerchickblog.com/feeds/2455866905421314870/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thehackerchickblog.com/2009/01/why-you-should-let-your-developers-surf.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/2455866905421314870?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/2455866905421314870?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheHackerChickBlog/~3/3BUTv0yEkxc/why-you-should-let-your-developers-surf.html" title="Why You Should Let Your Developers Surf" /><author><name>abby</name><uri>http://www.blogger.com/profile/14805958673888992905</uri><email>haxrchick@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02745342225111277233" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://www.thehackerchickblog.com/2009/01/why-you-should-let-your-developers-surf.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QFR346fyp7ImA9WxNRF0U.&quot;"><id>tag:blogger.com,1999:blog-7501180114730436648.post-1838485654516916671</id><published>2008-11-12T11:00:00.004-05:00</published><updated>2009-09-12T15:55:16.017-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-12T15:55:16.017-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="tdd" /><category scheme="http://www.blogger.com/atom/ns#" term="management" /><category scheme="http://www.blogger.com/atom/ns#" term="Bob Martin" /><category scheme="http://www.blogger.com/atom/ns#" term="scrum" /><title>Deep Agile - Ya Know, Like Teenage Sex</title><content type="html">&lt;p&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="paradise by the dashboard light" border="0" alt="paradise by the dashboard light" align="right" src="http://lh5.ggpht.com/_dkYqgGG4VVU/SRrnhHZKaUI/AAAAAAAAAeU/Pr_hVK-E2jQ/teensexcar15.jpg?imgmax=800" width="197" height="229" /&gt; Because, apparently, their 30 minute &lt;a title="TDD Smackdown!" href="http://haxrchick.blogspot.com/2008/07/tdd-smackdown.html" target="_blank"&gt;debate on TDD&lt;/a&gt; was insufficient, &lt;a title="Agile Bazaar" href="http://www.agilebazaar.org/" target="_blank"&gt;Agile Bazaar&lt;/a&gt; invited industry leaders &lt;a title="Bob  Martin" href="http://www.objectmentor.com/omTeam/martin_r.html" target="_blank"&gt;Bob Martin&lt;/a&gt; &amp;amp; &lt;a title="Jim Coplien" href="http://www.gertrudandcope.com-a.googlepages.com/jimcoplien" target="_blank"&gt;Jim Coplien&lt;/a&gt; to continue the discussion over an &lt;a title="Deep Agile 2008" href="http://www.agilebazaar.org/DeepAgile2008/DeepAgile2008Agenda.htm" target="_blank"&gt;entire weekend&lt;/a&gt; of old sk00l learning at MIT. And so, as 90 of us gathered to hear them out, they kicked it off by explaining why agile is so damn hard. You see...&lt;/p&gt;  &lt;p align="center"&gt;&lt;font color="#6633ff"&gt;&lt;em&gt;Agile development is like teenage sex.        &lt;br /&gt;Everyone says they're doing it, but only 10% are.         &lt;br /&gt;And those who are -- &lt;/em&gt;ARE DOING IT WRONG.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Don't believe it?    &lt;br /&gt;Take the &lt;a title="Assess your Agility" href="http://cgi.nordija.com/AgileMetrics.cgi" target="_blank"&gt;Agile Machismo test&lt;/a&gt; - industry scores range from &lt;strong&gt;-&lt;/strong&gt;4,000 to about +20.&lt;/p&gt;  &lt;p&gt;And even for those following the practices - what have we learned? According to Coplien, 70% of Scrum implementations fail, pair programming fails 50% of the time, TDD deteriorates our design, on site customers demoralize the customer &lt;em&gt;and&lt;/em&gt; the team, and agile retrospectives have actually been proven to make projects &lt;em&gt;worse&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;Phew! So why do we bother?&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt;   &lt;p&gt;&lt;em&gt;Pan to Uncle Bob... fast forward 15 minutes past the discussion on how the universe was formed...&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;Paying the bills is hard! But &lt;strong&gt;NOT &lt;/strong&gt;paying the bills... &lt;em&gt;is harder&lt;/em&gt;. &lt;/p&gt;    &lt;p&gt;Doing the dishes is &lt;strong&gt;hard&lt;/strong&gt;. &lt;/p&gt;    &lt;p&gt;Scraping the hardened &lt;strong&gt;CRUD&lt;/strong&gt; off after several days so we can have clean dishes to make our &lt;strong&gt;next&lt;/strong&gt; dinner - &lt;em&gt;is harder&lt;/em&gt;.&lt;/p&gt;    &lt;p&gt;Agile, then, is the software equivalent of doing the dishes. It's our admonition to pay the bills. &lt;/p&gt;    &lt;p&gt;&lt;font color="#6633ff"&gt;It's hard. But &lt;strong&gt;not&lt;/strong&gt; doing agile &lt;em&gt;is harder.&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;Sure, there are a lot of practices in agile. And, depending on your persuasion - XP, Scrum, Lean - they may all be a little different. But, one thing Bob and Cope both agreed on was that agile is &lt;em&gt;not&lt;/em&gt; about the practices. Agile is &lt;strong&gt;NOT&lt;/strong&gt; TDD (regardless of your views on its goodness or badness). And agile practices are &lt;em&gt;not&lt;/em&gt; a substitute for thinking. &lt;/p&gt;    &lt;p&gt;As Uncle Bob and Cope leapt up to perform an impromptu martial arts move in eerie &lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="I know kung fu.  (show me)" border="0" alt="I know kung fu.  (show me)" align="left" src="http://lh5.ggpht.com/_dkYqgGG4VVU/SRrnid3RzAI/AAAAAAAAAeY/I5cLiOkuuh4/image32.png?imgmax=800" width="206" height="279" /&gt;synchrony, they spoke to how the practices in agile - like those in martial arts - are only the starting point, the building blocks, from which we learn. If you're caught in a fight, you're not going to repeat each form you learned in perfect order while your enemy bows and gives you space. You're going to use the &lt;strong&gt;principles&lt;/strong&gt; you've learned from years of practice to figure out the best moves to make.&lt;/p&gt;    &lt;p&gt;And so it is with agile. &lt;font color="#ff0000"&gt;&lt;em&gt;The religion has to die.&lt;/em&gt;&lt;/font&gt; XP, Scrum, Lean, these are just sets of practices - good ideas that people have assembled. Scrum is filled with great ideas for creating successful teams, but if all you do are assign the necessary roles and hold the prescribed meetings, you're missing the point.&lt;/p&gt;    &lt;p&gt;Testing &lt;em&gt;can&lt;/em&gt; positively influence your design. But it still takes strong design skills &amp;amp; knowledge to do a good design. Even Jim concedes that unit testing can be helpful for tactical decisions, but they both agree it's no substitute for architecture. &lt;/p&gt;    &lt;p&gt;Per its &lt;a title="The Agile Manifesto" href="http://agilemanifesto.org/" target="_blank"&gt;manifesto&lt;/a&gt;, agile is about &lt;em&gt;uncovering better ways of developing software by doing it and helping others do it&lt;/em&gt;. If you just take the practices, with no consideration for the underlying values or how to make them work within your organization, then you -- like all those teenagers -- are doing it wrong.      &lt;br /&gt;&lt;a title="Agile Bazaar" href="http://www.agilebazaar.org/"&gt;&lt;img alt="image" align="right" src="http://lh3.ggpht.com/_dkYqgGG4VVU/SRrni_rBOUI/AAAAAAAAAec/s5obYBKAdtU/image%5B16%5D.png?imgmax=800" width="133" height="40" /&gt;&lt;/a&gt;--       &lt;br /&gt;» &lt;a title="Deep Agile 2008: Not as Easy as you Thought!" href="http://www.agilebazaar.org/DeepAgile2008/DeepAgile2008Agenda.htm" target="_blank"&gt;Deep Agile 2008&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501180114730436648-1838485654516916671?l=www.thehackerchickblog.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=zaHKdMcgCSo:lrZ-Q1vCbzA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=zaHKdMcgCSo:lrZ-Q1vCbzA:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=zaHKdMcgCSo:lrZ-Q1vCbzA:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=zaHKdMcgCSo:lrZ-Q1vCbzA:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?i=zaHKdMcgCSo:lrZ-Q1vCbzA:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=zaHKdMcgCSo:lrZ-Q1vCbzA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheHackerChickBlog/~4/zaHKdMcgCSo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thehackerchickblog.com/feeds/1838485654516916671/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thehackerchickblog.com/2008/11/deep-agile-ya-know-like-teenage-sex.html#comment-form" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/1838485654516916671?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/1838485654516916671?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheHackerChickBlog/~3/zaHKdMcgCSo/deep-agile-ya-know-like-teenage-sex.html" title="Deep Agile - Ya Know, Like Teenage Sex" /><author><name>abby</name><uri>http://www.blogger.com/profile/14805958673888992905</uri><email>haxrchick@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02745342225111277233" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">6</thr:total><feedburner:origLink>http://www.thehackerchickblog.com/2008/11/deep-agile-ya-know-like-teenage-sex.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QHQHg-eCp7ImA9WxNRF0U.&quot;"><id>tag:blogger.com,1999:blog-7501180114730436648.post-5363793783161979225</id><published>2008-10-27T12:10:00.016-04:00</published><updated>2009-09-12T15:55:31.650-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-12T15:55:31.650-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="emergent design" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="Bob Martin" /><title>Just Say No to Nulls (or Refactoring Your Way to Programmer Bliss)</title><content type="html">&lt;p&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="No Nulls" border="0" alt="No Nulls" align="left" src="http://lh5.ggpht.com/haxrchick/SQXoCPl7f1I/AAAAAAAAAdY/YFyxKhgrxtE/NoNulls%5B1%5D.jpg?imgmax=800" width="219" height="219" /&gt;I can't help but feel my code is getting harder and harder to read as I wade through an ever increasing number of &lt;em&gt;if &lt;strong&gt;&lt;font color="#ff0000"&gt;!= null&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt; checks before finding my way to the &lt;em&gt;real logic&lt;/em&gt; that I actually care about...     &lt;br /&gt;&lt;/p&gt; &lt;center&gt;&lt;img title="Code Littered with if != null checks" alt="Code Littered with if != null checks" src="http://lh5.ggpht.com/haxrchick/SQXoCS9aXOI/AAAAAAAAAdc/NJMEOc8EyR0/Code%5B1%5D.gif?imgmax=800" width="363" height="265" /&gt;&lt;/center&gt;  &lt;p&gt;&lt;em&gt;God&lt;/em&gt;, doesn't your brain just want to shut down even trying to look at it? I've been trying to manage this by creating an endless number of private methods whose sole purpose is to check for values in a null safe way. This at least makes my public methods easier to follow so that I can understand their logic...&lt;/p&gt;  &lt;p&gt;&lt;img title="Code fixed to call private methods that hide null checks" alt="Code fixed to call private methods that hide null checks" align="left" src="http://lh6.ggpht.com/haxrchick/SQXoC0zREGI/AAAAAAAAAdg/tFWFUeq45Bo/MethodCallingPrivateMethods.gif?imgmax=800" width="343" height="162" /&gt;&lt;img title="Endless private methods to hide the null checks" alt="Endless private methods to hide the null checks" align="right" src="http://2.bp.blogspot.com/_dkYqgGG4VVU/SQXr22yTCXI/AAAAAAAAAds/r1-l-Edkmkg/s400/TinyMethods.gif" width="341" height="273" /&gt;&lt;/p&gt;  &lt;p&gt;But, man, now there's even &lt;strong&gt;more code&lt;/strong&gt; and all I'm doing are a few simple checks.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font color="#6633ff"&gt;Doesn't it feel like there has to be a better way?!&lt;/font&gt; &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Well, actually yes, there is.&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt;   &lt;p&gt;&lt;strong&gt;&lt;font color="#6633ff"&gt;Stop allowing any of your methods to return nulls.&lt;/font&gt; &lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;EVER.&lt;/p&gt;    &lt;p&gt;No nulls returned, no null checks necessary. Thank you for reading.&lt;/p&gt;    &lt;p&gt;Oh, you're still here. Yeah, that's a little easier said then done, isn't it? Particularly if you're working on existing applications with thousands of lines of null returning code. And let's not even get started on 3rd party libraries.&lt;/p&gt;    &lt;p&gt;The problem, of course, is that if we only manage to remove &lt;em&gt;some&lt;/em&gt; of the null returns, developers are going to have to &lt;em&gt;remember&lt;/em&gt; which methods can return null and which ones can't. And the first time they're hit with our favorite &lt;font color="#ff0000"&gt;&lt;strong&gt;NullPointerException&lt;/strong&gt;&lt;/font&gt; they're going to go &amp;quot;shit!&amp;quot; and start adding those &lt;em&gt;if &lt;strong&gt;&lt;font color="#ff0000"&gt;!= null&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt; checks all over the code again.&lt;/p&gt;    &lt;p&gt;And so, it starts to feel like an all or nothing scenario to get out of null check hell. Either we prevent ALL of our methods from returning null and ascend into programming bliss. Or, we're stuck with those damn null checks.&lt;/p&gt;    &lt;p&gt;Well, the good news is that when it comes to code, improving even one small element tends to exert a positive influence on our overall design. And so, even by tackling &lt;em&gt;some &lt;/em&gt;of our null returns, we actually end up with better, easier to maintain software. And, if we're able to do it in a structured way -- say, a policy of fixing NPEs by &lt;em&gt;changing the method&lt;/em&gt; to not return null rather than inserting an &lt;em&gt;if &lt;strong&gt;&lt;font color="#ff0000"&gt;!= null&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt; check, or taking our most heavily used component and just removing all null returns from it -- then I think we can alleviate some of our brain pain.&lt;/p&gt;    &lt;p&gt;So, okay, where do we start?&lt;/p&gt;    &lt;p&gt;The worst culprits are the getter methods that return objects. When we have classes that return instances of other classes, which in turn return instances of yet &lt;em&gt;other &lt;/em&gt;classes, pretty soon we wind up with a lot of method chaining &lt;/p&gt;    &lt;p&gt;&lt;strong&gt;myObject.getFoo().getBar().getName().rhymesWith( &amp;quot;Banana&amp;quot; )...&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;and this is the worst thing we can do because there isn't even anywhere to squeeze a null check into there.&lt;/p&gt;    &lt;p&gt;The truth is, when we find ourselves wading through endless object hierarchies such as these, that there is what we call a &lt;em&gt;&lt;a title="Code Smells" href="http://c2.com/cgi/wiki?CodeSmell" target="_blank"&gt;code smell&lt;/a&gt;&lt;/em&gt;. And it's a pretty good indication that we might want to revisit our design. A true OO design is composed of nice little well behaved classes that expose methods we can call on to have them do things &lt;em&gt;for us&lt;/em&gt;. These classes &lt;em&gt;abstract&lt;/em&gt; the nitty gritty behind the scenes details and &lt;em&gt;just do it&lt;/em&gt; (often without the need to return &lt;em&gt;any&lt;/em&gt; value at all).&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;dog.bark()&lt;/strong&gt; not &lt;strong&gt;&lt;em&gt;dog.getAnatomy().getVoiceBox().EmitSound( &amp;quot;woof&amp;quot; )&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;This is a great opportunity to see if we can't remove some unnecessary code and complexity with a bit of encapsulation. Is it possible that the parent object can just take care of what we need without showing off how the sausage is made? If so, believe me - not only will we thank ourselves the next time we need that functionality, but so will the other developers. And, look ma, no null returns!&lt;/p&gt;    &lt;p&gt;If not (or maybe we're just not prepared to go &lt;em&gt;quite&lt;/em&gt; that far at the moment), we can still ask ourselves if we &lt;em&gt;really&lt;/em&gt; need all those getter &amp;amp; setter methods in the first place. &lt;a title="Eclipse Cheat Sheet" href="http://www.scribd.com/doc/179041/Eclipse-Cheat-Sheet" target="_blank"&gt;Ctrl-Shift-G&lt;/a&gt; is one of my &lt;em&gt;favorit'ist&lt;/em&gt; ever hot keys in &lt;a title="Eclipse" href="http://www.eclipse.org/" target="_blank"&gt;Eclipse&lt;/a&gt; (and &lt;a title="Jet Brains Resharper for Visual Studio" href="http://www.jetbrains.com/resharper/" target="_blank"&gt;Resharper's&lt;/a&gt; equivalent in Visual Studio). Sure, we know it's bad design to make our instance variables public. But, are we really gaining that much when we make our variables private but then turn around and blindly provide public get/set methods for each and every one of them?&lt;/p&gt;    &lt;p&gt;If we can lighten our code by even a few methods, not only are we removing some of those pesky null returns, we're also reducing our maintenance costs by removing unneeded code. And that's a Good Thing.&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Null Safe Get Method - returns empty object instead of null" border="0" alt="Null Safe Get Method - returns empty object instead of null" align="right" src="http://lh5.ggpht.com/haxrchick/SQXoD8vABKI/AAAAAAAAAdo/tf3fJ-OtVhc/NullSafeGetMethod%5B1%5D.gif?imgmax=800" width="277" height="117" /&gt;&lt;/p&gt;    &lt;p&gt;Of course, even after all of this cleaning, we'll still have some methods that just want to return null. But, even so, a lot we can handle by simply returning an empty instance of the object or collection where we previously would have returned null. Sure, it still requires an &lt;em&gt;if &lt;strong&gt;&lt;font color="#ff0000"&gt;!= null&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt; check in the get method, but we've at least moved that check to a single location rather than letting it perpetuate throughout the code. And this too is a Good Thing, so we're making our code better as we go - even if it's 1 tiny method at a time.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;What is your project's policy on returning nulls? When you get a NullPointerException, do you fix it by adding an &lt;em&gt;if != null&lt;/em&gt; check? Or by altering the method to stop returning nulls?&lt;/strong&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501180114730436648-5363793783161979225?l=www.thehackerchickblog.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=1wIr49GdKsk:nOOlKM6HY-w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=1wIr49GdKsk:nOOlKM6HY-w:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=1wIr49GdKsk:nOOlKM6HY-w:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=1wIr49GdKsk:nOOlKM6HY-w:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?i=1wIr49GdKsk:nOOlKM6HY-w:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=1wIr49GdKsk:nOOlKM6HY-w:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheHackerChickBlog/~4/1wIr49GdKsk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thehackerchickblog.com/feeds/5363793783161979225/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thehackerchickblog.com/2008/10/just-say-no-to-nulls-or-refactoring.html#comment-form" title="17 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/5363793783161979225?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/5363793783161979225?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheHackerChickBlog/~3/1wIr49GdKsk/just-say-no-to-nulls-or-refactoring.html" title="Just Say No to Nulls (or Refactoring Your Way to Programmer Bliss)" /><author><name>abby</name><uri>http://www.blogger.com/profile/14805958673888992905</uri><email>haxrchick@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02745342225111277233" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_dkYqgGG4VVU/SQXr22yTCXI/AAAAAAAAAds/r1-l-Edkmkg/s72-c/TinyMethods.gif" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">17</thr:total><feedburner:origLink>http://www.thehackerchickblog.com/2008/10/just-say-no-to-nulls-or-refactoring.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UBR3gyfSp7ImA9WxNUFE8.&quot;"><id>tag:blogger.com,1999:blog-7501180114730436648.post-6236755394797577795</id><published>2008-10-15T11:00:00.007-04:00</published><updated>2009-11-05T08:54:16.695-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-05T08:54:16.695-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="management" /><title>How would you like your code? Refining our Definition of Done</title><content type="html">&lt;p&gt;Agile has a notion of &lt;a title="Definition of &amp;#39;Done&amp;#39;" href="http://agilesoftwaredevelopment.com/2006/05/definition-of-done" target="_blank"&gt;defining &amp;quot;done.&amp;quot;&lt;/a&gt; This might sound funny - how could we not know when something is done? But, &lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Stick a fork in it?" border="0" alt="Stick a fork in it?" align="right" src="http://lh6.ggpht.com/haxrchick/SPVYn1v5eZI/AAAAAAAAAdE/4N-UT5XG460/self-canibalism%5B13%5D.jpg?imgmax=800" width="209" height="181" /&gt;as with any creative endeavor - there is &amp;quot;done&amp;quot; and then there's Done.&lt;/p&gt;  &lt;p&gt;Just try it - ask 5 different people on your project how they determine when a development task is &amp;quot;done&amp;quot; and, as the saying goes, you'll get a lot of different answers. But, while this might be an interesting exercise, if you really want to understand the problem, don't just &lt;em&gt;ask them &lt;/em&gt;what is meant by done. Instead, look and see what they're &lt;em&gt;actually passing off&lt;/em&gt; as done.&lt;/p&gt;  &lt;p&gt;On my current project, it seems pretty clear that the management - if not through their words, then through their &lt;em&gt;actions&lt;/em&gt; - has defined &amp;quot;done&amp;quot; to mean that code was checked in and a little checkmark was placed in the &amp;quot;Done&amp;quot; column for that task.&lt;/p&gt;  &lt;p&gt;This makes all of the management's schedules and reports up to &lt;em&gt;their&lt;/em&gt; management look nice and tidy. Give yourselves a pat on the back, &amp;quot;&lt;em&gt;well done&lt;/em&gt;, Bob!&amp;quot;&lt;/p&gt;  &lt;p&gt;On the other hand, this makes the &lt;em&gt;code&lt;/em&gt; look like a bloody mass of ... well, you get the idea.&lt;/p&gt;  &lt;p&gt;In management's defense, the managers aren't developers and even if they were, there's way too much code for them to dig through to determine if it's really production ready or not. &lt;font color="#ff0000"&gt;Why shouldn't managers be able to rely on their developers' word for when something is done?&lt;/font&gt;&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt;   &lt;p&gt;In the developer's defense, they are working from outlandishly unrealistic schedules and whenever anyone tries to explain that more time is needed they're rewarded with a management gem such as &amp;quot;well, it's &lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Monkeys typing" border="0" alt="Monkeys typing" align="left" src="http://lh6.ggpht.com/haxrchick/SPVgujhuVPI/AAAAAAAAAdU/5UHVstOd66I/image%5B5%5D.png?imgmax=800" width="138" height="94" /&gt;just &lt;strong&gt;got&lt;/strong&gt; to be done by that date because that's when we go live.&amp;quot;&lt;/p&gt;    &lt;p&gt;So the developer's, God bless 'em, tried their best to meet those deadlines - because &lt;font color="#ff0000"&gt;why shouldn't developers be able to follow their manager's direction?&lt;/font&gt; At the very first sign that the code seemed to be working, they checked that puppy in and moved on to the next task. &lt;/p&gt;    &lt;p&gt;The results are reminiscent of &lt;strong&gt;one million monkeys typing&lt;/strong&gt;. You know the type - amorphous blobs of &lt;em&gt;stuff &lt;/em&gt;that aren't even sustainable enough to get us to an initial release of the product. One step forward, two steps back.      &lt;br /&gt;&lt;/p&gt;   &lt;center&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Let us tell you where to stick it" border="0" alt="Let us tell you where to stick it" align="center" src="http://lh5.ggpht.com/haxrchick/SPVUN75gH0I/AAAAAAAAAdI/uKJdsiRQKLI/stick%20it%5B12%5D%5B6%5D.jpg?imgmax=800" width="604" height="104" /&gt;&lt;/center&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;And I just keep thinking back to &lt;a title="Clean Code" href="http://haxrchick.blogspot.com/2008/08/clean-code.html" target="_blank"&gt;Clean Code's&lt;/a&gt; preface: if we're to call ourselves professionals, we have a responsibility to act as such. And maybe that means we really &lt;em&gt;do&lt;/em&gt; need &lt;a title="Quintessence: The fifth element for the Agile Manifesto" href="http://blog.objectmentor.com/articles/2008/08/14/quintessence-the-fifth-element-for-the-agile-manifesto" target="_blank"&gt;a 5th element for our Agile Manifesto&lt;/a&gt;:&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#6633ff"&gt;We value Craftsmanship over Crap&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;meaning that we need to value the craft of building software to &lt;em&gt;last&lt;/em&gt; over the mad rush of delivering the first solution we think up that appears to work. Sure, managers and customers are always going to try to squeeze the last dime of productivity out of us - that's just human nature. But what it really comes down to is that &lt;em&gt;we&lt;/em&gt;, as developers, are the ones that ultimately say when our code is done. &lt;em&gt;We&lt;/em&gt; are the experts that management ultimately relies on to tell them what is needed. And every time we agree to deadlines that don't allow us to do our jobs, every time we proclaim our work as &amp;quot;done&amp;quot; using &lt;em&gt;crap &lt;/em&gt;rather than &lt;em&gt;craft&lt;/em&gt; as our measuring stick, we're failing to live up to our responsibility.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;What do you think? Who defines &lt;em&gt;done&lt;/em&gt; on your project? How do you think it &lt;em&gt;should&lt;/em&gt; get defined?&lt;/strong&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501180114730436648-6236755394797577795?l=www.thehackerchickblog.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=Iw17LJ-dryA:Z2VamNCWjmw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=Iw17LJ-dryA:Z2VamNCWjmw:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=Iw17LJ-dryA:Z2VamNCWjmw:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=Iw17LJ-dryA:Z2VamNCWjmw:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?i=Iw17LJ-dryA:Z2VamNCWjmw:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=Iw17LJ-dryA:Z2VamNCWjmw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheHackerChickBlog/~4/Iw17LJ-dryA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thehackerchickblog.com/feeds/6236755394797577795/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thehackerchickblog.com/2008/10/how-would-you-like-your-code-refining.html#comment-form" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/6236755394797577795?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/6236755394797577795?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheHackerChickBlog/~3/Iw17LJ-dryA/how-would-you-like-your-code-refining.html" title="How would you like your code? Refining our Definition of Done" /><author><name>abby</name><uri>http://www.blogger.com/profile/14805958673888992905</uri><email>haxrchick@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02745342225111277233" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">8</thr:total><feedburner:origLink>http://www.thehackerchickblog.com/2008/10/how-would-you-like-your-code-refining.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QCQ3c_eyp7ImA9WxNRF0U.&quot;"><id>tag:blogger.com,1999:blog-7501180114730436648.post-7199995768683703878</id><published>2008-08-23T12:51:00.025-04:00</published><updated>2009-09-12T15:56:02.943-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-12T15:56:02.943-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WPF" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="UX" /><title>The Future is Now!</title><content type="html">&lt;p&gt;If you want to build the kind of science fiction, futuristic GUIs that only exist in TV and movies (think: Minority Report) &lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Minority Report" border="0" alt="Minority Report" align="right" src="http://lh6.ggpht.com/haxrchick/SLA__eIAS8I/AAAAAAAAAa8/vjtZVJEcWns/minority_thumb%5B2%5D.jpg?imgmax=800" width="244" height="140" /&gt;then you want to be looking at &lt;a title="MSDN: Windows Presentation Foundation" href="http://msdn.microsoft.com/en-us/library/ms754130.aspx" target="_blank"&gt;Windows Presentation Foundation (WPF)&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;WPF is Microsoft's next generation API for developing applications and it's possibilities really start to shine through when you look at &lt;a title="Microsoft Surface" href="http://www.microsoft.com/surface" target="_blank"&gt;Microsoft Surface&lt;/a&gt;, which was developed entirely with WPF and the .NET Framework.&lt;/p&gt;  &lt;p&gt;The idea behind Surface is that any surface - vertical or horizontal - can be made so that you can interact with it in a very direct and natural way.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;font color="#6633ff"&gt;&amp;quot;&lt;em&gt;We used to say a computer on every desktop and now we say every desktop will be a computer&lt;/em&gt;&amp;quot;&lt;/font&gt; -- Bill Gates&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Microsoft Surface" border="0" alt="Microsoft Surface" align="left" src="http://lh6.ggpht.com/haxrchick/SLA__9R-50I/AAAAAAAAAbE/_94Mr4fld9g/surface-2_thumb%5B1%5D.jpg?imgmax=800" width="198" height="135" /&gt;This notion of interfacing with a computer through touch and gestures rather than mice and keyboards is all part of the next generation of user interfaces - termed &amp;quot;Natural User Interfaces&amp;quot; or NUIs for short (pronounced New-eee, like GUI with an &amp;quot;N&amp;quot;). The idea is that we began with Command Line Interfaces (okay, we began with &lt;a title="Altair 8800" href="http://www.retrothing.com/2006/02/mits_altair_880.html" target="_blank"&gt;blinkin' lights, toggle switches&lt;/a&gt;, and &lt;a title="Punch Card Gallery" href="http://www.fourmilab.ch/documents/univac/cards.html" target="_blank"&gt;punch cards&lt;/a&gt; - but...), &lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Microsoft Surface" border="0" alt="Microsoft Surface" align="right" src="http://lh6.ggpht.com/haxrchick/SLBAAfmI0vI/AAAAAAAAAbM/3K90k8qhQpY/surface-1_thumb%5B1%5D.jpg?imgmax=800" width="144" height="124" /&gt;progressed to Graphical User Interfaces, and we are now entering the next stage of this evolution.&lt;/p&gt;  &lt;p&gt;&lt;br/&gt;&lt;font color="#6633ff"&gt;&amp;quot;&lt;em&gt;The last 30 years of computing have been about people learning the language of computers. The next 30 years are going to be about computers learning the language of people.&amp;quot; &lt;/em&gt;&lt;/font&gt;    &lt;br /&gt;-- Daniel Makoski, Interaction Design Manager, Microsoft Surface&lt;/p&gt;&lt;a name='more'&gt;&lt;/a&gt;  &lt;p&gt;There is this notion that content &lt;em&gt;is&lt;/em&gt; the interface. That you can just walk up and interact with it. And even if you don't have a $10,000 touch screen wall, WPF provides a whole new way of designing user interfaces on today's PCs that allows you to break free from the old paradigms.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Microsoft Surface" border="0" alt="Microsoft Surface" align="left" src="http://lh4.ggpht.com/haxrchick/SLBABIvPNXI/AAAAAAAAAbU/LnEeXkuLf7k/surface-3_thumb%5B1%5D.jpg?imgmax=800" width="204" height="139" /&gt;» Screens are rendered with a &lt;a title="Painter&amp;#39;s Algorithm" href="http://en.wikipedia.org/wiki/Painter%27s_algorithm" target="_blank"&gt;Painter's Algorithm&lt;/a&gt;, which you can think of as a canvas upon which any element in your application can draw. Any shape is allowed, so say goodbye to yesterday's rectangular windows and controls. And any element can add to the layers beneath it, allowing you to render 3D scenes on a 2D surface.&lt;/p&gt;  &lt;p&gt;Imagine if photos didn't have to be stuck in an unnatural row of perfectly spaced rectangles. You could scatter them across the &amp;quot;table&amp;quot;, spin them around, group them so they overlap one another just as if you were handling the physical versions.&lt;/p&gt;  &lt;p&gt;» &lt;em&gt;All&lt;/em&gt; types of content - text, images, video, audio, 3D graphics, documents, etc. - are treated as 1st class citizens within a WPF application. They can respond to user input and issue commands, moving us away from PC constructs like buttons and menus, and towards the more natural model where content is the interface. WPF intrinsically supports things like 3D objects as &amp;quot;buttons&amp;quot; (imagine a spinning globe you can navigate and zoom in to find your destination).&lt;/p&gt;  &lt;p&gt;» All content is &lt;em&gt;rendered&lt;/em&gt; as 3D. This means you can apply transformations and animations to any object, allowing objects to &lt;em&gt;respond &lt;/em&gt;to users just as real world objects do. Imagine a 3-Dimensional object moving just slightly when you touch it. It suddenly becomes more &lt;em&gt;tangible&lt;/em&gt; than a static 2D image.&lt;/p&gt;  &lt;p&gt;» WPF is vector-based, meaning that all drawing is done through mathematical algorithms rather than dots per inch, providing us with perfect scalability of our content (obviously, bitmaps not withstanding) as we zoom in and out.&lt;/p&gt;  &lt;p&gt;This allows us to present information in an entirely new way. Imagine how we work with documents in the real world. If your desk is like mine, you've got papers scattered across it and stacked up in piles that others might call &lt;em&gt;messy&lt;/em&gt;, but, of course, we like it because we know where everything is. Now, imagine a &amp;quot;project&amp;quot; on your computer that's made up of text, spreadsheet data, images, audio and video where you can seamlessly navigate between all of the different components, zooming in on the areas you want to focus on, then zooming back out to a view that allows you to see what else is in the project. Just like you could do with the papers on your desk, but with the technological perks of rich media, in place editing, and whatever other nifty tweaks us developers can think of.&lt;/p&gt;  &lt;p&gt;So, okay, maybe the future is still tomorrow, but I think we've got some very exciting things that we can do &lt;em&gt;today&lt;/em&gt; to move us in that direction. And, if nothing else, there is the hope that...&lt;/p&gt;  &lt;p&gt;&lt;font color="#6633ff"&gt;&lt;em&gt;&amp;quot;One day, your computer will be a big ass table&lt;/em&gt;&amp;quot;&lt;/font&gt; -- &lt;a title="Microsoft Surface Parody video, Sarcastic Gamer" href="http://www.youtube.com/watch?v=CZrr7AZ9nCY" target="_blank"&gt;Sarcastic Gamer&lt;/a&gt;.     &lt;br /&gt;--     &lt;br /&gt;Check it out:     &lt;br /&gt;» &lt;a title="Microsoft Surface" href="http://www.microsoft.com/surface" target="_blank"&gt;Microsoft Surface&lt;/a&gt; - check out their videos to see it in action     &lt;br /&gt;» &lt;a title="Microsoft Surface Parody video, Sarcastic Gamer" href="http://www.youtube.com/watch?v=CZrr7AZ9nCY" target="_blank"&gt;Microsoft Surface Parody&lt;/a&gt; by Sarcastic Gamer - because we still love making fun of Microsoft     &lt;br /&gt;» &lt;strong&gt;WPF Bootcamp&lt;/strong&gt; - Learn WPF with Microsoft's bootcamp: 3 days of training videos and hands-on labs. Awesome stuff!     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;a title="WPF Bootcamp 2008" href="http://www.visitmix.com/University/wpf/bc08/" target="_blank"&gt;Bootcamp '08&lt;/a&gt; Video of the 2008 training. Highly recommended, but the labs aren't on-line yet.     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;a title="WPF Bootcamp 2007" href="http://www.visitmix.com/University/wpf/wpfbootcamp.htm" target="_blank"&gt;Bootcamp '07&lt;/a&gt; - Includes hands-on labs from the 2007 bootcamp you can use to augment '08 training.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501180114730436648-7199995768683703878?l=www.thehackerchickblog.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=hnTR80BYrqM:mxjSO_ULoF0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=hnTR80BYrqM:mxjSO_ULoF0:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=hnTR80BYrqM:mxjSO_ULoF0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=hnTR80BYrqM:mxjSO_ULoF0:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?i=hnTR80BYrqM:mxjSO_ULoF0:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=hnTR80BYrqM:mxjSO_ULoF0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheHackerChickBlog/~4/hnTR80BYrqM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thehackerchickblog.com/feeds/7199995768683703878/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thehackerchickblog.com/2008/08/future-is-now.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/7199995768683703878?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/7199995768683703878?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheHackerChickBlog/~3/hnTR80BYrqM/future-is-now.html" title="The Future is Now!" /><author><name>abby</name><uri>http://www.blogger.com/profile/14805958673888992905</uri><email>haxrchick@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02745342225111277233" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total><feedburner:origLink>http://www.thehackerchickblog.com/2008/08/future-is-now.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UBR3gyfSp7ImA9WxNUFE8.&quot;"><id>tag:blogger.com,1999:blog-7501180114730436648.post-4201982775762825873</id><published>2008-08-13T15:23:00.015-04:00</published><updated>2009-11-05T08:54:16.695-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-05T08:54:16.695-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="unit testing" /><category scheme="http://www.blogger.com/atom/ns#" term="emergent design" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="Bob Martin" /><title>Clean Code</title><content type="html">&lt;a title="Clean Code by Robert Martin" href="http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882" target="_blank"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Clean Code: A Handbook of Agile Software Craftsmanship" border="0" alt="Clean Code: A Handbook of Agile Software Craftsmanship" align="left" src="http://lh6.ggpht.com/haxrchick/SKM0loEMQnI/AAAAAAAAAas/hutyukkfZ9w/CleanCode_thumb3.jpg?imgmax=800" width="91" height="119" /&gt;&lt;/a&gt; Bob Martin's new book, &lt;a title="Clean Code by Robert Martin" href="http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882" target="_blank"&gt;Clean Code: A Handbook of Agile Software Craftsmanship&lt;/a&gt; is finally out and the UPS man just dropped a shiny new copy on my doorstep. It kicks off with these fine words of wisdom:  &lt;br /&gt;  &lt;br /&gt;&lt;em&gt;&lt;span style="color: rgb(102,51,255)"&gt;&amp;quot;The only valid measurement of code quality: WTFs/minute&amp;quot;&lt;/span&gt;&lt;/em&gt;  &lt;br /&gt;  &lt;br /&gt;Thought I'd take you with me on my quick skim in case your UPS man wasn't as nice...  &lt;br /&gt;  &lt;br /&gt;Chapter 1 begins with &amp;quot;You are reading this book for two reasons. First, you are a programmer. Second, you want to be a better programmer. Good. We need better programmers.&amp;quot; Includes sections like &lt;em&gt;The Total Cost of Owning a Mess.&lt;a href="http://lh6.ggpht.com/haxrchick/SKM0mDYiQiI/AAAAAAAAAaw/edPonrmzdaE/s1600-h/CleanCodealice9.gif"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Hookah-smoking caterpillar from Alice in Wonderland" border="0" alt="Hookah-smoking caterpillar from Alice in Wonderland" align="right" src="http://lh5.ggpht.com/haxrchick/SKM0mWDc8RI/AAAAAAAAAa0/JdnmHxaXEKw/CleanCodealice_thumb7.gif?imgmax=800" width="171" height="204" /&gt;&lt;/a&gt;&lt;/em&gt;  &lt;br /&gt;  &lt;br /&gt;The &lt;strong&gt;Functions&lt;/strong&gt; chapter earns bonus points for its opening image of the hookah-smoking caterpillar from Alice in Wonderland. I'm not quite sure what Uncle Bob is suggesting here, but this chapter includes goodness to the likes of &lt;em&gt;Have no side effects, Prefer exceptions to returning error codes,&lt;/em&gt; and classic Uncle Bobness such as:  &lt;br /&gt;  &lt;br /&gt;&lt;em&gt;&lt;span style="color: rgb(102,51,255)"&gt;&amp;quot;Functions should do one thing. They should do it well. They should do it only.&amp;quot;&lt;/span&gt;&lt;/em&gt;  &lt;br /&gt;  &lt;br /&gt;&lt;a name="more"&gt;&lt;/a&gt;The &lt;strong&gt;Formatting &lt;/strong&gt;chapter explains how to avoid &amp;quot;a scrambled mass of code that looks like it was written by a bevy of drunken sailors&amp;quot;&lt;a name='more'&gt;&lt;/a&gt; (hmm, I think I've seen that code before). And the &lt;strong&gt;Objects and Data Structures&lt;/strong&gt; chapter (which starts with an image of Data from Star Trek - I swear I couldn't make this stuff up) has some interesting looking sections like &lt;em&gt;Data/object anti-symmetry, The law of Demeter, &lt;/em&gt;and&lt;em&gt; Train wrecks.&lt;/em&gt;    &lt;br /&gt;    &lt;br /&gt;The book talks about &lt;strong&gt;Emergent Design &lt;/strong&gt;(Simple Design Rule 1: Run All the Tests, Simple Design Rules 2-4: Refactoring) and, of course, the principles of good class design. It covers exception handling (written by &lt;a title="Michael Feathers&amp;#39; Blog" href="http://michaelfeathers.typepad.com/michael_feathers_blog/" target="_blank"&gt;Michael Feathers&lt;/a&gt;, very cool), dependency injection, aspect oriented programming, concurrency (including thread-safe collections and testing threads), logging, unit testing (including JUnit internals), and code smells &amp;amp; heuristics.     &lt;br /&gt;    &lt;br /&gt;And just gobs and gobs of code examples. The back of the book promises that readers will come away with:    &lt;br /&gt;    &lt;br /&gt;» How to tell the difference between good and bad code    &lt;br /&gt;» How to write good code and how to transform bad code into good code    &lt;br /&gt;» How to create good names, good functions, good objects, and good classes    &lt;br /&gt;» How to format code for maximum readability    &lt;br /&gt;» How to implement complete error handling without obscuring code logic    &lt;br /&gt;» How to unit test and practice test-driven development    &lt;br /&gt;    &lt;br /&gt;You can find the complete table of contents on Bob Martin's &lt;a title="Clean Code, Whew! blog post" href="http://blog.objectmentor.com/articles/2008/04/08/clean-code-whew" target="_blank"&gt;Clean Code, Whew!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501180114730436648-4201982775762825873?l=www.thehackerchickblog.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=9VsC7xN3yTs:-S0AxiRoRsQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=9VsC7xN3yTs:-S0AxiRoRsQ:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=9VsC7xN3yTs:-S0AxiRoRsQ:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=9VsC7xN3yTs:-S0AxiRoRsQ:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?i=9VsC7xN3yTs:-S0AxiRoRsQ:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=9VsC7xN3yTs:-S0AxiRoRsQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheHackerChickBlog/~4/9VsC7xN3yTs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thehackerchickblog.com/feeds/4201982775762825873/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thehackerchickblog.com/2008/08/clean-code.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/4201982775762825873?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/4201982775762825873?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheHackerChickBlog/~3/9VsC7xN3yTs/clean-code.html" title="Clean Code" /><author><name>abby</name><uri>http://www.blogger.com/profile/14805958673888992905</uri><email>haxrchick@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02745342225111277233" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://www.thehackerchickblog.com/2008/08/clean-code.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MEQnc9eSp7ImA9WxNRF0U.&quot;"><id>tag:blogger.com,1999:blog-7501180114730436648.post-2250230565669903138</id><published>2008-07-22T09:00:00.004-04:00</published><updated>2009-09-12T15:56:43.961-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-12T15:56:43.961-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><title>Agile as the Path to Happiness?</title><content type="html">&lt;p&gt;&lt;img style="margin: 0pt 10px 10px 0pt; width: 186px; float: left; height: 184px; cursor: pointer" id="BLOGGER_PHOTO_ID_5225825975886663458" title="Be happy with agile!" border="0" alt="Be happy with agile!" src="http://4.bp.blogspot.com/_dkYqgGG4VVU/SIXdCZa7zyI/AAAAAAAAAZU/_IoxLihtk-I/s320/Be+Happy+with+Agile.jpg" /&gt;This might be a sign that I'm working too much, but I keep finding myself making analogies between agile software development and how I want to be living my life.&lt;/p&gt;  &lt;p&gt;As strange as it sounds, I think it stems from how crazy life can be and how agile seems to have found some good tricks for taming the chaos. Agile methodologies are, after all, built to deal with the high levels of change and uncertainty in software development. And, let's face it,&lt;/p&gt;  &lt;p&gt;&lt;span style="color: rgb(102,51,255)"&gt;&lt;em&gt;software's level of change and uncertainty ain't got nothing on life&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;Agile says &lt;span style="color: rgb(255,0,0); font-weight: bold"&gt;screw waterfall&lt;/span&gt; because we don't even know all of the information up front to enable perfectly detailed, fail-proof plans. And even if we &lt;em&gt;did&lt;/em&gt; somehow bizarrely know everything there is to know about what needs to get done, the world around us is changing so quickly it'll become out of date (read: &lt;em&gt;wrong&lt;/em&gt;) almost immediately.&lt;/p&gt;  &lt;p&gt;So, striving for perfection is futile because:  &lt;br /&gt;a) we can't even define perfection, and  &lt;br /&gt;b) even if we could, that definition would change before we could achieve it.&lt;/p&gt;  &lt;p&gt;If we foolishly listen to conventional wisdom and find ourselves going down this path, our only option will be failure.&lt;/p&gt;  &lt;p&gt;What we &lt;em&gt;can&lt;/em&gt; do though is figure out one small piece of the puzzle that we &lt;em&gt;do know&lt;/em&gt; today and quickly go implement that before it changes. Wasting time with a bunch of formal plans and high ceremony is counter-productive at this point and just as likely to make us fail as it is to help us. And who wants a bunch of plans and documents anyway? Wouldn't we rather working software that we can use?&lt;/p&gt;  &lt;p&gt;Or, in life… (this post was supposed to be about life, wasn't it?), I want to have achieved some small measure of happiness by &lt;em&gt;accomplishing&lt;/em&gt; or &lt;em&gt;obtaining&lt;/em&gt; or &lt;em&gt;getting to experience&lt;/em&gt; that one thing that - even if small - is giving me something that I'm confident I want.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What do you think? Is it time for a mandatory vacation to the loony bin? Or is there maybe some wisdom in agile that can extend beyond banging out code?&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501180114730436648-2250230565669903138?l=www.thehackerchickblog.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=T5UtgfniFcE:qd3Dk2xo6JA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=T5UtgfniFcE:qd3Dk2xo6JA:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=T5UtgfniFcE:qd3Dk2xo6JA:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=T5UtgfniFcE:qd3Dk2xo6JA:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?i=T5UtgfniFcE:qd3Dk2xo6JA:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheHackerChickBlog?a=T5UtgfniFcE:qd3Dk2xo6JA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheHackerChickBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheHackerChickBlog/~4/T5UtgfniFcE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.thehackerchickblog.com/feeds/2250230565669903138/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.thehackerchickblog.com/2008/07/agile-as-path-to-happiness.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/2250230565669903138?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7501180114730436648/posts/default/2250230565669903138?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheHackerChickBlog/~3/T5UtgfniFcE/agile-as-path-to-happiness.html" title="Agile as the Path to Happiness?" /><author><name>abby</name><uri>http://www.blogger.com/profile/14805958673888992905</uri><email>haxrchick@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02745342225111277233" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_dkYqgGG4VVU/SIXdCZa7zyI/AAAAAAAAAZU/_IoxLihtk-I/s72-c/Be+Happy+with+Agile.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://www.thehackerchickblog.com/2008/07/agile-as-path-to-happiness.html</feedburner:origLink></entry></feed>
