<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Lee Brandt's Blog</title>
        <link>http://geekswithblogs.net/leesblog/Default.aspx</link>
        <description>You're only as smart as your last line of code</description>
        <language>en-US</language>
        <copyright>Lee Brandt</copyright>
        <managingEditor>leebrandt@gmail.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <image>
            <title>Lee Brandt's Blog</title>
            <url>http://geekswithblogs.net/images/RSS2Image.gif</url>
            <link>http://geekswithblogs.net/leesblog/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>Fake It Easy On Yourself</title>
            <link>http://geekswithblogs.net/leesblog/archive/2011/01/13/fake-it-easy-on-yourself.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/leesblog/archive/2011/01/13/fake-it-easy-on-yourself.aspx'&gt;http://geekswithblogs.net/leesblog/archive/2011/01/13/fake-it-easy-on-yourself.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I have been using &lt;a href="http://www.ayende.com/projects/rhino-mocks.aspx" target="_blank"&gt;Rhino.Mocks&lt;/a&gt; pretty much since I started being a &lt;a href="http://martinfowler.com/articles/mocksArentStubs.html" target="_blank"&gt;mockist-type tester&lt;/a&gt;. I have been very happy with it for the most part, but a year or so ago, I got a glimpse of some tests using &lt;a href="http://code.google.com/p/moq/" target="_blank"&gt;Moq&lt;/a&gt;. I thought the little bit I saw was very compelling. For a long time, I had been using:&lt;/p&gt;  &lt;div id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; var _repository = MockRepository.GenerateMock&amp;lt;IRepository&amp;gt;();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; _repository.Expect(repo=&amp;gt;repo.SomeCall()).Return(SomeValue);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; var _controller = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SomeKindaController(_repository);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt; ... some exercising code&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt; _repository.AssertWasCalled(repo =&amp;gt; repo.SomeCall());&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;I was happy with that syntax. I didn’t go looking for something else, but what I saw was:&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; var _repository = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Mock();&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;And I thought, “That looks really nice!” The code was very expressive and easier to read that the &lt;a href="http://www.ayende.com/projects/rhino-mocks.aspx" target="_blank"&gt;Rhino.Mocks&lt;/a&gt; syntax. I have gotten so used to the &lt;a href="http://www.ayende.com/projects/rhino-mocks.aspx" target="_blank"&gt;Rhino.Mocks&lt;/a&gt; syntax that it made complete sense to me, but to developers I was mentoring in mocking, it was sometimes to obtuse.&lt;/p&gt;

&lt;p&gt;SO I thought I would write some tests using &lt;a href="http://code.google.com/p/moq/" target="_blank"&gt;Moq&lt;/a&gt; as my mocking tool. But I discovered something ugly once I got into it. The way Mocks are created makes &lt;a href="http://code.google.com/p/moq/" target="_blank"&gt;Moq&lt;/a&gt; very easy to read, but that only gives you a &lt;a href="http://en.wikipedia.org/wiki/Mock_object" target="_blank"&gt;Mock&lt;/a&gt; not the object itself, which is what you’ll need to pass to the exercising code. So this is what it ends up looking like:&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; var _repository = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Mock&amp;lt;IRepository&amp;gt;();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; _repository.SetUp(repo=&amp;gt;repo.SomeCall).Returns(SomeValue);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; var _controller = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SomeKindaController(_repository.Object);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt; .. some exercizing code&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt; _repository.Verify(repo =&amp;gt; repo.SomeCall());&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Two things jump out at me: 1) when I set up my mocked calls, do I set it on the Mock or the Mock’s “object”? and 2) What am I verifying on SomeCall? Just that it was called? that it is available to call? Dealing with 2 objects, a “Mock” and an “Object” made me have to consider naming conventions. Should I always call the mock _repositoryMock and the object _repository? So I went back to &lt;a href="http://www.ayende.com/projects/rhino-mocks.aspx" target="_blank"&gt;Rhino.Mocks&lt;/a&gt;. It is the most widely used framework, and show other how to use it is easier because there is one natural object to use, the _repository.&lt;/p&gt;

&lt;p&gt;Then I came across a blog post from &lt;a href="http://ondevelopment.blogspot.com/" target="_blank"&gt;Patrik Hägne&lt;/a&gt;, and that led me to a post about &lt;a href="http://code.google.com/p/fakeiteasy/" target="_blank"&gt;FakeItEasy&lt;/a&gt;. I went to the Google Code site and when I saw the syntax, I got very excited. Then I read the wiki page where &lt;a href="http://stackoverflow.com/users/46187/patrik-hagne" target="_blank"&gt;Patrik&lt;/a&gt; stated why he wrote &lt;a href="http://code.google.com/p/fakeiteasy/" target="_blank"&gt;FakeItEasy&lt;/a&gt;, and it mirrored my own experience. So I began to play with it a bit. So far, I am sold. the syntax is VERY easy to read and the fluent interface is super discoverable. It basically looks like this:&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; var _repository = A.Fake&amp;lt;IRepository&amp;gt;();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; a.CallTo(repo=&amp;gt;repo.SomeMethod()).Returns(SomeValue);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; var _controller = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SomeKindaController(_repository);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt; ... some exercising code&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt; A.CallTo(() =&amp;gt; _repository.SOmeMethod()).MustHaveHappened();&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Very nice. But is it mature? It’s only been around a couple of years, so will I be giving up some thing that I use a lot because it hasn’t been implemented yet? I doesn’t seem so. As I read more examples and posts from &lt;a href="http://ondevelopment.blogspot.com/" target="_blank"&gt;Patrik&lt;/a&gt;, he has some pretty complex scenarios. He even has support for VB.NET!&lt;/p&gt;

&lt;p&gt;So if you are looking for a mocking framework that looks and feels very natural, try out &lt;a href="http://code.google.com/p/fakeiteasy/" target="_blank"&gt;FakeItEasy&lt;/a&gt;!&lt;/p&gt;

