<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>JohnnyCoder &#187; Management</title>
	<atom:link href="http://johnnycoder.com/blog/category/management/feed/" rel="self" type="application/rss+xml" />
	<link>http://johnnycoder.com/blog</link>
	<description></description>
	<lastBuildDate>Wed, 03 Nov 2010 17:07:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Don&#8217;t Choose Option 2</title>
		<link>http://johnnycoder.com/blog/2010/08/13/dont-choose-option-2/</link>
		<comments>http://johnnycoder.com/blog/2010/08/13/dont-choose-option-2/#comments</comments>
		<pubDate>Sat, 14 Aug 2010 00:32:27 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[Random]]></category>
		<category><![CDATA[Rants]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2010/08/13/dont-choose-option-2/</guid>
		<description><![CDATA[Does this ever happen to you? You finish coding something up and the very second before you become pleased with yourself you suppress that wonderful feeling and wrestle with the fact that coders aren’t exactly impartial when it comes to judging their own code. You realize you have two options. 1, you can accept the [...]]]></description>
			<content:encoded><![CDATA[<p>Does this ever happen to you? You finish coding something up and the very second <em>before</em> you become pleased with yourself you suppress that wonderful feeling and wrestle with the fact that coders aren’t exactly impartial when it <img style="margin: 5px 5px 5px 10px; display: inline" align="right" src="http://www.viatechsoftware.com/Content/Images/code_review.jpg" width="160" height="106" />comes to judging their own code. You realize you have two options. 1, you can accept the fact that a second pair of eyes can’t hurt and you can go around the office in search of that nonbiased someone who is willing to sit down, review your code and provide honest feedback. Or 2, you can say “to heck with it” and just move on to the next thing.&#160; </p>
<p>I’ll leave you with this – <strong>there is value in every code review</strong>.&#160; Whether it’s you, or the reviewer, or the project, someone/something is always better off because of a code review.&#160; Next time, don’t choose option 2.&#160; And who knows?&#160; Maybe you’ll get that chance to be pleased with yourself after all. </p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2010/08/13/dont-choose-option-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Learn Lean Software Development and Kanban Systems</title>
		<link>http://johnnycoder.com/blog/2009/08/26/learn-lean-software-development-and-kanban-systems/</link>
		<comments>http://johnnycoder.com/blog/2009/08/26/learn-lean-software-development-and-kanban-systems/#comments</comments>
		<pubDate>Wed, 26 Aug 2009 21:38:43 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[Presentations]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2009/08/26/learn-lean-software-development-and-kanban-systems/</guid>
		<description><![CDATA[I did an in-house presentation on Lean Software Development (LSD) and Kanban Systems this week.  Beyond what I had previously learned from various podcasts, I knew little about either topic prior to compiling my slide deck.  In the process of building my presentation, I learned a ton.  I found the concepts weren’t very difficult to [...]]]></description>
			<content:encoded><![CDATA[<p>I did an in-house presentation on Lean Software Development (LSD) and Kanban Systems this week.  Beyond what I had previously learned from various podcasts, I knew little about either topic prior to compiling my slide deck.  In the process of building my presentation, I learned a ton.  I found the concepts weren’t very difficult to grok; however, I found little detailed information was available online.</p>
<p><a href="http://johnnycoder.com/blog/wp-content/uploads/2009/08/image.png"><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="image" src="http://johnnycoder.com/blog/wp-content/uploads/2009/08/image-thumb.png" border="0" alt="image" width="369" height="277" /></a></p>
<p>Hence this post which is merely a list of valuable resources.</p>
<ol>
<li><a href="http://www.poppendieck.com/papers/LeanThinking.pdf">Principles of Lean Thinking, Mary </a><a href="http://www.poppendieck.com/papers/LeanThinking.pdf">Poppendieck</a><a href="http://www.poppendieck.com/papers/LeanThinking.pdf"> </a></li>
<li><a href="http://www.poppendieck.com/papers/LeanThinking.pdf">Lean Software Development, May </a><a href="http://www.poppendieck.com/papers/LeanThinking.pdf">Poppendieck</a></li>
<li><a href="http://www.poppendieck.com/lean.htm">Lean Programming, Mary </a><a href="http://www.poppendieck.com/lean.htm">Poppendieck</a></li>
<li><a href="http://en.wikipedia.org/wiki/Lean_software_development">Lean Software Development, Wikipedia</a></li>
<li><a href="http://www.poppendieck.com/ilsd.htm">Implementing Lean Software Thinking: From Concept to Cash, </a><a href="http://www.poppendieck.com/ilsd.htm">Poppendieck</a></li>
<li><a href="http://codebetter.com/blogs/darrell.norton/articles/50341.aspx">Lean Software Development Overview, Darrell Norton</a></li>
<li><a href="http://www.audible.com/adbl/site/products/ProductDetail.jsp?productID=BK_SANS_000453&amp;BV_UseBVCookie=Yes">Lean Thinking: Banish Waste and Create Wealth in Your Corporation</a></li>
<li><a href="http://www.audible.com/adbl/site/products/ProductDetail.jsp?productID=BK_HIGH_000306&amp;BV_UseBVCookie=Yes">The Goal: A Process of Ongoing Improvement</a></li>
<li><a href="http://www.audible.com/adbl/site/products/ProductDetail.jsp?productID=BK_GRAW_000044&amp;BV_UseBVCookie=Yes">The Toyota Way</a></li>
<li><a href="http://www.audible.com/adbl/site/products/ProductDetail.jsp?productID=BK_GDAN_000153&amp;BV_UseBVCookie=Yes">Extreme Toyota: Radical Contradictions That Drive Success at the World’s Best Manufacturer </a></li>
<li><a href="http://castroller.com/podcasts/ElegantCode/1037820">Elegant Code Cast 17 &#8211; David </a><a href="http://castroller.com/podcasts/ElegantCode/1037820">Laribee</a><a href="http://castroller.com/podcasts/ElegantCode/1037820"> on Lean / </a><a href="http://castroller.com/podcasts/ElegantCode/1037820">Kanban</a></li>
<li><a href="http://herdingcode.com/wp-content/uploads/HerdingCode-0042-Scott-Bellware-on-BDD-and-Lean-Development.mp3">Herding Code Episode 42: Scott </a><a href="http://herdingcode.com/wp-content/uploads/HerdingCode-0042-Scott-Bellware-on-BDD-and-Lean-Development.mp3">Bellware</a><a href="http://herdingcode.com/wp-content/uploads/HerdingCode-0042-Scott-Bellware-on-BDD-and-Lean-Development.mp3"> on </a><a href="http://herdingcode.com/wp-content/uploads/HerdingCode-0042-Scott-Bellware-on-BDD-and-Lean-Development.mp3">BDD</a><a href="http://herdingcode.com/wp-content/uploads/HerdingCode-0042-Scott-Bellware-on-BDD-and-Lean-Development.mp3"> and Lean Development</a></li>
<li><a href="http://agilesoftwaredevelopment.com/leanprinciples">Seven Principles of Lean Software Development, </a><a href="http://agilesoftwaredevelopment.com/leanprinciples">Przemys?aw</a><a href="http://agilesoftwaredevelopment.com/leanprinciples"> </a><a href="http://agilesoftwaredevelopment.com/leanprinciples">Bielicki</a><a href="http://agilesoftwaredevelopment.com/leanprinciples"> </a></li>
<li><a href="http://www.hanselminutes.com/default.aspx?showID=188">Kanban</a><a href="http://www.hanselminutes.com/default.aspx?showID=188"> Boards for Agile Project Management with Zen Author Nate </a><a href="http://www.hanselminutes.com/default.aspx?showID=188">Kohari</a></li>
<li><a href="http://herdingcode.com/?p=203">Herding Code 55: Nate </a><a href="http://herdingcode.com/?p=203">Kohari</a><a href="http://herdingcode.com/?p=203"> brings Your Moment of Zen</a></li>
<li><a href="http://jamesshore.com/Blog/Kanban-Systems.html">James Shore on </a><a href="http://jamesshore.com/Blog/Kanban-Systems.html">Kanban</a><a href="http://jamesshore.com/Blog/Kanban-Systems.html"> Systems </a></li>
<li><a href="http://agilezen.com/">Agile Zen Product Site</a></li>
<li><a href="http://www.sep.com/lk2009/david-laribee-a-leaner-for-of-agile">A Leaner Form of Agile, David </a><a href="http://www.sep.com/lk2009/david-laribee-a-leaner-for-of-agile">Laribee</a></li>
<li><a href="http://www.infoq.com/news/2008/10/kanban_agile">Kanban</a><a href="http://www.infoq.com/news/2008/10/kanban_agile"> as Alternative Agile Implementation, Mark </a><a href="http://www.infoq.com/news/2008/10/kanban_agile">Levison</a></li>
<li><a href="http://www.agilealliance.org/system/article/file/1422/file.pdf">Lean Software Development, Dr. </a><a href="http://www.agilealliance.org/system/article/file/1422/file.pdf">Christoph</a><a href="http://www.agilealliance.org/system/article/file/1422/file.pdf"> </a><a href="http://www.agilealliance.org/system/article/file/1422/file.pdf">Steindl</a></li>
<li><a href="http://www.1000ventures.com/business_guide/glossary_lean_kaizen.html">Glossary of Lean Manufacturing Terms</a></li>
<li><a href="http://leansoftwareengineering.com/2008/09/29/why-pull-why-kanban/">Why Pull? Why </a><a href="http://leansoftwareengineering.com/2008/09/29/why-pull-why-kanban/">Kanban</a><a href="http://leansoftwareengineering.com/2008/09/29/why-pull-why-kanban/">?, Corey Ladas</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2009/08/26/learn-lean-software-development-and-kanban-systems/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
<enclosure url="http://herdingcode.com/wp-content/uploads/HerdingCode-0042-Scott-Bellware-on-BDD-and-Lean-Development.mp3" length="55240347" type="audio/mpeg" />
		</item>
		<item>
		<title>Ramblings About Scrum</title>
		<link>http://johnnycoder.com/blog/2009/04/20/ramblings-about-scrum/</link>
		<comments>http://johnnycoder.com/blog/2009/04/20/ramblings-about-scrum/#comments</comments>
		<pubDate>Tue, 21 Apr 2009 04:51:42 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2009/04/20/ramblings-about-scrum/</guid>
		<description><![CDATA[Over the past few of months, Scrum has taunted me. It started with two excellent Thirsty Developer Podcasts –&#160; The Thirsty Developer 14 with Ed Chaltry talking about “an Agile process” that can be used to manage and control complex software and product development using iterative, incremental practices and then The Thirsty Developer 28 with [...]]]></description>
			<content:encoded><![CDATA[<p>Over the past few of months, Scrum has taunted me.</p>
<p>It started with two excellent Thirsty Developer Podcasts –&#160; <a href="http://thirstydeveloper.com/2008/03/01/TheThirstyDeveloper14SCRUM.aspx">The Thirsty Developer 14</a> with Ed Chaltry talking about “an Agile process” that can be used to manage and control complex software and product development using iterative, incremental practices <a href="http://www.amazon.com/gp/product/images/0130676349/sr=8-2/qid=1240246675/ref=dp_image_0?ie=UTF8&amp;n=283155&amp;s=books&amp;qid=1240246675&amp;sr=8-2"><img style="margin: 15px 0px 10px 10px; display: inline" border="0" alt="Agile Software Development with Scrum (Series in Agile Software Development)" align="right" src="http://ecx.images-amazon.com/images/I/41NYAVN9KCL._SL500_AA240_.jpg" width="240" height="240" /></a>and then <a href="http://thirstydeveloper.com/2008/07/26/TheThirstyDeveloper28SCRUMAndAgileInTheEnterprise.aspx">The Thirsty Developer 28</a> with Sean McCormack talking about how Scrum and Agile principles can be applied to the enterprise. These podcasts provided such a detailed overview of Scrum that I couldn’t help but get excited.</p>
<p>Next, a co-worker did an excellent presentation on Scrum after successfully introducing Scrum into an organization where he was consulting.&#160; The presentation both piqued my interest and left me questioning the merits of Scrum. Actually, it had a lot of folks in my group asking questions.&#160; Maybe-not-so-coincidentally this was right around the time <a href="http://martinfowler.com/bliki/FlaccidScrum.html" target="_blank">Martin Fowler’s Flaccid Scrum article</a> was published.</p>
<p>Shortly thereafter we started using <a href="http://www.rallydev.com/" target="_blank">Rally Software</a> to help manage a couple of our in-house projects and I found myself in the role of Scrum Master.&#160; The Rally tools are great.&#160; Scrum or no scrum, I’d recommend the product.</p>
<p>Since I was now a “Scrum Master” and under-qualified, I figured I should learn more about the role so I finished up <a href="http://www.amazon.com/Agile-Software-Development-Scrum/dp/0130676349/ref=pd_bbs_sr_2?ie=UTF8&amp;s=books&amp;qid=1240246675&amp;sr=8-2">Agile Software Development with Scrum (Series in Agile Software Development)</a> by Ken Schwaber and Mike Beedle which I had been working on for a couple of months.&#160; I also read <a href="http://www.amazon.com/Head-First-Software-Development-Pilone/dp/0596527357" target="_blank">Head First Software Development by O’Reilly Media</a>.&#160; Though it is an awesome resource which touches upon a number of Scrum-like processes and I recommend it to any developer (especially a junior developer on their first week on the job) it mostly through me off track as it didn’t truly define Scrum.&#160; </p>
<p><img style="margin: 10px 20px 10px 0px; display: inline" border="0" alt="Head First Software Development" align="left" src="http://oreilly.com/catalog/covers/9780596527358_cat.gif" /><a href="http://www.amazon.com/gp/product/images/0130676349/sr=8-2/qid=1240246675/ref=dp_image_0?ie=UTF8&amp;n=283155&amp;s=books&amp;qid=1240246675&amp;sr=8-2"></a></p>
<p>Which brings us to last week….last week I watched <a href="http://www.viddler.com/explore/sergiopereira/videos/7/102.991" target="_blank">Uncle Bob Martin’s presentation at Chicago ALT.NET on XP: After 10 years why are we still talking about it?</a>&#160; Though Uncle Bob paces in and out of camera throughout the entire one hour presentation, he’s one heck of a speaker and the presentation is a gem.&#160; He provides a really nice overview of why Scrum has hit the mainstream whereas XP certainly has not.&#160; He talks about Scrum being a subset of XP – Scrum took all the project management aspects of XP and left all the technical processes like continuous integration and TDD behind – and why this, Flaccid Scrum, ultimately fails over time.&#160; The heart of Uncle Bob’s talk is craftsmanship which is a powerful message in it’s own right but it really brought my learning of Scrum full circle.</p>
<p>I had my half-yearly review last week.&#160; Under the goals I listed for the next evaluation period, I included my desire to become Scrum Master certified. I’m not sure there’s much merit in this certification; however it certainly is a means to better learn the Scrum way of doing things.&#160; Perhaps surprisingly, Scrum certification was one of the easier goals for the next six months. I think I’m going to be busy. Wish me luck.</p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2009/04/20/ramblings-about-scrum/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Introducing Lightning Talks</title>
		<link>http://johnnycoder.com/blog/2008/07/29/introducing-lightning-talks/</link>
		<comments>http://johnnycoder.com/blog/2008/07/29/introducing-lightning-talks/#comments</comments>
		<pubDate>Tue, 29 Jul 2008 17:54:56 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[Team]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2008/07/29/introducing-lightning-talks/</guid>
		<description><![CDATA[The folks I work with are wicked smart.  Go back and read that first sentence again.  This time read it like you are Ben Affleck in Good Will Hunting or one of the guys I used to play summer ball with outside of Boston. Fun right?  Anyway, the point is I work with really smart [...]]]></description>
			<content:encoded><![CDATA[<p>The folks I work with are wicked smart.  Go back and read that first sentence again.  This time read it like you are Ben Affleck in <em>Good Will Hunting</em> or one of the guys I used to play summer ball with outside of Boston. Fun right?  Anyway, the point is I work with really smart people and I like to push random characters voices into the heads of my readers. </p>
<p><img style="margin: 10px" src="http://images.ctv.ca/archives/CTVNews/img2/20070925/465_goodwillinghunting.jpg" alt="" width="240" height="129" align="right" /></p>
<p>Tip Number 1: If you have the means, I suggest you plant yourself in a similar environment.  There&#8217;s nothing you can do to better for your career than surround yourself with talented, smart people who are passionate about their work.  It doesn&#8217;t matter if you are a junior coder, manager-type or CTO.  It&#8217;s just good sense.</p>
<p>The problem with my current environment is we are scattered amongst many projects, across many clients and the opportunity to collaborate doesn&#8217;t knock very often. We do have a weekly team meeting, but it generally focuses on business/management stuff.  I do find that software development talk often surfaces at lunch but arousing conversation around grass fed vs grain fed cattle is equally as likely.  There really was no venue to really talk shop and harness the collective software development knowledge of my coworkers. </p>
<p>So, I suggested we start hosting <a href="http://en.wikipedia.org/wiki/Lightning_Talk">Lightning Talks</a>&#8230; The immediate response was very favorable (everybody likes to hear themselves talk, right?) and this week we held a very quick business/management team meeting and then the development staff started our first round of *modified* Lightning Talks.  I emphasis the word &#8220;modified&#8221; because we broke a rules.  Read on.  We kept things very informal and, in the spirit of lightning talks, intended to host a number of very quick quick 3-10 minute presentations.  Unfortunately, we kind of blew it with the time allotment as my two talks, one on <a href="http://johnnycoder.com/blog/2008/07/22/getting-started-with-ankhsvn/">AnkhSVN</a> and the other on <a href="http://johnnycoder.com/blog/2008/07/28/getting-started-with-inno-setup/">Inno Setup</a>, took 5 minutes and then 45 minutes respectively.  All the same, everyone seemed genuinely interested in presentations and the pseudo-lightning talk concept (although you never know because I work not only with really smart people they are also very kind.)  Perhaps the best evidence of the Lightning Talk success was at least one coworker volunteered to do a presentation next week and our internal Wiki already has a section dedicated to presentation notes. </p>
<p>Tip Number 2: Introduce a similar practice to your workplace.  No matter what you call the meeting, getting coworkers talking about technology is one of the best ways to get introduced to new ideas and sharpen your existing skills. </p>
<p>Wish us luck on future talks.  Let&#8217;s hope my brain doesn&#8217;t get too big.</p>
<div id="scid:C16BAC14-9A3D-4c50-9394-FBFEF7A93539:56cfd97f-bfb7-4101-b92a-35d0b764e8e4" class="wlWriterSmartContent" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><a href="http://www.dotnetkicks.com/kick/?url=http://johnnycoder.com/blog/2008/07/29/introducing-lightning-talks/"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://johnnycoder.com/blog/2008/07/29/introducing-lightning-talks/" border="0" alt="kick it on DotNetKicks.com" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2008/07/29/introducing-lightning-talks/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>What&#8217;s the Level of Difficulty?</title>
		<link>http://johnnycoder.com/blog/2008/06/17/whats-the-level-of-difficulty/</link>
		<comments>http://johnnycoder.com/blog/2008/06/17/whats-the-level-of-difficulty/#comments</comments>
		<pubDate>Tue, 17 Jun 2008 21:45:34 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Estimates]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Rants]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2008/06/17/whats-the-level-of-difficulty/</guid>
		<description><![CDATA[My customer recently asked me if my current coding assignment is difficult.  I believe his exact question was, &#8220;On a scale of 1 to 10, how technically difficult is this project?&#8221;  If you have been in the software development business for more than 2 hours, you know this is a loaded question.  Quickly reply with [...]]]></description>
			<content:encoded><![CDATA[<p>My customer recently asked me if my current coding assignment is difficult.  I believe his exact question was, &#8220;On a scale of 1 to 10, how technically difficult is this project?&#8221;  If you have been in the software development business for more than 2 hours, you know this is a loaded question.  Quickly reply with &#8220;It&#8217;s highly technical and super hard&#8221; and you may be perceived as being over-your-head or even incompetent.  If you say &#8220;It&#8217;s super <a href="http://johnnycoder.com/blog/wp-content/uploads/2008/06/image12.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" src="http://johnnycoder.com/blog/wp-content/uploads/2008/06/image-thumb8.png" border="0" alt="image" width="122" height="123" align="right" /></a>easy&#8221; the customer may wish to speed up the product delivery or wonder why your code hasn&#8217;t been delivered already.  Say anything in between and, well, your client may think you&#8217;re keeping something from them.</p>
<p>Fortunately for me, I&#8217;ve built up a good working relationship with my client (who&#8217;s a very reasonable guy) and I have gained trust through regular status and deliverables.  We&#8217;re both happy with the current state of the project and therefore I took the question as he merely being curious.  I have given the benefit of the doubt and I don&#8217;t believe the question was loaded at all.  Time will tell&#8230;</p>
<p>Notwithstanding, as uncomfortable as the question is when coming from your customer, project manager or project lead, it is still a great question to ask yourself.  A number of factors should play into your answer but I&#8217;m willing to bet there&#8217;s an aspect of your effort which factors in the most.  For example, my biggest factor is the sheer number of components.  If you have worked with me for any duration of time, I hope you know I keep my architecture as simple as possible at all costs.  My ego doesn&#8217;t like it but my tiny brain and my clients tend to thank me for it.  Though I whole-heartedly stick by the architecture I&#8217;ve put in place for my current effort, it is made up of a dizzying number of components &#8212; certainly more components than the typical, single-developer, 3-month assignment. Specifically, I am hosting a web application, web service and a SQL 2005 DB.  I am also distributing a Windows application, Windows service and a third party application to client machine&#8217;s using custom installers.  The web site features online order/purchasing and reports using Adobe Flex.  All development (other than Flex) is using .NET 3.5 Framework and I&#8217;ve opted to use WPF for the Windows application.  With the exception of Flex (which I&#8217;m hoping goes away soon) and WPF, it&#8217;s all stuff I&#8217;ve done before although it has been an awfully long time since I built a desktop application.  Each piece of this puzzle isn&#8217;t overly difficult on it&#8217;s own, but collectively I think this solution is quite complex.  If I could, I would dumb it down, but I can&#8217;t.  I simply have to acknowledge the complexity and mitigate what I perceive as a risk.</p>
<p>So, on a scale of 1 to 10, how technically difficult is your project?  If it&#8217;s high, is there anything you can do about it or are you kind of &#8220;stuck&#8221; like me?</p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2008/06/17/whats-the-level-of-difficulty/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Good Estimates Despite Bad Process</title>
		<link>http://johnnycoder.com/blog/2008/02/13/the-art-of-estimation/</link>
		<comments>http://johnnycoder.com/blog/2008/02/13/the-art-of-estimation/#comments</comments>
		<pubDate>Thu, 14 Feb 2008 02:18:32 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Estimates]]></category>
		<category><![CDATA[Management]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2008/02/13/the-art-of-estimation/</guid>
		<description><![CDATA[Are you involved in your company&#8217;s project estimation process? If so, let&#8217;s pretend. Let&#8217;s pretend that your company has internal constraints which makes estimating rather difficult. For example, let&#8217;s say you were required to completed all of your 2008 estimates towards the end of 2007 despite the fact that very few requirements were known. Don&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>Are you involved in your company&#8217;s project estimation process? If so, let&#8217;s pretend. Let&#8217;s pretend that your company has internal constraints which makes estimating rather difficult. For example, let&#8217;s say you were required to completed all of your 2008 estimates towards the end of 2007 despite the fact that very few requirements were known. Don&#8217;t get me wrong. There were a few requirements but they were very high-level or what I would equate to a vision document or merely a great idea someone thought up while taking their morning shower. Of course, no one should expect these estimates to be all that accurate, but just for fun, let&#8217;s pretend that some felt they would be good enough to use as a basis to determine the entire budget for 2008. Kind of scary, eh? Well, I&#8217;m familiar with such a process and it is really scary and frustrating and, in my opinion, a tough way to end and start a year. You do learn to deal and make the best of it though.</p>
<p>It goes without saying but estimation is an art. It is hard enough if you have all relevant information at your fingertips. The thing is we rarely do have everything we need. Now, I recognize the provide example is a little to the extreme, but it happens. Believe me, it happens. Again, you do learn to deal and make the best of it though. But what if one wanted to improve on the process summarized above? What could be done?</p>
<p>I think the first step is determine <strong>the key factors in providing a good estimate </strong>which I believe included the following:</p>
<ul>
<li><em>You Need Good Requirements</em><strong>:</strong> Good requirements have the greatest impact on an estimate. As requirements become more complete and detailed, estimates become more accurate and our confidence increases. Period.</li>
<li><em>You Need An Appropriate Estimator</em><strong>:</strong> Estimators should be chosen based on their understanding of the requirements, their knowledge of technology and possible solutions and their past estimating experience. The decision of whom should estimate one&#8217;s projects should not be taken lightly.</li>
<li><em>You Need To Know The Implementer</em><strong>: </strong>To provide a good estimate, it isn&#8217;t really necessary to know who will be performing the work, but since no two developers have the same skill set or experience, knowledge of the implementer can help firm up an estimate considerably. If nothing else, you need to know the candidate&#8217;s assumed skill set and domain knowledge.</li>
</ul>
<p>It should be noted that we often think that timeline and/or budget have an affect on our estimates. This is only true because these factors affect scope, which in turn affect requirements, which are ultimately reflected in the estimate.</p>
<p>Once the key factors are identified (maybe there&#8217;s more than listed above), <strong>a better process needs to be defined</strong>. Assuming the company absolutely has to continue estimating and budgeting for the upcoming year prior to having solid requirements, I would suggest breaking the estimation process into three stages in order to continually firm up one&#8217;s numbers as additional information is provided:</p>
<ul>
<li><em><a href="http://acronyms.thefreedictionary.com/Sophisticated+Wild+Ass+Guess" target="_blank">SWAG</a></em><strong>: </strong>This high-level estimate is based on the limited requirements offered in the project request. Since this estimate is typically provided by management, and is based on few requirements, it should come along with a fairly low confidence level. Unfortunately, the allocated budget is tied to these estimates. Since none of individual estimates will be accurate, the best case scenario is to end up with estimates balancing themselves out. In other words, for every over-estimated effort there will an under-estimated effort. If the majority of efforts are under-estimate, you are screwed. If the majority are over-estimated, you are bound to have some awesome launch parties.</li>
<li><em>Detailed Estimate</em><strong>: </strong>This estimate can be produced once detailed requirements are offered. This requirements would come in the form of a BRD or FSD. Who produces this estimate? People with knowledge of the product and the technologies who will hopefully be involved with the project until it is released. This estimate becomes the foundation of the project plan and is the basis of all staffing requests.</li>
<li><em>Developer Validation</em><strong>: </strong>Once development assignments are distributed, each developer will validate the provided estimate against his/her associated tasks. Adjustments to the project plan and staff plan will be made if necessary.</li>
</ul>
<p>In theory, one should expect estimates to change as scope or staff fluctuates &#8212; if we follow the steps above.</p>
<p>In no way is this high-level plan a silver bullet. It isn&#8217;t necessarily realistic for all shops as I, for one, can&#8217;t remember the last time I was asked to estimate a project AFTER I received firmed up requirements and I can&#8217;t think of a single case where scope didn&#8217;t change between a project&#8217;s inception and its end. I guess that&#8217;s why estimation is an art. You must leverage whatever process you currently have in place, search hard for few facts and then provide your best guestimate all the while knowing that things may very well change tomorrow. I do believe if one respects the key factors and overall process above, there&#8217;s a better chance of success than if these core ideas are disregarded.</p>
<p>Best of luck with your next estimate. By the way, what did I miss?</p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2008/02/13/the-art-of-estimation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Question Everything</title>
		<link>http://johnnycoder.com/blog/2008/02/06/question-everything/</link>
		<comments>http://johnnycoder.com/blog/2008/02/06/question-everything/#comments</comments>
		<pubDate>Thu, 07 Feb 2008 04:57:22 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2008/02/06/question-everything/</guid>
		<description><![CDATA[You may have noticed the recent attention given to TDD and whether it has been proven effective or not.  I think the entire &#8220;conversation&#8221; is great.  I appreciate everyone&#8217;s position primarily because the parties appear to be presenting their opinions and the interpreted facts with open minds.  If I were to take sides, though, I [...]]]></description>
			<content:encoded><![CDATA[<p>You may have noticed the recent attention given to TDD and whether it has been <a href="http://haacked.com/archive/2008/01/22/research-supports-the-effectiveness-of-tdd.aspx" target="_blank">proven effective</a> or <a href="http://theruntime.com/blogs/jacob/archive/2008/01/22/tdd-proven-effective-or-is-it.aspx" target="_blank">not</a>.  I think the entire &#8220;conversation&#8221; is great.  I appreciate everyone&#8217;s position primarily because the parties appear to be presenting their opinions and the interpreted facts with open minds.  If I were to take sides, though, I think I would be in favor of the &#8220;Not&#8221; argument mostly for the reasons I <a href="http://weblogs.asp.net/jgalloway/archive/2008/02/04/no-you-re-crazy-or-the-problem-with-assuming-that-computer-programmers-have-all-that-much-in-common.aspx#5710184" target="_blank">commented</a> about on a recent post by Jon Galloway:</p>
<blockquote><p>You know, it is pretty easy to read the popular blogs (especially the ones which make references to &#8220;alpha&#8221; programmers) and think their way is the right way.  I take a lot of pride in [dev stuff], but if I hadn&#8217;t been in this business for a while, what-every-developer-must-know type posts could really get me off track.</p></blockquote>
<p>Please do not interpret this as a knock on the &#8220;popular blogs.&#8221; I like them a lot, but what I love is the fact that Jacob Proffitt took the time to challenge the <a href="http://iit-iti.nrc-cnrc.gc.ca/publications/nrc-47445_e.html" target="_blank">TDD effectiveness evidence</a>.  It isn&#8217;t for a lack of trust, it&#8217;s just that as developers it is our job to question everything.  Equally, it is our job to validate everything. </p>
<p>I literally just wrapped up a meeting with one of my lead developers.  We are just over a week away from rolling Version 2 of an application to our Production environment and today &#8212; one day after our final QA release &#8212; he discovers where Version 1 of the product lives and what it is *really* doing.  Why did it take so long to find out the real story?  Well, he (really we, I am equally responsible) trusted documentation and what past developers shared with him&#8230;and now we are in a bit of a pickle. If only we verified earlier. Fortunately, this kind of thing doesn&#8217;t happen often, but I&#8217;d be willing to bet that something questionable crosses each of our paths every single day. </p>
<p>Back to the TDD effectiveness conversation. Here&#8217;s my semi-<a href="http://en.wikipedia.org/wiki/Confirmation_bias" target="_blank">confirmation bias</a> story as it relates to TDD&#8230; </p>
<p>I worked at a shop where fingers were pointed towards Development no matter what the technical issue.  The web server lost connectivity to the app server.  Database XYZ hasn&#8217;t been backed up for 8 weeks. The L Drive has only 97KB available.  Two new defects were just introduced into the Production Environment after four months of testing.  A third party web site is down.  Quick, call the Developers.  Don&#8217;t call Networking.  Don&#8217;t call the DBAs.  Don&#8217;t call the NT Admins, the QA group or the third party site owners.  Call the Developers.  Maybe you are familiar with such a place?  Anyhow, since Development clearly had to straighten up its act, we needed to provide evidence (there&#8217;s that word again) that we were putting more care into our code and validating our applications prior to release.  Thus, TDD was introduced to my shop.  We found the perfect guinea pig project &#8212; an Enterprise Messaging System (read: glorified email engine.)  It was simply a service which sat around waiting to complete requests issued by a handful of web applications.  For this app, we did true TDD as we actually wrote the tests before the code.  All the tests passed and we rolled the service to QA and, lo and behold, not a single defect was logged against the Enterprise Messaging System.  It was deemed perfect. The greatness of TDD was soon shared at the quarterly IS meeting using the first-ever defect free application as evidence of its brilliance.  I think those who pushed for TDD were hoisted on shoulders and paraded around the conference room as Development had finally had gotten their sh*t together. </p>
<p>If truth be told, instead of praise and congratulations, everyone should have been asking a whole bunch of questions.  Was TDD really the reason for the bug free code &#8212; directly or even indirectly?  Was a superior product released because time was taken to validate all of the tests?  Perhaps merely taking the time to write the tests before coding gave Development a needed boost?  Well, these questions certainly couldn&#8217;t be proven either way.  What about the zero defect count providing evidence that TDD was our saving grace?  Very simply, there was no relationship between TDD and bug free software at all.  In fact, the service had bugs, but no one other than the developers knew it.  All bugs were logged against the calling web apps (as testers couldn&#8217;t interpret the difference between a web app failure and a service failure) and fixes were applied to the service unbeknownst to the folks looking for the last great Development hope.  It was all a matter of sharing only the information which supported Development&#8217;s case as well as stretching the truth a bit. </p>
<p>If you look hard enough this stuff happens every day whether it be accidental or intentional.  Though it is exhausting, it isn&#8217;t a bad idea to question everything &#8212; or not.  The choice is yours.</p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2008/02/06/question-everything/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Change is Good (Or Not)</title>
		<link>http://johnnycoder.com/blog/2008/02/04/change-is-good-or-not/</link>
		<comments>http://johnnycoder.com/blog/2008/02/04/change-is-good-or-not/#comments</comments>
		<pubDate>Tue, 05 Feb 2008 02:26:58 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Management]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2008/02/04/change-is-good-or-not/</guid>
		<description><![CDATA[I have a friend who has been involved in multiple reorgs over the past couple of years. He used to say &#8220;change is good&#8221; with enthusiasm and some conviction, but now he merely speaks those words under his breath in a feeble attempt to convince himself it is so. My friend chooses to think that [...]]]></description>
			<content:encoded><![CDATA[<p>I have a friend who has been involved in multiple reorgs over the past couple of years. He used to say &#8220;change is good&#8221; with enthusiasm and some conviction, but now he merely speaks those words under his breath in a feeble attempt to convince himself it is so. My friend chooses to think that the changes are made with the best intentions and for valid reason. He also chooses to think the changes must be for the better good and if a mere engineer could only see the &#8220;big picture&#8221; they would agree.</p>
<p>Yet the reorgs have become discouraging. He has said that one reorg is survivable &#8212; even welcomed. A second reorg is bearable yet questioned. A third reorg is laughable. Additional changes are, well, the joke&#8217;s over. Of course, it would be naive of my friend to think a business &#8212; any business &#8212; can survive without some element of change, but to his point, continuous change to roles, responsibilities and reporting structures can not be made without a cost.</p>
<p>When it comes right down to it, there are a number of factors which should be highly considered when mixing the personnel pot. For example, how much weight should team chemistry get? I mean, the team building, the earned trust, the relationships&#8230;it will be lost quite literally overnight. How about continuity and stability? How long does it take to get comfortable with your boss or your boss with you? All of the conversations on expectation setting, career planning and personal growth need to start back at scratch. It&#8217;s doesn&#8217;t say much for job stability, or job satisfaction, for that matter. Then there is the knowledge lost? How about when all of the application knowledge goes along with a person who has been assigned to other things? Somewhat devastating, I suppose. And when you shuffle around players someone ultimately has to do an awful lot of learning before they are a positive contributor in their new role. That can be a pretty big hit when an existing team members need to pick up the slack until the newbie is up and running. This list goes on and on&#8230;</p>
<p>Maybe breaking apart teams, swapping managers, disrupting continuity, weakening stability and losing knowledge is a small price to pay when you have a positive, end goal in mind. My friend isn&#8217;t sure, but he&#8217;s choosing to think that way&#8230;for now.</p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2008/02/04/change-is-good-or-not/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Difference Between 5 and 6 Nines</title>
		<link>http://johnnycoder.com/blog/2008/01/22/the-difference-between-5-and-6-nines/</link>
		<comments>http://johnnycoder.com/blog/2008/01/22/the-difference-between-5-and-6-nines/#comments</comments>
		<pubDate>Wed, 23 Jan 2008 01:32:57 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Interviews]]></category>
		<category><![CDATA[Management]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2008/01/22/the-difference-between-5-and-6-nines/</guid>
		<description><![CDATA[We will occasionally pepper in a few brainteasers at the end of our interviews.  Yes, they are sometimes the you-don&#8217;t-bury-survivors type questions.  And then there&#8217;s the cube question which I have written about previously.  One of the guys on my team likes to ask &#8220;port association&#8221; questions.  He gives a port number and the candidate [...]]]></description>
			<content:encoded><![CDATA[<p>We will occasionally pepper in a few brainteasers at the end of our interviews.  Yes, they are sometimes the <a href="http://www.codeslate.com/2007/01/you-dont-bury-survivors.html" target="_blank">you-don&#8217;t-bury-survivors</a> type questions.  And then there&#8217;s <a href="http://johnnycoder.com/blog/2007/01/29/the-cube-question/" target="_blank">the cube question</a> which I have written about previously.  One of the guys on my team likes to ask &#8220;port association&#8221; questions.  He gives a port number and the candidate provides an answer.  It is kind of fun to hear &#8220;80.&#8221;  &#8220;HTTP.&#8221; &#8220;443.&#8221;  &#8220;HTTPS.&#8221; &#8220;21.&#8221; &#8220;FTP.&#8221; &#8220;789&#8243; &#8220;Pardon me?&#8221; The other evening a co-worker was sharing a past interview experiences.  He was interviewing for a technical business analysis role and they asked him, &#8220;Is the clock on your VCR blinking?&#8221;  To this, he replied, &#8220;What is a VCR?&#8221;  Not a bad question and not a bad answer in my book.</p>
<p>Joel Spolsky translated uptime percentages to allowable time/year outages in today&#8217;s <a href="http://www.joelonsoftware.com/items/2008/01/22.html" target="_blank">Five Whys</a> article.  For example, an SLA stating something like 99.99% uptime allows for 52.59 minutes of downtime per year.  Where am I going with this?  How&#8217;s about this for an interview question: &#8220;What is the difference between 5 and 6 nines?&#8221;  This question will probably generate some interesting answers.  There will be a good number of individuals who are familiar with the term and they will be able to speak to the question.  Some might provide the difference between 99,999 and 999,999.  Others will perform the translation in their heads, give the correct answer down to the second and knock my socks off.  If you find yourself sitting in on an interview with me, look out.  This question is coming &#8212; or not.</p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2008/01/22/the-difference-between-5-and-6-nines/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>DBTalk</title>
		<link>http://johnnycoder.com/blog/2007/08/04/dbtalk/</link>
		<comments>http://johnnycoder.com/blog/2007/08/04/dbtalk/#comments</comments>
		<pubDate>Sat, 04 Aug 2007 20:10:23 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Team]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2007/08/04/dbtalk/</guid>
		<description><![CDATA[Over the past 6 months, I&#8217;ve subscribed to the &#8220;DBTalk&#8221; distribution list at work and I&#8217;ve really been enjoying it.  Here&#8217;s are my top 2 reasons: 1. Though I know there are many .NET coders who also happen to be very capable database designers and developers, I believe that the many of us still have a lot to [...]]]></description>
			<content:encoded><![CDATA[<p>Over the past 6 months, I&#8217;ve subscribed to the &#8220;DBTalk&#8221; distribution list at work and I&#8217;ve really been enjoying it.  Here&#8217;s are my top 2 reasons:</p>
<p>1. Though I know there are many .NET coders who also happen to be very capable database designers and developers, I believe that the many of us still have a lot to learn.  I would say that we all know at least the basics, but there&#8217;s an awful lot of DB knowledge that has eludes us over the years.  If nothing else, the &#8220;DBTalk&#8221; distribution list has proven to be a non-intrusive way to educate an entire group of developers on SQL Server Best Practices and a few Tips &amp; Tricks.</p>
<p>2. The moderator does a really nice job of getting everyone involved.  Those of us who frequent technical blogs know this isn&#8217;t always easy &#8212; especially when your audience isn&#8217;t necessarily comfortable with the topic.  Fortunately, the moderate provides information on varying topics for all levels and he throws out carrots all the time.  For example, he&#8217;ll present a Tip of the Day and ask if anyone has an alternative solution or he will simply submit a problem and ask for possible solutions.  It seems with most conversation at least someone on the distribution list is willing to bite.</p>
<p>Anyhow, with permission, I&#8217;ll be posting a number of the topics and tips which have been discussed over the past several months.  They may come all at once, in chunks or one every once in a while.  I haven&#8217;t yet decided.</p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2007/08/04/dbtalk/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Recognizing Programmer Breeds</title>
		<link>http://johnnycoder.com/blog/2007/01/29/recognizing-programmer-breeds/</link>
		<comments>http://johnnycoder.com/blog/2007/01/29/recognizing-programmer-breeds/#comments</comments>
		<pubDate>Tue, 30 Jan 2007 00:19:02 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Reviews]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2007/01/29/recognizing-programmer-breeds/</guid>
		<description><![CDATA[Last week&#8217;s post about The Anti-team by Jemery Miller reminded me of a book I picked up a while back: Herding Cats: A Primer for Programmers Who Lead Programmers by J. Hank Rainwater.  In his book, Rainwater offers tips and management techniques on everything from code reviews to managing a distributed workforce.  With good humor, he discusses dozens [...]]]></description>
			<content:encoded><![CDATA[<p>Last week&#8217;s post about <a href="http://codebetter.com/blogs/jeremy.miller/archive/2007/01/21/The-Anti-Team.aspx">The Anti-team</a> by Jemery Miller reminded me of a book I picked up a while back: <em><a href="http://www.amazon.com/gp/product/1590590171/104-3961120-6505513?ie=UTF8&amp;tag=johnnycoderco-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=1590590171">Herding Cats: A Primer for Programmers Who Lead Programmers</a></em> by J. Hank Rainwater.  In his book, Rainwater offers <a href="http://johnnycoder.com/blog/wp-content/uploads/2007/01/WindowsLiveWriter/HerdingCats_60A0/HC21.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 20px; border-right-width: 0px" src="http://johnnycoder.com/blog/wp-content/uploads/2007/01/WindowsLiveWriter/HerdingCats_60A0/HC_thumb1.jpg" border="0" alt="" align="right" /></a>tips and management techniques on everything from code reviews to managing a distributed workforce.  With good humor, he discusses dozens to topics which relate to a software manager&#8217;s every day. </p>
<p>Per Amazon&#8217;s Editorial Review:</p>
<blockquote><p>While many titles on software engineering and management lean toward the theoretical, this bookâ€™s candid and practical focus help distinguish it from the crowd. It also helps that the author is a good writer and mixes quotes from a variety of sources (including Jack Welch and Andy Grove). This is one of the few titles to concentrate on the all-too-common problem of good programmers promoted to project leads, where management and people skills, rather than raw programming chops, will often determine success.</p></blockquote>
<p>I recommend this book to software development leaders with a request that special attention is given to the section entitled &#8220;Recognizing Programmer Breeds.&#8221;  Here, Rainwater &#8220;stereotypes&#8221; developers for the purpose of understanding and identifying ways to work with them.  He groups the breeds into three categories: major, minor and mongrel.  <em>Majors</em> refers to the most common types you&#8217;ll find in the workforce.  The <em>minor</em> breed are sometimes seen, but not as frequently as the major ones.  <em>Mongrels</em>, are not very desirable, but the do exist in the workplace, and as a result you need to recognize them.  Mongrels can work out fine, as long as you help them build up their skills to overcome the weaknesses they inherently bring to the coding process. </p>
<p>As Rainwater notes,</p>
<blockquote><p>Any individual can be an amalgam of the characteristics identified with a breed &#8212; this makes working with that person a challenge but well worth the effort.  Programmers are a wonderfully complex people.  Relish the differences and unique styles of each breed.  You&#8217;ll probably recognize many of these traits the next time you look in the mirror.</p></blockquote>
<p>Here are the developer personality types which Rainwater dissects in his book:</p>
<p><strong>The Major Breeds<br />
</strong>The Architecture<br />
The Constructionist<br />
The Artist<br />
The Engineer<br />
The Scientist<br />
The Speed Demon</p>
<p><strong>The Minor Breeds<br />
</strong>The Magician<br />
The Minimalist<br />
The Analogist<br />
The Toy Maker</p>
<p><strong>The Mongrels<br />
</strong>The Slob<br />
The Intimidated<br />
The Amateur<br />
The Ignoramus<br />
The Salad Chef</p>
<p>You may recognize a few (without having to pick up a copy of his book.)</p>
<p>Update: You&#8217;re in luck.  As <a href="http://workblog.jonrowett.com/index.php/2007/01/30/constructionist-or-salad-chef/">Jon Rowett</a> points out, <em>Recognizing Programmer Breeds</em> may be found at <a href="http://www.apress.com/ApressCorporate/supplement/1/9/1590590171-35.pdf">Apress.com</a> for free.</p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2007/01/29/recognizing-programmer-breeds/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The Cube Question</title>
		<link>http://johnnycoder.com/blog/2007/01/29/the-cube-question/</link>
		<comments>http://johnnycoder.com/blog/2007/01/29/the-cube-question/#comments</comments>
		<pubDate>Mon, 29 Jan 2007 22:53:24 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Interviews]]></category>
		<category><![CDATA[Management]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2007/01/29/the-cube-question/</guid>
		<description><![CDATA[If I had to guess, I would say I conducted at least 100 phone or in-person interviews last year and all of the onsite interviews followed the same standard format: 1. Three or four lead developers, the interviewee and I sit in a large conference room. 2. Per our request, the candidate spends 3-5 minutes [...]]]></description>
			<content:encoded><![CDATA[<p>If I had to guess, I would say I conducted at least 100 phone or in-person interviews last year and all of the onsite interviews followed the same standard format:</p>
<p>1. Three or four lead developers, the interviewee and I sit in a large conference room.<br />
2. Per our request, the candidate spends 3-5 minutes telling us about themselves. <br />
3. The leads and I then take turns asking the candidate both technical and team-oriented questions. <br />
4. When I get the sense that the team has had adequate time to make a hire/no hire decision, I ask the &#8220;cube question.&#8221; <br />
5. Finally, we give the candidate some time to ask us questions. </p>
<p>So what is the cube question?  It&#8217;s something I was asked in an interview years and years ago and I&#8217;ve never forgotten it.  &#8220;How many sides does a cube have?&#8221;  That&#8217;s it.  Simple, yet surprisingly 40% of our candidates answer incorrectly. Honest. My guess is that most interviewees figure it must be a trick question and they over-think the answer.  Others are probably so focused on answering the technical and team-oriented questions that they aren&#8217;t able to get their brain to chew on anything else.  A small portion probably just have no idea what it is I&#8217;m asking.</p>
<p>When it comes down to it, the question, well, more importantly, the answer means nothing to me.  Whether the candidate answers right or wrong, it is a nice way to wrap up our<em> </em>Q &amp; A session and let the candidate ask us some questions.  Not surprisingly, the bulk of the time, the candidate&#8217;s first question is &#8220;Did I answer the cube question correctly?&#8221; </p>
<p>When the candidate does give us the wrong answer, we sometimes ask for an explanation.  We&#8217;ve gotten reasonable explanations why one would answer 8 or 12, but one candidate answered 35.  When we questioned him, he said, &#8220;In his world, a cube has 35 sides.&#8221;  We hired the guy and he ended up being one the most fun, crazy and talented coders around and we still laugh about it today.</p>
<p>[ I've had this post in my queue for a while now.  I had to get it out there today after reading Jim Martin's post, <a href="http://www.codeslate.com/2007/01/you-dont-bury-survivors.html">You Don't Bury Survivors</a>.  Read it. It's fantastic. ]</p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2007/01/29/the-cube-question/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>//TODO Don&#8217;t Waste Time</title>
		<link>http://johnnycoder.com/blog/2007/01/18/todo-dont-waste-time/</link>
		<comments>http://johnnycoder.com/blog/2007/01/18/todo-dont-waste-time/#comments</comments>
		<pubDate>Thu, 18 Jan 2007 17:35:04 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[Productivity]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2007/01/18/todo-dont-waste-time/</guid>
		<description><![CDATA[When I&#8217;m up against a tight deadline, I tend to avoid tasks which could unnecessarily eat up precious time.  These tasks aren&#8217;t always the most challenging or difficult, but I recognize them as having more than one possible solution which will result in my over-thinking, over-researching and/or over-architecting (aka wasting time.)  Time-gobbling task get flagged with a //TODO comment [...]]]></description>
			<content:encoded><![CDATA[<p>When I&#8217;m up against a tight deadline, I tend to avoid tasks which could unnecessarily eat up precious time.  These tasks aren&#8217;t always the most challenging or difficult, but I recognize them as having more than one possible solution which will result in my over-thinking, over-researching and/or over-architecting (aka wasting time.)  Time-gobbling task get flagged with a //TODO comment and a quick hack which gets the code immediately operational.  Once the stopgap is in place, I move onto other tasks and wait until the best solution comes to me in my sleep, in the shower, while playing racquetball or anywhere other than at the computer.</p>
<p>Most recently, I&#8217;ve needed to generate item numbers.  Each number needs to be exactly 12 digits in length and unique.  I&#8217;ve been sitting on this task and a hack (which simply uses the last 12 digits of DateTime.Now.Ticks) for roughly a week now and I&#8217;m starting to get anxious because an elegant solution which avoids a database lookup is not coming to me.  Maybe I should to shower more often?  Maybe I should <a href="http://weblogs.asp.net/jgalloway/archive/2007/01/10/code-puzzle-2-generate-random-fake-surnames.aspx">generate random fake surnames</a> instead?  In any case, there are still other tasks to complete and I&#8217;m determined to not let item numbers to slow me down.</p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2007/01/18/todo-dont-waste-time/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t Lose Sight Of The Problem</title>
		<link>http://johnnycoder.com/blog/2006/11/10/dont-lose-sight-of-the-problem/</link>
		<comments>http://johnnycoder.com/blog/2006/11/10/dont-lose-sight-of-the-problem/#comments</comments>
		<pubDate>Fri, 10 Nov 2006 20:24:34 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Management]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2006/11/10/dont-lose-sight-of-the-problem/</guid>
		<description><![CDATA[You may remember singing There&#8217;s a Hole in Bucket when you were younger.  This is the song where boys sing the part of Henry, the poor guy who desperately needs to fix his bucket, and girls sing the part of Liza, his wife, who dreams up the fix.  There&#8217;s a hole in the bucket, dear Liza, dear [...]]]></description>
			<content:encoded><![CDATA[<p>You may remember singing <em>There&#8217;s a Hole in Bucket </em>when you were younger.  This is the <a href="http://www.songsforteaching.com/folk/theresaholeinthebucket.htm" target="_blank">song</a> where boys sing the part of Henry, the poor guy who desperately needs to fix his bucket, and girls sing the part of Liza, his wife, who dreams up the fix. </p>
<blockquote><p>There&#8217;s a hole in the bucket, dear Liza, dear Liza,<br />
There&#8217;s a hole in the bucket, dear Liza, a hole.</p>
<p>So fix it dear Henry, dear Henry, dear Henry,<br />
So fix it dear Henry, dear Henry, fix it.</p>
<p>With what should I fix it, dear Liza, dear Liza,<br />
With what should I fix it, dear Liza, with what?</p>
<p><a href="http://www.songsforteaching.com/folk/theresaholeinthebucket.htm" target="_blank">&#8230;</a> </p></blockquote>
<p>The song begins with a simple problem. Unfortunately, in the process of patching the hole, Henry encounters issue after issue and, in the end, the hole is virtually impossible to fix.  Of course, we see the err of Henry&#8217;s ways.  He lost sight of <span style="text-decoration: underline;">the problem</span>  because he was sidetracked by other problems which he introduced.  We may laugh at Henry, but we fall victim to this same mistake in software development all the time. </p>
<p>A few years back, I spent a lot of time trying to speed up a query which was hitting a single table over a linked server connection.  I called in a number of people for help and, though we all learned a lot about SQL optimization in the process, we were working on the wrong problem.  I needed to pull data from a table. That&#8217;s it! The fact that my query was performing slowly was a completely different <a href="http://johnnycoder.com/blog/wp-content/uploads/2006/11/WindowsLiveWriter/AlwaysRememberTheInitialProblem_E887/oldWAnimals%5B2%5D.jpg"><img style="margin: 10px 0px 0px 5px" src="http://johnnycoder.com/blog/wp-content/uploads/2006/11/WindowsLiveWriter/AlwaysRememberTheInitialProblem_E887/oldWAnimals_thumb%5B2%5D.jpg" alt="" width="250" height="218" align="right" /></a>problem and a big distraction. I didn&#8217;t realize this, however, until someone was smart enough to step back and ask &#8220;What is <span style="text-decoration: underline;">the problem</span> we are trying to solve again?&#8221;  Once our focus was back on <span style="text-decoration: underline;">the problem</span>, we reassessed the solution and 30 minutes later we were hitting the table directly and the expected results were coming back quickly. </p>
<p>Of course, we don&#8217;t only get off track when coding.  The same thing happens in meetings.  Though we may start off with the intension of addressing concerns that a primary server is running dangerously low on disk space, the conversation may take any number of twists and turns.  In this case, maybe focus shifts to how to get approval to work through a different hardware vendor, how can we speed up the company&#8217;s reimbursement program, or what can we do to make sure that the group responsible for maintaining the servers actually maintains the servers.  Whatever the case, let&#8217;s hope there is somebody in the room willing to ask &#8220;What is <span style="text-decoration: underline;">the problem</span> we are trying to solve again?&#8221;  If you are lucky, you may actually walk out of the meeting with a fix to the disk space issue.</p>
<p>If you do find yourself down the wrong path, put your focus back on <span style="text-decoration: underline;">the problem</span> and ask yourself Henry&#8217;s question (&#8220;With what should I fix it?&#8221;) again.  A better solution is more likely to come to you without the unnecessary distraction of other problems. </p>
<p>I bet this advice would have helped out that poor old woman who swallowed a fly&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2006/11/10/dont-lose-sight-of-the-problem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Coding Standards &#8211; The Devil Is In The Details</title>
		<link>http://johnnycoder.com/blog/2006/11/03/coding-standards-the-devil-is-in-the-details/</link>
		<comments>http://johnnycoder.com/blog/2006/11/03/coding-standards-the-devil-is-in-the-details/#comments</comments>
		<pubDate>Fri, 03 Nov 2006 19:55:30 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Documentation]]></category>
		<category><![CDATA[Management]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2006/11/03/coding-standards-the-devil-is-in-the-details/</guid>
		<description><![CDATA[A couple of years back, I was tasked with compiling C# coding standards for our development department.  To be honest, I wasn&#8217;t all that excited about the assignment.  Previous attempts had been met with quite a bit of resistance and worthless debate and I wasn&#8217;t sure I really wanted to open that can of worms again.  After [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of years back, I was tasked with compiling C# coding standards for our development department.  To be honest, I wasn&#8217;t all that excited about the assignment.  Previous attempts had been met with quite a bit of resistance and worthless debate and I wasn&#8217;t sure I really wanted to open that can of worms again.  After all, I felt that we had built a talented team of developers who saw eye-to-eye on most &#8220;technical things&#8221; so why bother getting everyone riled up? As you know, there are many legitimate reasons for &#8220;getting everyone riled up.&#8221;  In our case, there were two very good reasons which made my assignment somewhat mandatory:</p>
<ol>
<li>We had plans to greatly expand the size of our group in the very near future and documented standards would help get the newbies up-to-speed quickly.</li>
<li>Our group&#8217;s technical roadmap was becoming more defined (heck, it was taking a turn with SOA) and there were embracing a number of technical advances such as .NET 2.0, Remoting and AJAX and we needed to ensure the existing staff on the same page. </li>
</ol>
<p>Ultimately, I accepted the challenge and standards were put in place with very little blood shed.  Of course, I took a few measure to ensure that mud-slinging and stone-throwing was kept to a minimum.First, I anticipated the pain and I didn&#8217;t let it happen. To accomplish this, I guess I was a bit evasive.  I didn&#8217;t solicit any help or opinions at first.  I did endless online searches and I consulted a few books, but I avoided internal roundtable discussions. I also decided to wait until the documentation was rather polished before requesting any feedback. Once I did seek feedback, I kept participant counts low.  In fact, only a handful of our technical leaders were invited to the review before distributing before the document was distributed to the entire development group.</p>
<p>Second, it was established early on that there would be difference of opinion and this was okay.  Actually, it was almost encouraged, but we all (non-verbally) agreed to keep our egos out of the debate.  This ultimately lead to us coming to a common ground or simply opting to &#8220;choose our battles&#8221; and accept that we wouldn&#8217;t always get what we wanted.  This, in conjunction with everyone knowing their feedback was valued and respected, kept our conversations on track.  Also if a topic got at all heated, we quickly moved onto something else in an effort to stay focused, to keep moving forward and keep everyone happy.</p>
<p>Most importantly, however, we didn&#8217;t sweat the small stuff.  If you have been responsible for documenting <span style="text-decoration: underline;">agreed upon</span> standards, you know what I&#8217;m talking about.  Developers tend to spend just as much time hashing out the small stuff as they do the big stuff.  When it comes to establishing your team&#8217;s coding guidelines, <strong>the devil is in the details</strong>.  The classic example is code formatting.  &#8220;Which case are we going to use? Camel or Pascal or both?&#8221;  &#8220;Is Hungarian notation really dead because there is still a lot of merit in using it for form elements?&#8221; &#8220;Should we prefix private property names with underscores?&#8221; &#8220;We will use curly braces within our if-else statements even if the conditions are only a single line, right?&#8221; &#8220;How many spaces are we going to agree to indent?  Please assure me that no one indents using spaces!  Everyone better be using the Tab key!&#8221;  There are about a million distracting, time-consuming, worthless arguments which one can have about code formatting (and other similar topics) but they provide little value. These debates can suck the life out of an initiative so beware.</p>
<p>I think I got lucky on my third point. To some extend, our development focus had been rapidly changing over the past few years and the individuals helping to define our standards were now interested in the big picture.  Perhaps we felt we had &#8220;better things&#8221; to discuss or maybe we had all learned from our past and we knew the danger of  &#8220;the details.&#8221;  In any case, we concentrate on the big ticket items like namespacing, data access and logging.  We traded in the time we would have given to meaningless debates and we put frameworks and templates in place.    </p>
<p>Whatever your reason, it is important to have standards.  Do yourself a favor.  When it comes time to defining your own, avoid the details.  Otherwise, prepare for a battle which nobody wins and nothing gets done.</p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2006/11/03/coding-standards-the-devil-is-in-the-details/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>If You Aren&#8217;t Making Mistakes&#8230;</title>
		<link>http://johnnycoder.com/blog/2006/11/01/if-you-arent-making-mistakes/</link>
		<comments>http://johnnycoder.com/blog/2006/11/01/if-you-arent-making-mistakes/#comments</comments>
		<pubDate>Thu, 02 Nov 2006 03:27:33 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Management]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2006/11/01/if-you-arent-making-mistakes/</guid>
		<description><![CDATA[I have heard many endings to this quote over the years. &#8220;If you aren&#8217;t making mistakes, you aren&#8217;t going to learn anything.&#8221; &#8220;If you aren&#8217;t making mistakes, you aren&#8217;t living.&#8221; &#8220;If you aren&#8217;t making mistakes, you aren&#8217;t taking enough risk.&#8221; There may be others. Take your pick. Choose the most appropriate quote for the situation [...]]]></description>
			<content:encoded><![CDATA[<p>I have heard many endings to this quote over the years. &#8220;If you aren&#8217;t making mistakes, you aren&#8217;t going to learn anything.&#8221; &#8220;If you aren&#8217;t making mistakes, you aren&#8217;t living.&#8221; &#8220;If you aren&#8217;t making mistakes, you aren&#8217;t taking enough risk.&#8221; There may be others. Take your pick. Choose the most appropriate quote for the situation and the individual you are consoling. Or go ahead and make up your your own. How&#8217;s about, &#8220;If you aren&#8217;t making mistakes, the problems aren&#8217;t hard enough.&#8221; It&#8217;s kind of catchy.</p>
<p>I have actually taken a liking to &#8220;If you aren&#8217;t making mistakes, you aren&#8217;t doing anything.&#8221; It works for nearly any occasion and it is 100% true. In software development, everyone makes mistakes. So, armed with this knowledge, what do we do about it?</p>
<p>First, we need to learn from your mistakes. No surprise here! Well, the problem is we don&#8217;t. We tend to get so focused on fixing our mistakes (and then we get so sidetracked by the praise which follows the amazing fix) that we neglect to put any time or thought into preventing the problem from occurring again. Here&#8217;s what I mean:</p>
<p>Web Service X is failing on all servers and it is negatively impacting all users. This is a code red. Fix this or update your resume. After 30 minutes, you identify the issue. Web Service X shares a database with Web Application Y which recently modified and deployed a few stored procedures. The stored procedure changes are causing the web service to continuously fail so you roll back the code and the problem is solved. The fire is out. Everyone is happy, but really, your job isn&#8217;t done. It&#8217;s time to document the dependency and share the mistake with fellow developers. Perhaps you could discuss in a post mortem meeting. If nothing else, post a note on your monitor which reads, &#8220;Web Service X must be updated and deployed with Web Application Y or else&#8230;&#8221; Or else three months down Web Application Y is going to be deployed and break Web Service X again. Round and round we go.</p>
<p>[ On a cynical tangent: You know you were the one who caused the problem in the first place, right? Want to be hero for a day? Try this experiment. Take down a server, wait for company-wide panic and then bring the server back up. Finally, listen for the whispers which will soon circulate through the halls. "Was the problem solved? Great. Who solved it? Great. They are so great! I don't know what we would do without them!" It's funny, but this type of thing happens all the time. I mean, who can solve a problem faster than the person who causes it? And doesn't everyone forget about the problem's cause once it is solved? Though it may sound silly, the quickest way to save the day is to be the one to ruin it in the first place. ]</p>
<p>Okay. Now we&#8217;re learning from our mistakes. (At the very least, we&#8217;re writing never-do-this-again warnings to ourselves.) The second thing to do is accept your mistakes. You must truly understand that mistakes come with the a coder&#8217;s territory and know that you are going to botch things up every once and a while. The underlying message is don&#8217;t be afraid of failure and try to spread this viewpoint to all team members. I know it is especially difficult if you have witnessed (or have been the brunt of) the fingerpointing when it is late in the project lifecycle and things are looking grim, but this is extremely important. You are going to do your best work if you aren&#8217;t worried about your next blunder. I&#8217;m not saying to throw caution to the wind and start coding with reckless abandon. To the contrary, you must continue to code with a lot of heart and consideration knowing that you are going to live to tell about your next mistake. The best way to become comfortable with your mistakes is to share them with others. Everyone likes a person who can admit their mistakes and poke a little fun at themselves. Here&#8217;s a fine example on how to put this to practice:</p>
<p>We hosted a small post-release party for the members of our development team recently. About halfway through the party, we went around the room and openly shared the mistakes which were made along the way. It was comfortable and safe and everyone had a story to share. My favorite story went something like this:</p>
<blockquote><p>The QA department submitted a defect that our entire user base appeared to be male. Not a single female could be found in the database and the testers correctly deemed this an issue. We looked at the XML posted to us from our vendor. We found that each user&#8217;s gender was included in plain text as either &#8220;male&#8221; or &#8220;female.&#8221; From this, we knew there should be instances of female users. We then turned to the XML parsing algorithm. The mistake was easy to find since the code read &#8220;If the gender value contains M-A-L-E, the user is a male. Otherwise the user is a female.&#8221;</p></blockquote>
<p>It was undisputedly a stupid, yet amusing, mistake.</p>
<p>Coincidentally, the defect was introduced by one of our better coders. This guy single-handedly coded a service which was the project&#8217;s foundation. He worked many nights and weekends and did everything in his power to ensure the project would be successful. Without him, we never would have met our deadline and no one could accuse him of &#8220;not doing anything.&#8221; The best thing is he was still contributing, even at the victory party, by demonstrating what to do about mistakes. You learn from them and you accept them. Eventually you may be fortunate enough to even laugh about them.</p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2006/11/01/if-you-arent-making-mistakes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Solve Problems With Rubber Ducking</title>
		<link>http://johnnycoder.com/blog/2006/10/29/solve-problems-with-rubber-ducking/</link>
		<comments>http://johnnycoder.com/blog/2006/10/29/solve-problems-with-rubber-ducking/#comments</comments>
		<pubDate>Mon, 30 Oct 2006 04:59:40 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Recommended]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2006/10/29/solve-problems-with-rubber-ducking/</guid>
		<description><![CDATA[What is &#8220;Rubber Ducking?&#8221; The phrase was made famous by Andrew Hunt and David Thomas in the book The Pragmatic Programmer: From Journeyman to Master.  A book, by the way,  which is required reading for all coders.  In fact, it is time I reread it.  You may already be familiar with this term, but in [...]]]></description>
			<content:encoded><![CDATA[<p>What is &#8220;Rubber Ducking?&#8221; The phrase was made famous by Andrew Hunt and David Thomas in the book <a href="http://www.amazon.com/gp/product/020161622X?ie=UTF8&amp;tag=johnnycoderco-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=020161622X"><em>The Pragmatic Programmer: From Journeyman to Master</em></a>.  A book, by the way,  which is required reading for all coders.  In fact, it is time I reread it.  You may already be familiar with this term, but in a nutshell, the idea is that simply explaining a problem aloud often helps one come up with a solution on their own. In the words of the Pragmatic Programmer,</p>
<blockquote><p>Place a rubber duck on your monitor and describe your problems to it. There&#8217;s something magical about stating your problems aloud that makes the solution more clear.</p></blockquote>
<p><a href="http://www.amazon.com/gp/product/020161622X?ie=UTF8&amp;tag=johnnycoderco-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=020161622X"><img style="margin: 5px 13px 0px 3px" src="http://johnnycoder.com/blog/wp-content/uploads/2006/10/WindowsLiveWriter/RubberDucking_14F1B/programmer_thumb%5B1%5D.jpg" alt="" width="152" height="193" align="left" /></a>This is an effective approach to problem solving.  I&#8217;ve actually had a duck work by my side for years now.  He&#8217;s a good, patient, loyal duck.  Of course, you don&#8217;t need a rubber duck.  Some people use email.   In the process of meticulously documenting their problem, which will ultimately be shipped to all the smartest people they know looking for help, the solution comes to them.  Some people call a colleague into their office, point at the screen and say, &#8220;I&#8217;d like to get a second pair of eyes on this.&#8221;  The request for review comes along with a detailed overview of the problem which, in turn, begets an answer to one&#8217;s own question.  As they say in the book, it&#8217;s magical.I stumbled upon an <a href="http://www.ddj.com/dept/architect/184415833" target="_blank">Interview with Hunt and Thomas</a> which tells a bit more about rubber ducking.  It&#8217;s a quick read and it&#8217;s worth a look.</p>
<blockquote><p>Reading your source code aloud, or explaining it to someone else, has concrete and documented value, whether in a formal setting of code inspections, peer reviews or just chatting with your cube neighbor, said Thomas. &#8220;Have you ever done this? You stare at a piece of code for an hour, debug and debug, and finally, in desperation, you pull your friend in from his cubicle. You start to explain the code and how it works, but then â€¦&#8221; (smacking his forehead) &#8220;Oh, <em>that&#8217;s</em> it!&#8221;The audience laughed again, and most of them were nodding ruefully. In fact, Thomas said, you can even resort to &#8220;rubber-ducking.&#8221; &#8220;I don&#8217;t know why it works, but it works. You put the rubber duck on top of your monitor. Then, when you&#8217;re stuck on something, you start explaining what the code does aloud to the duck.&#8221; And before you&#8217;ve finished the explanation, the solution comes to you. You smack your forehead, and politely thank the duck, he said to general laughter.</p></blockquote>
<p>Why do I bring this up?  I am currently on a 6-week leave of absence from work spending time with my wife and new born son.  Prior to leaving the office a few weeks back, I dropped my duck off on a colleague&#8217;s desk without any advanced warning that a duck-sitter was needed.  I know the sentiment was appreciated, but I&#8217;m not positive the significance was understood.  As I mentioned earlier, you don&#8217;t need a rubber duck.  All you need is to willingly share your problems aloud.  I was this person&#8217;s rubber duck.  They always came up with the answers on their own, but not before giving me the opportunity to listen.  </p>
<p>I hope my duck is getting an earful right now&#8230;</p>
<p><img style="margin: 0px; border-top-style: none! important; border-right-style: none! important; border-left-style: none! important; border-bottom-style: none! important" src="http://www.assoc-amazon.com/e/ir?t=johnnycoderco-20&amp;l=as2&amp;o=1&amp;a=020161622X" border="0" alt="" width="1" height="1" /></p>
<p>* Update: Previously, I incorrectly credited Hunt and Thomas with coming up with the phrase &#8220;Rubber Ducking.&#8221;  In fact, it was Greg Pugh who coined the term.  Thanks to Ed Davies and his considerate comment for addressing my oversight.</p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2006/10/29/solve-problems-with-rubber-ducking/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Rethink Job Postings</title>
		<link>http://johnnycoder.com/blog/2006/10/20/rethink-job-postings/</link>
		<comments>http://johnnycoder.com/blog/2006/10/20/rethink-job-postings/#comments</comments>
		<pubDate>Fri, 20 Oct 2006 17:44:39 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Interviews]]></category>
		<category><![CDATA[Management]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/?p=63</guid>
		<description><![CDATA[Before you submit your next job posting, keep the end result in mind. If you are in the market for talented, interesting people who are accountable for producing quality work, you may wish to give your job listing a second look. Haacked.com discussed the Art of the Job Post today. The article shares where the [...]]]></description>
			<content:encoded><![CDATA[<p>Before you submit your next job posting, keep the end result in mind. If you are in the market for talented, interesting people who are accountable for producing quality work, you may wish to give your job listing a second look.</p>
<p><a href="http://haacked.com/" target="_blank">Haacked.com</a> discussed the <a href="http://haacked.com/archive/2006/10/20/Art_of_the_Job_Post.aspx" target="_blank">Art of the Job Post</a> today. The article shares where the great majority of job posters miss the boat and offers tips to get back on track.</p>
<p>The author suggests that one should avoid the standard, monotonous outline of the potential employee&#8217;s role and responsibilities. One should not focus solely on what a candidate must provide your company, but, to the contrary, the emphasis should be on what the company has to offer.</p>
<blockquote><p>A good job ad should not explain what hoops the candidate must jump through to join your company, it should explain <em>why</em> the candidate should even want to jump through those hoops in the first place.</p></blockquote>
<p>For example, you should not be afraid to cough up information about your company&#8217;s personality and culture. After all, a good candidate is going to ask about this anyway.</p>
<blockquote><p>Sure, many corporations seem like soulless cubicle farms in which workers are seen as mindless drones. But surely not <em>your</em> company, right? So why does your job posting have a tombstone all over it?</p></blockquote>
<p>You should also &#8220;appeal to the vanity&#8221; of those seeking employment. Challenge the candidate to show how great they are. As the article states, asking the individual if they are a good problem solver conjures up the desire to prove it.</p>
<p>Again, your job posting should be a request for interesting, talented people &#8212; not just those who have methodically pack their resumes with the alphabet soup they think will help them land the offered position. Find these people and it is a win-win for everyone.</p>
<p>In my experience <a href="http://haacked.com/" target="_blank">Haacked.com</a>&#8216;s comments are accurate. Most job postings are bland and focus only on experience, skills and responsibilities. Heck, I&#8217;ve been involved in the hiring process for a few years now and I&#8217;m guilty of using the same cookiecutter job description template as everyone else. Shame on me, right? Well, I will give myself some credit. I do request team players with strong verbal and written communication skills and a willingness to learn. But these are only secondary criterion. First and foremost, I evaluate a candidate&#8217;s experience and it is their technical know-how which lands them a phone screening. In the end, however, it&#8217;s the &#8220;soft skills&#8221; which get the individual hired.</p>
<p>There&#8217;s a lot to be said about the hiring process. It can be extremely frustrating, but also unbelievably satisfying. As one can imagine, it&#8217;s crucial to get off on the right foot so mind the &#8220;Art of the Job Post.&#8221;</p>
<p>I&#8217;m sure there&#8217;s more to come on the topic in the future&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2006/10/20/rethink-job-postings/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why Don&#8217;t We Handle Exceptions</title>
		<link>http://johnnycoder.com/blog/2006/10/17/why-dont-we-handle-exceptions/</link>
		<comments>http://johnnycoder.com/blog/2006/10/17/why-dont-we-handle-exceptions/#comments</comments>
		<pubDate>Tue, 17 Oct 2006 16:59:00 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Management]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/?p=57</guid>
		<description><![CDATA[Exception handling is extremely important, isn&#8217;t it? When it comes to testing, troubleshooting and maintenance it is paramount. Exception handling is definitely highlighted on every developers list of application technical requirements. So, why don&#8217;t all applications have proper exception handling? I have a few ideas. The first and most likely reason is most developers (no [...]]]></description>
			<content:encoded><![CDATA[<p>Exception handling is extremely important, isn&#8217;t it? When it comes to testing, troubleshooting and maintenance it is paramount. Exception handling is definitely highlighted on every developers list of application technical requirements. So, why don&#8217;t all applications have proper exception handling? I have a few ideas.</p>
<p>The first and most likely reason is most developers (no matter how experienced) don&#8217;t have a good understanding of how to do it. This operation may seem trivial to some, but it actually takes a good amount of attention and care to do correctly. Granted, in many cases it&#8217;s perfectly fine to simply wrap the contents of a function with a &#8220;generic&#8221; try/catch block and merely bubble the exception up to its caller. Great. But what does the caller do with the exception? Nine out of ten times the caller, in turn, will also bubble the exception up (because that&#8217;s what the &#8220;pattern&#8221; does) or it swallows it. Even if a coder uses this bare bones approach, there are usually issues with the implementation. For example, there is a big difference between <em>throw;</em> and <em>throw ex;</em>. The difference is that <em>throw;</em> preserves the original stack trace and <em>throw ex;</em> truncates the stack trace below the method in which the <em>throw ex;</em> call is located. Most of the time, <em>throw ex;</em> is inappropriately. There are many other examples of poor exception handling, but here&#8217;s my favorite &#8212; the coder does everything &#8220;by the book&#8221; until it is time to display a error page and a coder reveals the exception details including secure information such as connection strings to the user. Yikes! Not understand proper exception handling can be dangerous.</p>
<p>The second reason is priority and timeline. Exception handling isn&#8217;t sexy and, let&#8217;s be honest, it doesn&#8217;t need to be in place before an application can be deployed. Hence, exception handling is usually pushed to the backburner &#8212; along with technical documentation. Only once the application requires future troubleshooting do we feel the pain of the missing &#8220;requirement.&#8221; Interesting enough, a colleague of mine now waits until his code base is quite stable to implement his error handling. He does this without regard for priority and timeline. He&#8217;d prefer to have his application assume unnecessary fatal errors early on it the project lifecycle rather than mask the issues through improper exception handling. All the same, timeline is still a standard developer excuse for lack of error handling.</p>
<p>The third reason is ego. Aren&#8217;t we all a little guilty of thinking our code can&#8217;t fail? After all, we can&#8217;t have a bunch of coders with defeatist-attitudes working on our projects. <img src='http://johnnycoder.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Without the safety net of exception handling, we are bound to write better code, right? (Of course, this argument doesn&#8217;t hold a lot of water since it would promote getting rid of the QA team if we wanted really good code.) I do think ego is a factor though, but I&#8217;m not sure to what extent.</p>
<p>That&#8217;s my take on exception handling. What do you think?</p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2006/10/17/why-dont-we-handle-exceptions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manual Code Generation</title>
		<link>http://johnnycoder.com/blog/2006/10/16/manual-code-generation/</link>
		<comments>http://johnnycoder.com/blog/2006/10/16/manual-code-generation/#comments</comments>
		<pubDate>Tue, 17 Oct 2006 00:19:00 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Code Generation]]></category>
		<category><![CDATA[Management]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/?p=56</guid>
		<description><![CDATA[Code generation is not a new concept. It has been around since the first lazy, err, smart coder realized that Hello World was the foundation of Hello World Too. I&#8217;m sure they figured they had written the code twice already and the third iteration is undoubtedly around the corner so they felt somewhat obligated to [...]]]></description>
			<content:encoded><![CDATA[<p><span class="pageSubTitle">Code generation is not a new concept. It has been around since the first lazy, err, smart coder realized that Hello World was the foundation of Hello World Too. I&#8217;m sure they figured they had written the code twice already and the third iteration is undoubtedly around the corner so they felt somewhat obligated to automate the process.</span></p>
<p><span class="pageSubTitle">I&#8217;ve had the opportunity to see code generation in action. I&#8217;ve seen <a href="http://www.codesmithtools.com/" target="_blank">CodeSmith</a> leveraged to the extreme &#8212; with a single click, a completely functional three-tiered application could be built before my very eyes. It is like magic. It is super-impressive and I commend anyone willing to put time into a building the code generators because they are awesome.</span> <span class="pageSubTitle">And there are many advantages to auto-generating code:</span></p>
<ol>
<li><span class="pageSubTitle"><span class="pageSubTitle">Code consistency</span></span></li>
<li><span class="pageSubTitle">Stable, tested and bug-free code which &#8220;works first time&#8221;</span></li>
<li><span class="pageSubTitle">Produced very quickly</span></li>
<li><span class="pageSubTitle">Easily updatable</span></li>
<li><span class="pageSubTitle">Programmers are free to concentrate on the areas of development that deserve their brainpower</span></li>
<li><span class="pageSubTitle">Increased productivity</span></li>
<li><span class="pageSubTitle">Learning aid &#8212; If the generated code is well written and consistent, programmers are more likely to copy the style of this code and learn from it</span></li>
</ol>
<p><span class="pageSubTitle">Does code generation make good sense to me? After all, I use it all the time. (Kind of.) You see, I tend to refactor my code and compile reusable libraries with common functions. I have templates for building custom classes and collection. I hardly ever write a routine without consulting my previous work (or the work of others) and I can&#8217;t remember the last time I started a project from scratch. I alway begin with an existing, similar project and then modify it for my needs.</span></p>
<p><span class="pageSubTitle">As you can tell, I am a proponent of code reuse. I believe in patterns and I have no dream of reinventing the wheel. With this said, <strong>I am not a fan of code generation.</strong> Is there something wrong with me?</span> <span class="pageSubTitle">Well, here are the disadvantages to code generation. You decide.</span></p>
<ol>
<li><span class="pageSubTitle">A code generator must be written and tested thoroughly before code can be generated. This task time and effort and it adds some risk since you can&#8217;t get the &#8220;real&#8221; project out the door unless the generator is production-ready. <a href="http://en.wikipedia.org/wiki/John_Henry_(folklore)" target="_blank"><img id="150px-JohnHenry.jpg" style="display: inline; float: right; margin-left: 25px; width: 127px; height: 200px;" title="150px-JohnHenry.jpg" src="http://johnnycoder.com/blog/wp-content/uploads/2006/10/150px-JohnHenry_tn.jpg" alt="150px-JohnHenry.jpg" width="127" height="200" /></a></span></li>
<li><span class="pageSubTitle">Code generators really only work for specific applications with specific use cases. Code generators are best suited for admin-type applications which entail no business logic. If your application is nothing but CRUD then code-gen might be right for you.</span></li>
<li><span class="pageSubTitle">There will always be some code that needs to be hand-crafted. If the code generator doesn&#8217;t allow you to &#8220;support&#8221; hand-crafted code, you&#8217;re in a tough spot.</span></li>
<li><span class="pageSubTitle">Most code generators work off of an existing database schema. In most cases, a well formed databases (i.e. specific primary and foreign key names, normalization, etc) is required and generators generally do not cope well with databases that have special, &#8220;unique&#8221; design features. In addition, I don&#8217;t believe business objects should exactly mirror the associated database objects. For these reasons, code generators tend to lead to bad system designs.</span></li>
<li><span class="pageSubTitle">Code generation leads to poor performance. This one is obvious, right?</span></li>
<li><span class="pageSubTitle">Generated code is difficult to maintain. I should be really clear on this point. Without a firm, working knowledge of the code generation tool itself, the code is difficult to maintain. Unfortunately, there is little guarantee that the original author of the code is going to be the developer slated for maintenance.</span></li>
</ol>
<p><span class="pageSubTitle">It isn&#8217;t that I wish to be a modern-day <a href="http://en.wikipedia.org/wiki/John_Henry_(folklore)" target="_blank">John Henry</a>. Simply, I believe code generators have their place and it&#8217;s not in my toolbox (except for really simple cases.)<br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2006/10/16/manual-code-generation/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Understanding the Digital Natives</title>
		<link>http://johnnycoder.com/blog/2006/09/21/understanding-the-digital-natives/</link>
		<comments>http://johnnycoder.com/blog/2006/09/21/understanding-the-digital-natives/#comments</comments>
		<pubDate>Fri, 22 Sep 2006 05:45:52 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Management]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/?p=38</guid>
		<description><![CDATA[A handful of the 40 coders in my development group are recent college graduates. They have less than two years of professional coding experience under their belts and for this reason alone I consider them juniors. They are all very talented and some day they are going to be absolutely amazing at what they do, [...]]]></description>
			<content:encoded><![CDATA[<p>A handful of the 40 coders in my development group are recent college graduates. They have less than two years of professional coding experience under their belts and for this reason alone I consider them juniors. They are all very talented and some day they are going to be absolutely amazing at what they do, but for now they are still just learning the ropes.</p>
<p>I came to this conclusion after working closely with a handful of these developers on a recent project. At first, anything they did which didn&#8217;t meet my standards was immediately chalked up to their professional and/or personal immaturity. Let&#8217;s face it. I am a seasoned developer. I&#8217;ve been around the block and they haven&#8217;t. I know best. Well, as it turns out, maybe I just know differently&#8230;</p>
<p>Our production deployments typically last well into the night. While &#8220;supporting&#8221; a release, we drink way too many energy drinks, strike up random conversations and wait for the QA group to sign-off on the deployment. During our last product release, I took the opportunity to give one of the newbie coders a hard time about his work habits. It goes without fail that every time I walk by his office, he has a million browser windows open along with IM, Outlook and, if I&#8217;m really lucky, a single instance of Visual Studios. At any time during the day, he can tell me the latest baseball scores or the breaking news on CNN. This (along with all of his silly screen savers, desktop widgets and keyboard shortcuts) I could almost tolerate, but when I found him remotely connected to his home PC and sending personal emails, I just had to wonder about his productivity and I called him on it.</p>
<p>At first he began to lecture me about productivity in the workplace and all the studies which have been done stating that you can only get six solid hours of work out of a developer in an eight hour work day. At this I laughed since most of the time it feels like we&#8217;re required to fit 12 hours of coding into a 10 hour day. Once he realized I wasn&#8217;t going to bite (and he was most likely digging his own grave) he changed his tune and took another approach. &#8220;You see, I&#8217;m a Digital Native and you are a Digital Immigrant and our generations do things differently.&#8221; Granted, he wasn&#8217;t gaining any points by essentially calling me old, but he caught my interest.</p>
<p>You see, my young colleague represents the first generation to grow up with new technology. They have spent their entire lives surrounded by and using computers, email, the Internet, instant messaging, video games, digital music players, cell phones and all the other toys and tools of the digital age. Digital Natives are used to receiving information really fast. They prefer random access and they function best when networked. They thrive on instant gratification and frequent rewards. And they prefer games to &#8220;serious&#8221; work. They are the Net (N) or Digital (D) Generation. <sup>[ <a href="http://www.twitchspeed.com/site/Prensky%20-%20Digital%20Natives,%20Digital%20Immigrants%20-%20Part1.htm">1</a> ]</sup></p>
<p>Those of us who were not born into the digital world, but have attempted to adopt most aspects of the new technology are Digital Immigrants. Like all immigrants, Digital Immigrants retain their &#8220;accent.&#8221; The &#8220;digital immigrant accent&#8221; can be seen in such things as turning to the Internet for information second rather than first or in reading the manual for a program rather than assuming that the program itself will teach us to use it. There are hundreds of examples of the digital immigrant accent. They include needing to print out a document written on the computer in order to edit it (rather than just editing on the screen) and bringing people physically into your office to see an interesting web site (rather than just sending them the URL.) The example we can all related to is the &#8220;Did you get my email?&#8221; phone call.</p>
<p>My point is there&#8217;s a new breed of developers on the rise as one of them explained to me the other evening. They are &#8220;native speakers&#8221; of the digital language of computers, video games and the Internet and they think and process information fundamentally differently from then their predecessors. And they function differently too. The next time you think the junior developer&#8217;s desktop is cluttered and you think they aren&#8217;t focused, please think again. They are simply parallel processing and multi-tasking. Find a way to work with the new generation. Better yet &#8212; learn from them.</p>
<p>Reference: <a href="http://www.twitchspeed.com/site/Prensky%20-%20Digital%20Natives,%20Digital%20Immigrants%20-%20Part1.htm">1.Digital Natives, Digital Immigrants by Marc Prensky</a><br />
Tip: Tune into <a href="http://www.adultswim.com/">Adult Swim</a> or the <a href="http://www.familyguy.com/">Family Guy</a> to see first hand how Digital Natives like to consume information.</p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2006/09/21/understanding-the-digital-natives/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Email Etiquette 101</title>
		<link>http://johnnycoder.com/blog/2006/09/20/email-etiquette-101/</link>
		<comments>http://johnnycoder.com/blog/2006/09/20/email-etiquette-101/#comments</comments>
		<pubDate>Thu, 21 Sep 2006 04:21:00 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[Productivity]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/?p=37</guid>
		<description><![CDATA[Unquestionably, effective communication is a key ingredient to delivering a successful project. I could rant on and on about avoidable day-to-day issues which exist only because of miscommunication, under-communication or (gasp!) over-communication, but I will save this for another day. Instead, today&#8217;s lesson hones in on the primary vehicle for poor communication &#8212; email. I [...]]]></description>
			<content:encoded><![CDATA[<p>Unquestionably, effective communication is a key ingredient to delivering a successful project. I could rant on and on about avoidable day-to-day issues which exist only because of miscommunication, under-communication or (gasp!) over-communication, but I will save this for another day. Instead, today&#8217;s lesson hones in on the primary vehicle for poor communication &#8212; email. I am not an expert on the subject, but I do send and receive my fair share of email. I would like to think if everyone adhered to the following guidelines, projects could be delivered with less &#8220;drama.&#8221;</p>
<p><span style="text-decoration: underline;">Do Spell and Grammar Check</span></p>
<p>This may be my # 1 pet peeve because it is so easily remedied. Nearly all programs provide a spell/grammar checking option so simply enable it. You wouldn&#8217;t do a crossword puzzle in pen, would you? We all make mistakes so make sure that proper spelling, grammar and punctuation is used before sending your next message.</p>
<p><span style="text-decoration: underline;">Do Read Your Message Before Sending</span></p>
<p>Spell and grammar checker will bail you out the majority of the time, but it&#8217;s still a good idea to proof read a message before it is sent out. It is amazing how easily the context of an email can change due to simple mistakes. (Have you ever accidentally written <em>don&#8217;t</em> instead of <em>do</em>? I haven&#8217;t. Oops. I mean, I have.) Apart from this, reading your email through the eyes of the recipient will help you send a more effective message and avoid misunderstandings and inappropriate comments. And don&#8217;t be afraid to have someone review your message before sending &#8212; especially if you are upset with the intended recipient. It&#8217;s okay to let an email &#8220;sit&#8221; for a while until you count to ten.</p>
<p><span style="text-decoration: underline;">Do Not Use Abbreviations and Emoticons</span></p>
<p>In business emails, try not to use abbreviations such as BTW (by the way) and LOL (laugh out loud). This is generally not appropriate. The same goes for emoticons, such as the smiley : ). If you are not sure whether your recipient knows what it means, it is better not to use it.</p>
<p><span style="text-decoration: underline;">Do Not Leave Out the Message Thread</span></p>
<p>There is nothing more frustrating then receiving an email to which you can&#8217;t immediately determine the context and you are forced to dig through your inbox (or archives) to get up to speed. This is another &#8220;mistake&#8221; which is easily corrected. When you reply to an email, always include the complete thread.</p>
<p><span style="text-decoration: underline;">Do Not Send Confidential Information</span></p>
<p>If you aren&#8217;t comfortable having an email forwarded to your entire company, don&#8217;t send it. Emails have a funny way of landing into the most unlikely person&#8217;s inbox at the most inopportune time. A word to the wise: be particularly careful with discriminating comments and jokes. It could cost you your job.</p>
<p><span style="text-decoration: underline;">Do Not Attach Unnecessary Files</span></p>
<p>Compress attachments and only send attachments when they are productive. There&#8217;s nothing more infuriating than receiving a message from the System Administrator stating &#8220;Your mailbox is over its size limit&#8221; just because you&#8217;ve been forwarded dozens of 6MB FSDs which could have been replaced with the link to their location in source control.</p>
<p><span style="text-decoration: underline;">Do Not Overuse the High Priority Option</span></p>
<p>If you overuse the high priority option, it will lose its function when you really need it. Moreover, even if a mail has high priority, your message will come across as slightly aggressive if you flag it as &#8216;high priority&#8217;. And we all know the story of the boy who cried wolf&#8230;</p>
<p><span style="text-decoration: underline;">Do Not Overuse Reply to All</span></p>
<p>Only use Reply to All if you really need your message to be seen by each person who received the original message. Odds are you will never need to use this option again.</p>
<p><span style="text-decoration: underline;">Do Not Request Delivery and Read Receipts</span></p>
<p>This will almost always annoy your recipient before he or she has even read your message. In fact, it probably annoys them enough that when prompted to send the receipt they will simply cancel the function! If you want to know whether an email was received it is better to politely follow up with the recipient. (Will an article on follow up etiquette be coming soon?)</p>
<p><span style="text-decoration: underline;">Do Not Recall a Message</span></p>
<p>Assume that your message has already been delivered and read. In that case, a recall request would look very silly, wouldn&#8217;t it? It is better just to send an email to say that you have made a mistake. This will look much more honest (and call less attention) than trying to recall a message.</p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2006/09/20/email-etiquette-101/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Life After Blackberry?</title>
		<link>http://johnnycoder.com/blog/2006/09/15/life-after-blackberry/</link>
		<comments>http://johnnycoder.com/blog/2006/09/15/life-after-blackberry/#comments</comments>
		<pubDate>Fri, 15 Sep 2006 11:58:00 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[Productivity]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/?p=39</guid>
		<description><![CDATA[&#8220;I appreciate the offer, but I simply don&#8217;t want one,&#8221; I said. &#8220;I know it will completely take over my life. I will wind up working around the clock and that&#8217;s not healthy. I need to turn work off some time. Truly, thanks, but no thanks&#8230;&#8221; As if I had never said a word, a [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;I appreciate the offer, but I simply don&#8217;t want one,&#8221; I said. &#8220;I know it will completely take over my life. I will wind up working around the clock and that&#8217;s not healthy. I need to turn work off some time. Truly, thanks, but no thanks&#8230;&#8221;</p>
<p>As if I had never said a word, a Blackberry was delivered to my office a couple of days later.</p>
<p>At first, I didn&#8217;t want to look at it and I definitely didn&#8217;t want to touch it. I just let it sit on my desk as if I knew that just one taste would have me coming back for more and more and more. Yes, I knew it was a drug. It was my &#8220;crackberry.&#8221;</p>
<p>Six months later and I am now an addict. I simply can not live without my Blackberry. I use my Blackberry 24/7 &#8212; in my car, in bed at 2:30am, waiting for the elevator, on the can and literally 15 minutes before and 15 minutes after my son was born. In fact, I recently discovered that emails are delivered to the Blackberry Server before the Exchange Server. Now I catch myself, at my computer, working on an email and sadly pulling my vibrating Blackberry from its holster in order to sneak a peek at a new message delivered to the device a mere two seconds before it ultimately pops up before my eyes in Outlook.</p>
<p>I know I have a problem. The majority of the time, however, I am in denial. I have convinced myself that I am now more efficient and effective and I am more accessible than ever! Heck, I was able to address a handful of work-related issues while watching the Padres game with family at Petco Park a few Sundays ago. Talk about non-stop productivity!</p>
<p>Is there life after Blackberry? Yes. It is very exciting and it is often dramatic and it provides no downtime. It is a life where work and play are intermingled. And now that I have had a taste, I&#8217;m not sure if I can ever go back to my life before Blackberry.</p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2006/09/15/life-after-blackberry/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

