<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://devlicio.us/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Derik Whittaker : Featured, Opinion</title><link>http://devlicio.us/blogs/derik_whittaker/archive/tags/Featured/Opinion/default.aspx</link><description>Tags: Featured, Opinion</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>Removing words like Convince, Convert and Persuade from our vocabulary</title><link>http://devlicio.us/blogs/derik_whittaker/archive/2008/11/04/removing-words-like-convince-convert-and-persuade-from-our-vocabulary.aspx</link><pubDate>Tue, 04 Nov 2008 11:26:22 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:42882</guid><dc:creator>Derik Whittaker</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/derik_whittaker/rsscomments.aspx?PostID=42882</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/derik_whittaker/commentapi.aspx?PostID=42882</wfw:comment><comments>http://devlicio.us/blogs/derik_whittaker/archive/2008/11/04/removing-words-like-convince-convert-and-persuade-from-our-vocabulary.aspx#comments</comments><description>&lt;p&gt;One of the common&amp;nbsp;themes of this years KaizenConf was how to move a towards being a lean organization.&amp;nbsp; During most of the sessions and conversations that I was part I cannot tell you how often I heard words like Convince, Convert and Persuade said.&amp;nbsp; At first I had nothing against these words, but the more I thought about I know feel that we need to remove those words from our vocabulary when talking about moving a team or organization from one thing to another (in context of these conversations it is towards being lean).&lt;/p&gt; &lt;p&gt;Using terms like Convince and Convert has the feeling that &amp;#39;I am right and you are wrong&amp;#39;.&amp;nbsp; Even if you are not using terms like Convince and Convert in your dialog with people, I am going to guess that you have that as your goal, or your end game.&amp;nbsp; &lt;/p&gt; &lt;p&gt;I am here to suggest that we as a community need to change our focus from Convincing towards Demonstrating.&amp;nbsp; By changing our angle and our position to be more neutral and soft I feel we can archive our goal of bringing change easier and with less friction.&amp;nbsp; It is like that old saying &amp;#39;you can catch more fly&amp;#39;s with honey than vinegar.&lt;/p&gt; &lt;p&gt;Lets take a look at the subtle differences between Convincing and Demostrating.&lt;/p&gt; &lt;p&gt;When we are trying to Convince someone of something many times we give off the following vibes.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;That your way is wrong, and our is right  &lt;li&gt;That we are better and more knowledgeable  &lt;li&gt;That we are preaching&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;All of above tend to put people on the definsive and if someone is on the definsive they are less likely to be open minded and less likey to want to try to understand what it is you are trying to say.&lt;/p&gt; &lt;p&gt;When we are trying to demostrate something to someone we give off the following vibes.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Heartflet attempt to share knowledge  &lt;li&gt;Cooperation  &lt;li&gt;Alternative to, not a replacement for their way of doing something  &lt;li&gt;Sincere intrest in helping them.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;When you speak to someone with the above vibe, you are essentally telling them that I have&amp;nbsp;an idea and I think that my idea can help you out.&amp;nbsp; If you attack it from this angle&amp;nbsp;you&amp;nbsp;may be surprised by the level of reception you can receive.&lt;/p&gt; &lt;p&gt;Remember, convincing someone is never easy, but demostrating alternatives and allowing them to make their own decision can be.&lt;/p&gt; &lt;p&gt;Keep up the good fight and happy demostrating.&lt;/p&gt; &lt;p&gt;Till next time,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=42882" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/Methodology/default.aspx">Methodology</category><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/Opinion/default.aspx">Opinion</category><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/Featured/default.aspx">Featured</category></item><item><title>Should not be 'The Business', but should be 'Our Business'</title><link>http://devlicio.us/blogs/derik_whittaker/archive/2008/07/10/should-not-be-the-business-but-should-be-our-business.aspx</link><pubDate>Thu, 10 Jul 2008 14:06:14 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:41251</guid><dc:creator>Derik Whittaker</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/derik_whittaker/rsscomments.aspx?PostID=41251</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/derik_whittaker/commentapi.aspx?PostID=41251</wfw:comment><comments>http://devlicio.us/blogs/derik_whittaker/archive/2008/07/10/should-not-be-the-business-but-should-be-our-business.aspx#comments</comments><description>&lt;p&gt;Last night I was listening to a recent &lt;a href="http://www.hanselminutes.com" target="_blank"&gt;HanselMinutes&lt;/a&gt; pod casts where he was talking with &lt;a href="http://www.hanselminutes.com/default.aspx?showID=136" target="_blank"&gt;Tom &amp;amp; Mary Poppendiek&lt;/a&gt;.&amp;#160; For those of you who do not know who Tom &amp;amp; Mary are, they are the 2 behind a lot of the lean software movement (books &lt;a href="http://www.amazon.com/Lean-Software-Development-Agile-Toolkit/dp/0321150783/ref=pd_bbs_sr_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1215698116&amp;amp;sr=8-2" target="_blank"&gt;here&lt;/a&gt; &amp;amp; &lt;a href="http://www.amazon.com/Implementing-Lean-Software-Development-Addison-Wesley/dp/0321437381/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1215698116&amp;amp;sr=8-1" target="_blank"&gt;here&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;There was a statement made in the episode by Tom that really stuck to me and actually caused me to have a &amp;#39;ah-ha&amp;#39; moment.&amp;#160; The statement that Tom made was that we as developers tend to refer to business owners as &amp;#39;The Business&amp;#39; in place of referring to them as &amp;#39;Our Business&amp;#39;.&lt;/p&gt;  &lt;p&gt;The difference may seem subtle, but in actually it is quite substantial.&amp;#160; By referring to business as &amp;#39;The Business&amp;#39; we are making the statement that we have no say or no influence in the decisions being made or the direction to be taken.&amp;#160; It also implies that we as developers (or IT personal in general) are in some way inferior to the people making the decisions.&amp;#160; &lt;/p&gt;  &lt;p&gt;When we refer to the business as &amp;#39;Our Business&amp;#39; we are doing multiple things.&amp;#160; First we are saying that we have ownership and knowledge in the business and have the ability to not just code, but to make decisions.&amp;#160; We are also saying that we have more ownership in the product by including ourselves in the &amp;#39;Business&amp;#39;&lt;/p&gt;  &lt;p&gt;The differences between the terms &amp;#39;The Business&amp;#39; and &amp;#39;Our Business&amp;#39; may seem small, but in reality they are huge.&amp;#160; Think about, reflect on it.&amp;#160; Let me know your thoughts.&lt;/p&gt;  &lt;p&gt;Till next time,&lt;/p&gt;  &lt;p&gt;&lt;font color="#808080"&gt;&lt;strong&gt;[----- Remember to check out &lt;/strong&gt;&lt;strong&gt;&lt;a href="http://www.dimecasts.net"&gt;DimeCasts.Net&lt;/a&gt;&lt;/strong&gt;&lt;strong&gt; -----]&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=41251" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/Opinion/default.aspx">Opinion</category><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/Featured/default.aspx">Featured</category></item><item><title>Developer training, a real (non)success story</title><link>http://devlicio.us/blogs/derik_whittaker/archive/2008/06/30/developer-training-a-real-non-success-story.aspx</link><pubDate>Mon, 30 Jun 2008 12:42:55 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:41146</guid><dc:creator>Derik Whittaker</dc:creator><slash:comments>10</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/derik_whittaker/rsscomments.aspx?PostID=41146</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/derik_whittaker/commentapi.aspx?PostID=41146</wfw:comment><comments>http://devlicio.us/blogs/derik_whittaker/archive/2008/06/30/developer-training-a-real-non-success-story.aspx#comments</comments><description>&lt;p&gt;About a year ago I created a few posts on the topic of Developer Ramp time and how &lt;a href="http://devlicio.us/blogs/derik_whittaker/archive/2007/06/20/developer-ramp-time-different-ways-a-company-can-speed-it-up.aspx" target="_blank"&gt;companies can help the process&lt;/a&gt; as well as why different &lt;a href="http://devlicio.us/blogs/derik_whittaker/archive/2007/06/19/developer-ramp-up-time-reasons-some-developers-ramp-up-faster-than-others.aspx" target="_blank"&gt;developers ramp up at different speeds&lt;/a&gt;.&amp;#160; Developer ramp time and how companies can aid in speeding up this time is critical not only to a new employee&amp;#39;s success, but also that of the team they are joining.&lt;/p&gt;  &lt;p&gt;This is why I was so shocked to hear a story from a buddy of mine about his company and their philosophy on developer ramp time.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The story goes something like this:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;My buddy (we will call him Will for this post) has recently been put in charge of the maintenance team at his company.&amp;#160; Currently there are a total of 5 people on this team, 4 developers and him.&amp;#160; Because his team is rocking and getting things done the company decided to hire on 2 more developer and put them on his team.&amp;#160; Because Will is one of these guys that believes in doing things the right way and because he sees the value in trying to speed up/aid the ramp time for new developers he decided he would like to put together a plan of action for these new developers.&lt;/p&gt;  &lt;p&gt;So Will spent a little time putting together a high level list of things he thought a new developer would need in order to become a upstanding member of the team.&amp;#160; However, because he did not want to spend too much time on this with out getting buy-in from his boss (should be a walk in the park) he simply put together a outline of what he wanted to do and sent that to his boss. &lt;/p&gt;  &lt;p&gt;Along with sending the outline to his boss, he also provided a summary of his intentions and goals for his training.&amp;#160; Will was looking for his boss to give him the thumbs up on moving forward with this training and figured he would start putting together the materials in the next day or so. &lt;/p&gt;  &lt;p&gt;Will was shocked when he received the reply from his boss that simply stated the following&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;#39;The new developers are both professionals and adults and should be able to learn all they need to on their own.&amp;#39;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Needless to say that when Will received this reply he was not a happy camper.&amp;#160; How is he meant to help his team succeed if he is not allowed to help them ramp up?   &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;The moral of the story here is that training new employees is painful, it is hard and it can be expensive.&amp;#160; However, not training them can be even more painful and more expensive because they will be less productive and potentially make more errors.&lt;/p&gt;  &lt;p&gt;Any company that does not see this or does not value this is not a place I would like to work, and keeping me &lt;a href="http://devlicio.us/blogs/derik_whittaker/archive/2008/06/23/what-makes-me-not-want-to-leave-a-company-client-shop.aspx" target="_blank"&gt;around may&lt;/a&gt; be hard.&amp;#160; &lt;/p&gt;  &lt;p&gt;Till next time,&lt;/p&gt;  &lt;p&gt;&lt;font color="#808080"&gt;&lt;strong&gt;[----- Remember to check out &lt;/strong&gt;&lt;strong&gt;&lt;a href="http://www.dimecasts.net"&gt;DimeCasts.Net&lt;/a&gt;&lt;/strong&gt;&lt;strong&gt; -----]&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=41146" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/Opinion/default.aspx">Opinion</category><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/Featured/default.aspx">Featured</category></item><item><title>Thoughts on writing quality test code vs writing quality application code</title><link>http://devlicio.us/blogs/derik_whittaker/archive/2008/05/21/thoughts-on-writing-quality-test-code-vs-writing-quality-application-code.aspx</link><pubDate>Wed, 21 May 2008 12:31:21 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:40678</guid><dc:creator>Derik Whittaker</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/derik_whittaker/rsscomments.aspx?PostID=40678</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/derik_whittaker/commentapi.aspx?PostID=40678</wfw:comment><comments>http://devlicio.us/blogs/derik_whittaker/archive/2008/05/21/thoughts-on-writing-quality-test-code-vs-writing-quality-application-code.aspx#comments</comments><description>&lt;p&gt;Anyone that is a practitioner of testing or specially TDD knows that the quality of your tests are a direct measure in the assumed quality of your tested code.&amp;#160; Better put, if your tests suck, you can assume very low quality from your code.&lt;/p&gt;  &lt;p&gt;So what is harder, writing quality code or writing quality tests?&amp;#160; My vote is that writing quality test code is harder then writing quality application code.&lt;/p&gt;  &lt;p&gt;When it comes to writing &amp;#39;quality application code&amp;#39; the measure of quality is really in the eye of the developer.&amp;#160; What one person calls good code may be called crap by another developer.&amp;#160; But as long as the code meets the business needs, it should be at least considered quality (if not simply functional) code.&amp;#160; &lt;/p&gt;  &lt;p&gt;However, creating quality test code is a little more measurable.&amp;#160; One possible way to measure this is by code coverage (please do not take that statement as high code coverage equals high quality as this is NOT the case).&amp;#160; Another is to simple make sure the tests exercises as many different business scenarios as practical (notice here I did not say possible because at some point you reach the point of diminishing returns and should just stop).&amp;#160; Finally, if you keep your tests compact and focused you should be able to create quality tests.&lt;/p&gt;  &lt;p&gt;To me the real measure of quality test code is how maintainable is it?&amp;#160; Is it very painful to refactor when the code under test needs to change?&amp;#160; If you can maintain your test code with very little friction or effort, they I would say chances are high you have high quality test code.&lt;/p&gt;  &lt;p&gt;Hints your test code may be poor quality.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Test code does not test the intent of the code&lt;/li&gt;    &lt;li&gt;Test code becomes to brittle to maintain going forward&lt;/li&gt;    &lt;li&gt;Test code is heavy (those testing multiple things) &lt;/li&gt;    &lt;li&gt;You dread making changes to your code base for fear of having to modify your test code.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Hints your test code may be of high (er) quality&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Causes very little friction during future code changes&lt;/li&gt;    &lt;li&gt;Test code is light weight, tests only a single concept&lt;/li&gt;    &lt;li&gt;You do not dread making changes to your code base for fear of having to modify your test code.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;So, what do you think?&amp;#160; Which is harder and why?&lt;/p&gt;  &lt;p&gt;Till next time, &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=40678" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/TDD/default.aspx">TDD</category><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/Opinion/default.aspx">Opinion</category><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/Featured/default.aspx">Featured</category></item><item><title>Are you going the way of the Dinosaur???</title><link>http://devlicio.us/blogs/derik_whittaker/archive/2008/04/24/are-you-going-the-way-of-the-dinosaur.aspx</link><pubDate>Thu, 24 Apr 2008 10:20:17 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:40192</guid><dc:creator>Derik Whittaker</dc:creator><slash:comments>26</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/derik_whittaker/rsscomments.aspx?PostID=40192</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/derik_whittaker/commentapi.aspx?PostID=40192</wfw:comment><comments>http://devlicio.us/blogs/derik_whittaker/archive/2008/04/24/are-you-going-the-way-of-the-dinosaur.aspx#comments</comments><description>&lt;p&gt;What are you doing to keep your skills current?&amp;#160; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Do you learn new technologies?&amp;#160; &lt;/li&gt;    &lt;li&gt;Do you learn new tools?&amp;#160; &lt;/li&gt;    &lt;li&gt;Do you learn new languages?&amp;#160; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;If you did not answer yes to at least 1 of the 3 questions above, I have one last question to ask.&amp;#160; What are you doing to not become a Dinosaur?&lt;/p&gt;  &lt;p&gt;In my opinion developers today have more at stake then ever before.&amp;#160; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Technology is changing at the speed of light &lt;/li&gt;    &lt;li&gt;Business demands are getting larger and more complicated &lt;/li&gt;    &lt;li&gt;Technology is getting more complicated (which is counter to its intent) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Over the past few months I have spoken to a few different developers that have become &amp;#39;complacient&amp;#39; in what they do.&amp;#160; They have no interest in learn a new language (Ruby, Java, F#, etc) or even learning to use new frameworks (RoR, MonoRail, MVC, NHibernate, etc) because they are happy with what they have.&amp;#160; This is fine and this is dandy, but the day will come that they will regret this decision.&lt;/p&gt;  &lt;p&gt;Let me tell you a little store.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Long, long ago there was a developer that was writing his applications in his language of choice, COBOL.&amp;#160; This guy was as happy as a clam, he had no worries, no issues.&amp;#160; The language did what he need and he could make it do all sorts of cool stuff.&amp;#160; And most importantly he felt comfortable with his language of choice.&amp;#160; &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Then one day someone created a newer, hipper language (insert any OO based language here) and suddenly it became all the rage.&amp;#160; Now the COBOL developer thought, should I invest the time effort to learn this new language, or should I stick with COBOL.&amp;#160; In the end he decided he liked COBOL, cause he was happy and content.&amp;#160; He also did not buy into all the press surrounding that language.&amp;#160; He figured that it is just a passing fad.&amp;#160; Now he may have been right, but where he made a mistake was he did not learn.&lt;/em&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;Now lets fast forward to today.&amp;#160; In the past few years there have many new languages and frameworks/toolsets have been released.&amp;#160; They all have their pros and cons and some will die off and become extent.&amp;#160; But the ones that live on may someday push your language out of the way.&amp;#160; If you don&amp;#39;t at least have a working knowledge of what they bring to the table, what makes you think will will not be like our COBOL developer from our story?&lt;/p&gt;  &lt;p&gt;So, let me ask you.... What are YOU doing to not become a Dinosaur?&lt;/p&gt;  &lt;p&gt;BTW, before you ask what I am doing, let me tell you.&amp;#160; I am currently learning Ruby, I am playing with IronRuby (I know, not much different the Ruby).&amp;#160; I plan on playing with F# to become familiar with what a Functional language can do for me.&amp;#160; I started learning the MS MVC framework and will be playing RoR (Ruby on Rails) to see where that is going.&amp;#160; I did some MOSS work a while back.&amp;#160; I am branching out and getting my hands on as many different tools/frameworks as possible (NHibernate, Linq2Sql, TypeMock, etc, etc, etc).&amp;#160; I have not intention of becoming a master of any of these, but I intend on becoming knowledgeable enough to know what they offer and what they do not.&lt;/p&gt;  &lt;p&gt;Till next time,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=40192" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/Opinion/default.aspx">Opinion</category><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/Featured/default.aspx">Featured</category></item><item><title>Simple extension methods to help with Asserting values</title><link>http://devlicio.us/blogs/derik_whittaker/archive/2008/04/10/simple-extension-methods-to-help-with-asserting-values.aspx</link><pubDate>Thu, 10 Apr 2008 12:49:43 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:40019</guid><dc:creator>Derik Whittaker</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/derik_whittaker/rsscomments.aspx?PostID=40019</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/derik_whittaker/commentapi.aspx?PostID=40019</wfw:comment><comments>http://devlicio.us/blogs/derik_whittaker/archive/2008/04/10/simple-extension-methods-to-help-with-asserting-values.aspx#comments</comments><description>&lt;p&gt;In the past I have written about the &lt;a href="http://devlicio.us/blogs/derik_whittaker/archive/2007/06/08/fail-fast-principle.aspx"&gt;Fail Fast&lt;/a&gt; principle.&amp;#160; This is a principle I try to live my development life by.&amp;#160; I would rather explicitly check for possible failure points then have a runtime error crop up.&amp;#160; In the past when writing these failure check we have had to resort to a few &amp;#39;cavemanish&amp;#39; techniques.&amp;#160; But with the inception of Extension Methods (&lt;a href="http://msdn2.microsoft.com/en-us/library/bb383977.aspx"&gt;here&lt;/a&gt; or &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/03/13/new-orcas-language-feature-extension-methods.aspx"&gt;here&lt;/a&gt;) we can actually create something that is pretty simple as well as elegant.&lt;/p&gt;  &lt;p&gt;Lets take a look at a few examples where we are NOT using extension methods to accomplish our failure checking.&lt;/p&gt;  &lt;pre class="c-sharp" name="code"&gt;public bool SomeMethod( string key )  
{  
	// In this case the key cannot be null or empty  
	if ( key.length == 0 ) { throw new ArgumentOutOfRangeException( &amp;quot;key&amp;quot;, &amp;quot;Some Message Goes here&amp;quot; ); }
} &lt;/pre&gt;