&lt;div style="margin-top: 10px; height: 15px" class="zemanta-pixie"&gt;&lt;/div&gt; &lt;img src="http://geekswithblogs.net/leesblog/aggbug/143470.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lee Brandt</dc:creator>
            <guid>http://geekswithblogs.net/leesblog/archive/2011/01/13/fake-it-easy-on-yourself.aspx</guid>
            <pubDate>Fri, 14 Jan 2011 04:58:48 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/leesblog/comments/143470.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/leesblog/archive/2011/01/13/fake-it-easy-on-yourself.aspx#feedback</comments>
            <slash:comments>5</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/leesblog/comments/commentRss/143470.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/leesblog/services/trackbacks/143470.aspx</trackback:ping>
        </item>
        <item>
            <title>What I Expect From Myself This Year</title>
            <link>http://geekswithblogs.net/leesblog/archive/2011/01/11/what-i-expect-from-myself-this-year.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/leesblog/archive/2011/01/11/what-i-expect-from-myself-this-year.aspx'&gt;http://geekswithblogs.net/leesblog/archive/2011/01/11/what-i-expect-from-myself-this-year.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I am making it a point not to call them resolutions, because the word has become an institution and is beginning to have no meaning. That's why I end up not keeping my resolutions, I think.    &lt;br /&gt;So in the spirit of holding myself to my own commitments, I will make a plan and some realistic goals.&lt;/p&gt;  &lt;p&gt;1.) Lose weight. Everyone has this on their list, but I am going to be conservative and specific. I currently weigh 393lbs. (yeah, I know). So I want to plan to lose 10lbs per month, that's 1lb. every three days, that shouldn't be difficult if I stick to my diet and exercise plan.    &lt;br /&gt;- How do I do this?     &lt;br /&gt;    - Diet: vegetarian. Since I already know I have high blood pressure and borderline high cholesterol, a meat-free diet is in order. I was vegan for a little over 2 years in 2006-2008, I think I can handle vegetarian.     &lt;br /&gt;    - Exercise: at least 3 times (preferably every day) a week for 30 minutes. It has to be something that gets my heart rate up, or burns in my muscles. I can walk for cardio to start and mild calisthenics (girly push-ups, crunches, etc.).     &lt;br /&gt;        - Move: I spend all my time behind the computer. I have recently started to use a slight variation of the Pomodoro Technique (my Pomodoros are 50 minutes instead of 25). During my 10 minutes every hour to answer emails, chats, etc., I will take a few minutes to stretch.     &lt;br /&gt;2.) Get my wife pregnant. We've been talking about it for years. Now that she is done with graduate school and I have a great job, now's the time. We'll be the oldest parents in the PTA most likely, but I don't care.     &lt;br /&gt;3.) Blog More. Another favorite among bloggers, but I do have about six drafts for blog posts started. The topics are there all I need to do is flesh out the post. This can be the first hour of any computer time I have after work. As soon as I am done exercising, shower and post.     &lt;br /&gt;4.) Speak less. Most people want to speak more. I want to concentrate on the places that I enjoy and that can really use the speakers (like local code camps), rather than trying to be some national speaker. I love speaking at conferences, but I need to spend some more time at home if we're going to get pregnant.     &lt;br /&gt;5.) Read more. I got a &lt;a href="http://www.amazon.com/gp/product/B002Y27P3M?ie=UTF8&amp;amp;tag=thecodbuc-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B002Y27P3M"&gt;Kindle&lt;/a&gt;&lt;img style="border-bottom-style: none !important; margin: 0px; border-left-style: none !important; border-top-style: none !important; border-right-style: none !important" border="0" alt="alt" src="http://www.assoc-amazon.com/e/ir?t=thecodbuc-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B002Y27P3M" width="1" height="1" /&gt; for Christmas and I am loving it so far. I have almost finished &lt;a href="http://www.amazon.com/gp/product/B000JML7EC?ie=UTF8&amp;amp;tag=thecodbuc-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B000JML7EC"&gt;Treasure Island&lt;/a&gt;&lt;img style="border-bottom-style: none !important; margin: 0px; border-left-style: none !important; border-top-style: none !important; border-right-style: none !important" border="0" alt="alt" src="http://www.assoc-amazon.com/e/ir?t=thecodbuc-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B000JML7EC" width="1" height="1" /&gt;, and am getting ready to pick my next book. I will probably read a lot of classics for 2 reasons: (1) they teach deep lessons and (2) most are free for the &lt;a href="http://www.amazon.com/gp/product/B002Y27P3M?ie=UTF8&amp;amp;tag=thecodbuc-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B002Y27P3M"&gt;Kindle&lt;/a&gt;&lt;img style="border-bottom-style: none !important; margin: 0px; border-left-style: none !important; border-top-style: none !important; border-right-style: none !important" border="0" alt="alt" src="http://www.assoc-amazon.com/e/ir?t=thecodbuc-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B002Y27P3M" width="1" height="1" /&gt;.     &lt;br /&gt;6.) Find my religion. I was raised Southern Baptist, but I want to find my own way. I've been wanting to go to the local Unitarian Church, so I will make a point to go before the end of March. I also want to add a few religious books to my reading list. My boss bought me a copy of Lee Strobel's &lt;a href="http://www.amazon.com/gp/product/0310209307?ie=UTF8&amp;amp;tag=thecodbuc-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0310209307"&gt;The Case for Christ: A Journalist's Personal Investigation of the Evidence for Jesus&lt;/a&gt;&lt;img style="border-bottom-style: none !important; margin: 0px; border-left-style: none !important; border-top-style: none !important; border-right-style: none !important" border="0" alt="alt" src="http://www.assoc-amazon.com/e/ir?t=thecodbuc-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0310209307" width="1" height="1" /&gt; , and I have a copy of Bruce Feiler's &lt;a href="http://www.amazon.com/gp/product/0060838663?ie=UTF8&amp;amp;tag=thecodbuc-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0060838663"&gt;Abraham: A Journey to the Heart of Three Faiths (P.S.)&lt;/a&gt;&lt;img style="border-bottom-style: none !important; margin: 0px; border-left-style: none !important; border-top-style: none !important; border-right-style: none !important" border="0" alt="alt" src="http://www.assoc-amazon.com/e/ir?t=thecodbuc-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0060838663" width="1" height="1" /&gt; . I will start there.&lt;/p&gt;  &lt;p&gt;Seems like a lot now that I spell it out like this. But these are only starters. I am forty years old. I cannot keep living like I am twenty anymore. &lt;/p&gt;  &lt;p&gt;So here we go, 2011.&lt;/p&gt; &lt;img src="http://geekswithblogs.net/leesblog/aggbug/143443.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lee Brandt</dc:creator>
            <guid>http://geekswithblogs.net/leesblog/archive/2011/01/11/what-i-expect-from-myself-this-year.aspx</guid>
            <pubDate>Wed, 12 Jan 2011 03:17:48 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/leesblog/comments/143443.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/leesblog/archive/2011/01/11/what-i-expect-from-myself-this-year.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/leesblog/comments/commentRss/143443.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/leesblog/services/trackbacks/143443.aspx</trackback:ping>
        </item>
        <item>
            <title>503.1 Service Unavailable Error Resolution</title>
            <link>http://geekswithblogs.net/leesblog/archive/2010/12/09/503.1-service-unavailable-error-resolution.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/leesblog/archive/2010/12/09/503.1-service-unavailable-error-resolution.aspx'&gt;http://geekswithblogs.net/leesblog/archive/2010/12/09/503.1-service-unavailable-error-resolution.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I was having a hell of a time tonight with my &lt;a title="Internet Information Services" href="http://www.microsoft.com/iis" target="_blank"&gt;IIS&lt;/a&gt; on my development laptop. I don’t remember doing anything to change the IIS settings. I don’t use IIS that much on my dev machine. Usually &lt;a title="Cassini–Huygens" href="http://support.microsoft.com/kb/893391" target="_blank"&gt;Cassini&lt;/a&gt; is enough for testing my development efforts but tonight I needed to replicate a problem that seems to stem from x86 v x64 mismatch, so I went to create an IIS site pointed to my dev folder.&lt;/p&gt;  &lt;p&gt;When I did, I got a “503.1 &lt;a title="List of HTTP status codes" href="http://en.wikipedia.org/wiki/List_of_HTTP_status_codes" target="_blank"&gt;Service Unavailable&lt;/a&gt; Error”. &lt;/p&gt;  &lt;p&gt;First thing I did is go over all my setting to make sure I didn’t screw something up when I set up the site. It was pointing to the right place, and the app pool settings seemed to be alright. However, when I got the 503.1 error and went back to my app pool list, I saw that the app pool I was using was stopped again. I must’ve started and ran it a dozen times to verify that I wasn’t seeing things. After having a colleague look at it and not finding an answer, I started poking around &lt;a title="Google" href="http://google.com/" target="_blank"&gt;Google.&lt;/a&gt; I cam across a &lt;a href="http://haacked.com/archive/2007/05/18/service-unavailable-errors-in-iis-7-are-killing-me.aspx" target="_blank"&gt;post&lt;/a&gt; from &lt;a href="http://haacked.com/articles/AboutHaacked.aspx" target="_blank"&gt;Phil Haack&lt;/a&gt; about the same error. His fix was not mine, however. When I ran his command on the &lt;a title="Command-line interface" href="http://en.wikipedia.org/wiki/Command-line_interface" target="_blank"&gt;CLI&lt;/a&gt;, I didn’t see the reserved routes for HTTP.SYS there. &lt;/p&gt;  &lt;p&gt;Finally, I looked in the event viewer (where I should have looked as soon as I saw that my app pool was stopping) and saw an error in there. For the IIS-W3SVC-WP Source I saw:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;The worker process for application pool 'DefaultAppPool' encountered an error 'Cannot read configuration file due to insufficient permissions &lt;/p&gt;    &lt;p&gt;' trying to read configuration data from file '\\?\C:\Windows\Microsoft.NET\Framework64\v4.0.30319\CONFIG\machine.config', line number '0'. The data field contains the error code.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;font color="#000000"&gt;So I went to that path and saw a little lock on the file icon. I opened up the security tab for file properties and saw that I was missing the IIS_IUSRS group. On a machine that was working correctly, I verified that it indeed had the IIS_IUSRS group set to Read and Read &amp;amp; Execute allowed. So I set mine up the same and voila!&lt;/font&gt; &lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;Hopefully this helps somebody else, too.&lt;/font&gt;&lt;/p&gt;  &lt;div style="margin-top: 10px; height: 15px" class="zemanta-pixie"&gt;&lt;a class="zemanta-pixie-a" title="Enhanced by Zemanta" href="http://www.zemanta.com/"&gt;&lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; float: right; border-right-style: none" class="zemanta-pixie-img" alt="Enhanced by Zemanta" src="http://img.zemanta.com/zemified_e.png?x-id=3c7744c2-014f-42fc-b4ad-0118f3fdf0fa" /&gt;&lt;/a&gt;&lt;/div&gt; &lt;img src="http://geekswithblogs.net/leesblog/aggbug/143064.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lee Brandt</dc:creator>
            <guid>http://geekswithblogs.net/leesblog/archive/2010/12/09/503.1-service-unavailable-error-resolution.aspx</guid>
            <pubDate>Thu, 09 Dec 2010 07:02:54 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/leesblog/comments/143064.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/leesblog/archive/2010/12/09/503.1-service-unavailable-error-resolution.aspx#feedback</comments>
            <slash:comments>6</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/leesblog/comments/commentRss/143064.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/leesblog/services/trackbacks/143064.aspx</trackback:ping>
        </item>
        <item>
            <title>11 Types of Developers</title>
            <link>http://geekswithblogs.net/leesblog/archive/2010/12/05/11-types-of-developers.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/leesblog/archive/2010/12/05/11-types-of-developers.aspx'&gt;http://geekswithblogs.net/leesblog/archive/2010/12/05/11-types-of-developers.aspx&lt;/a&gt;&lt;/p&gt;&lt;h3&gt;Jack Dawson&lt;/h3&gt;  &lt;p&gt;Jack Dawson is the homeless drifter in &lt;em&gt;Titanic.&lt;/em&gt; At one point in the movie he says, “I figure life’s a gift, and I don’t intend on wasting it.” He is happy to wander wherever life takes him. He works himself from place to place, making just enough money to make it to his next adventure.&lt;/p&gt;  &lt;p&gt;The “Jack Dawson” developer clings on to any new technology as the ‘next big thing’, and will find ways to shoe-horn it in to places where it is not a fit. He is very appealing to the other developers because they want to try the newest techniques and tools too, He will only stay until the new technology either bores him or becomes problematic. Jack will also be hard to find once the technology has been implemented, because he will be on to the next shiny thing. &lt;/p&gt;  &lt;p&gt;However, having a Jack Dawson on your team can be beneficial. Jack can be a great ally when attempting to convince a stodgy, corporate entity to upgrade. Jack usually has an encyclopedic recall of all the new features of the technology upgrade and is more than happy to interject them in any conversation.&lt;/p&gt;  &lt;h3&gt;Tom Smykowski&lt;/h3&gt;  &lt;p&gt;Tom is the neurotic employee in &lt;em&gt;Office Space,&lt;/em&gt; and is deathly afraid of being fired. He will do only what is necessary to keep the status quo. He believes as long as nothing changes, his job is safe. He will scoff at anything new and be the naysayer during any change initiative.&lt;/p&gt;  &lt;p&gt;Tom can be useful in off-setting Jack Dawson. Jack will constantly be pushing for change and Tom will constantly be fighting it. When you see that Jack is getting kind of bored with a new technology and Tom has finally stopped wetting himself at the mere mention of it, then it is probably the sweet spot of beginning to implement that new technology (providing it is the right tool for the job).&lt;/p&gt;  &lt;h6&gt;&lt;/h6&gt;  &lt;h3&gt;Ray Consella&lt;/h3&gt;  &lt;p&gt;Ray is the guy who built the &lt;em&gt;Field of Dreams&lt;/em&gt;. He took a risk. Sometimes he screwed it up, but he knew he didn’t want to end up regretting not attempting it. He constantly doubted himself, but he knew he had to keep going. Granted, he was doing what the voices in his head were telling him to do, but my point is he was driven to do something that most people considered crazy. Even when his friends, his wife and even he told himself he was crazy, somewhere inside himself, he knew it was the right thing to do.&lt;/p&gt;  &lt;p&gt;These are the innovators. These are the Bill Gates and Steve Jobs of the world. The take risks, they fail, they learn and the get better. Obviously, this kind of person thrives in start-ups and smaller companies, but that is due to their natural aversion to bureaucracy. They want to see their ideas put into motion quickly, and withdrawn quickly if it doesn’t work. Short feedback cycles are essential to Ray. He wants to know if his idea is working or not. He wants to modify or reverse his idea if it is not working or makes things worse.&lt;/p&gt;  &lt;p&gt;These are the agilistas. May I always be one.&lt;/p&gt; &lt;img src="http://geekswithblogs.net/leesblog/aggbug/143014.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lee Brandt</dc:creator>
            <guid>http://geekswithblogs.net/leesblog/archive/2010/12/05/11-types-of-developers.aspx</guid>
            <pubDate>Mon, 06 Dec 2010 05:45:04 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/leesblog/comments/143014.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/leesblog/archive/2010/12/05/11-types-of-developers.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/leesblog/comments/commentRss/143014.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/leesblog/services/trackbacks/143014.aspx</trackback:ping>
        </item>
        <item>
            <title>New Style of Post</title>
            <link>http://geekswithblogs.net/leesblog/archive/2010/12/05/new-style-of-post.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/leesblog/archive/2010/12/05/new-style-of-post.aspx'&gt;http://geekswithblogs.net/leesblog/archive/2010/12/05/new-style-of-post.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I’ve been absent from blogging for awhile. Part of it is due to the ultimate inertia of my life. Most of it is due to my inability to post my thoughts without turning it into an ‘According to Hoyle’ blog post. I have an idea, and I try to flesh it into an interesting article. Something that you might see posted in a magazine or something. It never lives up to my standards and I end up dropping it. How did I get to this? I started this blog for the intended purpose of archiving my ideas and solutions so that I could find them again. Me. I realize that maybe some people read this blog, but I am NOT a celebrity or God’s gift to programming. So why am I worried about making my posts ‘worthy of public consumption’?&lt;/p&gt;  &lt;p&gt;Well, no more. If you are a reader of this blog, I thank you. But my content may change dramatically over the coming months, so be prepared. Hopefully you will still find my thoughts, ideas and solutions worth reading.&lt;/p&gt;  &lt;p&gt;Thanks again,&lt;/p&gt;  &lt;p&gt;Lee&lt;/p&gt; &lt;img src="http://geekswithblogs.net/leesblog/aggbug/143013.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lee Brandt</dc:creator>
            <guid>http://geekswithblogs.net/leesblog/archive/2010/12/05/new-style-of-post.aspx</guid>
            <pubDate>Mon, 06 Dec 2010 01:44:43 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/leesblog/comments/143013.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/leesblog/archive/2010/12/05/new-style-of-post.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/leesblog/comments/commentRss/143013.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/leesblog/services/trackbacks/143013.aspx</trackback:ping>
        </item>
        <item>
            <title>Please Think Before (And While) Coding</title>
            <link>http://geekswithblogs.net/leesblog/archive/2010/11/19/please-think-before-or-while-coding.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/leesblog/archive/2010/11/19/please-think-before-or-while-coding.aspx'&gt;http://geekswithblogs.net/leesblog/archive/2010/11/19/please-think-before-or-while-coding.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I am a firm believer in learning best practices. I enjoy reading and studying SOLID and how to spot violations in the wild. I whole-heartedly concur with Separation of Concerns, Behavior-Driven development, lean software development and a hundred other things that have really cool buzz-wordy names and make me sound really smart. All these things only serve to enhance one binding truth about software development: it a thinking exercise.&lt;/p&gt;  &lt;p&gt;You can master every GoF pattern, and be the master of every OR/M. You can spend endless nights studying OOP/OOD principles and make flash cards for recognizing SOLID violations. But if you are merely relying on your ability to recall these things while coding, you will misuse, misrepresent and munge everything up. These are all merely connectors for that big tool between your ears.&lt;/p&gt;  &lt;p&gt;So if you think you can write software by simply following the advice of books and principles, think again.&lt;/p&gt;  &lt;p&gt;~Lee&lt;/p&gt; &lt;img src="http://geekswithblogs.net/leesblog/aggbug/142780.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lee Brandt</dc:creator>
            <guid>http://geekswithblogs.net/leesblog/archive/2010/11/19/please-think-before-or-while-coding.aspx</guid>
            <pubDate>Fri, 19 Nov 2010 07:27:14 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/leesblog/comments/142780.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/leesblog/archive/2010/11/19/please-think-before-or-while-coding.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/leesblog/comments/commentRss/142780.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/leesblog/services/trackbacks/142780.aspx</trackback:ping>
        </item>
        <item>
            <title>MVC3 RC _ViewStart Page</title>
            <category>ASP.NET</category>
            <category>Software</category>
            <category>Learning</category>
            <category>MVC</category>
            <link>http://geekswithblogs.net/leesblog/archive/2010/11/13/mvc3-rc-_viewstart-page.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/leesblog/archive/2010/11/13/mvc3-rc-_viewstart-page.aspx'&gt;http://geekswithblogs.net/leesblog/archive/2010/11/13/mvc3-rc-_viewstart-page.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;For those of you following the MVC releases, you will see something new in your File-&amp;gt;New for MVC3 RC: _ViewStart.cshtml (_ViewStart.vbhtml for you VBers). This is a common place to dry out view dependencies. The most common view dependency is the MasterView it will use. To that end, the default _ViewStart page you get from a File-&amp;gt;New MVC3 project has just the:&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; @{&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;     Layout = &lt;span style="color: #006080"&gt;"~/Views/Shared/_Layout.cshtml"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;This seems to be done by convention. The view must be named “_viewstart.cshtml” or it will not be used. It also does not apply to partial views (since they are not really a page).&lt;/p&gt;

&lt;p&gt;Hope this helps,&lt;/p&gt;

&lt;p&gt;Lee&lt;/p&gt; &lt;img src="http://geekswithblogs.net/leesblog/aggbug/142701.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lee Brandt</dc:creator>
            <guid>http://geekswithblogs.net/leesblog/archive/2010/11/13/mvc3-rc-_viewstart-page.aspx</guid>
            <pubDate>Sat, 13 Nov 2010 20:51:29 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/leesblog/comments/142701.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/leesblog/archive/2010/11/13/mvc3-rc-_viewstart-page.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/leesblog/comments/commentRss/142701.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/leesblog/services/trackbacks/142701.aspx</trackback:ping>
        </item>
        <item>
            <title>WP7 Official Launch on October 12th</title>
            <link>http://geekswithblogs.net/leesblog/archive/2010/10/01/wp7-official-launch-on-october-12th.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/leesblog/archive/2010/10/01/wp7-official-launch-on-october-12th.aspx'&gt;http://geekswithblogs.net/leesblog/archive/2010/10/01/wp7-official-launch-on-october-12th.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.msdnevents.com/Default.aspx?keyword=windows+phone+7+developer+launch" target="_blank"&gt;&lt;img style="display: inline" title="728x90_Banner_WP7DevLaunch" alt="728x90_Banner_WP7DevLaunch" src="http://gwb.blob.core.windows.net/leesblog/WindowsLiveWriter/WP7OfficialLaunchonOctober12th_149C4/728x90_Banner_WP7DevLaunch_3.gif" width="728" height="90" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/leesblog/aggbug/142073.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lee Brandt</dc:creator>
            <guid>http://geekswithblogs.net/leesblog/archive/2010/10/01/wp7-official-launch-on-october-12th.aspx</guid>
            <pubDate>Sat, 02 Oct 2010 04:27:04 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/leesblog/comments/142073.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/leesblog/archive/2010/10/01/wp7-official-launch-on-october-12th.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/leesblog/comments/commentRss/142073.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/leesblog/services/trackbacks/142073.aspx</trackback:ping>
        </item>
        <item>
            <title>Upcoming Speaking Engagements</title>
            <link>http://geekswithblogs.net/leesblog/archive/2010/08/16/upcoming-speaking-engagements.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/leesblog/archive/2010/08/16/upcoming-speaking-engagements.aspx'&gt;http://geekswithblogs.net/leesblog/archive/2010/08/16/upcoming-speaking-engagements.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I just wanted to put up here a list of upcoming speaking engagements. Mostly, for my own sanity, but just in case you were wanted to see me put my mouth where your money is:&lt;/p&gt;  &lt;p&gt;August 20th &amp;amp; 21st – &lt;a href="http://www.stlouisdayofdotnet.com/" target="_blank"&gt;St. Louis Day of Dot Net&lt;/a&gt; – St. Louis, MO&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.stlouisdayofdotnet.com/SessionDetail.aspx?SessionID=141" target="_blank"&gt;Getting Started With Behavior-Driven Development&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.stlouisdayofdotnet.com/SessionDetail.aspx?SessionID=164" target="_blank"&gt;NHibernate &amp;amp; Friends&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;September 8th-10th – &lt;a href="http://www.heartlanddc.com/" target="_blank"&gt;Heartland Developer’s Conference&lt;/a&gt; – Omaha, NE&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.heartlanddc.com/?page_id=459" target="_blank"&gt;NHibernate &amp;amp; Friends&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;October 21st &amp;amp; 22nd – &lt;a href="http://tysondevcon.com/2010/" target="_blank"&gt;Tyson Developer’s Conference&lt;/a&gt; – Springdale, AR&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://tysondevcon.com/2010/Speakers/511/lee-brandt" target="_blank"&gt;ASP.NET MVC: How We Got Here&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;If you are looking for a speaker for your user group or conference, please contact me.&lt;/p&gt;  &lt;p&gt;Thanks, and look for a more regular post from me soon.&lt;/p&gt; &lt;img src="http://geekswithblogs.net/leesblog/aggbug/141335.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lee Brandt</dc:creator>
            <guid>http://geekswithblogs.net/leesblog/archive/2010/08/16/upcoming-speaking-engagements.aspx</guid>
            <pubDate>Mon, 16 Aug 2010 14:50:01 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/leesblog/comments/141335.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/leesblog/archive/2010/08/16/upcoming-speaking-engagements.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/leesblog/comments/commentRss/141335.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/leesblog/services/trackbacks/141335.aspx</trackback:ping>
        </item>
        <item>
            <title>Of Consultants and Contractors</title>
            <link>http://geekswithblogs.net/leesblog/archive/2010/07/13/of-consultants-and-contractors.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/leesblog/archive/2010/07/13/of-consultants-and-contractors.aspx'&gt;http://geekswithblogs.net/leesblog/archive/2010/07/13/of-consultants-and-contractors.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I have been programming computer in some professional capacity for almost 13 years. In that time, I have written code in several capacities. I have been a permanent employee of a company that hired me to write internal applications, I have been a permanent employee of companies that have paid me to write applications for their clients. I have been a contractor and I have also been a consultant. On the surface, those might seem like the same thing; but consulting and contracting are very different engagements. &lt;/p&gt;  &lt;h4&gt;What’s The Difference, Kenneth?&lt;/h4&gt;  &lt;p&gt;A lot of people, including contractors and consultants themselves, use these terms interchangeably. The problem is, people need to know the difference. Companies especially need to know in order to be able to hire the correct one. So here is the difference: Contractors can help an organization keep the lights on, but consultants can help you get more light for the same or less money. &lt;/p&gt;  &lt;p&gt;Now on the outset, that may seem like you should always go with a consultant. That is not the case. Like anything else, there is a right tool for the job. Consultants are always going to cost more than contractors, and they should. Consultants bring more to the table. They bring ideas, expertise and a business acumen that contractors don’t. Contractors provide great helping hands when you need to power through something. Good contractors can even sometimes help you get it done faster or better. Consultants, on the other hand should &lt;em&gt;always&lt;/em&gt; help you find a way to get it done better or faster. Consultants can still help you slog code, but their main purpose should be to help their clients &lt;em&gt;improve&lt;/em&gt; their situation. Contractors are also (usually) hourly, temporary employees. If you need the same person in six months, they’re likely not going to be available because they are slogging code somewhere else. &lt;/p&gt;  &lt;h4&gt;What’s This Mean To Me?&lt;/h4&gt;  &lt;p&gt;If you’re a company looking for outside help, hopefully this will help you decide whether you need a contractor or a consultant. If you’re a programmer looking at a job as a consultant or a contractor, this might help you decide which one is for you. Consultants are rarely happy in contracting positions. Consultants have experience and ideas that they want to share, and the want to be part of the overall strategy of the project or projects. That doesn’t mean that contractors &lt;em&gt;don’t&lt;/em&gt; have ideas or expertise, they are just more likely to be happy doing the heavy lifting work and letting someone else provide more high-level direction.&lt;/p&gt;  &lt;p&gt;What do you think?&lt;/p&gt; &lt;img src="http://geekswithblogs.net/leesblog/aggbug/140912.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lee Brandt</dc:creator>
            <guid>http://geekswithblogs.net/leesblog/archive/2010/07/13/of-consultants-and-contractors.aspx</guid>
            <pubDate>Tue, 13 Jul 2010 14:35:28 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/leesblog/comments/140912.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/leesblog/archive/2010/07/13/of-consultants-and-contractors.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/leesblog/comments/commentRss/140912.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/leesblog/services/trackbacks/140912.aspx</trackback:ping>
        </item>
        <item>
            <title>How Estimates Became Quotes</title>
            <link>http://geekswithblogs.net/leesblog/archive/2010/06/16/how-estimates-became-quotes.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/leesblog/archive/2010/06/16/how-estimates-became-quotes.aspx'&gt;http://geekswithblogs.net/leesblog/archive/2010/06/16/how-estimates-became-quotes.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;It’s our fault. Well, not completely, but we haven’t helped the situation any. All of what follows comes from my own experiences which, from talking to lots of other developers about it, seems to be pretty much par for the course.&lt;/p&gt;  &lt;h3&gt;Where We Started&lt;/h3&gt;  &lt;p&gt;When we first started estimating, we estimated pretty clearly. We would try to imagine something we’d done that was similar to the project being estimated and we’d toss it about in our heads a bit and see how much bigger or smaller we thought this new thing was, and add or subtract accordingly. We wouldn’t spend too much time on it, because we wanted to get to writing the software. &lt;a href="http://gwb.blob.core.windows.net/leesblog/WindowsLiveWriter/HowEstimatesBecameQuotes_1E50/frustration_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="frustration" border="0" alt="frustration" align="right" src="http://gwb.blob.core.windows.net/leesblog/WindowsLiveWriter/HowEstimatesBecameQuotes_1E50/frustration_thumb.jpg" width="244" height="125" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Eventually, we’d come across some huge problem that there was now way we could’ve known about ahead of time. Either we didn’t see this thing or, we didn’t realize that this particular version of a problem would be so… problematic. We usually call this “not knowing what we don’t know”. It’s unavoidable. We just can’t know. Until we wade in and start putting some code together, there are just some things we won’t know… and some things we don’t even know that we don’t know. Y’know?&lt;/p&gt;  &lt;p&gt;So what happens? We go over budget. Project managers scream and dance the dance of the stressed-out project manager, and there is nothing we can do (or could’ve done) about it. We didn’t know. We thought about it for a bit and we didn’t see this herculean task sitting in the middle of our nice quiet project, and it has bitten us in the rear end. We now know how to handle this in the future, though. We will take some more time to pick around the requirements and discover all those things we don’t know. We’ll do some prototyping, we’ll read some blogs about similar projects, we’ll really grill the customer with questions during the requirements gathering phase. We’ll keeping asking “what else?” until the shove us down the stairs. We’ll take our time and uncover it all.&lt;/p&gt;  &lt;h3&gt;We Learned, But Good&lt;/h3&gt;  &lt;p&gt;The next time comes, and you know what happens? We do it. We grill the customer for weeks and prototype and read and research and we estimate everything down to the last button on the last form. Know what that gets us? It gets us three months of wasted time, and our estimate will still be off. Possibly off by a factor of four. WTF, mate? No way we could be surprised by something! We uncovered every particle. We turned every stone. How is it we still came across unknowns? Because we STILL didn’t know what we didn’t know. How could we? We didn’t know to ask.&lt;/p&gt;  &lt;p&gt;The worst part is, we’ve now convinced the product that this is NOT an estimate. It is a solid number based on massive research and an endless number of questions that they answered. There is absolutely now way you don’t know everything there is to know about this project now. No way there is anything you haven’t uncovered. And their faith in that “Esti-Quote” goes through the roof. When the project goes over this time, they might even begin to question whether or not you know what you’re doing. Who could blame them? You drilled them for weeks about every little thing, and when they complained about all the questions, you told them you wanted to uncover everything so there would be no surprises. SO we set them up to faile&lt;/p&gt;  &lt;h3&gt;Guess, Then Plan&lt;/h3&gt;  &lt;p&gt;We had a chance. At the beginning we could have just said, “That’s just a gut-feeling estimate, based on my past experience with similar projects. There could still be surprises.”&lt;/p&gt;  &lt;p&gt;If we spend SOME time doing SOME discovery and then bounce that against our own past experiences, we can come up with a fairly healthy estimate. We can then help the product owner understand that an estimate is a guess. Sure, it’s an educated guess, but it is still a guess. If we get it right it will be almost completely luck. Then, we help them to plan the development by taking that guess (yes, they still need the guess for planning purposes) and start measuring early and often to see if we still think we are right. We should adjust the estimate and alert the product owner as soon as we see problems (bad news does not age well) and we should be able to see any problems immediately if we are constantly measuring our pace.&lt;/p&gt;  &lt;p&gt;In lean software, we start with that guess and begin measuring cycle times immediately. Then we can make projections based on those cycle times and compare them to our estimate. This constant feedback is the best way to ensure that there are no surprises at the END of the project. There sill still be surprises, but we’ll see them sooner and have a better understanding of how they will affect our overall timeline.&lt;/p&gt;  &lt;p&gt;What do you think?&lt;/p&gt; &lt;img src="http://geekswithblogs.net/leesblog/aggbug/140442.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lee Brandt</dc:creator>
            <guid>http://geekswithblogs.net/leesblog/archive/2010/06/16/how-estimates-became-quotes.aspx</guid>
            <pubDate>Wed, 16 Jun 2010 07:09:30 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/leesblog/comments/140442.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/leesblog/archive/2010/06/16/how-estimates-became-quotes.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/leesblog/comments/commentRss/140442.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/leesblog/services/trackbacks/140442.aspx</trackback:ping>
        </item>
        <item>
            <title>Do NOT remove the reference to System.Core from your VS2010 Project</title>
            <link>http://geekswithblogs.net/leesblog/archive/2010/04/23/do-not-remove-the-reference-to-system.core-from-your-vs2010.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/leesblog/archive/2010/04/23/do-not-remove-the-reference-to-system.core-from-your-vs2010.aspx'&gt;http://geekswithblogs.net/leesblog/archive/2010/04/23/do-not-remove-the-reference-to-system.core-from-your-vs2010.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;One of the things I routinely do when adding a new class library project, is remove all references and just add them back in as I need them. That is NOT a good idea for Visual Studio 2010. When I DID need System.Core, and went to add it back, this is what I got: &lt;/p&gt;  &lt;p&gt;"A reference to 'System.Core' could not be added. This component is automatically referenced..." &lt;/p&gt;  &lt;p&gt;After some Googling I found this article: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://connect.microsoft.com/VisualStudio/feedback/details/525663/cannot-remove-system-core-dll-reference-from-a-vs2010-project"&gt;http://connect.microsoft.com/VisualStudio/feedback/details/525663/cannot-remove-system-core-dll-reference-from-a-vs2010-project&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;It tells you to add it back manually. Here is the part that needs back in the project file. After the last PropertyGroup node, add this node: &lt;/p&gt;  &lt;p&gt;  &amp;lt;ItemGroup&amp;gt;   &lt;br /&gt;    &amp;lt;Reference Include="System.Core" /&amp;gt;    &lt;br /&gt;  &amp;lt;/ItemGroup&amp;gt; &lt;/p&gt;  &lt;p&gt;You should be good to go again. &lt;/p&gt;  &lt;p&gt;Hope this helps. &lt;/p&gt; &lt;img src="http://geekswithblogs.net/leesblog/aggbug/139481.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lee Brandt</dc:creator>
            <guid>http://geekswithblogs.net/leesblog/archive/2010/04/23/do-not-remove-the-reference-to-system.core-from-your-vs2010.aspx</guid>
            <pubDate>Fri, 23 Apr 2010 18:04:15 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/leesblog/comments/139481.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/leesblog/archive/2010/04/23/do-not-remove-the-reference-to-system.core-from-your-vs2010.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/leesblog/comments/commentRss/139481.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/leesblog/services/trackbacks/139481.aspx</trackback:ping>
        </item>
        <item>
            <title>Becoming A Great Developer</title>
            <link>http://geekswithblogs.net/leesblog/archive/2010/04/13/becoming-a-great-developer.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/leesblog/archive/2010/04/13/becoming-a-great-developer.aspx'&gt;http://geekswithblogs.net/leesblog/archive/2010/04/13/becoming-a-great-developer.aspx&lt;/a&gt;&lt;/p&gt;&lt;div class="zemanta-img" style="margin: 1em; width: 310px; display: block; float: right"&gt;&lt;a href="http://commons.wikipedia.org/wiki/Image:Leonardo_self.jpg"&gt;&lt;img alt="Self-portrait of Leonardo da Vinci. Red chalk...." width="300" height="471" style="border-bottom: medium none; border-left: medium none; display: block; border-top: medium none; border-right: medium none" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/ba/Leonardo_self.jpg/300px-Leonardo_self.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;I’ve been doing the whole &lt;a class="zem_slink" title="Computer programming" rel="wikipedia" href="http://en.wikipedia.org/wiki/Computer_programming"&gt;programming&lt;/a&gt; thing for awhile and reading and watching some of the best in the business. I have come to notice that the really great developers do a few things that (I think) makes them great. Now don’t get me wrong, I am not saying that I am one of these few. I still struggle with doing some of the things that makes one great at development. Coincidently, many of these things also make you a better person period.&lt;/p&gt;