&lt;p&gt;The code above works, it is pretty simple and will get the job done.&amp;#160; But to be honest, having this sprinkled all over your code is kinda ugly.&lt;/p&gt;

&lt;pre class="c-sharp" name="code"&gt;public bool SomeMethod( SomeObject obj, Int32 someInt )  
{  
	// In this case the object cannot be null  
     	Assert.IsNotNull( obj, &amp;quot;Some Object&amp;quot; );  
  
	// In this case the int must be greater then 1  
     	Assert.IsTrue( someInt &amp;gt; 1, &amp;quot;Some Int not correct&amp;quot; );  
} &lt;/pre&gt;

&lt;p&gt;This code works as well and is more concise the the previous example.&amp;#160; However, this code is still less readable then the example below.&lt;/p&gt;

&lt;p&gt;Now, lets take a look at the same thing, but using Extension Methods&lt;/p&gt;

&lt;pre class="c-sharp" name="code"&gt;public bool SomeMethod( SomeObject obj, strnig someString )  
{  
	// In this case the object cannot be null  
	obj.AssertNonNull(); 
  
	// In this case the cannot be null or empty
	someString.AssertNotNullOrEmpty();	
} &lt;/pre&gt;

&lt;p&gt;Here is the code for the actual extension methods assert&lt;/p&gt;