&lt;h4&gt;Believe That Guidance Is Better Than Answers&lt;/h4&gt;
&lt;p&gt;This is one I have no problem with. I prefer guidance any time I am learning from another developer. Answers may get you going, but guidance will leave you stranded. At some point, you will come across a problem that can only be solved by thinking for yourself and this is where that guidance will really come in handy. You can use that guidance and extrapolate whatever technology to salve that problem (if it’s the right tool for solving that problem).&lt;/p&gt;
&lt;p&gt;The problem is, lots of developers simply want someone to tell them, “Do this, then this, then set that, and write this.”&lt;/p&gt;
&lt;p&gt;Favor thinking and learn the guidance of doing X and don’t ask someone to show you how to do X, if that makes sense.&lt;/p&gt;
&lt;h4&gt;Read, Read and Read&lt;/h4&gt;
&lt;p&gt;If you don’t like reading, you’re probably NOT going to make it into the Great Developer group. Great developers read books, they read magazines and they read code. &lt;a class="zem_slink" title="Open Source" rel="wikinvest" href="http://www.wikinvest.com/concept/Open_Source"&gt;Open source&lt;/a&gt; playgrounds like &lt;a class="zem_slink" title="Geeknet" rel="homepage" href="http://www.geek.net/"&gt;SourceForge&lt;/a&gt;, &lt;a class="zem_slink" title="CodePlex" rel="homepage" href="http://www.codeplex.com/"&gt;CodePlex&lt;/a&gt; and &lt;a class="zem_slink" title="GitHub" rel="homepage" href="http://github.com/"&gt;GitHub&lt;/a&gt;, have made it extremely easy to download code from developers you admire and see how they do stuff. Chances are, if you read their blog too, they’ll even explain WHY they did what they did (see “Guidance” above). &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/magazine/default.aspx"&gt;MSDN&lt;/a&gt; and &lt;a target="_blank" href="http://www.code-magazine.com/"&gt;Code Magazine&lt;/a&gt; have not only code samples, but explanations of how to use certain technologies and sometimes even when NOT to use that same technology. Books are also out on just about every topic. I still favor the less technology centric books. For instance, I generally don’t buy books like, “Getting Started with Jiminy Jappets”. I look for titles like, “How To Write More Effective Code” (again, see guidance). The &lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2Fs%3Fie%3DUTF8%26x%3D0%26ref_%3Dnb%5Fsb%5Fnoss%26y%3D0%26field-keywords%3DAddison%2520Wesley%2520Signature%2520Series%26url%3Dsearch-alias%253Dstripbooks&amp;amp;tag=thecodbuc-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=390957"&gt;Addison-Wesley Signature Series&lt;/a&gt;&lt;img border="0" alt="" width="1" height="1" style="border-bottom-style: none !important; margin: 0px; border-left-style: none !important; border-top-style: none !important; border-right-style: none !important" src="https://www.assoc-amazon.com/e/ir?t=thecodbuc-20&amp;amp;l=ur2&amp;amp;o=1" /&gt; is a great example of these types of books. They teach technology-agnostic concepts. &lt;a href="http://www.amazon.com/gp/product/0596007124?ie=UTF8&amp;amp;tag=thecodbuc-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0596007124"&gt;Head First Design Patterns&lt;/a&gt;&lt;img border="0" alt="" width="1" height="1" style="border-bottom-style: none !important; margin: 0px; border-left-style: none !important; border-top-style: none !important; border-right-style: none !important" src="http://www.assoc-amazon.com/e/ir?t=thecodbuc-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0596007124" /&gt; is another great guidance book. It teaches the "Gang Of Four" &lt;a class="zem_slink" title="Design Patterns" rel="wikipedia" href="http://en.wikipedia.org/wiki/Design_Patterns"&gt;Design Patterns&lt;/a&gt; in a very easy-to-understand, picture-heavy way (I LIKE pictures).&lt;/p&gt;
&lt;h4&gt;Hang Your Balls Out There&lt;/h4&gt;
&lt;p&gt;Even though the advice came from a 3rd-shift Kinko’s attendant, doesn’t mean it’s not sound advice. Write some code and put it out for others to read, criticize and castigate you for. Understand that there are some real jerks out there who are absolute geniuses. Don’t be afraid to get some great advice wrapped in some really nasty language. Try to take what’s good about it and leave what’s not. I have a tough time with this myself. I don’t really have any code out there that is available for review (other than my demo code). It takes some guts to do, but in the end, there is no substitute for getting a community of developers to critique your code and give you ways to improve.&lt;/p&gt;
&lt;h4&gt;Get Involved&lt;/h4&gt;
&lt;p&gt;Speaking of community, the local and online user groups and discussion forums are a great place to hear about technologies and techniques you might never come across otherwise. Mostly because you might not know to look. But, once you sit down with a bunch of other developers and start discussing what you’re interested in, you may open up a whole new perspective on it. Don’t just go to the UG meetings and watch the presentations either, get out there and talk, socialize. I realize geeks weren’t meant to necessarily be social creatures, but if you’re amongst other geeks, it’s much easier. I’ve learned more in the last 3-4 years that I have been involved in the community that I did in my previous 8 years of coding without it. Socializing works, even if socialism doesn’t.&lt;/p&gt;
&lt;h4&gt;Continuous Improvement&lt;/h4&gt;
&lt;p&gt;Lean proponents might call this “&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Kaizen"&gt;Kaizen&lt;/a&gt;”, but I call it progress. We all know, especially in the technology realm, if you’re not moving ahead, you’re falling behind. It may seem like drinking from a fire hose, but step back and pick out the technologies that speak to you. The ones that may you’re little heart go pitter-patter. Concentrate on those. If you’re still overloaded, pick the best of the best. Just know that if you’re not looking at the code you wrote last week or at least last year with some embarrassment, you’re probably stagnating. That’s about all I can say about that, cause I am all out of clichés to throw at it. :0)&lt;/p&gt;
&lt;h4&gt;Write Code&lt;/h4&gt;
&lt;p&gt;Great painters paint, great writers write, and great developers develop. The most sure-fire way to improve your coding ability is to continue writing code. Don’t just write code that your work throws on you, pick that technology you love or are curious to know more about and walk through some blog demo examples. Take the language you use everyday and try to get it to do something crazy. Who knows, you might create the next &lt;a class="zem_slink" title="Google" rel="homepage" href="http://google.com/"&gt;Google&lt;/a&gt; search algorithm!&lt;/p&gt;
&lt;p&gt;All in all, being a great developer is about finding yourself in all this code. If it is just a job to you, you will probably never be one of the “Great Developers”, but you’re probably okay with that. If, on the other hand, you do aspire to greatness, get out there and GET it. No one’s going hand it to you.&lt;/p&gt;
&lt;div class="zemanta-pixie" style="margin-top: 10px; height: 15px"&gt;&lt;a class="zemanta-pixie-a" title="Enhanced by Zemanta" href="http://www.zemanta.com/"&gt;&lt;img class="zemanta-pixie-img" alt="Enhanced by Zemanta" style="border-bottom-style: none; border-left-style: none; border-top-style: none; float: right; border-right-style: none" src="http://img.zemanta.com/zemified_a.png?x-id=68c706a9-68c0-4bb3-a473-6a9c86936081" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt; &lt;img src="http://geekswithblogs.net/leesblog/aggbug/139248.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lee Brandt</dc:creator>
            <guid>http://geekswithblogs.net/leesblog/archive/2010/04/13/becoming-a-great-developer.aspx</guid>
            <pubDate>Wed, 14 Apr 2010 04:53:30 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/leesblog/comments/139248.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/leesblog/archive/2010/04/13/becoming-a-great-developer.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/leesblog/comments/commentRss/139248.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/leesblog/services/trackbacks/139248.aspx</trackback:ping>
        </item>
        <item>
            <title>Twin Cities Code Camp 8 Retrospective</title>
            <link>http://geekswithblogs.net/leesblog/archive/2010/04/12/twin-cities-code-camp-8-retrospective.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/leesblog/archive/2010/04/12/twin-cities-code-camp-8-retrospective.aspx'&gt;http://geekswithblogs.net/leesblog/archive/2010/04/12/twin-cities-code-camp-8-retrospective.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I just got back (a few hours ago) from Minneapolis, where I was speaking at the Twin Cities Code Camp 8. I’d never been to a Twin Cities Code Camp, and I have always heard such great things, so I submitted and got accepted to speak.&lt;/p&gt;  &lt;p&gt;The conference (what I got to see) was great. My talk was pretty short on people, but there are many reasons for that. First, I spoke opposite &lt;a href="http://blog.donnfelker.com/" target="_blank"&gt;Donn Felker&lt;/a&gt; (speaking about &lt;a href="http://twincitiescodecamp.com/TCCC/Spring2010/Sessions.aspx#it2" target="_blank"&gt;developing for Android&lt;/a&gt;) and &lt;a href="http://www.lostechies.com/blogs/dahlbyk/" target="_blank"&gt;Keith Dahlby&lt;/a&gt; (speaking about &lt;a href="http://twincitiescodecamp.com/TCCC/Spring2010/Sessions.aspx#ss20" target="_blank"&gt;Dynamic .NET&lt;/a&gt;). So of course, my talk is going to be empty. How could I compete with that? Plus, my talk was about &lt;a href="http://twincitiescodecamp.com/TCCC/Spring2010/Sessions.aspx#ss16" target="_blank"&gt;software process improvement&lt;/a&gt;, specifically about how our process has evolved. Maybe not the smartest idea to submit to talk about software process at a developer’s conference. The people who DID attend however, seemed to really enjoy the talk. There was good interaction and good, thoughtful questions. So the attendees seemed engaged.&lt;/p&gt;  &lt;p&gt;I actually did get a chance to go to one session. I went and saw &lt;a href="http://lozanotek.com/blog/" target="_blank"&gt;Javier Lozano&lt;/a&gt; talk about &lt;a href="http://twincitiescodecamp.com/TCCC/Spring2010/Sessions.aspx#ss15" target="_blank"&gt;Open source tools for ASP.NET MVC&lt;/a&gt;. I am hip-deep in MVC stuff right now and getting up to speed on MVC 2 as well. I learned about &lt;a href="http://github.com/lozanotek/mvcturbine" target="_blank"&gt;MVC Turbine&lt;/a&gt;, Javier’s Open Source project. I will definitely be adding it to my MVC arsenal. Thanks Javier!&lt;/p&gt;  &lt;p&gt;I did forget my AC adapter for my laptop and got a little lost in Minneapolis on my way to get one from MicroCenter Saturday morning, but other than that, it was a great trip. It’s a long drive, but seeing all the guys and getting two &lt;a href="http://www.orderrolypoly.com/code/menu/new_sand0.asp?CategoryID=3" target="_blank"&gt;Nut &amp;amp; Honey&lt;/a&gt; rolls from &lt;a href="http://www.rolypoly.com/" target="_blank"&gt;Roly Poly&lt;/a&gt; in Eden Prarie for lunch on Saturday made the trip totally worth it.&lt;/p&gt;  &lt;p&gt;I look forward to seeing what &lt;a href="http://www.jasonbock.net" target="_blank"&gt;Jason&lt;/a&gt; &amp;amp; &lt;a href="http://geekswithblogs.net/cwilliams/Default.aspx" target="_blank"&gt;Chris&lt;/a&gt; come up with for next year! Thanks for having me guys!&lt;/p&gt; &lt;img src="http://geekswithblogs.net/leesblog/aggbug/139209.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lee Brandt</dc:creator>
            <guid>http://geekswithblogs.net/leesblog/archive/2010/04/12/twin-cities-code-camp-8-retrospective.aspx</guid>
            <pubDate>Mon, 12 Apr 2010 06:17:06 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/leesblog/comments/139209.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/leesblog/archive/2010/04/12/twin-cities-code-camp-8-retrospective.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/leesblog/comments/commentRss/139209.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/leesblog/services/trackbacks/139209.aspx</trackback:ping>
        </item>
        <item>
            <title>Where I&amp;rsquo;ve Been</title>
            <link>http://geekswithblogs.net/leesblog/archive/2010/04/12/where-irsquove-been.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/leesblog/archive/2010/04/12/where-irsquove-been.aspx'&gt;http://geekswithblogs.net/leesblog/archive/2010/04/12/where-irsquove-been.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Hey all. I am still here. Still kickin’. I’ve been swamped with work and community stuff. But I wanted to post about some of the things going on. Just finished up Twin Cities Code Camp 8, and had a blast! Always good to see these guys.&lt;/p&gt;  &lt;p&gt;First of all, up-coming speaking engagements:&lt;/p&gt;  &lt;p&gt;Iowa Code Camp – May 1st in Iowa City, IA [&lt;a href="http://iowacodecamp.com/" target="_blank"&gt;more info&lt;/a&gt;]&lt;/p&gt;  &lt;p&gt;DevLink – August 5-7 in Nashville, TN [&lt;a href="http://www.devlink.net/" target="_blank"&gt;more info&lt;/a&gt;]&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Plus I am organizing a second developer’s conference in Kansas City.&lt;/p&gt;  &lt;p&gt;Kansas City Developer’s Conference (KCDC) – June 19th in Kansas City [&lt;a href="http://kcdc10.ning.com/" target="_blank"&gt;more info&lt;/a&gt;]&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;I will also be doing Lunch &amp;amp; Learns for my company in April and May at &lt;a class="zem_slink" title="Johnson County Community College" href="http://www.jccc.edu/index.html" rel="homepage"&gt;JCCC&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;April 29th, May 12th and May 27th at Johnson County Community College in Kansas City.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;So May, June and August are covered. I may just take July off, I could use a break after KCDC is over.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style="margin-top: 10px; height: 15px" class="zemanta-pixie"&gt;&lt;a class="zemanta-pixie-a" title="Enhanced by Zemanta" href="http://www.zemanta.com/"&gt;&lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; float: right; border-left-style: none" class="zemanta-pixie-img" alt="Enhanced by Zemanta" src="http://img.zemanta.com/zemified_a.png?x-id=aa95dd3f-fc74-4c72-b4df-2cda79a4536d" /&gt;&lt;/a&gt;&lt;/div&gt; &lt;img src="http://geekswithblogs.net/leesblog/aggbug/139208.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lee Brandt</dc:creator>
            <guid>http://geekswithblogs.net/leesblog/archive/2010/04/12/where-irsquove-been.aspx</guid>
            <pubDate>Mon, 12 Apr 2010 05:51:44 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/leesblog/comments/139208.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/leesblog/archive/2010/04/12/where-irsquove-been.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/leesblog/comments/commentRss/139208.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/leesblog/services/trackbacks/139208.aspx</trackback:ping>
        </item>
        <item>
            <title>Up Until Now</title>
            <link>http://geekswithblogs.net/leesblog/archive/2010/01/27/up-until-now.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/leesblog/archive/2010/01/27/up-until-now.aspx'&gt;http://geekswithblogs.net/leesblog/archive/2010/01/27/up-until-now.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I don’t really want to make an “End of 2009, beginning of 2010” post. Mostly because we’re almost in February, but also because I’m sure both of my readers could care less. I do, however, want to mention what I’ve been up to (mostly as just a shout out to all the cool events and people). Last year became SUPER busy right at the end, and so far this year, it’s been exciting too.&lt;/p&gt;  &lt;p&gt;I have been traveling quite a bit around the Midwest, speaking at user groups and Code Camps. I did HDC last October, then Iowa Code Camp the first week in November. Then I took a short break for Thanksgiving and helped a little with the SharePoint Saturday KC in December, and watched as a great friend left Kansas City for good (miss you Becky). So far, I have started the year off with Jefferson City .Net User Group and Tonight’s Kansas City User Group. I still have Dubuque .NET UG and Wichita .Net UG in March.&lt;/p&gt;  &lt;p&gt;WOW! Sounds like I’ve been busy (feels like it too). But I’ve had an absolute blast. The people I’ve meet are fantastic! I got a chance to meet lots of really smart people and talk to them about things they are passionate about. I’ve learned a lot about programming and about presenting.&lt;/p&gt;  &lt;p&gt;I am currently working on a couple of projects that I hope will be helpful to everyone. I can’t say too much right now, but I should be announcing the fruits of those labors soon.&lt;/p&gt;  &lt;p&gt;Until then, I hope to see you all around the community.&lt;/p&gt;  &lt;p&gt;KAIZEN!&lt;/p&gt; &lt;img src="http://geekswithblogs.net/leesblog/aggbug/137649.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lee Brandt</dc:creator>
            <guid>http://geekswithblogs.net/leesblog/archive/2010/01/27/up-until-now.aspx</guid>
            <pubDate>Wed, 27 Jan 2010 07:09:35 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/leesblog/comments/137649.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/leesblog/archive/2010/01/27/up-until-now.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/leesblog/comments/commentRss/137649.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/leesblog/services/trackbacks/137649.aspx</trackback:ping>
        </item>
        <item>
            <title>How To Recover From Developer Burn Out</title>
            <link>http://geekswithblogs.net/leesblog/archive/2009/12/30/how-to-recover-from-developer-burn-out.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/leesblog/archive/2009/12/30/how-to-recover-from-developer-burn-out.aspx'&gt;http://geekswithblogs.net/leesblog/archive/2009/12/30/how-to-recover-from-developer-burn-out.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I consider myself extremely fortunate. I go to work everyday and do something I LOVE to do and I get paid quite well for it. Everyone should be that lucky. But about once a year I go through what I call, "Code Burn Out". I still enjoy what I do, I just don't come home and work on my own stuff. I don't spend all my time reading about software development and practicing to make myself better. I spend very little time on Twitter, and I don't even get on my computer very much after&lt;a href="http://gwb.blob.core.windows.net/leesblog/WindowsLiveWriter/HowToRecoverFromDeveloperBurnOut_1393B/boredom_2.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="boredom" border="0" alt="boredom" align="right" src="http://gwb.blob.core.windows.net/leesblog/WindowsLiveWriter/HowToRecoverFromDeveloperBurnOut_1393B/boredom_thumb.gif" width="240" height="219" /&gt;&lt;/a&gt; normal working hours.&lt;/p&gt;  &lt;p&gt;Now you may say, "That's good. You should do that all the time. That's a great way to create a work-life balance and not get burnt out in the first place."&lt;/p&gt;  &lt;p&gt;The thing is, programming was a hobby of mine long before it became my profession. I've tried other hobbies and haven't found any others that really stimulate me like software development. I just know I will hit a "slump" about once a year. It usually lasts for about 2-3 weeks. The problem is, this year it lasted for a month and a half.&lt;/p&gt;  &lt;p&gt;Of course, I did have extra busy year. I got the chance to travel and speak quite a bit (Thanks to all who allowed me to speak at their events) and helping to run my local user group and organizing the first (ever I think) Kansas City Day of Dot Net. Maybe that's why it lasted so much longer this year. But after about 3 weeks I started to try to think of ways to break out of that funk. I finally did it, and wanted to share in case someone else can benefit. There are several things you can do to get those development "juices" flowing again. &lt;/p&gt;  &lt;h4&gt;Buy A New Piece Of Hardware&lt;/h4&gt;  &lt;p&gt;I bought a second monitor. I had dual 24" monitors for about 4 months until one of the monitors started flaking out. Of course, the 90-day warranty was expired, so I just started using one monitor at home. Granted it's a BIG monitor, so I wasn't TOO upset by it. But I recen5tly went and got a second monitor to bring back the duals and it has definitely gotten my spirits up. &lt;/p&gt;  &lt;h4&gt;Build Something Small, But Challenging &lt;/h4&gt;  &lt;p&gt;Nothing breeds enthusiasm like success. If you find TDD challenging, test-drive out a calculator app, or a simple website. If you find expression trees challenging, try building a small app that pieces together expression trees. Make sure it is something you can build in a weekend or two and make sure you have plenty of help resources. &lt;/p&gt;  &lt;h4&gt;Find A Beta (or Alpha) Technology And Give It A Go &lt;/h4&gt;  &lt;p&gt;If you are the type that likes learning without a net, picking up some Beta or Alpha software that you can try out and learn about can really build that 'Espirit De Code'. This approach can have multiple benefits. Not only will you break out of your funk, but you may be able to help others learn about that technology once it goes live. You also get to submit bug reports and help the developers of the software you are using and possibly even shape the direction of that software. How cool is that? &lt;/p&gt;  &lt;h4&gt;Get By With A Little Help From Your Friends &lt;/h4&gt;  &lt;p&gt;Finally, you can just talk to your colleagues about things you're mutually interested in. I work with a guy who is passionate about ALM and Lean software development, and I am too. So talking with him about new techniques, ways to implement lean process in life as well as software really gets both of us going. That kind of interaction can not only kindle passion in your OWN development, but others' lives as well.&lt;/p&gt; &lt;img src="http://geekswithblogs.net/leesblog/aggbug/137278.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lee Brandt</dc:creator>
            <guid>http://geekswithblogs.net/leesblog/archive/2009/12/30/how-to-recover-from-developer-burn-out.aspx</guid>
            <pubDate>Thu, 31 Dec 2009 04:16:33 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/leesblog/comments/137278.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/leesblog/archive/2009/12/30/how-to-recover-from-developer-burn-out.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/leesblog/comments/commentRss/137278.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/leesblog/services/trackbacks/137278.aspx</trackback:ping>
        </item>
        <item>
            <title>Emergent Design</title>
            <link>http://geekswithblogs.net/leesblog/archive/2009/11/30/emergent-design.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/leesblog/archive/2009/11/30/emergent-design.aspx'&gt;http://geekswithblogs.net/leesblog/archive/2009/11/30/emergent-design.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I, like many developers, was raised on the idea of getting the database complete before writing the code. The database was the foundation of our application, and building a house without a finished foundation is insane. Also, don’t even THINK about changing the foundation once the house-building has begun. If you MUST change the foundation once development has begun, you’d better have a damn good reason.&lt;/p&gt;  &lt;p&gt;When I started to learn about agile and lean software development, I learned about emergent design. Build only what you need for the small piece of the application you are currently building. That includes database, domain objects, services, DAL, everything. It felt very weird to be building membership stuff with no idea of how the rest of the database was going to look. Of course, there is an overall IDEA of what the design MIGHT look like, but until you need it, don’t build it.&lt;/p&gt;  &lt;p&gt;There are two main reasons I think emergent design results in better designed software:&lt;/p&gt;  &lt;h4&gt;You Are Only Thinking About The Thing You Are Building Right Now&lt;/h4&gt;  &lt;p&gt;On the surface, this might seem like a bad thing. Focusing on the piece that you are currently building helps you to focus on the needs of the functionality you are adding and refrain from building “hooks” into a module for functionality that may never be added, or maybe added in a totally different way. Thinking about future modules (or already implemented modules for that matter) can influence the way you design this small piece of the application as well. Focusing on the fact that other modules need to “use” this module is different than thinking that module x needs to use this module. That thought can lead you to build in coupling between the current module and module x.&lt;/p&gt;  &lt;h4&gt;You Are Forced To Constantly Change The Application&lt;/h4&gt;  &lt;p&gt;Again, this may seem like a negative, but changing small pieces constantly makes the application &lt;em&gt;easier to change&lt;/em&gt;. If I have to constantly change a module here and a module there every time I add new functionality, I am forcing myself to make each module easier to change. It allows me to see where pieces of my design become brittle and hard to change. This refactoring to ease change leads to loosely coupled, highly cohesive systems, which is what we’re are &lt;em&gt;trying &lt;/em&gt;to design.&lt;/p&gt;  &lt;h4&gt;Use The Force, Luke&lt;/h4&gt;  &lt;p&gt;In the beginning, it may take some faith and some suspension of disbelief, but once you start seeing designs that are loosely coupled, highly cohesive and easier and easier to change, you’ll start to understand &lt;a href="http://xprogramming.com/xpmag/expemergentdesign" target="_blank"&gt;what the original XP Masters were talking about&lt;/a&gt;. Just stick to your principles, of writing a spec (test) before you build each granular piece, write the simplest thing that will make that spec pass and then refactor to clean up duplicate or complex code.&lt;/p&gt; &lt;img src="http://geekswithblogs.net/leesblog/aggbug/136630.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lee Brandt</dc:creator>
            <guid>http://geekswithblogs.net/leesblog/archive/2009/11/30/emergent-design.aspx</guid>
            <pubDate>Tue, 01 Dec 2009 03:18:37 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/leesblog/comments/136630.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/leesblog/archive/2009/11/30/emergent-design.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/leesblog/comments/commentRss/136630.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/leesblog/services/trackbacks/136630.aspx</trackback:ping>
        </item>
        <item>
            <title>It Doesn&amp;rsquo;t Matter If You Know What You&amp;rsquo;re Doing</title>
            <link>http://geekswithblogs.net/leesblog/archive/2009/11/15/it-doesnrsquot-matter-if-you-know-what-yoursquore-doing.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/leesblog/archive/2009/11/15/it-doesnrsquot-matter-if-you-know-what-yoursquore-doing.aspx'&gt;http://geekswithblogs.net/leesblog/archive/2009/11/15/it-doesnrsquot-matter-if-you-know-what-yoursquore-doing.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Got your attention? Good. It really doesn’t.&lt;/p&gt;
&lt;p&gt;Developer’s, in general, are always afraid to let other developers see they’re code. They are afraid they won’t measure up. Since 90% (or better) of the world’s developers are male, maybe that insecurity of what’s under the covers carries over into development. Maybe we just DEFINE ourselves too much by our profession and our coding prowess. I am as guilty as anyone. I am always afraid someone will look at code I’ve written and think that I am a fraud. They’ll look at my tests and get the idea that I don’t know what I am doing.&lt;/p&gt;
&lt;p&gt;There are two main problems with this approach:&lt;/p&gt;
&lt;h4&gt;Un-Critiqued Code Doesn’t Get Any Better&lt;/h4&gt;
&lt;p&gt;If you are truly serious about getting better at coding, the best and surest way is to let other people thrash it. Let others download it, play with it, give you feedback and send you patches. You have to have a thick skin, because some criticism will be blunt and sometimes just plain hurtful. Understand that even underneath the crap-crusted exterior of a complete flame, may be a small golden nugget of information that might change the way you code for the better. Don’t be afraid to wipe the poo away.&lt;/p&gt;
&lt;h4&gt;They’re Going To Do It To You Anyway&lt;/h4&gt;
&lt;p&gt;Every group has it’s assholes. The development community has quite a few, and they are a flatulent bunch. They will blow wind about every aspect of your approach from the initial architecture to the final execution. Again, take all that in, wipe off the muck and see if there is anything useful. If not, feel free to ignore them, if so, in a year you’ll be seeing that same asshole commenting somewhere else on the blogosphere about someone else’s raggedy approach. Be assured that they are not moving forward as fast as you, if they are only giving advice and never taking it.&lt;/p&gt;
&lt;h4&gt;Be True To Yourself&lt;/h4&gt;
&lt;p&gt;So back to my original statement: “It doesn’t matter if you don’t know what you’re doing.” Put your code out in the world as &lt;em&gt;your approach&lt;/em&gt; not trying to purport yourself as an expert, and you’ll see that you get a lot of great advice from lots of great people who were once right where you are now. Even if all you do is ask another coder you know or work with to review your code, you’ll reap whirlwinds of benefit.&lt;/p&gt; &lt;img src="http://geekswithblogs.net/leesblog/aggbug/136315.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lee Brandt</dc:creator>
            <guid>http://geekswithblogs.net/leesblog/archive/2009/11/15/it-doesnrsquot-matter-if-you-know-what-yoursquore-doing.aspx</guid>
            <pubDate>Sun, 15 Nov 2009 21:46:55 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/leesblog/comments/136315.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/leesblog/archive/2009/11/15/it-doesnrsquot-matter-if-you-know-what-yoursquore-doing.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/leesblog/comments/commentRss/136315.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/leesblog/services/trackbacks/136315.aspx</trackback:ping>
        </item>
        <item>
            <title>Speaking at Iowa Code Camp Tomorrow</title>
            <link>http://geekswithblogs.net/leesblog/archive/2009/11/06/speaking-at-iowa-code-camp-tomorrow.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/leesblog/archive/2009/11/06/speaking-at-iowa-code-camp-tomorrow.aspx'&gt;http://geekswithblogs.net/leesblog/archive/2009/11/06/speaking-at-iowa-code-camp-tomorrow.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;OK, I’ve been remiss in my duties as a blogger I know. Can you forgive me? Both of you? C’mon! It was only a couple of weeks. I promise to be more diligent in my posts in the future. So… we cool? Ok.&lt;/p&gt;  &lt;p&gt;I am really posting to let you both know that I will be speaking at Iowa Code Camp tomorrow. I have two talks. One on BDD, of course, and one on The Opinionated Web Solution. This is a new talk that is about arranging web projects in a solutions.&lt;/p&gt;  &lt;p&gt;If you happen to be in the Des Moines area, drop by.&lt;/p&gt;  &lt;p&gt;~Lee&lt;/p&gt; &lt;img src="http://geekswithblogs.net/leesblog/aggbug/136073.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lee Brandt</dc:creator>
            <guid>http://geekswithblogs.net/leesblog/archive/2009/11/06/speaking-at-iowa-code-camp-tomorrow.aspx</guid>
            <pubDate>Sat, 07 Nov 2009 00:37:44 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/leesblog/comments/136073.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/leesblog/archive/2009/11/06/speaking-at-iowa-code-camp-tomorrow.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/leesblog/comments/commentRss/136073.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/leesblog/services/trackbacks/136073.aspx</trackback:ping>
        </item>
        <item>
            <title>More To Come&amp;hellip;</title>
            <link>http://geekswithblogs.net/leesblog/archive/2009/10/11/more-to-comehellip.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/leesblog/archive/2009/10/11/more-to-comehellip.aspx'&gt;http://geekswithblogs.net/leesblog/archive/2009/10/11/more-to-comehellip.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I’ve been a little scarce lately as I prepare for &lt;a href="http://www.heartlanddc.com/omaha/default.aspx" target="_blank"&gt;HDC&lt;/a&gt; (I’m doing a &lt;a href="http://www.heartlanddc.com/omaha/sessions.aspx#93" target="_blank"&gt;lightening round&lt;/a&gt;), finishing up a project for a client (rollout in a week), and help out some with &lt;a href="http://www.sharepointsaturday.org/kc" target="_blank"&gt;Sharepoint Saturday, Kansas City (December 12th)&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Be sure that I will continue my series on building a dev shop and things should get more back to normal after next weekend.&lt;/p&gt;  &lt;p&gt;Stay tuned…&lt;/p&gt; &lt;img src="http://geekswithblogs.net/leesblog/aggbug/135403.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lee Brandt</dc:creator>
            <guid>http://geekswithblogs.net/leesblog/archive/2009/10/11/more-to-comehellip.aspx</guid>
            <pubDate>Sun, 11 Oct 2009 23:44:27 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/leesblog/comments/135403.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/leesblog/archive/2009/10/11/more-to-comehellip.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/leesblog/comments/commentRss/135403.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/leesblog/services/trackbacks/135403.aspx</trackback:ping>
        </item>
        <item>
            <title>The Backyard Mechanic</title>
            <link>http://geekswithblogs.net/leesblog/archive/2009/09/26/the-backyard-mechanic.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/leesblog/archive/2009/09/26/the-backyard-mechanic.aspx'&gt;http://geekswithblogs.net/leesblog/archive/2009/09/26/the-backyard-mechanic.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Recently, I read some posts about Duct Tape programming from &lt;a href="http://www.joelonsoftware.com/items/2009/09/23.html" target="_blank"&gt;Joel Spolsky&lt;/a&gt;, &lt;a href="http://devlicio.us/blogs/vinull/archive/2009/09/24/being-a-duct-tape-programmer.aspx" target="_blank"&gt;Michael C. Neel&lt;/a&gt;, &lt;a href="http://devlicio.us/blogs/casey/archive/2009/09/25/ship-it-or-ship-out.aspx" target="_blank"&gt;Jak Charlton&lt;/a&gt;, &lt;a href="http://blog.objectmentor.com/articles/2009/09/24/the-duct-tape-programmer" target="_blank"&gt;“Uncle” Bob Martin&lt;/a&gt; and &lt;a href="http://jeffreypalermo.com/blog/debunking-the-duct-tape-programmer/" target="_blank"&gt;Jeffrey Palermo&lt;/a&gt;. I have followed these posts closely. While the intent is good, I think the delivery suffers.&lt;/p&gt;  &lt;p&gt;The whole thing started with &lt;a href="http://www.joelonsoftware.com/" target="_blank"&gt;Spolsky&lt;/a&gt; (as it often does) creating a post that (I think) was meant to say, “Hey stop pontificating on sweet new techniques and start shipping software!” Excellent point. Do that. Don’t worry anymore what other developers might think about the code you’ve written, or you developer “Image” and start delivering business value. Spolsky’s Duct Tape Programmer uses Duct Tape and WD-40 to get the job done, and it reminded me of another archetype I’d been exposed to earlier in my life.&lt;/p&gt;  &lt;h4&gt;The Backyard Mechanic&lt;/h4&gt;  &lt;p&gt;The Backyard Mechanic, if you’re not familiar with the term, is a term used to describe those guys who have been around&lt;a href="http://gwb.blob.core.windows.net/leesblog/WindowsLiveWriter/TheBackyardMechanic_9A43/chevy_350_2.jpg"&gt;&lt;img style="border-right-width: 0px; margin: 10px 0px 0px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="chevy_350" border="0" alt="chevy_350" align="right" src="http://gwb.blob.core.windows.net/leesblog/WindowsLiveWriter/TheBackyardMechanic_9A43/chevy_350_thumb.jpg" width="226" height="152" /&gt;&lt;/a&gt; cars all their lives. They rebuilt their first Chevy short-block 350 at age ten, and have always smelled like axle grease. I like these guys. With the exception of the rebuild, I am one of these guys (it was my Dad’s Ford 302 and I was 13). If I am ever broke down on the side of the 395 between Barstow and Tahoe, I want this guy riding shotgun. He will get me to the next town. He will make sure I get there. But I would NEVER pay these guys to work on my car, not even myself. Why? Because the “Git-R-Done” tips and tricks they use are simply patches. They know how to compress a brake caliper with a crowbar and a piece of wood, but a brake tool work much better and won’t run the risk of breaking (no pun intended) your knuckles if your hand slips. If I am overheating because of a leak in a radiator hose, I can put duct tape on the hose and piss in the radiator to get me to the next town. But I certainly don’t want to run my car on piss &amp;amp; Duct Tape on a daily basis. I guess my point is, when people PAY you for a job, they expect quality. They also expect you to get their car fixed as soon as possible, and I guess that’s Spolsky’s point.&lt;/p&gt;  &lt;h4&gt;Ship The F___ing Thing!&lt;/h4&gt;  &lt;p&gt;In &lt;a href="http://devlicio.us/blogs/casey/default.aspx" target="_blank"&gt;Jak Charlton&lt;/a&gt;’s post, he talks about the alignment of business and IT and, to me, that is a more important point. In the “Project Triangle”, (Time, Quality and Functionality) you can only focus on two sides at once. The point is, it is not up to IT to make those decisions; it is up to the business. &lt;strong&gt;Developers need to align their development goals with the business goals of their customer.&lt;/strong&gt; It sounds obvious, but it doesn’t seem to happen as often as it should. If the business decides to focus on functionality and time, the programmers should focus on functionality and time as well. But the business should be making an &lt;em&gt;informed&lt;/em&gt; decision when they decide to let quality slip. They should know what it means to let quality slip and THEY SHOULD DECIDE that quality is less important than functionality and schedule. They should be made aware that the second version of this product might require a complete rewrite (let’s hope not), but they should be aware of that and walk into that decision informed and with their eyes wide open.&lt;/p&gt;  &lt;h4&gt;Quality Saves Time (And Not Just In The Long Run)&lt;/h4&gt;  &lt;p&gt;&lt;a href="http://gwb.blob.core.windows.net/leesblog/WindowsLiveWriter/TheBackyardMechanic_9A43/CalipersNMicrometer_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="CalipersNMicrometer" border="0" alt="CalipersNMicrometer" align="left" src="http://gwb.blob.core.windows.net/leesblog/WindowsLiveWriter/TheBackyardMechanic_9A43/CalipersNMicrometer_thumb.jpg" width="201" height="201" /&gt;&lt;/a&gt; This doesn’t mean scrap the idea of quality programming all together. What it means is that, given the choice between time, functionality and quality, time and functionality win and we understand quality may suffer. From what I’ve seen, quality software actually &lt;em&gt;saves developers time&lt;/em&gt;. Now, writing fifteen layers of abstraction and creating a new development framework for your project does not constitute quality. That’s architectural masturbation. Following the SOLID OO programming principles at the very least can certainly save you time, and not just in the long run. The fact that quality code is easier to change and enhance, means that as you build feature 2, 3 and 4, it will be easier and easier to do without having to re-factor chunks of existing code to do it. Techniques like Test-Driven or Behavior-Driven Development were developed out of a need to deliver software quickly &lt;em&gt;without&lt;/em&gt; letting sacrificing quality. When done correctly, not only does TDD speed things up, it gives you a low-level regression suite that helps you ensure you didn’t break anything WITHOUT having to go manually test everything again (a MAJOR time expenditure). ORMs save a tremendous amount of SQL writing, not because it’s hard to do, but because it’s time consuming, and if you’re looking to ship fast without sacrificing quality, a battle-tested ORM (like &lt;a href="https://www.hibernate.org/343.html" target="_blank"&gt;NHibernate&lt;/a&gt; or &lt;a href="http://subsonicproject.com/" target="_blank"&gt;SubSonic&lt;/a&gt;) can be a great fit. Finally, quality saves time just be cutting re-work. Doing it right the first time, means you shouldn’t have to go back and redo it a second time, which should save you time as well. All this is real time savings in the first version, not some hopeful future-vision of time savings down the road.&lt;/p&gt;  &lt;h4&gt;Quality Is A Requirement&lt;/h4&gt;  &lt;p&gt;Ultimately, quality should be a customer requirement. I don’t mean as in &lt;em&gt;it’s required&lt;/em&gt;, I mean as in the customer should specify the expectation of quality. When gathering requirements, it might not be a bad idea to ask, “..and how high should the quality be?”&lt;/p&gt;  &lt;p&gt;It sounds like a dumb question, and it will need some qualifying when you ask it, but it can help. Telling the customer about the project triangle, if they don’t know about it, and explaining how each side influences the outcome of the project can be invaluable. The way I tend to breach the subject is, “If I am building software for an EKG machine, I probably need to ENSURE the highest quality, even if it takes a while, but when building a corporate website, if the outgoing email from the contact us form says ‘Thanks for your fedback’, no one is going to die.”&lt;/p&gt;  &lt;p&gt;If you don’t make the customer specify which side of the triangle is the least important to them and help them understand what letting each one slip means, you’re telling them you’re going to deliver 100% on all three sides, and your project is doomed. For the most part, businesses understand what letting the timeline or the functionality slip means, but as developers we need to make them understand what letting quality slip means to them. Otherwise, they will not understand why it takes you twice as long to make changes to the codebase after version one, if you don’t.&lt;/p&gt;  &lt;h4&gt;Finally&lt;/h4&gt;  &lt;p&gt;I guess my biggest point is don’t &lt;em&gt;start&lt;/em&gt; by sacrificing quality. Duct Tape and WD-40 are awesome tools and every developer (and mechanic) should keep some in his toolbox. But that shouldn’t be the &lt;em&gt;first tool you grab.&lt;/em&gt; When time and functionality are the most important things, I would start by looking to tried-and-tested tools (like an ORM or a scaffolding framework) to help get thing delivered quickly without sacrificing quality. Then once you have exhausted all of those avenues, reach for the Duct Tape to limp the thing home (until you can fix it properly).&lt;/p&gt;  &lt;p&gt;That’s all of my rant for now. It is my opinion, I am entitled to it, and &lt;a href="http://www.imdb.com/title/tt0114571/" target="_blank"&gt;dog-gone-it people like me&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/leesblog/aggbug/135110.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lee Brandt</dc:creator>
            <guid>http://geekswithblogs.net/leesblog/archive/2009/09/26/the-backyard-mechanic.aspx</guid>
            <pubDate>Sat, 26 Sep 2009 15:58:27 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/leesblog/comments/135110.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/leesblog/archive/2009/09/26/the-backyard-mechanic.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/leesblog/comments/commentRss/135110.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/leesblog/services/trackbacks/135110.aspx</trackback:ping>
        </item>
        <item>
            <title>Let&amp;rsquo;s Build A Dev Shop (Part 5 In An Ngoing Saga)</title>
            <link>http://geekswithblogs.net/leesblog/archive/2009/09/14/letrsquos-build-a-dev-shop-part-5-in-an-ngoing.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/leesblog/archive/2009/09/14/letrsquos-build-a-dev-shop-part-5-in-an-ngoing.aspx'&gt;http://geekswithblogs.net/leesblog/archive/2009/09/14/letrsquos-build-a-dev-shop-part-5-in-an-ngoing.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Well, here we are again. &lt;a href="http://www.codebucket.org/archive/2009/09/13/letrsquos-build-a-dev-shop-part-4-of-n.aspx"&gt;Last time&lt;/a&gt;, we talked about project structure and came up with the one we’ll use for this series. Next we’ll talk tools. We’ll talk tools like &lt;a href="http://video.google.com/videosearch?q=Tim+Taylor&amp;amp;sourceid=ie7&amp;amp;rls=com.microsoft:en-us:IE-SearchBox&amp;amp;oe=&amp;amp;um=1&amp;amp;ie=UTF-8&amp;amp;ei=PP-uSuTlM4-MtAO6ppXICw&amp;amp;sa=X&amp;amp;oi=video_result_group&amp;amp;ct=title&amp;amp;resnum=16#" target="_blank"&gt;Tim Taylor&lt;/a&gt; talks tools: with lots of grunts for my favorites and only a little explanation about what the tools do.) This is mostly because there is LOTS of material on the &lt;a href="http://en.wikipedia.org/wiki/Interweb" target="_blank"&gt;interwebs&lt;/a&gt; about all of these tools. I tend to favor the tools that are the most widely used for two main reasons: they have been battle tested by the largest crowd and two, they usually have the largest volume of content written about how to use them; some more useful than others. Having said that, let me also say that my choice of a specific tool doesn’t mean that the others in that space don’t have value. Most of the tools I will mention are all well respected by the well respected and each has its own strengths and weaknesses. If you are in charge of picking a developer stack, do your homework, but you could start with the stack I use and change fairly easily, if the particular tool doesn’t fit your needs. I will also easily swap one tool for another, if it will make the development process easier. &lt;a href="http://altdotnet.org/" target="_blank"&gt;ALT.NET&lt;/a&gt;… respect.&lt;/p&gt;  &lt;p&gt;Getting on with it, there are several practices that I engage in on almost ALL projects that have tools that make them easier to do. The most important thing about a tool is that it should stay out of your way. Once you’ve set the tool in your stack it should grease the wheels of development. If it doesn’t, it’s either not the right tool, or you’re not using it correctly.&lt;/p&gt;  &lt;h4&gt;ORM or OR/M or O/RM (not sure where the slash goes)&lt;/h4&gt;  &lt;p&gt;An &lt;a href="http://en.wikipedia.org/wiki/Object-relational_mapping" target="_blank"&gt;object-relational mapper&lt;/a&gt; is a tool that allow you to map your object model to your relational database (thanks again, Captain Obvious). Basically you tell your ORM that your Person object is stored in your People table and that it’s FirstName property maps to the FirstName field in that table and so on. Linq To SQL is an ORM. There are tons of them out there now. From free stuff (&lt;a href="http://subsonicproject.com/" target="_blank"&gt;Subsonic&lt;/a&gt;, &lt;a href="http://nhforge.org/Default.aspx" target="_blank"&gt;NHibernate&lt;/a&gt; and &lt;a href="http://www.castleproject.org/activerecord/index.html" target="_blank"&gt;Castle ActiveRecord&lt;/a&gt;) to paid ones (&lt;a href="http://www.llblgen.com/defaultgeneric.aspx" target="_blank"&gt;LLBLGenPro&lt;/a&gt; and &lt;a href="http://www.telerik.com/products/orm.aspx" target="_blank"&gt;Telerik OpenAccess ORM&lt;/a&gt; come to mind). One of the things that will help in a transition to an ORM is adopting the idea that the relational database is merely a way to persist your object data. I have used only two and a half in the past: Nhibernate, &lt;a href="http://www.nettiers.com/" target="_blank"&gt;netTiers&lt;/a&gt; and SubSonic. I say two and a half because I have not used SubSonic extensively or on a production project.. yet. It looks very promising. I choose NHibernate because of its many ways to map objects and it’s humongous user base. If I am hiring developers I can actually ask for NHibernate experience and probably see some.&lt;/p&gt;  &lt;h4&gt;IoC Container&lt;/h4&gt;  &lt;p&gt;IoC is inversion on control (so the C doesn’t stand for container and make for doubled-up words like GCO Carpet Outlet – Georgia Carpet Outlet Carpet Outlet). An IoC container helps to inject dependencies and works a bit like a factory method on steroids. If I have a dependency on a type, I can inject that dependency by inverting the control over that dependency to someone outside myself. If that made no sense, that’s ok, here’s how it works. &lt;/p&gt;  &lt;p&gt;I need a laptop to make my presentation at the conference, but instead of lugging around my laptop (cause she’s a big girl), I can ask the conference to provide me with that laptop and bring only my presentation on a thumb drive. I am inverting the control of that dependency to the conference coordinators, and telling them it must have PowerPoint and Visual Studio 2008 on it. I “depend” on that contract. When I get there, I just ask for my lappy and plug my thumb drive in and away I go. This loosens the coupling to my machine. I don’t HAVE to have MY MACHNE to do the presentation. When I need a laptop for a talk, I just find one with PowerPoint and VS2008 and I get that dependency handed (injected) to me.&lt;/p&gt;  &lt;p&gt;There are many free IoC Containers out there as well (StructureMap, NInject, Unity and Castle Windsor just to name a few). I chose StructureMap because of the large number of resources I found when doing research on Inversion of Control and Dependency Injection. (Also, Jeremy Miller is from Missouri, even if he lives in Texas now). I also feel very comfortable with the way you register you dependencies in StructureMap, although that could just be because that’s the tool I used to learn about Dependency Injection with.&lt;/p&gt;  &lt;h4&gt;BDD and the Infinite Melancholy&lt;/h4&gt;  &lt;p&gt;When driving a project, I try to drive it from the requirements (again, shaddap Captain Obvious). What I mean is, I try to codify those requirements so that they are executable. This makes them verifiable at every step of the project. Instead of “winging it” and hoping the change I just made doesn’t break something I developed yesterday or last week, I write the “specifications” in executable format, so I can use that as my checklist of what the system can do. I can also all the specs at any time to make sure everything still works as required by the customer.&lt;/p&gt;  &lt;p&gt;For BDD, I choose Machine.Specification or MSpec. The syntax is very strange for C# developers at first, but I find the English-y way the code reads to be very compelling, and the report that it generates is a top-notch artifact to pass on to stakeholders. There are also other BDD frameworks out there (&lt;a href="http://code.google.com/p/nbehave/" target="_blank"&gt;NBehave&lt;/a&gt;, &lt;a href="http://nspecify.sourceforge.net/" target="_blank"&gt;NSpecify&lt;/a&gt; and you can even use &lt;a href="http://rspec.info/" target="_blank"&gt;RSpec&lt;/a&gt; (Ruby) to spec out your .Net code if you are so inclined.) Also, there are a few extensions to traditional unit-testing frameworks out there that allow you to work in a &lt;a href="http://dannorth.net/introducing-bdd" target="_blank"&gt;Behavio(u)r-Driven&lt;/a&gt; way (&lt;a href="http://code.google.com/p/specunit-net/" target="_blank"&gt;SpecUnit.NET&lt;/a&gt;, &lt;a href="http://github.com/developwithpassion/developwithpassion.bdd" target="_blank"&gt;DevelopWithPassion.BDD&lt;/a&gt; and recently &lt;a href="http://blog.robustsoftware.co.uk/" target="_blank"&gt;Gary Shutler&lt;/a&gt; has done a series on &lt;a href="http://blog.robustsoftware.co.uk/search/label/BDD%20from%20scratch" target="_blank"&gt;building your own BDD framework&lt;/a&gt;.)&lt;/p&gt;  &lt;h4&gt;Mock Me? Mock YOU, PAL!&lt;/h4&gt;  &lt;p&gt;If you’re going to do TDD/BDD, you’re going to need to mock. It’s that simple. If I tried to drive my design with BDD without using mocking or IoC, I would stab myself in the neck with a &lt;a href="http://www.thinkgeek.com/homeoffice/kitchen/8ace/" target="_blank"&gt;spork&lt;/a&gt;. Mocking is simply a technique of using “fakes” or “stand-ins” to isolate sections of your application in order to drive out their design. Remember, using BDD requires writing your spec first, THEN writing code to make it complete. By that very definition, you’ll be dependent on code that you haven’t developed yet and that you’re NOT going to develop yet. Mocking is the only way to get this done.&lt;/p&gt;  &lt;p&gt;Again, there are free mocking solutions out there (&lt;a href="http://code.google.com/p/moq/" target="_blank"&gt;Moq&lt;/a&gt;, &lt;a href="http://www.nmock.org/" target="_blank"&gt;NMock&lt;/a&gt; and &lt;a href="http://ayende.com/projects/rhino-mocks.aspx" target="_blank"&gt;RhinoMocks&lt;/a&gt;) and paid solutions (&lt;a href="http://learn.typemock.com/" target="_blank"&gt;TypeMock&lt;/a&gt;). I’ve never used TypeMock, but I have heard that it can mock just about anything and if you’re trying to do TDD in SharePoint (I’ve heard) it’s the only way. I choose RhinoMocks, again because of the active user base and Oren Eini’s inability to stop coding/blogging/teaching for one second.&lt;/p&gt;  &lt;h4&gt;Architectural Pattern (MVSomething)&lt;/h4&gt;  &lt;p&gt;I started using a model-view-presenter pattern a couple of years ago, after I read an article from &lt;a href="http://www.jpboodhoo.com/home.oo" target="_blank"&gt;Jean-Paul Boodhoo&lt;/a&gt; in the MSDN Magazine in August of 2006 and a blog post from &lt;a href="http://www.davidhayden.com/" target="_blank"&gt;David Hayden&lt;/a&gt; about the Unity IoC container where he used Unity to wire together his Views and their presenters. It was an easy transition for me, because it felt a lot like web forms. At the time, ASP.NET MVC was in early preview releases and we had a significant investment in &lt;a href="http://www.telerik.com/" target="_blank"&gt;Telerik&lt;/a&gt; controls which (at the time) relied on ViewState to do some of their magic, and ASP.NET MVC doesn’t have ViewState available. I used MVP happily on several projects and still use it when a project requires ViewState or must be written in earlier version of ASP.NET.&lt;/p&gt;  &lt;p&gt;ASP.NET MVC is the new kid on the block, but is making a huge impression. On me, as well. I have just begun to really dig into ASP.NET MVC, but the Sharp Architecture project can give some good guidance on how to set up, arrange and even test an MVC app. This is ultimately the one I have chosen for the project in this series, because it is very powerful and something I really want to get more familiar with.&lt;/p&gt;  &lt;p&gt;Them Model-View-ViewModel pattern is the newest kid on the block and permeates the WPF stack (WPF Windows and Silverlight Apps). It is especially effective where two-way binding for your View to your View-Model is possible.&lt;/p&gt;  &lt;p&gt;Quite a lot has already been written about all of these patterns, and rather than rehash them, I will just give links in the references area.&lt;/p&gt;  &lt;h4&gt;A-budee—A-budee—A-That’s all folks&lt;/h4&gt;  &lt;p&gt;I knew this was going to be a long post. We covered a lot of topics very lightly, but I felt it was important to give a short background on why and what we’ll use in this exemplary series. I’ll leave it at this for now, with some links below for more exploration. Then, next time, we’ll actually create the base project and set up it’s continuous build on our &lt;a href="http://www.jetbrains.com/teamcity/" target="_blank"&gt;TeamCity&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Continuous_integration" target="_blank"&gt;CI Server&lt;/a&gt;!&lt;/p&gt;  &lt;h4&gt;Link-age&lt;/h4&gt;  &lt;p&gt;MVP – MVC – MVVM&lt;/p&gt;  &lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/magazine/cc188690.aspx" href="http://msdn.microsoft.com/en-us/magazine/cc188690.aspx"&gt;http://msdn.microsoft.com/en-us/magazine/cc188690.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://davidhayden.com/blog/dave/archive/2008/02/19/ASPNETModelViewPresenterUnityIoCMicrosoftPatternsPractices.aspx" href="http://davidhayden.com/blog/dave/archive/2008/02/19/ASPNETModelViewPresenterUnityIoCMicrosoftPatternsPractices.aspx"&gt;http://davidhayden.com/blog/dave/archive/2008/02/19/ASPNETModelViewPresenterUnityIoCMicrosoftPatternsPractices.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://weblogs.asp.net/scottgu/archive/tags/MVC/default.aspx" href="http://weblogs.asp.net/scottgu/archive/tags/MVC/default.aspx"&gt;http://weblogs.asp.net/scottgu/archive/tags/MVC/default.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://haacked.com/Tags/aspnetmvc/default.aspx" href="http://haacked.com/Tags/aspnetmvc/default.aspx"&gt;http://haacked.com/Tags/aspnetmvc/default.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://code.google.com/p/sharp-architecture/" href="http://code.google.com/p/sharp-architecture/"&gt;http://code.google.com/p/sharp-architecture/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Mocking&lt;/p&gt;  &lt;p&gt;&lt;a title="http://martinfowler.com/articles/mocksArentStubs.html" href="http://martinfowler.com/articles/mocksArentStubs.html"&gt;http://martinfowler.com/articles/mocksArentStubs.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://weblogs.asp.net/rosherove/archive/2007/04/26/choosing-a-mock-object-framework.aspx" href="http://weblogs.asp.net/rosherove/archive/2007/04/26/choosing-a-mock-object-framework.aspx"&gt;http://weblogs.asp.net/rosherove/archive/2007/04/26/choosing-a-mock-object-framework.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://ayende.com/projects/rhino-mocks.aspx" href="http://ayende.com/projects/rhino-mocks.aspx"&gt;http://ayende.com/projects/rhino-mocks.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://devlicio.us/blogs/tim_barcz/archive/2009/03/19/choosing-a-mocking-framework.aspx" href="http://devlicio.us/blogs/tim_barcz/archive/2009/03/19/choosing-a-mocking-framework.aspx"&gt;http://devlicio.us/blogs/tim_barcz/archive/2009/03/19/choosing-a-mocking-framework.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;BDD&lt;/p&gt;  &lt;p&gt;&lt;a title="http://code.google.com/p/nbehave/" href="http://code.google.com/p/nbehave/"&gt;http://code.google.com/p/nbehave/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://nspecify.sourceforge.net/" href="http://nspecify.sourceforge.net/"&gt;http://nspecify.sourceforge.net/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://github.com/machine/machine.specifications" href="http://github.com/machine/machine.specifications"&gt;http://github.com/machine/machine.specifications&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://blog.robustsoftware.co.uk/search/label/BDD%20from%20scratch" href="http://blog.robustsoftware.co.uk/search/label/BDD%20from%20scratch"&gt;http://blog.robustsoftware.co.uk/search/label/BDD%20from%20scratch&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.lostechies.com/blogs/derickbailey/archive/tags/Behavior+Driven+Development/default.aspx" href="http://www.lostechies.com/blogs/derickbailey/archive/tags/Behavior+Driven+Development/default.aspx"&gt;http://www.lostechies.com/blogs/derickbailey/archive/tags/Behavior+Driven+Development/default.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://blog.scottbellware.com/" href="http://blog.scottbellware.com/"&gt;http://blog.scottbellware.com/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Inversion of Control / Dependency Injection&lt;/p&gt;  &lt;p&gt;&lt;a title="http://structuremap.sourceforge.net/Default.htm" href="http://structuremap.sourceforge.net/Default.htm"&gt;http://structuremap.sourceforge.net/Default.htm&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://ninject.org/" href="http://ninject.org/"&gt;http://ninject.org/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.hanselman.com/blog/ListOfNETDependencyInjectionContainersIOC.aspx" href="http://www.hanselman.com/blog/ListOfNETDependencyInjectionContainersIOC.aspx"&gt;http://www.hanselman.com/blog/ListOfNETDependencyInjectionContainersIOC.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;ORM&lt;/p&gt;  &lt;p&gt;&lt;a title="http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software" href="http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software"&gt;http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://nhforge.org/Default.aspx" href="http://nhforge.org/Default.aspx"&gt;http://nhforge.org/Default.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://subsonicproject.com/" href="http://subsonicproject.com/"&gt;http://subsonicproject.com/&lt;/a&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/leesblog/aggbug/134816.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lee Brandt</dc:creator>
            <guid>http://geekswithblogs.net/leesblog/archive/2009/09/14/letrsquos-build-a-dev-shop-part-5-in-an-ngoing.aspx</guid>
            <pubDate>Tue, 15 Sep 2009 03:00:58 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/leesblog/comments/134816.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/leesblog/archive/2009/09/14/letrsquos-build-a-dev-shop-part-5-in-an-ngoing.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/leesblog/comments/commentRss/134816.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/leesblog/services/trackbacks/134816.aspx</trackback:ping>
        </item>
        <item>
            <title>Technical Arguments Are Good</title>
            <link>http://geekswithblogs.net/leesblog/archive/2009/09/14/technical-arguments-are-good.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/leesblog/archive/2009/09/14/technical-arguments-are-good.aspx'&gt;http://geekswithblogs.net/leesblog/archive/2009/09/14/technical-arguments-are-good.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I might have made a decent lawyer. If I’d been born without any self respect and complete absence of morality, I might’ve become a lawyer. I love to argue. I love it. I like pitting my ideas against another’s. I like that at any moment I might have an epiphany and change my perspective or opinions about something. That’s learning. Basically, in technical arguing, I’ve seen basically three scenarios.&lt;/p&gt;  &lt;h4&gt;The Salesman&lt;/h4&gt;  &lt;p&gt;First is the useless scenario. Someone has a bone to pick or an agenda to push. This is the most frustrating scenario. In that case, I am not arguing your perspective against mine, and there is no way you will ever concede defeat, because you have a prize that you are after. &lt;/p&gt;  &lt;h4&gt;The Amicable Divorce&lt;/h4&gt;  &lt;p&gt;The Second scenario is that we agree to disagree. To me this isn’t much more useful than the first. I still may learn something and later when researching your points, I may find golden nuggets of information that I can learn from, but generally, this means that one of us couldn’t convince the other, but were just not comfortable conceding the point. If I do this, I generally assume that I am wrong and quickly start researching your points so I can figure out where I am wrong if I am right, I will be better equipped to convince you (or someone) next time.&lt;/p&gt;  &lt;h4&gt;Teach You, Teach Me&lt;/h4&gt;  &lt;p&gt;The last scenario is: We argue, one of us concedes the point and we end up learning something. That’s my favorite. I love to learn and I love to teach. Even more than I love to argue. (And I argue with myself in the shower just to keep in practice). &lt;/p&gt;  &lt;p&gt;Ultimately, I like learning more than anything else, and arguing is a really good way to learn something. The problem is, you have to argue your point fervently, while keeping your mind open to the possibility that you’re wrong and be ready to stop on a dime and say, “Hey, I think you may be right!” The flip side of that is, being ready for the other person to say that you may be right without being a jerk about it.&lt;/p&gt;  &lt;h4&gt;Danger, Will Robinson, Danger&lt;/h4&gt;  &lt;p&gt;First, Be ready to answer all questions, and don’t EVER be afraid to say you don’t know something. Faking your way through an answer or an argument is a surefire way to get someone not to trust your arguments, and possibly lose interest in arguing with you altogether. &lt;/p&gt;  &lt;p&gt;It is also important to be aware of your arguing style and warn others, however. I have a very animated arguing style, and I am six-foot-five and 350lbs. Seeing me wave my arms and raise my voice may throw people off, but I am truly harmless, and I am NOT using this style as a tactic to win an argument. (At least not a technical argument.)&lt;/p&gt;  &lt;p&gt;So feel free to argue with me, and if you prove me wrong, I learned something and I owe you one.&lt;/p&gt; &lt;img src="http://geekswithblogs.net/leesblog/aggbug/134814.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lee Brandt</dc:creator>
            <guid>http://geekswithblogs.net/leesblog/archive/2009/09/14/technical-arguments-are-good.aspx</guid>
            <pubDate>Tue, 15 Sep 2009 00:38:07 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/leesblog/comments/134814.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/leesblog/archive/2009/09/14/technical-arguments-are-good.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/leesblog/comments/commentRss/134814.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/leesblog/services/trackbacks/134814.aspx</trackback:ping>
        </item>
        <item>
            <title>Let&amp;rsquo;s Build A Dev Shop (Part 4 of n)</title>
            <link>http://geekswithblogs.net/leesblog/archive/2009/09/13/letrsquos-build-a-dev-shop-part-4-of-n.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/leesblog/archive/2009/09/13/letrsquos-build-a-dev-shop-part-4-of-n.aspx'&gt;http://geekswithblogs.net/leesblog/archive/2009/09/13/letrsquos-build-a-dev-shop-part-4-of-n.aspx&lt;/a&gt;&lt;/p&gt;&lt;a href="http://gwb.blob.core.windows.net/leesblog/WindowsLiveWriter/LetsBuildADevShopPart4ofn_10FE4/ProjectStructure_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 10px; display: inline; border-top: 0px; border-right: 0px" title="ProjectStructure" border="0" alt="ProjectStructure" align="right" src="http://gwb.blob.core.windows.net/leesblog/WindowsLiveWriter/LetsBuildADevShopPart4ofn_10FE4/ProjectStructure_thumb.jpg" width="194" height="439" /&gt;&lt;/a&gt;  &lt;p&gt;Alright dear readers (both of you), I told you &lt;a href="http://www.codebucket.org/archive/2009/09/08/letrsquos-build-a-dev-shop-part-3-of-n.aspx"&gt;last time&lt;/a&gt; that I would answer that age-old question, “&lt;a href="http://www.google.com/search?q=How+many+projects+should+I+have+in+my+solution&amp;amp;sourceid=ie7&amp;amp;rls=com.microsoft:en-us:IE-SearchBox&amp;amp;ie=&amp;amp;oe=" target="_blank"&gt;How many projects should I have in my solution?&lt;/a&gt;” The answer is: only as many as you need. I know, I know, but it’s not a copout, really it’s not. I’ve really found that is it easier to start with fewer projects and break them out when you need to, than trying to combine projects later on. Does that mean that one project with everything in it is right? Yes. If that is all you need. &lt;/p&gt;  &lt;p&gt;I realize it sounds like I am being wishy-washy, but I promise I am not. For the sake of being opinionated (because “as many as you need” is hard-to-follow advice if you are looking for guidance), I will say I normally find that I have three projects. I tend to call them Web.UI, Core and Specifications. For this series we’ll be building a web project, but you could just as easily swap the Web.UI project for a WPF.UI project. Now, if you don’t consider the Specifications project as part of the “&lt;a href="http://www.amazon.com/ACCORDING-HOYLE-WORLD-FAMOUS-RULES/dp/B000GPZOIC/ref=sr_1_6?ie=UTF8&amp;amp;s=books&amp;amp;qid=1252887536&amp;amp;sr=1-6" target="_blank"&gt;According to Hoyle&lt;/a&gt;” project, then I only have two projects.  &lt;/p&gt;  &lt;p&gt;The thing that I will do is namespace everything within the project n a way that makes it easy to break them into their own project if I need to. So I had my data interfaces in a data folder (with that namespace) and inside that a folder for each type of implementation (e.g. an &lt;a href="https://www.hibernate.org/343.html" target="_blank"&gt;NHibernate&lt;/a&gt; folder, a &lt;a href="http://www.subsonicproject.com/" target="_blank"&gt;SubSonic&lt;/a&gt; folder and an Entity Framework folder). This sill allow me to make a new project called Core.Data.NHibernate and move those files over and hopefully not break anything (I haven’t needed to do that yet). &lt;/p&gt;  &lt;p&gt;I have been using this project structure for a while and am pretty happy with it. It came from stealing little ideas from respected developers around the community, and hashing it out with my co-worker, &lt;a href="http://blog.troytuttle.com/" target="_blank"&gt;Troy&lt;/a&gt;. He is the one who kept reminding me that I didn’t &lt;em&gt;need&lt;/em&gt; all those projects in the solution, and eventually we whittled it down to these three.&lt;/p&gt;  &lt;p&gt;One thing that I will also do, is have my Specifications project a folder above the location where the Core and Web.UI projects are in the file system. I stole this Idea from Sharp Architecture and it makes for good, solid separation of the Specifications from the rest of the production code.&lt;/p&gt;  &lt;p&gt;I hope this gets you ideas flowing for your own solutions and gives you a jumping-off point for deciding just what your solution &lt;em&gt;needs&lt;/em&gt; in it. This should also be a good way to get the (civilized) conversation going about your won project structure within your team.&lt;/p&gt;  &lt;p&gt;Next time, we’ll talk about tools. We’ll &lt;strong&gt;briefly&lt;/strong&gt; discuss why you would use each tool and what comparable tools are out there. We’ll look at application architectural patterns (&lt;a href="MVC vs MVP vs MVVM vs Web Forms" target="_blank"&gt;MVC vs MVP vs MVVM vs Web Forms&lt;/a&gt;), &lt;a href="http://en.wikipedia.org/wiki/Object-relational_mapping" target="_blank"&gt;ORM tools&lt;/a&gt;, &lt;a href="http://martinfowler.com/articles/injection.html" target="_blank"&gt;IOC containers&lt;/a&gt;, &lt;a href="http://martinfowler.com/articles/mocksArentStubs.html" target="_blank"&gt;mocking&lt;/a&gt; and testing frameworks and some helper libraries that might make it easier to do some things within your own project.&lt;/p&gt; &lt;img src="http://geekswithblogs.net/leesblog/aggbug/134792.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lee Brandt</dc:creator>
            <guid>http://geekswithblogs.net/leesblog/archive/2009/09/13/letrsquos-build-a-dev-shop-part-4-of-n.aspx</guid>
            <pubDate>Mon, 14 Sep 2009 00:20:10 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/leesblog/comments/134792.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/leesblog/archive/2009/09/13/letrsquos-build-a-dev-shop-part-4-of-n.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/leesblog/comments/commentRss/134792.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/leesblog/services/trackbacks/134792.aspx</trackback:ping>
        </item>
    </channel>
</rss>