&lt;pre class="c-sharp" name="code"&gt;public static void AssertNonNull( this T value )
{
	// Do our null check here.
	if ( value == null ) 
	{ 
		// Could even use reflection to gather info such as calling method, method exception was
		//	found in, etc.
		throw new ArgumentNullException( &amp;quot;Some message here&amp;quot; );
	}
}&lt;/pre&gt;

&lt;p&gt;The assert above using the extension method to me is the most elegant.&amp;#160; It is easy to read (very important) and very concise.&amp;#160; &lt;/p&gt;

&lt;p&gt;Keep in mind, all the examples above do the exact same thing, but they do in varying levels of elegance.&amp;#160; I would argue that the usage of extension methods here makes the code cleaner and easier to read.&lt;/p&gt;

&lt;p&gt;Till next time,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=40019" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/Development/default.aspx">Development</category><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/.Net/default.aspx">.Net</category><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/Opinion/default.aspx">Opinion</category><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/Featured/default.aspx">Featured</category></item><item><title>Things to think about if you want to be a consultant</title><link>http://devlicio.us/blogs/derik_whittaker/archive/2008/01/02/things-to-think-about-if-you-want-to-be-a-consultant.aspx</link><pubDate>Wed, 02 Jan 2008 21:26:00 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:39114</guid><dc:creator>Derik Whittaker</dc:creator><slash:comments>8</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/derik_whittaker/rsscomments.aspx?PostID=39114</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/derik_whittaker/commentapi.aspx?PostID=39114</wfw:comment><comments>http://devlicio.us/blogs/derik_whittaker/archive/2008/01/02/things-to-think-about-if-you-want-to-be-a-consultant.aspx#comments</comments><description>&lt;p&gt;I was chatting a buddy recently and he was thinking about making the jump to the consulting world (not solo, through a consulting firm).&amp;nbsp; As he has never been a consultant I gave him my 2cents on questions to ask during the interview as well as things he has to accept before making the jump.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Questions to ask the consulting firm&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;What percent of travel is the norm?       &lt;br /&gt;&lt;/b&gt;This is very important to know up front.&amp;nbsp; Because if you don&amp;#39;t want to travel much and they tell you they are 100% travel, then move on.&amp;nbsp; &lt;br /&gt;      &lt;br /&gt;One thing you need to keep in mind, is that they can give you a number, that number is NOT in stone.&amp;nbsp; It can/will change from client to client.&amp;nbsp; In my 5 years of consulting, I never left the greater Chicago area.&amp;nbsp; And for 2+ years I worked out of our home office.      &lt;br /&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;b&gt;What is your bench policy?       &lt;br /&gt;&lt;/b&gt;Ask what the policy is for being on the bench?&amp;nbsp; More importantly ask the billable % expectation is for a consultant.&amp;nbsp; This can be important because if they expect you to be billable 90% of the year then they may not be able to handle any rough patches.&amp;nbsp; However, if they expect you to be billable for only 80% then they should be better set for rough patches.      &lt;br /&gt;      &lt;br /&gt;I also found that if a company has higher expectations about billable %, they may not be willing to provide non-billable training as it eats into the bottom line.      &lt;br /&gt;      &lt;br /&gt;If you are on the bench, do they have something for you to do?&amp;nbsp; Can you go to training during that time?&amp;nbsp; Or can you simply stay home and collect a check (i wish)?      &lt;br /&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;b&gt;What is your training policy?       &lt;br /&gt;&lt;/b&gt;Ask what type of training they budget for?&amp;nbsp; Do they pay for conferences, weekly training classes?&amp;nbsp; Do they EXPECT you to take some sort of training.&amp;nbsp; &lt;br /&gt;      &lt;br /&gt;A good firm will have a defined budged that will allow for adequate training of all there consultants.&amp;nbsp; Actually, it is in their best interest to keep you trained as you become more marketable.      &lt;br /&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;b&gt;What is the &amp;#39;standard&amp;#39; number of billable hours you expect?       &lt;br /&gt;&lt;/b&gt;What is the standard number of hours do they expect you to bill for in a giving year?&amp;nbsp; Is it 1800, is it 2000?&amp;nbsp; This makes a difference because if they tell you 2000+ then are telling you they EXPECT you to work over time (more on that below).      &lt;br /&gt;      &lt;br /&gt;A full year with no time off is 2080 hours (52 weeks * 40 hours).&amp;nbsp; But if you get 2 weeks vacation and 10 paid holidays you are only at 1920 (48 weeks * 40 hours).&amp;nbsp; &lt;br /&gt;      &lt;br /&gt;Again, now keep in mind that the &amp;#39;standard&amp;#39; number is just a rule of thumb, but it is good to know.&amp;nbsp; The higher the number, the less room in the budget they may have for when times get tough.&amp;nbsp; &lt;br /&gt;      &lt;br /&gt;Also, keep in mind that during my 5 years consulting, my average work week was about 45-50 hours.&amp;nbsp; So if you are looking for the 40 hours and go home, you may not want to do consulting.      &lt;br /&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;b&gt;How are bonuses/raises calculated?       &lt;br /&gt;&lt;/b&gt;Do they give bonuses/raises?&amp;nbsp; Are they based on billable hours?&amp;nbsp; If they are based on billable hours, that can be good and bad.&amp;nbsp; &lt;br /&gt;      &lt;br /&gt;Example.&amp;nbsp; My old firm would give a flat bonus, but if you worked 200 extra hours a year you got a bump, if you worked 300 you got an extra bump, etc.      &lt;br /&gt;      &lt;br /&gt;This is good because i knew that the more i billed, the larger my bonus.&amp;nbsp; &lt;br /&gt;This was bad because i only got a sliver of the extra billable hours and in the long run did not pay off in the end.      &lt;br /&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;b&gt;How does overtime work?       &lt;br /&gt;&lt;/b&gt;Some firms don&amp;#39;t do anything special for overtime (as is the case in most salary positions).&amp;nbsp; However, some will actually pay you extra for your overtime (these places typically don&amp;#39;t give bonuses).&amp;nbsp; Other places bank your overtime and build that into your vacation (worked out well for my buddy).      &lt;br /&gt;      &lt;br /&gt;But i would say that most common is that nothing happens with your overtime, except the companies profits increase at your expense.      &lt;br /&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;Thing you have to accept as part of the job&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;The tech/environment will change with every new client       &lt;br /&gt;&lt;/b&gt;With every new client/project your environment along with the technology will change.&amp;nbsp; For some people this is a show stopper, for others it is just another chance to learn.      &lt;br /&gt;      &lt;br /&gt;Keep in mind that if you work on site at the client you will be expected to follow ALL their rules.&amp;nbsp; So if they are business formal, you will be expected to dress in business formal.&amp;nbsp; If they say you cannot come in till 9 and must stay till 6, then that is what you must do.      &lt;br /&gt;      &lt;br /&gt;If you are not willing to accept this, then consulting may not be for you.      &lt;br /&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;b&gt;You may not always be working on &amp;#39;cool/fun&amp;#39; tech       &lt;br /&gt;&lt;/b&gt;Since each project may change technology you may not always be working on &amp;#39;fun, cool&amp;#39; stuff.&amp;nbsp; You may go from doing cutting edge development on project to doing report writing on the next one.&amp;nbsp; &lt;br /&gt;      &lt;br /&gt;If you are not willing to accept this, then consulting may not be for you.      &lt;br /&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;b&gt;You are the &amp;#39;***&amp;#39; of the client, at their mercy       &lt;br /&gt;&lt;/b&gt;Since you are a &amp;#39;hired gun&amp;#39; you are the mercy of the client.&amp;nbsp; Don&amp;#39;t expect to have the same treatment as full timers (a lot of places today treat their consultants as part of the family, but not all).&amp;nbsp; Don&amp;#39;t expect to get subsidized meals (if offered) or gym memberships, etc.      &lt;br /&gt;      &lt;br /&gt;Also, be ready to work in some of the worst spaces you can think of.&amp;nbsp; On place i worked the consultants all sat in a single 15-20 office.&amp;nbsp; They basically lined up desks along the wall and filled it with 6 people.&amp;nbsp; I felt bad for them :).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;The people you will meet&lt;/b&gt;&lt;br /&gt;The coolest part is the people you will meet, the connections you will make.&amp;nbsp; This is great because networking is the best way to move ahead in this business.&amp;nbsp; I have meet some great people and have made some great contacts.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;This was my 2cents to him.&lt;/p&gt;  &lt;p&gt;Did I miss anything?&amp;nbsp; Am I wrong?&amp;nbsp; Let me know&lt;/p&gt;  &lt;p&gt;Till next time,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=39114" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/Opinion/default.aspx">Opinion</category><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/Featured/default.aspx">Featured</category></item><item><title>Subclassing for Success</title><link>http://devlicio.us/blogs/derik_whittaker/archive/2007/11/02/subclassing-for-success.aspx</link><pubDate>Fri, 02 Nov 2007 12:36:58 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:38781</guid><dc:creator>Derik Whittaker</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/derik_whittaker/rsscomments.aspx?PostID=38781</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/derik_whittaker/commentapi.aspx?PostID=38781</wfw:comment><comments>http://devlicio.us/blogs/derik_whittaker/archive/2007/11/02/subclassing-for-success.aspx#comments</comments><description>&lt;p&gt;As someone how has been designing and developing WinForms based applications for the past 7+ years, I have learned that subclassing UI controls is a must.&amp;nbsp; You may be thinking, why would I want to subclass a text box?&amp;nbsp; Or a combo box?&amp;nbsp; The answer is simple, the better future proof your app.&amp;nbsp; &lt;/p&gt; &lt;p&gt;How many times have you been into the development cycle of your application and you found out that you needed/wanted to extend the text box that is being used.&amp;nbsp; By extend I am not necessary talking about adding functionality to it, but do something like having the control highlight the entire contents of the control&amp;nbsp;when the&amp;nbsp;it receives focus.&lt;/p&gt; &lt;p&gt;If you don&amp;#39;t have your controls subclassed, extending your control will be a pain in your ass.&amp;nbsp; Sure you could find EVERY use of the control and add the needed&amp;nbsp;code.&amp;nbsp; Or you could find and replace your control later with the subclassed control, but both of these suck.&lt;/p&gt; &lt;p&gt;When I start a new WinForms (same concept should work for Browser based as well) application, I will immediately add a Controls namespace and simply add my subclassed controls.&amp;nbsp; In many cases I never extend the control, but knowing that I can do so allows me to make better decisions later on.&amp;nbsp; &lt;/p&gt; &lt;p&gt;One example of where this has helped me in the past was on a project where about 6 months into development, the business owners decided that would like the UI controls (text box, check box, combo box, etc) to change background color when the control receives focus and then change back when it loses focus.&amp;nbsp; Because I had everything subclassed i was able to implement this request in a very short time frame and did not even have to open up a single form.&amp;nbsp; Had I not subclasses the controls I would have either pushed back heavily or it would have taken me much longer to implement this change.&lt;/p&gt; &lt;p&gt;Another good use is for things like data grids.&amp;nbsp; Whether you are using the out of the box data grid, or some third party grid like Infragistics or Janus, subclassing can save you a ton.&amp;nbsp; How many times have you developed an application where you wanted a standard look and feel for your grids.&amp;nbsp; Say every other line is gray, and there are no selection column.&amp;nbsp; If the control is not subclassed you are asking each developer to remember to make the look and feel customizations.&amp;nbsp; But, if it is subclassed, simply add the control to the form and you are done.&lt;/p&gt; &lt;p&gt;Till next time,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=38781" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/Development/default.aspx">Development</category><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/Methodology/default.aspx">Methodology</category><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/WinForms/default.aspx">WinForms</category><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/Opinion/default.aspx">Opinion</category><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/Featured/default.aspx">Featured</category></item><item><title>Why I believe IN and WRITE unit tests</title><link>http://devlicio.us/blogs/derik_whittaker/archive/2007/10/01/why-i-believe-in-and-write-unit-tests.aspx</link><pubDate>Tue, 02 Oct 2007 00:27:25 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:38554</guid><dc:creator>Derik Whittaker</dc:creator><slash:comments>12</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/derik_whittaker/rsscomments.aspx?PostID=38554</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/derik_whittaker/commentapi.aspx?PostID=38554</wfw:comment><comments>http://devlicio.us/blogs/derik_whittaker/archive/2007/10/01/why-i-believe-in-and-write-unit-tests.aspx#comments</comments><description>&lt;p&gt;In my last post I think I struck a cord with some people in my post &amp;#39;Unit tests taking too much time&amp;#39;.&amp;nbsp; My intent was NOT to sound like an elitist Agilist or any else of that nature.&amp;nbsp; My intent was simply to put a post out there about the misperception (in my opinion) about how writing unit tests take too much time.&lt;/p&gt; &lt;p&gt;I thought I would put my &amp;#39;retort&amp;#39; on why I believe in&amp;nbsp;and write unit tests.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Allows&amp;nbsp;ME to write better code&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;I believe that when&amp;nbsp;I truly follow TDD practices&amp;nbsp;my code comes out simpler.&amp;nbsp; I have also found, that my code tends to follow&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/YAGNI" target="_blank"&gt;YAGNI&lt;/a&gt;&amp;nbsp;more so then when I don&amp;#39;t follow TDD practices.&lt;/p&gt; &lt;p&gt;Here is an example from my past experience.&amp;nbsp; On a prior project I needed to build a &amp;#39;search engine&amp;#39; into our app (this was not an actual search engine, more like a hunt path engine).&amp;nbsp; When I first started out writing code I started out by creating all these classes and logic that I thought I would need.&amp;nbsp; After about 3-4 hours of coding I was dead in the water.&amp;nbsp; I was not able to solve my problem in a simple manner and I was frustrated.&amp;nbsp; I decided to take a step back and start over.&amp;nbsp; &lt;/p&gt; &lt;p&gt;This time though I&amp;nbsp;started out by writing test to mimic what I actually needed.&amp;nbsp; I continued to follow the principles of &lt;a href="http://en.wikipedia.org/wiki/Test-driven_development" target="_blank"&gt;TDD&lt;/a&gt; (btw, TDD is more then just about writing tests), within an hour or so I had my solution pretty much good to go.&amp;nbsp; All those classes and methods I THOUGHT I would need I did NOT.&amp;nbsp; I was able to scrap about 50% of the code/classes that I thought I needed.&amp;nbsp; And guess what, now I have a test suit to test my new code.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Allows ME to find more bugs during the development process&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;It has been my experience that I find more bugs while writing tests.&amp;nbsp; This is due to the fact that I not only follow TDD, but I also do my best to implement the &lt;a href="http://en.wikipedia.org/wiki/Fail-fast" target="_blank"&gt;Fail Fast Principle&lt;/a&gt;.&amp;nbsp; When I am writing my tests I have the ability to create tests that easily walk though the different pathways of my code (I attempt to hit 100% code coverage as well).&amp;nbsp; If I were not writing tests I would have to do this via the application, and&amp;nbsp;this is much more painful and it less likely that I would actually do it.&lt;/p&gt; &lt;p&gt;By writing my tests and testing my code during the development process I know that I have reduced my bug count significantly.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Makes ME feel more comfortable making changes&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;This is the beauty of TDD, I am not afraid to make any critical changes to my code because I KNOW that I have tests to verify if I screwed anything up.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Have you ever run across some code that &amp;#39;you were scared&amp;#39; to change?&amp;nbsp; If you had tests for that code I bet you would a WHOLE LOT LESS scared to make any changes.&amp;nbsp; I know that I am.&lt;/p&gt; &lt;p&gt;A case in point for this is as follows.&amp;nbsp; On a prior project a consultant I was working with needed to make changes to some &amp;#39;smelly&amp;#39; logic.&amp;nbsp; This just happened to be a week or so before a scheduled release.&amp;nbsp; Beacuse he had NO confidence that the changes he would make would NOT break the application, he convinced the business to NOT make the changes. &amp;nbsp;I bet you a dollar that had there been unit tests he would have been much more willing to make the changes.&amp;nbsp; In this case the fact of NOT having tests may have caused the business to lose out on features it needed.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Improves MY code&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Because following TDD practices&amp;nbsp;forces you to write your failing code before your passing code,&amp;nbsp;I tend to implement my intent much cleaner and simpler.&amp;nbsp; I also know that because I am writing tests along the way my code is solid.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Allows ME to better convey intent&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;I know that tests are not a&amp;nbsp;substitution for&amp;nbsp;quality comments that convey intent, but they sure are the next best thing.&amp;nbsp; It is really nice to be able to point someone towards a suite of tests to &amp;#39;demo&amp;#39; how to use a component.&lt;/p&gt; &lt;p&gt;A case in point for this is as follows.&amp;nbsp; A few weeks ago at work I wrote an API to allow the querying of some data via our imaging system at work.&amp;nbsp; Turns out that an outside party needed to use this API for integration into on of our 3rd party applications.&amp;nbsp; When he came to me asking for &amp;#39;how do I use this&amp;#39;, I simply emailed him my suite of tests.&amp;nbsp; In this suite I had pretty much any conceivable use for the API.&amp;nbsp; To date the vendor has not asked me how to implement the API.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Allows MY tests to be automated and rerunable&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;This is a nice side effect of having tests.&amp;nbsp; Because we use&amp;nbsp;both NUnit and CruiseControl I can run my tests on every check in.&amp;nbsp; This is cool because now I (and the team) know if changes&amp;nbsp;I made&amp;nbsp;breaks some other part of the system.&amp;nbsp; I would rather know now then before QA hits it.&amp;nbsp; &lt;/p&gt; &lt;p&gt;The above are simply my opinion, if you don&amp;#39;t share the same opinions, let me know.&lt;/p&gt; &lt;p&gt;Till next time,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=38554" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/Development/default.aspx">Development</category><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/Agile/default.aspx">Agile</category><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/Methodology/default.aspx">Methodology</category><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/TDD/default.aspx">TDD</category><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/Opinion/default.aspx">Opinion</category><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/Featured/default.aspx">Featured</category></item><item><title>Logging Bugs: Do's and Don'ts</title><link>http://devlicio.us/blogs/derik_whittaker/archive/2007/08/19/logging-bugs-the-do-s-and-don-ts.aspx</link><pubDate>Mon, 20 Aug 2007 00:40:00 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:38244</guid><dc:creator>Derik Whittaker</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/derik_whittaker/rsscomments.aspx?PostID=38244</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/derik_whittaker/commentapi.aspx?PostID=38244</wfw:comment><comments>http://devlicio.us/blogs/derik_whittaker/archive/2007/08/19/logging-bugs-the-do-s-and-don-ts.aspx#comments</comments><description>&lt;p&gt;All software that is being developed WILL have bugs, sorry, but this IS a fact.&amp;nbsp; Now I know some people and&amp;nbsp;companies don&amp;#39;t like to call them glitches&amp;nbsp;in software bugs.&amp;nbsp; They would rather call them issues or defects.&amp;nbsp; For all I care we can call them &amp;#39;WizBangs&amp;#39;, just call them something and LOG THEM.&lt;/p&gt;
&lt;p&gt;However, logging &amp;#39;WizBangs&amp;#39; (ok, I will call them bugs from here on) is not as simple as it may sound.&amp;nbsp; I would like to go over some of MY Do&amp;#39;s and Don&amp;#39;ts in this post.&amp;nbsp; If you don&amp;#39;t like my list, or would like to add to it, drop me a line.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;When to log Items:&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Do&lt;/b&gt; log everything.&amp;nbsp; Just because&amp;nbsp;the bug&amp;nbsp;may seem trivial or simple or only happen &amp;#39;every now and again&amp;#39; does not mean that it should be ignored.&amp;nbsp; Even it you are not sure it is an issue, LOG IT.&amp;nbsp; Better to have close off an non-issue then fail to report a major bug in hiding&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Don&amp;#39;t&lt;/b&gt; assume that someone else is going to fix the issue.&amp;nbsp; Also, don&amp;#39;t assume this issue is too trivial or minor to report.&amp;nbsp; Wouldn&amp;#39;t it suck to find out after the application went lived that &lt;b&gt;you&lt;/b&gt; failed to report a critical bug because you thought it was not a &amp;#39;big deal&amp;#39;?&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;Providing information on the log:&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Do&lt;i&gt; &lt;/i&gt;&lt;/b&gt;provide detailed information about the bug.&amp;nbsp; Save yourself the headache later and provide as much information as you possible can.&amp;nbsp; This should include, but not limited to items such as Build Version, Environment, Platform, Short Description of issue, Severity, Detailed steps to reproduce.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Don&amp;#39;t&lt;/b&gt; make provide a single sentence that says something like &amp;#39;Unable to perform XYZ in the ABC process&amp;#39;.&amp;nbsp; This type of information will provide nothing of real value to the next guy.&amp;nbsp; Sure, this would be a great line for the title of the bug.&amp;nbsp; But by no means is this enough information to fix the bug.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;What types of items to log:&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Do&lt;/b&gt; Log Everything.&amp;nbsp; Enough said&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Don&amp;#39;t&lt;/b&gt; make assumptions&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;When to log bugs:&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Do&lt;/b&gt; log them as soon as possible.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Don&amp;#39;t&lt;/b&gt; put it off.&amp;nbsp; If you dont log the bug as soon as you find it you WILL forget something about what you did to cause it.&amp;nbsp; For the sake of your fellow co-workers log it now before you forget.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;The plain and simple truth about logging bugs is, it sucks!!!!&amp;nbsp; However, it is a necessary part of&amp;nbsp;most developers jobs.&amp;nbsp; If you take some time and put in a little effort, you will be rewarded with great riches.&amp;nbsp; Ok, maybe not great riches, but it will make fixing the bugs much easier.&lt;/p&gt;
&lt;p&gt;Till next time,&lt;/p&gt;&lt;br /&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http://devlicio.us/blogs/derik_whittaker/archive/2007/08/19/logging-bugs-the-do-s-and-don-ts.aspx"&gt;&lt;img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://devlicio.us/blogs/derik_whittaker/archive/2007/08/19/logging-bugs-the-do-s-and-don-ts.aspx" border="0" /&gt;&lt;/a&gt; &lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=38244" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/Development/default.aspx">Development</category><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/Methodology/default.aspx">Methodology</category><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/Opinion/default.aspx">Opinion</category><category domain="http://devlicio.us/blogs/derik_whittaker/archive/tags/Featured/default.aspx">Featured</category></item></channel></rss>