<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DkIAQX08cCp7ImA9WhVUFkw.&quot;"><id>tag:blogger.com,1999:blog-7414512759580466</id><updated>2012-05-21T09:35:40.378-06:00</updated><category term="The West Wing" /><category term="Quote of the Week" /><category term="Code Kata" /><category term="Randori" /><category term="Practice" /><category term="Code Camp" /><category term="does not equal" /><category term="video" /><category term="Jobs" /><category term="Software Craftsmanship" /><category term="Hiring" /><category term="Presentations" /><category term="Lessons from Laser Tag" /><category term="Books" /><category term="The Right Thing" /><title>Software on the Side</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.softwareontheside.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.softwareontheside.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>mdclement</name><uri>http://www.blogger.com/profile/07418040981494491081</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>48</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/SoftwareOnTheSide" /><feedburner:info uri="softwareontheside" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CEcCRXg6fip7ImA9WhVVFEg.&quot;"><id>tag:blogger.com,1999:blog-7414512759580466.post-3101570885704003025</id><published>2012-05-07T22:41:00.001-06:00</published><updated>2012-05-07T22:41:04.616-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-05-07T22:41:04.616-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Presentations" /><category scheme="http://www.blogger.com/atom/ns#" term="Software Craftsmanship" /><category scheme="http://www.blogger.com/atom/ns#" term="Randori" /><category scheme="http://www.blogger.com/atom/ns#" term="Code Camp" /><title>On Speaking… and not speaking</title><content type="html">&lt;p&gt;So as I mentioned &lt;a href="http://blog.softwareontheside.com/2012/02/expanding-my-speaking-footprint-in-2012.html"&gt;in a previous post, I’m working to expand my speaking footprint this year beyond Utah&lt;/a&gt;.&amp;#160; This started out pretty well with a three session gig at &lt;a href="http://boisecodecamp.com/"&gt;Boise Code Camp&lt;/a&gt; which was a blast.&amp;#160; There is a great dev community up in Boise and I plan on going back next year.&amp;#160; I was able to attend &lt;a href="http://www.agilegames2012.com/"&gt;Agile Games 2012&lt;/a&gt; in Boston which was amazing.&amp;#160; Need to do a write up on that soon before everything leaks out of my brain :)&amp;#160;&amp;#160; Again, more great people and I felt super enriched after the three days.&lt;/p&gt;  &lt;p&gt;Unfortunately, around that time, my sessions were turned down for &lt;a href="http://madexpo.us/"&gt;MADExpo&lt;/a&gt; and &lt;a href="http://chicagocodecamp.com/"&gt;Chicago Code Camp&lt;/a&gt;.&amp;#160; I was pretty bummed about it, more than I thought I would be.&amp;#160; I plan to try again next year and market my sessions better.&amp;#160; Need to figure out how to get more buzz words into my titles :)&lt;/p&gt;  &lt;p&gt;Happily I have been accepted to &lt;a href="http://www.agileroots.com/"&gt;Agile Roots&lt;/a&gt;.&amp;#160; I’ll be running “Hands-on Group TDD with Randori” (title pending).&lt;/p&gt;  &lt;p&gt;Additionally, I’ll be presenting at the &lt;a href="http://utahdnug.org/"&gt;Utah .Net User Group&lt;/a&gt; this Thursday (May 10, 2012) on “&lt;a href="http://www.slideshare.net/mdclement/linq-from-the-inside"&gt;Linq (from the inside)&lt;/a&gt;”. &lt;/p&gt;  &lt;p&gt;I’m still waiting on &lt;a href="http://portlandcodecamp.com/"&gt;Portland Code Camp&lt;/a&gt; and &lt;a href="https://seattle.codecamp.us/"&gt;Seattle Code Camp&lt;/a&gt; which I hope to still speak at.&amp;#160; I’ll likely go to Portland Code Camp either way as we’ll be in Portland to visit family.&lt;/p&gt;  &lt;p&gt;I am hoping to attend &lt;a href="http://scna.softwarecraftsmanship.org/"&gt;SCNA in Chicago&lt;/a&gt; in November.&amp;#160; And that should round out the year.&amp;#160; Should be exciting!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7414512759580466-3101570885704003025?l=blog.softwareontheside.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=zsg6D6KoIqc:NX2aHFa20Rs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=zsg6D6KoIqc:NX2aHFa20Rs:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=zsg6D6KoIqc:NX2aHFa20Rs:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=zsg6D6KoIqc:NX2aHFa20Rs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=zsg6D6KoIqc:NX2aHFa20Rs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=zsg6D6KoIqc:NX2aHFa20Rs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SoftwareOnTheSide/~4/zsg6D6KoIqc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.softwareontheside.com/feeds/3101570885704003025/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.softwareontheside.com/2012/05/on-speaking-and-not-speaking.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/3101570885704003025?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/3101570885704003025?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoftwareOnTheSide/~3/zsg6D6KoIqc/on-speaking-and-not-speaking.html" title="On Speaking… and not speaking" /><author><name>mdclement</name><uri>http://www.blogger.com/profile/07418040981494491081</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.softwareontheside.com/2012/05/on-speaking-and-not-speaking.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIHSH0zeip7ImA9WhVSGU4.&quot;"><id>tag:blogger.com,1999:blog-7414512759580466.post-7449737910454767334</id><published>2012-03-12T22:40:00.001-06:00</published><updated>2012-03-16T15:15:39.382-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-16T15:15:39.382-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Presentations" /><category scheme="http://www.blogger.com/atom/ns#" term="Software Craftsmanship" /><category scheme="http://www.blogger.com/atom/ns#" term="Code Kata" /><category scheme="http://www.blogger.com/atom/ns#" term="Randori" /><category scheme="http://www.blogger.com/atom/ns#" term="Practice" /><category scheme="http://www.blogger.com/atom/ns#" term="Code Camp" /><title>Utah Code Camp Spring 2012 Slide Decks</title><content type="html">&lt;p&gt;I had the opportunity to speak at Utah Code Camp again (my fourth code camp presenting &lt;a href="http://blog.softwareontheside.com/2011/09/utah-code-camp-fall-2011-slide-decks.html"&gt;Fall 2011&lt;/a&gt; &lt;a href="http://blog.softwareontheside.com/2011/04/utah-code-camp-spring-2011-slide-decks.html"&gt;Spring 2011&lt;/a&gt; &lt;a href="http://blog.softwareontheside.com/2010/08/msbuild-presentation-may-2010-udnug.html"&gt;Fall 2010&lt;/a&gt;) which was a lot of fun. Not sure if I would do three presentations again, but it was a lot of fun and I met a lot of great people.&lt;/p&gt;  &lt;p&gt;If you attended one of my sessions, please take a minute to rate the session at SpeakerRate (not official eval… please do that too):&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://speakerrate.com/talks/9313-code-katas-practicing-your-craft"&gt;Rate Code Katas: Practicing Your Craft&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://speakerrate.com/talks/9430-randori-group-practice"&gt;Rate Randori: Group Practice&lt;/a&gt;&amp;#160; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://speakerrate.com/talks/9312-linq-from-the-inside"&gt;Rate Linq (from the inside)&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Here are the slide decks. Contact me with any questions!&lt;/p&gt;  &lt;div style="width: 425px" id="__ss_11981826"&gt;&lt;strong style="margin: 12px 0px 4px; display: block"&gt;&lt;a title="Randori: Group Practice" href="http://www.slideshare.net/mdclement/randori" target="_blank"&gt;Randori: Group Practice&lt;/a&gt;&lt;/strong&gt; &lt;object id="__sse11981826" width="425" height="355"&gt; &lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=randori-120312223307-phpapp01&amp;amp;rel=0&amp;amp;stripped_title=randori&amp;amp;userName=mdclement" /&gt; &lt;param name="allowFullScreen" value="true" /&gt; &lt;param name="allowScriptAccess" value="always" /&gt; &lt;param name="wmode" value="transparent" /&gt; &lt;embed name="__sse11981826" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=randori-120312223307-phpapp01&amp;amp;rel=0&amp;amp;stripped_title=randori&amp;amp;userName=mdclement" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt; &lt;/object&gt;    &lt;div style="padding-bottom: 12px; padding-left: 0px; padding-right: 0px; padding-top: 5px"&gt;View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/mdclement" target="_blank"&gt;Mike Clement&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;The Randori starter project is available at &lt;a href="https://github.com/mdclement/NumbersToLcdRandoriBase"&gt;https://github.com/mdclement/NumbersToLcdRandoriBase&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The Code Katas session was presented as two slide decks.&amp;#160; One with the introductory material and the other with the guided FizzBuzz kata.&lt;/p&gt;  &lt;div style="width: 425px" id="__ss_11981789"&gt;&lt;strong style="margin: 12px 0px 4px; display: block"&gt;&lt;a title="Code Katas Spring 2012" href="http://www.slideshare.net/mdclement/code-katas-spring-2012" target="_blank"&gt;Code Katas Spring 2012&lt;/a&gt;&lt;/strong&gt; &lt;object id="__sse11981789" width="425" height="355"&gt; &lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=codekatas2012-120312222753-phpapp01&amp;amp;rel=0&amp;amp;stripped_title=code-katas-spring-2012&amp;amp;userName=mdclement" /&gt; &lt;param name="allowFullScreen" value="true" /&gt; &lt;param name="allowScriptAccess" value="always" /&gt; &lt;param name="wmode" value="transparent" /&gt; &lt;embed name="__sse11981789" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=codekatas2012-120312222753-phpapp01&amp;amp;rel=0&amp;amp;stripped_title=code-katas-spring-2012&amp;amp;userName=mdclement" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt; &lt;/object&gt;    &lt;div style="padding-bottom: 12px; padding-left: 0px; padding-right: 0px; padding-top: 5px"&gt;View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/mdclement" target="_blank"&gt;Mike Clement&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;  &lt;div style="width: 425px" id="__ss_11981736"&gt;&lt;strong style="margin: 12px 0px 4px; display: block"&gt;&lt;a title="FizzBuzz Guided Kata" href="http://www.slideshare.net/mdclement/fizzbuzz-guided-kata" target="_blank"&gt;FizzBuzz Guided Kata&lt;/a&gt;&lt;/strong&gt; &lt;object id="__sse11981736" width="425" height="355"&gt; &lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=fizzbuzzguidedkata-120312222055-phpapp01&amp;amp;rel=0&amp;amp;stripped_title=fizzbuzz-guided-kata&amp;amp;userName=mdclement" /&gt; &lt;param name="allowFullScreen" value="true" /&gt; &lt;param name="allowScriptAccess" value="always" /&gt; &lt;param name="wmode" value="transparent" /&gt; &lt;embed name="__sse11981736" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=fizzbuzzguidedkata-120312222055-phpapp01&amp;amp;rel=0&amp;amp;stripped_title=fizzbuzz-guided-kata&amp;amp;userName=mdclement" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt; &lt;/object&gt;    &lt;div style="padding-bottom: 12px; padding-left: 0px; padding-right: 0px; padding-top: 5px"&gt;View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/mdclement" target="_blank"&gt;Mike Clement&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;  &lt;div style="width: 425px" id="__ss_11981535"&gt;&lt;strong style="margin: 12px 0px 4px; display: block"&gt;&lt;a title="Linq (from the inside)" href="http://www.slideshare.net/mdclement/linq-from-the-inside" target="_blank"&gt;Linq (from the inside)&lt;/a&gt;&lt;/strong&gt; &lt;object id="__sse11981535" width="425" height="355"&gt; &lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=linqfromtheinside-120312215840-phpapp02&amp;amp;rel=0&amp;amp;stripped_title=linq-from-the-inside&amp;amp;userName=mdclement" /&gt; &lt;param name="allowFullScreen" value="true" /&gt; &lt;param name="allowScriptAccess" value="always" /&gt; &lt;param name="wmode" value="transparent" /&gt; &lt;embed name="__sse11981535" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=linqfromtheinside-120312215840-phpapp02&amp;amp;rel=0&amp;amp;stripped_title=linq-from-the-inside&amp;amp;userName=mdclement" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt; &lt;/object&gt;    &lt;div style="padding-bottom: 12px; padding-left: 0px; padding-right: 0px; padding-top: 5px"&gt;View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/mdclement" target="_blank"&gt;Mike Clement&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;The code base that I started from (tests and methods without implementation) is available at &lt;a href="https://github.com/mdclement/Linq--from-the-inside--Presentation-Base"&gt;https://github.com/mdclement/Linq--from-the-inside--Presentation-Base&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7414512759580466-7449737910454767334?l=blog.softwareontheside.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=teplXvkIdW4:7hCs9infFW8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=teplXvkIdW4:7hCs9infFW8:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=teplXvkIdW4:7hCs9infFW8:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=teplXvkIdW4:7hCs9infFW8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=teplXvkIdW4:7hCs9infFW8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=teplXvkIdW4:7hCs9infFW8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SoftwareOnTheSide/~4/teplXvkIdW4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.softwareontheside.com/feeds/7449737910454767334/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.softwareontheside.com/2012/03/utah-code-camp-spring-2012-slide-decks.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/7449737910454767334?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/7449737910454767334?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoftwareOnTheSide/~3/teplXvkIdW4/utah-code-camp-spring-2012-slide-decks.html" title="Utah Code Camp Spring 2012 Slide Decks" /><author><name>mdclement</name><uri>http://www.blogger.com/profile/07418040981494491081</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.softwareontheside.com/2012/03/utah-code-camp-spring-2012-slide-decks.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUAEQH48eip7ImA9WhVSFkw.&quot;"><id>tag:blogger.com,1999:blog-7414512759580466.post-169476432252928563</id><published>2012-02-24T00:36:00.001-07:00</published><updated>2012-03-12T22:41:41.072-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-12T22:41:41.072-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Presentations" /><category scheme="http://www.blogger.com/atom/ns#" term="Code Camp" /><title>Expanding my Speaking Footprint in 2012</title><content type="html">&lt;p&gt;So one of the things that I plan to do more of this year is presenting at Code Camps and the like.&amp;#160; I’ve presented several times at &lt;a href="http://www.linkedin.com/in/dbaduck"&gt;Utah Code Camp&lt;/a&gt; (&lt;a href="http://blog.softwareontheside.com/2011/04/utah-code-camp-spring-2011-slide-decks.html"&gt;Spring 2011&lt;/a&gt;, &lt;a href="http://blog.softwareontheside.com/2011/09/utah-code-camp-fall-2011-slide-decks.html"&gt;Fall 2011&lt;/a&gt;), but want to expand my footprint.&amp;#160; So, I’m currently submitted to &lt;a href="http://boisecodecamp.com/"&gt;Boise Code Camp&lt;/a&gt;, &lt;a href="http://chicagocodecamp.com/"&gt;Chicago Code Camp&lt;/a&gt; and &lt;a href="http://madexpo.us/"&gt;MADExpo&lt;/a&gt;.&amp;#160; Over the next few weeks/months I’ll see how well my session topics are received outside of the Utah community.&amp;#160; I also plan to submit to &lt;a href="http://portlandcodecamp.com/"&gt;Portland Code Camp&lt;/a&gt; and &lt;a href="http://www.agileroots.com/"&gt;Agile Roots&lt;/a&gt; this year once their calls for speakers are open. &lt;/p&gt;  &lt;p&gt;If you’ve attended (and hopefully enjoyed) previous sessions that I’ve presented, please rate me at &lt;a href="http://speakerrate.com/mdclement"&gt;http://speakerrate.com/mdclement&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The topics that I’ve been submitting (and that I’ll be presenting at Utah Code Camp Spring 2012) are listed below along with the abstract.&amp;#160; I’m looking forward to an exciting year of meeting with developer communities both inside and outside of Utah!&lt;/p&gt;  &lt;h4&gt;Linq (From the Inside)&lt;/h4&gt;  &lt;p&gt;Knowing how to use Linq is useful if you're doing any coding using .NET 3.5 or newer.&amp;#160; But have you ever thought about what is going on &amp;quot;under the hood&amp;quot;?&lt;/p&gt;  &lt;p&gt;Join us as we dive into the guts of Linq and implement Linq extension methods such as Where, Select, Any, All and Sum.&amp;#160; Not only is it interesting to see what's going on, it'll help you to build better code using Linq.&lt;/p&gt;  &lt;h4&gt;Code Katas: Practicing your Craft&lt;/h4&gt;  &lt;p&gt;One of the key values as part of the Software Craftsmanship movement is to be &amp;quot;skill-centric&amp;quot; and as part of that, practicing our skills as software developers is key! The Code Kata format is a coding exercise that is repeated and perfected. It provides one of many ways to practice the craft of software development. We'll discuss the Code Kata format, introduce a few katas and discuss some other practice formats.&lt;/p&gt;  &lt;p&gt;I will be guiding the Kata in C# (no previous knowledge necessary though). As this is hands on, to take full advantage of the session have Visual Studio or SharpDevelop installed, NUnit installed (or via NuGet) and an integrated unit test runner (recommend Resharper or NCrunch for VS).&lt;/p&gt;  &lt;h4&gt;Randori: Group Practice&lt;/h4&gt;  &lt;p&gt;Looking for a new way to practice your craft? Randori provides a complementary way type of training when compared with katas. &lt;/p&gt;  &lt;p&gt;Elements of Randori are: Pair Programming, Pair changes with mechanism (Time box, Ping Pong), Start from scratch, Use TDD, Everyone should be following, Pair should be explaining, Audience gives suggestions only with when Green&lt;/p&gt;  &lt;p&gt;An example is at &lt;a href="http://vimeo.com/2499540"&gt;http://vimeo.com/2499540&lt;/a&gt; . This is a hands on session!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7414512759580466-169476432252928563?l=blog.softwareontheside.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=ys0SSeSQv9U:cZOWAc8iLOA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=ys0SSeSQv9U:cZOWAc8iLOA:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=ys0SSeSQv9U:cZOWAc8iLOA:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=ys0SSeSQv9U:cZOWAc8iLOA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=ys0SSeSQv9U:cZOWAc8iLOA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=ys0SSeSQv9U:cZOWAc8iLOA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SoftwareOnTheSide/~4/ys0SSeSQv9U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.softwareontheside.com/feeds/169476432252928563/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.softwareontheside.com/2012/02/expanding-my-speaking-footprint-in-2012.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/169476432252928563?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/169476432252928563?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoftwareOnTheSide/~3/ys0SSeSQv9U/expanding-my-speaking-footprint-in-2012.html" title="Expanding my Speaking Footprint in 2012" /><author><name>mdclement</name><uri>http://www.blogger.com/profile/07418040981494491081</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.softwareontheside.com/2012/02/expanding-my-speaking-footprint-in-2012.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UMRn0ycSp7ImA9WhRbEEk.&quot;"><id>tag:blogger.com,1999:blog-7414512759580466.post-2717826804812873057</id><published>2012-01-31T14:28:00.001-07:00</published><updated>2012-01-31T14:28:07.399-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-31T14:28:07.399-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Quote of the Week" /><category scheme="http://www.blogger.com/atom/ns#" term="Practice" /><title>But I really learned from writing: Quote of the Week</title><content type="html">&lt;p&gt;&lt;em&gt;Note&lt;/em&gt;: Might be silly to call this a “quote of the week” given that it’s been years since I posted one but… oh well.&lt;/p&gt;  &lt;p&gt;Heard this this morning on NPR from an interview with the composer Philip Glass:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;What this amount of music has done for me is taught me how to write music. Oh, I had great teachers. Boulanger was one. Another was Ravi Shankar. And I went through the Juilliard process, and that was good, too. &lt;strong&gt;But I really learned from writing&lt;/strong&gt;, which is how painters learn to paint, and writers learn to write, and how even dancers learn to dance. In a way, that's true. But what was the value of being so prolific? It's how I learned my trade.&lt;/p&gt;    &lt;p align="right"&gt;Philip Glass from &lt;a href="http://www.npr.org/2012/01/31/146095212/philip-glass-at-75-listening-with-heart-not-intellect"&gt;Philip Glass At 75: Listening With Heart, Not Intellect&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;What I heard in there is &amp;quot;But I really learned from writing, which is how painters learn to paint, and writers learn to write, and how even &lt;strong&gt;&lt;em&gt;coders &lt;/em&gt;learn to &lt;em&gt;code&lt;/em&gt;&lt;/strong&gt;.&amp;quot;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7414512759580466-2717826804812873057?l=blog.softwareontheside.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=DF0hSXBI11s:vUEdXSjDuBM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=DF0hSXBI11s:vUEdXSjDuBM:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=DF0hSXBI11s:vUEdXSjDuBM:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=DF0hSXBI11s:vUEdXSjDuBM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=DF0hSXBI11s:vUEdXSjDuBM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=DF0hSXBI11s:vUEdXSjDuBM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SoftwareOnTheSide/~4/DF0hSXBI11s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.softwareontheside.com/feeds/2717826804812873057/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.softwareontheside.com/2012/01/but-i-really-learned-from-writing-quote.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/2717826804812873057?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/2717826804812873057?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoftwareOnTheSide/~3/DF0hSXBI11s/but-i-really-learned-from-writing-quote.html" title="But I really learned from writing: Quote of the Week" /><author><name>mdclement</name><uri>http://www.blogger.com/profile/07418040981494491081</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.softwareontheside.com/2012/01/but-i-really-learned-from-writing-quote.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEEQ349fip7ImA9WhRXFUU.&quot;"><id>tag:blogger.com,1999:blog-7414512759580466.post-8708557128355701582</id><published>2011-09-13T00:44:00.001-06:00</published><updated>2011-12-22T13:10:02.066-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-22T13:10:02.066-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Code Kata" /><category scheme="http://www.blogger.com/atom/ns#" term="Code Camp" /><title>Utah Code Camp Fall 2011 Slide Decks</title><content type="html">I had the opportunity to present at the &lt;a href="http://utahcodecamp.com/"&gt;Fall 2011 Utah Code Camp&lt;/a&gt; on September 10, 2001. I have uploaded my slides to Slideshare. &lt;br /&gt;
If you attended one or both of my sessions, please take a few minutes to evaluate the sessions at SpeakerRate. &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://speakerrate.com/talks/8298-code-katas-learning-your-craft"&gt;Rate "Code Katas: Practicing Your Craft"&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://speakerrate.com/talks/8297-power-of-patterns-or-more-than-programming-with-objects"&gt;Rate "Power of Patterns OR More than Programming with Objects"&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
On both of these presentations, you’ll be able to glean things more from the speaker notes than from the slides.&amp;nbsp; I plan on posting more on each of these subjects later.&lt;br /&gt;
&lt;div id="__ss_9234635" style="width: 425px;"&gt;
&lt;strong style="display: block; margin: 12px 0px 4px;"&gt;&lt;a href="http://www.slideshare.net/mdclement/power-of-patterns-or-more-than-programming-with-objects" target="_blank" title="Power of Patterns OR More Than Programming with Objects"&gt;Power of Patterns OR More Than Programming with Objects&lt;/a&gt;&lt;/strong&gt; &lt;iframe frameborder="0" height="355" marginheight="0" marginwidth="0" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/9234635" width="425"&gt;&lt;/iframe&gt;    &lt;br /&gt;
&lt;div style="padding-bottom: 12px; padding-left: 0px; padding-right: 0px; padding-top: 5px;"&gt;
View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/mdclement" target="_blank"&gt;Mike Clement&lt;/a&gt; &lt;/div&gt;
&lt;/div&gt;
The Code Katas session is divided into two slide decks; one for the session specific slides and another for the slides for the Bowling Game Kata in C#. &lt;br /&gt;
&lt;div id="__ss_9234580" style="width: 425px;"&gt;
&lt;strong style="display: block; margin: 12px 0px 4px;"&gt;&lt;a href="http://www.slideshare.net/mdclement/code-katas-practicing-your-craft" target="_blank" title="Code Katas: Practicing Your Craft"&gt;Code Katas: Practicing Your Craft&lt;/a&gt;&lt;/strong&gt; &lt;iframe frameborder="0" height="355" marginheight="0" marginwidth="0" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/9234580" width="425"&gt;&lt;/iframe&gt;    &lt;br /&gt;
&lt;div style="padding-bottom: 12px; padding-left: 0px; padding-right: 0px; padding-top: 5px;"&gt;
View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/mdclement" target="_blank"&gt;Mike Clement&lt;/a&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;div id="__ss_9235104" style="width: 425px;"&gt;
&lt;strong style="display: block; margin: 12px 0px 4px;"&gt;&lt;a href="http://www.slideshare.net/mdclement/bowling-game-kata-in-c-adapted" title="Bowling Game Kata in C# Adapted"&gt;Bowling Game Kata in C# Adapted&lt;/a&gt;&lt;/strong&gt;&lt;object height="355" id="__sse9235104" width="425"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=bowlinggamekatacadapted-110913013206-phpapp02&amp;amp;stripped_title=bowling-game-kata-in-c-adapted&amp;amp;userName=mdclement" /&gt;
&lt;param name="allowFullScreen" value="true" /&gt;
&lt;param name="allowScriptAccess" value="always" /&gt;
&lt;embed name="__sse9235104" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=bowlinggamekatacadapted-110913013206-phpapp02&amp;amp;stripped_title=bowling-game-kata-in-c-adapted&amp;amp;userName=mdclement" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;    &lt;br /&gt;
&lt;div style="padding-bottom: 12px; padding-left: 0px; padding-right: 0px; padding-top: 5px;"&gt;
View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/mdclement"&gt;Mike Clement&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7414512759580466-8708557128355701582?l=blog.softwareontheside.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=VkEjnHSx4gY:_Qm0RgVWm0s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=VkEjnHSx4gY:_Qm0RgVWm0s:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=VkEjnHSx4gY:_Qm0RgVWm0s:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=VkEjnHSx4gY:_Qm0RgVWm0s:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=VkEjnHSx4gY:_Qm0RgVWm0s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=VkEjnHSx4gY:_Qm0RgVWm0s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SoftwareOnTheSide/~4/VkEjnHSx4gY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.softwareontheside.com/feeds/8708557128355701582/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.softwareontheside.com/2011/09/utah-code-camp-fall-2011-slide-decks.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/8708557128355701582?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/8708557128355701582?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoftwareOnTheSide/~3/VkEjnHSx4gY/utah-code-camp-fall-2011-slide-decks.html" title="Utah Code Camp Fall 2011 Slide Decks" /><author><name>mdclement</name><uri>http://www.blogger.com/profile/07418040981494491081</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.softwareontheside.com/2011/09/utah-code-camp-fall-2011-slide-decks.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEMSHk-fyp7ImA9WhZRFUU.&quot;"><id>tag:blogger.com,1999:blog-7414512759580466.post-1567655662186029807</id><published>2011-04-11T23:38:00.001-06:00</published><updated>2011-04-11T23:38:09.757-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-11T23:38:09.757-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Code Camp" /><title>Utah Code Camp Spring 2011 Slide Decks</title><content type="html">&lt;p&gt;As I’m sure at some point they will not be available on the &lt;a href="http://utahcodecamp.com/Downloads"&gt;Utah Code Camp downloads page&lt;/a&gt;, I’ve gone ahead and posted my slide decks from my sessions on SlideShare.&amp;#160; They are not entirely comprehensible, especially the Rhino Mocks one since the majority of the time was spent in code.&amp;#160; I’ll get that posted soon as well.&lt;/p&gt;  &lt;div style="width: 425px" id="__ss_7595887"&gt;&lt;strong style="margin: 12px 0px 4px; display: block"&gt;&lt;a title="Using Rhino Mocks for Effective Unit Testing" href="http://www.slideshare.net/mdclement/using-rhino-mocks-for-effective-unit-testing"&gt;Using Rhino Mocks for Effective Unit Testing&lt;/a&gt;&lt;/strong&gt; &lt;object id="__sse7595887" width="425" height="355"&gt; &lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=usingrhinomocksforeffectiveunittesting-110412002507-phpapp01&amp;amp;stripped_title=using-rhino-mocks-for-effective-unit-testing&amp;amp;userName=mdclement" /&gt; &lt;param name="allowFullScreen" value="true" /&gt; &lt;param name="allowScriptAccess" value="always" /&gt; &lt;embed name="__sse7595887" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=usingrhinomocksforeffectiveunittesting-110412002507-phpapp01&amp;amp;stripped_title=using-rhino-mocks-for-effective-unit-testing&amp;amp;userName=mdclement" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt; &lt;/object&gt;    &lt;div style="padding-bottom: 12px; padding-left: 0px; padding-right: 0px; padding-top: 5px"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/mdclement"&gt;mdclement&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;  &lt;div style="width: 425px" id="__ss_7595928"&gt;&lt;strong style="margin: 12px 0px 4px; display: block"&gt;&lt;a title="Software Craftsmanship" href="http://www.slideshare.net/mdclement/software-craftsmanship"&gt;Software Craftsmanship&lt;/a&gt;&lt;/strong&gt;&lt;object id="__sse7595928" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=softwarecraftsmanship-110412003345-phpapp01&amp;amp;stripped_title=software-craftsmanship&amp;amp;userName=mdclement" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;embed name="__sse7595928" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=softwarecraftsmanship-110412003345-phpapp01&amp;amp;stripped_title=software-craftsmanship&amp;amp;userName=mdclement" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;    &lt;div style="padding-bottom: 12px; padding-left: 0px; padding-right: 0px; padding-top: 5px"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/mdclement"&gt;mdclement&lt;/a&gt;.&lt;/div&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7414512759580466-1567655662186029807?l=blog.softwareontheside.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=BmvbWl31A3g:Hl1PvKq06VE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=BmvbWl31A3g:Hl1PvKq06VE:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=BmvbWl31A3g:Hl1PvKq06VE:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=BmvbWl31A3g:Hl1PvKq06VE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=BmvbWl31A3g:Hl1PvKq06VE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=BmvbWl31A3g:Hl1PvKq06VE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SoftwareOnTheSide/~4/BmvbWl31A3g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.softwareontheside.com/feeds/1567655662186029807/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.softwareontheside.com/2011/04/utah-code-camp-spring-2011-slide-decks.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/1567655662186029807?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/1567655662186029807?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoftwareOnTheSide/~3/BmvbWl31A3g/utah-code-camp-spring-2011-slide-decks.html" title="Utah Code Camp Spring 2011 Slide Decks" /><author><name>mdclement</name><uri>http://www.blogger.com/profile/07418040981494491081</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.softwareontheside.com/2011/04/utah-code-camp-spring-2011-slide-decks.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkENRnk6eCp7ImA9WhZTFU0.&quot;"><id>tag:blogger.com,1999:blog-7414512759580466.post-2374744595518023924</id><published>2011-03-18T22:24:00.001-06:00</published><updated>2011-03-18T22:24:57.710-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-18T22:24:57.710-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Lessons from Laser Tag" /><title>Lessons from Laser Tag: Metrics and Feedback Loops</title><content type="html">&lt;p&gt;&lt;em&gt;Recently the Utah Development Center at Microsoft (where I work) had a “morale event” (I still think it’s funny that they explicitly call them that) where we visited a local laser tag place.&amp;#160; We played three times and each time I ended up in the middle of the pack (yeah, I’m not that good).&amp;#160; But I did see some interesting lessons that could be taken from the experience.&amp;#160; Here is one of those lessons.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;img style="display: inline; float: right" align="right" src="http://4.bp.blogspot.com/-1cmnlfqrhXg/TWHDO0Glp0I/AAAAAAAABJo/2juXSDGrNDM/s1600/laser%2Btag.jpg" width="345" height="230" /&gt;After the first round, an interesting thing happened.&amp;#160; We each got a printed “score card” to tell us how we had done.&amp;#160; It had how many kills, how many timed you were killed, breakdown by opposition player (friendly fire was off), number of shots fired, accuracy percentage and some overall team stats.&amp;#160; The one additional number on the sheet was “rank”.&amp;#160; Being good little programmers/engineers, most of us started to try to reverse engineer the ranking algorithm.&amp;#160; It appeared to be surprisingly simple.&amp;#160; We were ranked by number of kills. (I don’t think this was confirmed, but we suspected that number of timed you were killed was used as a tie breaker.)&lt;/p&gt;  &lt;p&gt;It was like the game totally changed.&amp;#160; &lt;em&gt;Because it did.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Suddenly the feedback loop from the metrics used gave us this: Don’t worry about accuracy percentage, don’t worry about the number of times you get killed.&amp;#160; Kill the most people and you win. The only thing that matters to your rank is number of kills.&amp;#160; The next game the overall kill count went up significantly (about 20% increase).&lt;/p&gt;  &lt;p&gt;Metrics have the tendency to focus us like this, which is super powerful.&amp;#160; But remember, with that great power comes great responsibility.&amp;#160; While many still played for “team pride”, for some people the individual ranking became the most important personal metric of success.&amp;#160; If you no longer care about the success of your team, the number of kills that you sustain no longer matters.&amp;#160; It is not a metric that you care about. &lt;strong&gt;All that matters is getting the most individual kills.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Choose the metrics that you use with care.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;A recent real life example that I heard went something like this: The manager of a development group doing SINO (Scrum in name only) set a goal for the group that “this year, we’re going to get everything done that we commit to for a sprint done in that sprint.”&amp;#160; This is a well intentioned goal.&amp;#160; Basically do what you say you’re going to do.&amp;#160; BUT, if that is the metric used, what happens to the amount of work committed to in a given sprint?&amp;#160; In order to do well against the metric, the amount of work committed to drops (or estimates are WAY high).&amp;#160; Suddenly half way through a sprint (or less) the developers have completed the work that had been committed to.&amp;#160; &lt;strong&gt;All that matters is getting the work committed to done.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Some managers reaction would be to think, “Well, that didn’t work, lets add some more metrics to get what I want.&amp;#160; Let’s continue to try to control the system.”&lt;/p&gt;  &lt;p&gt;That may or may not be the best approach.&amp;#160; Eventually you may end up with a system that is so bogged down with itself that no work actually gets done.&lt;/p&gt;  &lt;p&gt;I’m not saying that metrics are bad.&amp;#160; They can be very, very good and are very, very powerful.&amp;#160; Just be sure that you’re using the right tool for the right job.&amp;#160; Don’t use a nail gun where the gentle tap of a hammer is the right thing.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7414512759580466-2374744595518023924?l=blog.softwareontheside.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=HWyJKQAAR4c:TRDOeSZperE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=HWyJKQAAR4c:TRDOeSZperE:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=HWyJKQAAR4c:TRDOeSZperE:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=HWyJKQAAR4c:TRDOeSZperE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=HWyJKQAAR4c:TRDOeSZperE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=HWyJKQAAR4c:TRDOeSZperE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SoftwareOnTheSide/~4/HWyJKQAAR4c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.softwareontheside.com/feeds/2374744595518023924/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.softwareontheside.com/2011/03/lessons-from-laser-tag-metrics-and.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/2374744595518023924?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/2374744595518023924?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoftwareOnTheSide/~3/HWyJKQAAR4c/lessons-from-laser-tag-metrics-and.html" title="Lessons from Laser Tag: Metrics and Feedback Loops" /><author><name>mdclement</name><uri>http://www.blogger.com/profile/07418040981494491081</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-1cmnlfqrhXg/TWHDO0Glp0I/AAAAAAAABJo/2juXSDGrNDM/s72-c/laser%2Btag.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.softwareontheside.com/2011/03/lessons-from-laser-tag-metrics-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ABQnY9eSp7ImA9Wx9aEU4.&quot;"><id>tag:blogger.com,1999:blog-7414512759580466.post-5737103496491448653</id><published>2011-03-03T01:09:00.001-07:00</published><updated>2011-03-03T01:09:13.861-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-03T01:09:13.861-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="video" /><category scheme="http://www.blogger.com/atom/ns#" term="Code Kata" /><title>Prime Factors Kata in C#</title><content type="html">&lt;p&gt;I recently led a practice of the Prime Factors Kata in C# at the &lt;a href="https://groups.google.com/forum/#!forum/ut-software-craftsmanship"&gt;Utah Software Craftsmanship Group&lt;/a&gt;.&amp;#160; I couldn’t find a C# version, so I adapted the &lt;a href="http://butunclebob.com/ArticleS.UncleBob.ThePrimeFactorsKata"&gt;Java version that Uncle Bob posted&lt;/a&gt; back in 2005.&amp;#160; I’ve done a recording of me practicing the kata so that others can practice it.&amp;#160; I recorded it at a fairly high resolution (approximately 1920x1080) which means you’ll need to watch it on a screen around that size in order to make out the text in most cases… sorry, this is my first attempt at screen capture of a coding exercise… I’m sure I’ll get better with practice!&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt; &lt;iframe height="281" src="http://player.vimeo.com/video/20591562" frameborder="0" width="500"&gt;&lt;/iframe&gt;  &lt;p&gt;&lt;a href="http://vimeo.com/20591562"&gt;Prime Factors Kata in C#&lt;/a&gt; from &lt;a href="http://vimeo.com/user6193249"&gt;Mike Clement&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7414512759580466-5737103496491448653?l=blog.softwareontheside.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=Xejg1EqeK3U:bDEYQsGuuWM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=Xejg1EqeK3U:bDEYQsGuuWM:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=Xejg1EqeK3U:bDEYQsGuuWM:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=Xejg1EqeK3U:bDEYQsGuuWM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=Xejg1EqeK3U:bDEYQsGuuWM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=Xejg1EqeK3U:bDEYQsGuuWM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SoftwareOnTheSide/~4/Xejg1EqeK3U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.softwareontheside.com/feeds/5737103496491448653/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.softwareontheside.com/2011/03/prime-factors-kata-in-c.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/5737103496491448653?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/5737103496491448653?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoftwareOnTheSide/~3/Xejg1EqeK3U/prime-factors-kata-in-c.html" title="Prime Factors Kata in C#" /><author><name>mdclement</name><uri>http://www.blogger.com/profile/07418040981494491081</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.softwareontheside.com/2011/03/prime-factors-kata-in-c.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4HR3Y9cSp7ImA9Wx9XGE8.&quot;"><id>tag:blogger.com,1999:blog-7414512759580466.post-2320941612400507016</id><published>2011-01-12T01:28:00.001-07:00</published><updated>2011-01-12T01:28:56.869-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-12T01:28:56.869-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Hiring" /><title>But We Can Get ‘em Cheap!</title><content type="html">&lt;p&gt;What’s wrong with that phrase?&amp;#160; A better question would be is there anything right with it…&lt;/p&gt;  &lt;p&gt;“But we can get ‘em cheap” is the ultimate lie, especially in hiring.&amp;#160; Now, that’s not to say that you can’t get quality team members for “cheap”.&amp;#160; BUT, when you preface that with “but” it means that you don’t really want to hire that candidate.&amp;#160; It means that you are attempting to justify a bad hire with a claim of “cost savings”.&lt;/p&gt;  &lt;p&gt;But the lie is that you’re not really saving money.&lt;/p&gt;  &lt;p&gt;Let’s say that this “get ‘em cheap” candidate (A) would somehow accept an offer of $45K.&amp;#160; But you have doubts.&amp;#160; You wonder why somebody would take such a low salary with the experience that they claim on their resume, but you go ahead, extend the offer.&amp;#160; Surprisingly they except your low offer and so you get ready for your new employee.&lt;/p&gt;  &lt;p align="right"&gt;In a parallel universe, you passed on candidate A because they weren’t good enough, even if you could “get ‘em cheap”.&amp;#160; So you keep looking, and maybe looking some more.&amp;#160; So you’re going to incur additional costs in the recruiting/hiring process.&amp;#160; But you’re confident that you’ll find a quality candidate if you keep looking.&lt;/p&gt;  &lt;p align="right"&gt;So you keep looking.&lt;/p&gt;  &lt;p align="right"&gt;And looking.&lt;/p&gt;  &lt;p align="right"&gt;And looking.&lt;/p&gt;  &lt;p align="right"&gt;And then you find candidate B.&lt;/p&gt;  &lt;p align="right"&gt;But you’re pretty sure that they’re going to want at least $80K if not more.&amp;#160; And sure enough, after some negotiation, you settle on $90K.&amp;#160; Plus you definitely spent more time and money looking than you wanted to.&amp;#160; You’re pretty sure it’ll be worth it though.&lt;/p&gt;  &lt;p&gt;Back in candidate A land, you start doing training.&amp;#160; You’re explaining a concept and you can tell your new hire isn’t quite getting it.&amp;#160; They are nodding away, but you’re pretty sure they just aren’t asking questions because they don’t want to appear incompetent.&amp;#160; You get the feeling that they are following the old motto “better to keep your mouth closed and be thought a fool than to open it and remove all doubt” might be your new hire’s strategy, but you can’t tell so you write it off as you just not being able to read them.&amp;#160; But you get the same feeling as you go through your other training sessions.&amp;#160; He also comes and asks some questions that are a little weird… and repetitive.&amp;#160; &lt;/p&gt;  &lt;p&gt;But he was cheap right?&amp;#160; Well you’re now not only paying A’s salary but now wasting one of your productive developer’s time.&amp;#160; A’s not really getting much done, but you figure it’ll just take a little longer for him to ramp up.&amp;#160; But he keeps bugging your devs… and soon you realize that the new hire has been rotating around who he asks questions in order to make it less noticeable that he doesn’t know what he’s doing… so instead of repeating a question twice, it’s really that he’s asked it five times… and in code review it comes out that he still doesn’t get it.&lt;/p&gt;  &lt;p&gt;So two months later you’ve tried and tried and things aren’t working out.&amp;#160; You have encouraged, warned and helped as much as you feel you can, but it’s just not working out.&amp;#160; Not only has A been minimally productive himself, he’s constantly needed help from others which means that your team hasn’t been as productive.&amp;#160; So you end up firing A and start looking again, until you find someone that you can “get cheap”…&lt;/p&gt;  &lt;p align="right"&gt;Meanwhile in the parallel universe, candidate B is asking all the right questions… once.&amp;#160; You see the light turn on in his head as you explain your system architecture.&amp;#160; And the questions that he asks help you understand that maybe there are some improvements that could be made to your framework code to help ease development.&amp;#160; B is productive within two weeks and at the end of their second four week sprint has gotten as much done as most “ramped up” devs.&lt;/p&gt;  &lt;p align="center"&gt;&lt;strong&gt;So which is the better deal?&amp;#160; Which really is cheaper?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;“But we can get ‘em cheap” to me is the ultimate red flag.&lt;/strong&gt;&amp;#160; It means that more than likely you’re getting a low quality candidate for a low salary but at a cost that is really higher than anybody should be willing to pay.&lt;/p&gt;  &lt;p&gt;Are there ways to get good devs less expensively?&amp;#160; Sure!&amp;#160; Interns and new college hires can be a great way to get bright devs that can be trained easily relatively inexpensively.&amp;#160; But even that is not an endless pool as you still need more senior devs to mentor and train them.&lt;/p&gt;  &lt;p&gt;There is another hidden cost/benefit that comes with a new hire, and this is probably one of the most costly: What do your other devs think when that new hire walks in the door for the first day?&amp;#160; Do they think “what a great addition to the team!” or “oh boy, I can’t believe I work here where they hire these people”.&amp;#160; &lt;strong&gt;Building a great team means that every hire counts. There is no room for “meh” team members on a great team.&lt;/strong&gt;&amp;#160; Should they all be great in the same way? No! But they all should be great at something the team needs.&lt;/p&gt;  &lt;p&gt;Even if your A turned out “okay” (half as productive as B, but decently productive) and you could hire two of them for the same salary as (or even less than) B, &lt;strong&gt;B would still be a better deal &lt;/strong&gt;because 1) fixed per employee costs (like hardware, software, health insurance, benefits) and 2) your communication graph is smaller.&amp;#160; Your team will be tighter and more productive with a single solid performer that is able to raise the performance of the whole team than two blah performers.&amp;#160; Smart people want to work with smart people!&lt;/p&gt;  &lt;p&gt;Just remember, if you hear “but we got ‘em cheap” when frustrated with a new hire, you’ll probably be hearing the same thing in 6 months when you’re training his replacement.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7414512759580466-2320941612400507016?l=blog.softwareontheside.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=MWUbYE_EyNI:AYhkotZayTk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=MWUbYE_EyNI:AYhkotZayTk:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=MWUbYE_EyNI:AYhkotZayTk:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=MWUbYE_EyNI:AYhkotZayTk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=MWUbYE_EyNI:AYhkotZayTk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=MWUbYE_EyNI:AYhkotZayTk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SoftwareOnTheSide/~4/MWUbYE_EyNI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.softwareontheside.com/feeds/2320941612400507016/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.softwareontheside.com/2011/01/but-we-can-get-em-cheap.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/2320941612400507016?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/2320941612400507016?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoftwareOnTheSide/~3/MWUbYE_EyNI/but-we-can-get-em-cheap.html" title="But We Can Get ‘em Cheap!" /><author><name>mdclement</name><uri>http://www.blogger.com/profile/07418040981494491081</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.softwareontheside.com/2011/01/but-we-can-get-em-cheap.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIHQHwyfip7ImA9Wx9XFkk.&quot;"><id>tag:blogger.com,1999:blog-7414512759580466.post-8455328172509777889</id><published>2011-01-10T01:02:00.001-07:00</published><updated>2011-01-10T01:02:11.296-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-10T01:02:11.296-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="does not equal" /><title>Promotion != Management</title><content type="html">&lt;p&gt;Are you familiar with the &lt;a href="http://en.wikipedia.org/wiki/Peter_Principle"&gt;Peter Principle&lt;/a&gt;?&amp;#160; In a sentence, it states that employees are promoted to their level of incompetence.&amp;#160; Think about that for a second.&lt;/p&gt;  &lt;p&gt;Sure it’s kinda cute and makes you chuckle, but what does that really mean for your organization?&amp;#160; It means you have a certain percentage of your employees/co-workers that are incompetent at their current positions.&amp;#160; The scary thing is that most of these people are in management positions… they are running your company.&amp;#160; &lt;/p&gt;  &lt;p&gt;The sad thing is that these same people were most likely competent &lt;strong&gt;if not exceptional &lt;/strong&gt;in another non-management position in your company.&amp;#160; How else did they get promoted to that management position if not by demonstrating competence in another role?&amp;#160; But that also means that &lt;strong&gt;there are people in your organization that are getting paid to fail instead of being put in a position to succeed&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;So the question is why?&amp;#160; Why waste all this talent and ability?&amp;#160; Why not put them in a position to succeed?&amp;#160; Because to put them in their old positions would often result in a “demotion” and this is culturally difficult to do.&lt;/p&gt;  &lt;p&gt;The trick is not to tie promotions to role.&amp;#160; Otherwise you artificially limit promotions/salaries for those in individual contributor positions because they aren’t “moving up” the org chart.&amp;#160; You contribute to a culture that the only way to progress your career is to “get into management”.&amp;#160; This is a mistake.&lt;/p&gt;  &lt;p&gt;The flawed fundamental assumption is that if you are good at something, you’ll be good at managing people that are doing that something.&amp;#160; Managing people requires a unique skill that is often not found in your top individual performers.&amp;#160; &lt;strong&gt;People management needs to be its own role within your company.&lt;/strong&gt;&amp;#160; Those that recognize their limitations and feel that they are best in an individual contributor position may feel less valued in the organization, causing them to leave.&lt;/p&gt;  &lt;p&gt;On wikipedia it is says that a result of the Peter Principle is that “work is accomplished by those employees who have not yet reached their level of incompetence”.&amp;#160; Make sure that your organization keeps people below their level of incompetence or else who’s going to do the work?&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7414512759580466-8455328172509777889?l=blog.softwareontheside.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=Vco_6rTlCyQ:VmG6z-wecNk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=Vco_6rTlCyQ:VmG6z-wecNk:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=Vco_6rTlCyQ:VmG6z-wecNk:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=Vco_6rTlCyQ:VmG6z-wecNk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=Vco_6rTlCyQ:VmG6z-wecNk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=Vco_6rTlCyQ:VmG6z-wecNk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SoftwareOnTheSide/~4/Vco_6rTlCyQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.softwareontheside.com/feeds/8455328172509777889/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.softwareontheside.com/2011/01/promotion-management.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/8455328172509777889?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/8455328172509777889?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoftwareOnTheSide/~3/Vco_6rTlCyQ/promotion-management.html" title="Promotion != Management" /><author><name>mdclement</name><uri>http://www.blogger.com/profile/07418040981494491081</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.softwareontheside.com/2011/01/promotion-management.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIEQX85eip7ImA9Wx5VGE0.&quot;"><id>tag:blogger.com,1999:blog-7414512759580466.post-5247879347469058674</id><published>2010-10-11T08:15:00.000-06:00</published><updated>2010-10-11T08:15:00.122-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-11T08:15:00.122-06:00</app:edited><title>Culture beats process</title><content type="html">&lt;p&gt;Last week I tweeted &lt;a href="http://twitter.com/mdclement/statuses/26781690548"&gt;“culture leads to behavior; process leads to resentment”&lt;/a&gt;.&amp;#160; I thought I’d follow that up…&lt;/p&gt;  &lt;p&gt;One of the things that I’ve noted in my career is that the natural reaction of many people is to “add process&amp;quot;.&amp;#160; We’re introducing bugs late in the release cycle.&amp;#160; Let’s add a check in process.&amp;#160; We’re not sharing code “correctly”.&amp;#160; Let’s add a code sharing process.&amp;#160; Bug information isn’t getting communicated correctly.&amp;#160; Let’s add a bug entry process.&lt;/p&gt;  &lt;p&gt;A coworker said (though I’m sure he got it from somewhere else): &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Process is like violence.&amp;#160; If you’re not getting the results you want with it, you’re not using enough.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;True, if you put enough process around something, you might eventually get your desired result.&amp;#160; Might.&amp;#160; Engineering systems is hard.&amp;#160; Engineering systems that involve people is really hard.&amp;#160; One of the first business books I read was &lt;a href="http://www.amazon.com/gp/product/0887307280?ie=UTF8&amp;amp;tag=mikeonsoftware-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0887307280"&gt;The E-Myth Revisited: Why Most Small Businesses Don't Work and What to Do About It&lt;/a&gt;.&amp;#160; It was an eye opener.&amp;#160; It described how a business really is a set of processes.&amp;#160; To have “The Manual” that helps things be repeatable.&lt;/p&gt;  &lt;p&gt;I loved it.&amp;#160; I ate it up.&amp;#160; I need to reread it now and see how much my current view of the world jives with it though.&amp;#160; &lt;/p&gt;  &lt;p&gt;Because for some things this works.&amp;#160; For example, Ray Kroc and the hamburger.&amp;#160; McDonald’s does not have the best hamburger in the world, but people go back because it’s predictable.&amp;#160; It’s repeatable.&amp;#160; You get the same hamburger, chicken McNuggets, salad, or apple pie pretty much anywhere.&amp;#160; The process, the system makes it happen.&amp;#160; &lt;a href="http://despair.com/motivation.html"&gt;But then maybe that job can be done by robots.&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now where does that break down?&amp;#160; Is the service consistent at each McDonald’s?&amp;#160; No.&amp;#160; As much as the process attempts to enforce this, at each store are different people, with different personalities, different backgrounds and different whatever going on that particular day.&lt;/p&gt;  &lt;p&gt;This is why culture is more powerful than process.&amp;#160; If you can instill a culture of cheerfully helping customers, your employees will do just that, regardless of “The Manual”.&amp;#160; If you instill a culture of quality code, employees are going to think twice before checking in crappy code.&amp;#160; Maybe they’ll get somebody to review it or give it another pass.&amp;#160; Processes or systems can be a starting point, but without culture they have no meaning.&lt;/p&gt;  &lt;p&gt;Culture helps people do the right thing.&amp;#160; They might not always do the right thing, but that’s okay.&amp;#160; It’s an opportunity to teach about the culture, not add a process.&amp;#160; Culture is “the why” of a business.&amp;#160; And when you know why, it’s a lot easier to get a great result.&amp;#160; Put too much process around it and you’ll get a robot.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7414512759580466-5247879347469058674?l=blog.softwareontheside.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=-Ct-7YabRJs:e92-atflK4Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=-Ct-7YabRJs:e92-atflK4Q:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=-Ct-7YabRJs:e92-atflK4Q:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=-Ct-7YabRJs:e92-atflK4Q:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=-Ct-7YabRJs:e92-atflK4Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=-Ct-7YabRJs:e92-atflK4Q:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SoftwareOnTheSide/~4/-Ct-7YabRJs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.softwareontheside.com/feeds/5247879347469058674/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.softwareontheside.com/2010/10/culture-beats-process.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/5247879347469058674?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/5247879347469058674?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoftwareOnTheSide/~3/-Ct-7YabRJs/culture-beats-process.html" title="Culture beats process" /><author><name>mdclement</name><uri>http://www.blogger.com/profile/07418040981494491081</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.softwareontheside.com/2010/10/culture-beats-process.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08MQX4-eCp7ImA9Wx5VFUQ.&quot;"><id>tag:blogger.com,1999:blog-7414512759580466.post-648778919767258545</id><published>2010-10-08T22:51:00.001-06:00</published><updated>2010-10-08T22:51:20.050-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-08T22:51:20.050-06:00</app:edited><title>Can’t Succeed? Redefine Success</title><content type="html">&lt;p&gt;We set goals.&amp;#160; We set exit criteria.&amp;#160; We define requirements.&lt;/p&gt;  &lt;p&gt;Unfortunately we don’t always reach our goals, complete our exit criteria, complete all our requirements.&lt;/p&gt;  &lt;p&gt;So what do we do about that?&lt;/p&gt;  &lt;p&gt;Now Failure sometimes happens.&amp;#160; Sometimes we completely miss the mark.&amp;#160; But often we simply need to redefine what we see as success.&amp;#160; That might mean adjusting your goals mid-flight.&amp;#160; Maybe fudging the exit criteria for a situation that you didn’t anticipate. Change the requirements based on the evolving understanding of the customer needs.&lt;/p&gt;  &lt;p&gt;How do we know if we Failed or if we Succeeded?&amp;#160; Most of the time a simple “5 Whys” exercise will get us there.&amp;#160; (Sometimes 1 Why might be sufficient!)&amp;#160; Why did you set that goal?&amp;#160; What is the purpose of the exit criteria?&amp;#160; Why did we define requirements in the first place?&amp;#160; If we failed at “the why”, then we failed.&amp;#160; Otherwise, redefine success and take a victory lap!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7414512759580466-648778919767258545?l=blog.softwareontheside.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=fJJRnUP49KA:qgy95IFQrRs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=fJJRnUP49KA:qgy95IFQrRs:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=fJJRnUP49KA:qgy95IFQrRs:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=fJJRnUP49KA:qgy95IFQrRs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=fJJRnUP49KA:qgy95IFQrRs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=fJJRnUP49KA:qgy95IFQrRs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SoftwareOnTheSide/~4/fJJRnUP49KA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.softwareontheside.com/feeds/648778919767258545/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.softwareontheside.com/2010/10/cant-succeed-redefine-success.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/648778919767258545?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/648778919767258545?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoftwareOnTheSide/~3/fJJRnUP49KA/cant-succeed-redefine-success.html" title="Can’t Succeed? Redefine Success" /><author><name>mdclement</name><uri>http://www.blogger.com/profile/07418040981494491081</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.softwareontheside.com/2010/10/cant-succeed-redefine-success.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IHQXk5eCp7ImA9Wx5SFks.&quot;"><id>tag:blogger.com,1999:blog-7414512759580466.post-6896241426737522864</id><published>2010-08-12T19:05:00.001-06:00</published><updated>2010-08-12T19:05:30.720-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-12T19:05:30.720-06:00</app:edited><title>MSBuild Presentation - May 2010 UDNUG Meeting</title><content type="html">&lt;p&gt;This last week while thinking about going to the UDNUG (Utah .NET User Group) meeting this week, I realized that I never posted my notes and such from my MSBuild presentation at the UDNUG in May.&amp;#160; So without further ado, &lt;a href="http://sites.google.com/a/softwareontheside.com/files/msbuild-demo-files"&gt;here are links to the final demo files&lt;/a&gt; and below are my raw notes.&amp;#160; Enjoy!&lt;/p&gt;  &lt;p&gt;Why MSBuild?    &lt;br /&gt;.csproj files are MSBuild files     &lt;br /&gt;MSBuild is distributed with the .NET framework so a VS installation is not required on your build server. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://nant.sourceforge.net/"&gt;NAnt&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Primary alternative is NAnt - was pretty much dead (very little activity in the last 4 years, mostly because it had matured and partly because MSBuild released with VS2005/.NET 2.0)    &lt;br /&gt;Earlier in 2010, .9 version is being worked on (in RC1) which I haven't looked at. &lt;/p&gt;  &lt;p&gt;Another is Ruby/Rake    &lt;br /&gt;I plan on looking into this some at some point as it would be nice to have a first class language, instead of XML configuation.     &lt;br /&gt;info on lostechies.com from Derick Bailey on this topic if you are interested (&lt;a href="http://www.lostechies.com/blogs/derickbailey/archive/2009/04/08/how-a-net-developer-learned-ruby-and-rake-to-build-net-apps-in-windows.aspx"&gt;Derick Bailey on Ruby/Rake&lt;/a&gt;)     &lt;br /&gt;But even this uses MSBuild to build the actual projects, just uses Ruby to do additional work around MSBuild &lt;/p&gt;  &lt;p&gt;While I don't usually use this reason (I have chosen NHibernate over Entity Framework, nUnit over msUnit, etc) the fact that MSBuild is an MS product is useful.&amp;#160; Also it means that your build will be similar to a VS build (but not identical) Also it’s installed wherever the .NET framework is installed.&lt;/p&gt;  &lt;p&gt;Start with the classic &amp;quot;Hello World&amp;quot; demo &lt;/p&gt;  &lt;p&gt;Add Target with Message&lt;/p&gt;  &lt;p&gt;&amp;#160; &amp;lt;Target Name=&amp;quot;Hello&amp;quot;&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Message Text=&amp;quot;Hello Utah .NET User Group&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;/Target&amp;gt; &lt;/p&gt;  &lt;p&gt;Add Another Target &lt;/p&gt;  &lt;p&gt;&amp;#160; &amp;lt;Target Name=&amp;quot;Before Hello&amp;quot;&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Message Text=&amp;quot;Before Hello&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;/Target&amp;gt; &lt;/p&gt;  &lt;p&gt;Now I want Before to run and then Hello. &lt;/p&gt;  &lt;p&gt;Add &amp;quot;Also Before Hello&amp;quot;    &lt;br /&gt;&amp;#160; &amp;lt;Target Name=&amp;quot;Also Before Hello&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Message Text=&amp;quot;Also Before Hello&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;/Target&amp;gt; &lt;/p&gt;  &lt;p&gt;Move Hello to the end    &lt;br /&gt;Note that the first target still runs by default.&amp;#160; Can specify any target to run on the command line. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms164311.aspx"&gt;Command Line Reference on MSDN&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Also can specify the &amp;quot;default target&amp;quot; using &amp;quot;DefaultTargets&amp;quot; (default Hello) &lt;/p&gt;  &lt;p&gt;&amp;#160; &amp;lt;Target Name=&amp;quot;Hello Again&amp;quot;&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Message Text=&amp;quot;Hello Again UDNUG!&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;/Target&amp;gt; &lt;/p&gt;  &lt;p&gt;Add Hello Again to the default targets.&amp;#160; Note that the targets run in order that they are listed. &lt;/p&gt;  &lt;p&gt;Add a depends on target to Hello Again: &lt;/p&gt;  &lt;p&gt;&amp;#160; &amp;lt;Target Name=&amp;quot;Hello Again&amp;quot; DependsOnTargets=&amp;quot;Before Hello&amp;quot;&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Message Text=&amp;quot;Hello Again UDNUG!&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;/Target&amp;gt; &lt;/p&gt;  &lt;p&gt;Run: note that Before Hello ONLY RUNS ONCE.    &lt;br /&gt;the assumption is that you only want to build dependencies once. &lt;/p&gt;  &lt;p&gt;Properties    &lt;br /&gt;&amp;#160; &amp;lt;PropertyGroup&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;MessageFor&amp;gt;Utah .NET User Group (from a Property)&amp;lt;/MessageFor&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;/PropertyGroup&amp;gt; &lt;/p&gt;  &lt;p&gt;&amp;#160; &amp;lt;PropertyGroup&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;MessageFor&amp;gt;Utah .NET User Group (from a Property)&amp;lt;/MessageFor&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Today&amp;gt;$([System.DateTime]::Now)&amp;lt;/Today&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;/PropertyGroup&amp;gt; &lt;/p&gt;  &lt;p&gt;&amp;#160; &amp;lt;Target Name=&amp;quot;HelloProperties&amp;quot;&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Message Text=&amp;quot;Hello $(MessageFor) on $(Today)&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;/Target&amp;gt;     &lt;br /&gt;&amp;#160; There are some property names that are reserved for MSBuild. &lt;/p&gt;  &lt;p&gt;Conditions &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;MessageFor Condition=&amp;quot;$(MF) == 'UDNUG'&amp;quot;&amp;gt;Utah .NET User Group (from a Property)&amp;lt;/MessageFor&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;MessageFor Condition=&amp;quot;$(MF) == 'UCC'&amp;quot;&amp;gt;Utah Code Camp (from a Property)&amp;lt;/MessageFor&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;MessageFor Condition=&amp;quot;$(MF) == ''&amp;quot;&amp;gt;Nobody&amp;lt;/MessageFor&amp;gt; &lt;/p&gt;  &lt;p&gt;Items/Item Groups &lt;/p&gt;  &lt;p&gt;&amp;#160; &amp;lt;ItemGroup&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;SamplePhotos Include=&amp;quot;C:\Users\Public\Pictures\Sample Pictures\*.jpg&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;/ItemGroup&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;Target Name=&amp;quot;Photos&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Message Text=&amp;quot;Photos: %0A%0D@(SamplePhotos, '%0A%0D')&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;/Target&amp;gt; &lt;/p&gt;  &lt;p&gt;Exclude    &lt;br /&gt;&amp;#160; &amp;lt;ItemGroup&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;SamplePhotos Include=&amp;quot;C:\Users\Public\Pictures\Sample Pictures\*.jpg&amp;quot; Exclude=&amp;quot;C:\Users\Public\Pictures\Sample Pictures\*house*&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;/ItemGroup&amp;gt; &lt;/p&gt;  &lt;p&gt;Well known metadata&amp;#160; &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms164313(v=VS.100).aspx"&gt;Well Known Item Metadata on MSDN&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160; &amp;lt;Target Name=&amp;quot;PhotosMeta&amp;quot;&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Message Text=&amp;quot;Photo filename: %(SamplePhotos.Filename)%(SamplePhotos.Extension)&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;/Target&amp;gt; &lt;/p&gt;  &lt;p&gt;Transforms &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Message Text=&amp;quot;Photo filenames: @(SamplePhotos-&amp;gt;'%(Filename)%(Extension)')&amp;quot; /&amp;gt; &lt;/p&gt;  &lt;p&gt;Incremental Builds &lt;/p&gt;  &lt;p&gt;&amp;#160; &amp;lt;Target Name=&amp;quot;Text&amp;quot; Inputs=&amp;quot;@(TextFiles)&amp;quot; Outputs=&amp;quot;@(TextFiles-&amp;gt;'CopyOfTextFiles\%(Filename)%(Extension)')&amp;quot;&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Message Text=&amp;quot;hooray for changeme.txt&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Copy SourceFiles=&amp;quot;@(TextFiles)&amp;quot; DestinationFolder=&amp;quot;CopyOfTextFiles&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;/Target&amp;gt; &lt;/p&gt;  &lt;p&gt;Import &lt;/p&gt;  &lt;p&gt;Move the following to Demo.Extra.proj &lt;/p&gt;  &lt;p&gt;&amp;lt;Project xmlns=&amp;quot;http://schemas.microsoft.com/developer/msbuild/2003&amp;quot; ToolsVersion=&amp;quot;4.0&amp;quot;&amp;gt;    &lt;br /&gt;&amp;#160; &amp;lt;Target Name=&amp;quot;Also Before Hello&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Message Text=&amp;quot;Also Before Hello&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;/Target&amp;gt;     &lt;br /&gt;&amp;lt;/Project&amp;gt; &lt;/p&gt;  &lt;p&gt;&amp;#160; &amp;lt;Import Project=&amp;quot;Demo.Extra.proj&amp;quot;/&amp;gt; &lt;/p&gt;  &lt;p&gt;Run the Hello target to show that it's using the other file too. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/7z253716(v=VS.100).aspx"&gt;Task Reference on MSDN&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;MSBuild Community Tasks    &lt;br /&gt;&lt;a href="http://msbuildtasks.tigris.org/"&gt;http://msbuildtasks.tigris.org/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Show MSBuild.Community.Tasks.Targets    &lt;br /&gt;Show that it is using the UsingTask tag to import all the tasks. &lt;/p&gt;  &lt;p&gt;If you didn't use the MSI (in my case I want to have it xCopy buildable), you need to make sure to set MSBuildCommunityTasksPath so that the imported targets file can find the tasks. &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;SourcePath&amp;gt;$(MSBuildProjectDirectory)&amp;lt;/SourcePath&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;MSBuildCommunityTasksPath Condition=&amp;quot;'$(MSBuildCommunityTasksPath)' == ''&amp;quot;&amp;gt;$(SourcePath)\MSBuildCommunityTasks&amp;lt;/MSBuildCommunityTasksPath&amp;gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Import Project=&amp;quot;$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets&amp;quot; /&amp;gt; &lt;/p&gt;  &lt;p&gt;&amp;#160; &amp;lt;Target Name=&amp;quot;Zip&amp;quot;&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Zip Files=&amp;quot;@(SamplePhotos)&amp;quot;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ZipFileName=&amp;quot;SamplePhotos.zip&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;/Target&amp;gt;     &lt;br /&gt;Actually build a project! &lt;/p&gt;  &lt;p&gt;&amp;#160; &amp;lt;Target Name=&amp;quot;Build&amp;quot;&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;MSBuild Projects=&amp;quot;@(Projects)&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Output TaskParameter=&amp;quot;TargetOutputs&amp;quot; ItemName=&amp;quot;AssembliesBuilt&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/MSBuild&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Message Text=&amp;quot;Built Assemblies: @(AssembliesBuilt)&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Copy SourceFiles=&amp;quot;@(AssembliesBuilt)&amp;quot; DestinationFolder=&amp;quot;.&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;/Target&amp;gt; &lt;/p&gt;  &lt;p&gt;&amp;#160; &amp;lt;ItemGroup&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Projects Include=&amp;quot;C:\Users\Mike\Demos\MSBuildPrototype\MSBuildPrototype\MSBuildPrototype.csproj&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;/ItemGroup&amp;gt; &lt;/p&gt;  &lt;p&gt;New in MSBuild 4.0    &lt;br /&gt;Not a lot of experience here, but there are a few features that look pretty exciting.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd633440(v=VS.100).aspx"&gt;New in MSBuild 4 on MSDN&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd633440(v=VS.100).aspx"&gt;Property Functions&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;String (instance) property functions &lt;/p&gt;  &lt;p&gt;&amp;#160; &amp;lt;Target Name=&amp;quot;String&amp;quot;&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Message Text=&amp;quot;MessageFor Length: $(MessageFor.Length)&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Message Text=&amp;quot;MessageFor First 2: $(Messagefor.Substring(0,2))&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;/Target&amp;gt; &lt;/p&gt;  &lt;p&gt;Static property functions &lt;/p&gt;  &lt;p&gt;Getting the date before is an example of this. &lt;/p&gt;  &lt;p&gt;&amp;#160; &amp;lt;Target Name=&amp;quot;Math&amp;quot;&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Message Text=&amp;quot;Square root of $(Value) = $([System.Math]::Sqrt($(Value)))&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;/Target&amp;gt; &lt;/p&gt;  &lt;p&gt;MSBuild property functions &lt;/p&gt;  &lt;p&gt;&amp;#160; &amp;lt;Target Name=&amp;quot;Add&amp;quot;&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Message Text=&amp;quot;Sum of $(x) and $(y) is $([MSBuild]::Add($(x), $(y)))&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;/Target&amp;gt; &lt;/p&gt;  &lt;p&gt;&amp;#160; Can do x and y on separate /p: or use &amp;quot;&amp;quot; to wrap a ; separated pairs    &lt;br /&gt;RunBeforeTargets and RunAfterTargets &lt;/p&gt;  &lt;p&gt;Modify this: &lt;/p&gt;  &lt;p&gt;&amp;#160; &amp;lt;Target Name=&amp;quot;Math&amp;quot; AfterTargets=&amp;quot;Add&amp;quot; BeforeTargets=&amp;quot;String&amp;quot;&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Message Text=&amp;quot;Square root of $(Value) = $([System.Math]::Sqrt($(Value)))&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;/Target&amp;gt; &lt;/p&gt;  &lt;p&gt;Math runs After Add and Before String when you run either. &lt;/p&gt;  &lt;p&gt;Inline Tasks &lt;/p&gt;  &lt;p&gt;&amp;#160; &amp;lt;UsingTask    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; TaskName=&amp;quot;HelloWorld&amp;quot;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; TaskFactory=&amp;quot;CodeTaskFactory&amp;quot;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; AssemblyFile=&amp;quot;$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll&amp;quot; &amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ParameterGroup /&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Task&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Using Namespace=&amp;quot;System&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Using Namespace=&amp;quot;System.IO&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Code Type=&amp;quot;Fragment&amp;quot; Language=&amp;quot;cs&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;![CDATA[     &lt;br /&gt;// Display &amp;quot;Hello, world!&amp;quot;     &lt;br /&gt;Log.LogError(&amp;quot;Hello, world!&amp;quot;);     &lt;br /&gt;]]&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Code&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Task&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;/UsingTask&amp;gt; &lt;/p&gt;  &lt;p&gt;&amp;#160; &amp;lt;Target Name=&amp;quot;Hello&amp;quot;&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;HelloWorld /&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;/Target&amp;gt;     &lt;br /&gt;Show parameters &lt;/p&gt;  &lt;p&gt;&amp;#160; &amp;lt;UsingTask    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; TaskName=&amp;quot;HelloWorld&amp;quot;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; TaskFactory=&amp;quot;CodeTaskFactory&amp;quot;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; AssemblyFile=&amp;quot;$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll&amp;quot; &amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ParameterGroup&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Value ParameterType=&amp;quot;System.Int32&amp;quot; Required=&amp;quot;true&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/ParameterGroup&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Task&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Using Namespace=&amp;quot;System&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Using Namespace=&amp;quot;System.IO&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Code Type=&amp;quot;Fragment&amp;quot; Language=&amp;quot;cs&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;![CDATA[     &lt;br /&gt;// Display &amp;quot;Hello, world!&amp;quot;     &lt;br /&gt;Console.WriteLine(&amp;quot;hello&amp;quot;);     &lt;br /&gt;Console.WriteLine(Value * Value);     &lt;br /&gt;//Log.LogError(&amp;quot;Hello, world!&amp;quot;);     &lt;br /&gt;]]&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Code&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Task&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;/UsingTask&amp;gt; &lt;/p&gt;  &lt;p&gt;&amp;#160; &amp;lt;Target Name=&amp;quot;Hello&amp;quot;&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;HelloWorld Value=&amp;quot;4&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;/Target&amp;gt; &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7414512759580466-6896241426737522864?l=blog.softwareontheside.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=JoxFd69wAhI:eS7kZSwfjYo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=JoxFd69wAhI:eS7kZSwfjYo:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=JoxFd69wAhI:eS7kZSwfjYo:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=JoxFd69wAhI:eS7kZSwfjYo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=JoxFd69wAhI:eS7kZSwfjYo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=JoxFd69wAhI:eS7kZSwfjYo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SoftwareOnTheSide/~4/JoxFd69wAhI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.softwareontheside.com/feeds/6896241426737522864/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.softwareontheside.com/2010/08/msbuild-presentation-may-2010-udnug.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/6896241426737522864?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/6896241426737522864?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoftwareOnTheSide/~3/JoxFd69wAhI/msbuild-presentation-may-2010-udnug.html" title="MSBuild Presentation - May 2010 UDNUG Meeting" /><author><name>mdclement</name><uri>http://www.blogger.com/profile/07418040981494491081</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.softwareontheside.com/2010/08/msbuild-presentation-may-2010-udnug.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8FQ3s-eip7ImA9WxFSEk8.&quot;"><id>tag:blogger.com,1999:blog-7414512759580466.post-1958986901236755662</id><published>2010-04-13T23:43:00.001-06:00</published><updated>2010-04-13T23:43:32.552-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-13T23:43:32.552-06:00</app:edited><title>Anger isn’t good for anybody</title><content type="html">&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_NUmGD_kY-iU/S8VWAOTX-NI/AAAAAAAAG2M/vwvwhWjQP8I/s1600-h/370801205_efe0fa8d7d%5B1%5D%5B4%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 10px; display: inline; border-top: 0px; border-right: 0px" title="370801205_efe0fa8d7d[1]" border="0" alt="370801205_efe0fa8d7d[1]" align="right" src="http://lh4.ggpht.com/_NUmGD_kY-iU/S8VWA1Bv7TI/AAAAAAAAG2Q/2ax_Xh7gaZw/370801205_efe0fa8d7d%5B1%5D_thumb%5B13%5D.jpg?imgmax=800" width="186" height="244" /&gt;&lt;/a&gt; I had a weird sort of realization recently about some anger that I’ve been carrying around for some time now.&amp;#160; Up until that moment of realization, I had seen myself and completely justified in my anger.&amp;#160; It has become such a good comforting friend over the past few months that I almost feel threatened at the thought that I should lay it down and walk away.&lt;/p&gt;  &lt;p&gt;I’m not saying that I suddenly believed that my anger was not justified.&amp;#160; I still think that I had a right to be angry… but I think that my license expired months ago.&amp;#160; I need to let it go and move on.&amp;#160; Anger isn’t good for anybody, not for the person on the receiving end of the anger and even worse for the person that is carrying the anger around.&amp;#160; I know this, but it’s often hard to see what’s right in front of your face or, in this case, in the mirror.&lt;/p&gt;  &lt;p&gt;I do remember reaching a point a few months ago where I was tired of carrying it around before and wanted to let it go because it was weighing me down.&amp;#160; But I don’t think that I saw it in the same way as I do now.&amp;#160; Then I was just tired, I didn’t worry about it anymore.&amp;#160; But now I see it as a personal failure that I have not been able to let it go and spend effort on more important things.&amp;#160; So much wasted energy!&amp;#160; For what!?!&lt;/p&gt;  &lt;p&gt;Now, I know that I can’t magically make things all better (&lt;a href="http://www.amazon.com/gp/product/0140286438?ie=UTF8&amp;amp;tag=clemhome-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0140286438" target="_blank"&gt;nor should I have to&lt;/a&gt;), but I need to do something to heal myself.&amp;#160; I must work to consciously not pick up the anger again.&amp;#160; I need to put down the anger and walk away because it’s sapping my strength, and I need that energy for more important things.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7414512759580466-1958986901236755662?l=blog.softwareontheside.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=3UU2cIj5PvI:1cSpAwUnIAQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=3UU2cIj5PvI:1cSpAwUnIAQ:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=3UU2cIj5PvI:1cSpAwUnIAQ:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=3UU2cIj5PvI:1cSpAwUnIAQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=3UU2cIj5PvI:1cSpAwUnIAQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=3UU2cIj5PvI:1cSpAwUnIAQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SoftwareOnTheSide/~4/3UU2cIj5PvI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.softwareontheside.com/feeds/1958986901236755662/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.softwareontheside.com/2010/04/anger-isnt-good-for-anybody.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/1958986901236755662?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/1958986901236755662?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoftwareOnTheSide/~3/3UU2cIj5PvI/anger-isnt-good-for-anybody.html" title="Anger isn’t good for anybody" /><author><name>mdclement</name><uri>http://www.blogger.com/profile/07418040981494491081</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_NUmGD_kY-iU/S8VWA1Bv7TI/AAAAAAAAG2Q/2ax_Xh7gaZw/s72-c/370801205_efe0fa8d7d%5B1%5D_thumb%5B13%5D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.softwareontheside.com/2010/04/anger-isnt-good-for-anybody.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUMRHozeyp7ImA9WxFTFkw.&quot;"><id>tag:blogger.com,1999:blog-7414512759580466.post-2388797091635153645</id><published>2010-04-06T23:29:00.001-06:00</published><updated>2010-04-06T23:31:25.483-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-06T23:31:25.483-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="does not equal" /><title>Movement != Momentum</title><content type="html">&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_NUmGD_kY-iU/S7wYKxe6LVI/AAAAAAAAG0E/bfIHs9vSDZY/s1600-h/Free_Body_Diagram%5B1%5D%5B6%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 10px 10px; display: inline; border-top: 0px; border-right: 0px" title="Free_Body_Diagram[1]" border="0" alt="Free_Body_Diagram[1]" align="right" src="http://lh4.ggpht.com/_NUmGD_kY-iU/S7wYLjFZWFI/AAAAAAAAG0I/tNN1m2B_xYQ/Free_Body_Diagram%5B1%5D_thumb%5B4%5D.png?imgmax=800" width="148" height="334" /&gt;&lt;/a&gt; Momentum is an interesting thing.&amp;#160; One of those cheesy “motivational” posters states “Momentum: It is not of importance where we stand but in what direction we are moving”.&amp;#160; Cheesy?&amp;#160; Yes.&amp;#160; Partly true?&amp;#160; Sure.&lt;/p&gt;  &lt;p&gt;The problem is that &lt;strong&gt;movement &lt;/strong&gt;can cause the illusion of &lt;strong&gt;momentum&lt;/strong&gt;.&amp;#160; Let’s do a little physics refresher.&amp;#160; The equation for momentum is:&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://lh6.ggpht.com/_NUmGD_kY-iU/S7wYMMx56OI/AAAAAAAAG0c/Uo47KKZnFG0/s1600-h/3ea3a8aa0ef4effab31458e4ed86fb87%5B1%5D%5B8%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="3ea3a8aa0ef4effab31458e4ed86fb87[1]" border="0" alt="3ea3a8aa0ef4effab31458e4ed86fb87[1]" src="http://lh4.ggpht.com/_NUmGD_kY-iU/S7wYMXFCDXI/AAAAAAAAG0g/ANkXPP2jWIc/3ea3a8aa0ef4effab31458e4ed86fb87%5B1%5D_thumb%5B6%5D.png?imgmax=800" width="88" height="20" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;p = momentum&lt;/li&gt;    &lt;li&gt;m = mass&lt;/li&gt;    &lt;li&gt;v = velocity&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;If you have friction, you might be able to exert enough force to overcome that friction and move for a brief period of time, but as soon as that force is removed, the counterforce of friction quickly slows things to a stop.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_NUmGD_kY-iU/S7wYM80fXLI/AAAAAAAAG0U/H84yq9F7kpU/s1600-h/63969933_0c1e556fcd_m%5B1%5D%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="63969933_0c1e556fcd_m[1]" border="0" alt="63969933_0c1e556fcd_m[1]" align="left" src="http://lh3.ggpht.com/_NUmGD_kY-iU/S7wYNkgU2rI/AAAAAAAAG0Y/4zT_RdGIm8Q/63969933_0c1e556fcd_m%5B1%5D_thumb%5B1%5D.jpg?imgmax=800" width="244" height="186" /&gt;&lt;/a&gt;This stop and start movement does not equate with momentum. In terms of your life or team, if you have momentum, one change can trigger another change, can trigger another change, like an avalanche.&amp;#160; Working to get some movement is important, but do not mistake it for momentum.&amp;#160; To get momentum, you need to increase force or reduce friction.&amp;#160; Probably you’ll need both!&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Stop and start movement can yield positive results, but it requires too much effort and is not sustainable.&amp;#160; Getting “the big Mo” (as &lt;a href="http://www.imdb.com/character/ch0018956/" target="_blank"&gt;Josh Lyman&lt;/a&gt; calls it) is very important to any effort.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7414512759580466-2388797091635153645?l=blog.softwareontheside.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=KHZMxw3lwEs:KMTEQbsxbO8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=KHZMxw3lwEs:KMTEQbsxbO8:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=KHZMxw3lwEs:KMTEQbsxbO8:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=KHZMxw3lwEs:KMTEQbsxbO8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=KHZMxw3lwEs:KMTEQbsxbO8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=KHZMxw3lwEs:KMTEQbsxbO8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SoftwareOnTheSide/~4/KHZMxw3lwEs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.softwareontheside.com/feeds/2388797091635153645/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.softwareontheside.com/2010/04/movement-momentum.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/2388797091635153645?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/2388797091635153645?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoftwareOnTheSide/~3/KHZMxw3lwEs/movement-momentum.html" title="Movement != Momentum" /><author><name>mdclement</name><uri>http://www.blogger.com/profile/07418040981494491081</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_NUmGD_kY-iU/S7wYLjFZWFI/AAAAAAAAG0I/tNN1m2B_xYQ/s72-c/Free_Body_Diagram%5B1%5D_thumb%5B4%5D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.softwareontheside.com/2010/04/movement-momentum.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QDRXg6eCp7ImA9WxFTE0w.&quot;"><id>tag:blogger.com,1999:blog-7414512759580466.post-7335524717037926137</id><published>2010-04-03T11:22:00.001-06:00</published><updated>2010-04-03T11:22:54.610-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-03T11:22:54.610-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="does not equal" /><title>Impractical != Impossible</title><content type="html">&lt;p&gt;&lt;a href="http://www.flickr.com/photos/wonderlane/2316418326/" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 10px 10px; display: inline; border-top: 0px; border-right: 0px" title="2316418326_a243fddbc2[1]" border="0" alt="2316418326_a243fddbc2[1]" align="right" src="http://lh3.ggpht.com/_NUmGD_kY-iU/S7d5bHXzhNI/AAAAAAAAGy4/Lrts7PbXbZg/2316418326_a243fddbc2%5B1%5D%5B4%5D.jpg?imgmax=800" width="164" height="244" /&gt;&lt;/a&gt; Recently at &lt;a href="utahcodecamp.com/"&gt;Utah Code Camp&lt;/a&gt;, I got into a conversation about which solution should be used to solve a problem (given that there are multiple solutions… and there normally are).&amp;#160; Somebody (yeah, I didn’t get his name… my bad) mentioned that he had a boss that always looked for the “third best” solution.&amp;#160; This was based on the assumption that 1) the “first best” solution was “impossible” and 2) the “second best” solution was too expensive.&amp;#160; That was supposed to make the “third best” solution the “best” solution.&lt;/p&gt;  &lt;p&gt;Well, somebody else commented that an “impossible” solution wasn’t really a solution and I agree!&amp;#160; What he really meant (after some additional explanation) was that it was impractical as he commented that it might be a viable solution in a few years.&amp;#160; Things that seemed impossible only a few years ago are common!&amp;#160; &lt;/p&gt;  &lt;p&gt;Think about some examples:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Imagine telling someone a few years ago with dialup about streaming high definition video.&amp;#160; Impossible!&lt;/li&gt;    &lt;li&gt;Imagine telling someone in the era of tube TVs about high definition flat panel displays.&amp;#160; Impossible!&lt;/li&gt;    &lt;li&gt;Imagine telling someone in era of computers that filled rooms that you would one day have a gigahertz processor and gigabytes of storage in your pocket.&amp;#160; Impossible!&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;To me this emphasizes the fact that we should be careful how we use absolute terms such as “impossible” or “never” or even “always”.&amp;#160; Using these terms can limit your credibility as it takes only ONE counterexample for you to be proven wrong.&amp;#160; Use them with care!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7414512759580466-7335524717037926137?l=blog.softwareontheside.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=ztj11rSARwQ:n4dSS4sd-OY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=ztj11rSARwQ:n4dSS4sd-OY:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=ztj11rSARwQ:n4dSS4sd-OY:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=ztj11rSARwQ:n4dSS4sd-OY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=ztj11rSARwQ:n4dSS4sd-OY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=ztj11rSARwQ:n4dSS4sd-OY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SoftwareOnTheSide/~4/ztj11rSARwQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.softwareontheside.com/feeds/7335524717037926137/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.softwareontheside.com/2010/04/impractical-impossible.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/7335524717037926137?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/7335524717037926137?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoftwareOnTheSide/~3/ztj11rSARwQ/impractical-impossible.html" title="Impractical != Impossible" /><author><name>mdclement</name><uri>http://www.blogger.com/profile/07418040981494491081</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_NUmGD_kY-iU/S7d5bHXzhNI/AAAAAAAAGy4/Lrts7PbXbZg/s72-c/2316418326_a243fddbc2%5B1%5D%5B4%5D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.softwareontheside.com/2010/04/impractical-impossible.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EESXoyeip7ImA9WxBbGEQ.&quot;"><id>tag:blogger.com,1999:blog-7414512759580466.post-4734774117189485961</id><published>2010-03-18T02:06:00.001-06:00</published><updated>2010-03-18T02:06:48.492-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-18T02:06:48.492-06:00</app:edited><title>Featured on Management 3.0</title><content type="html">&lt;p&gt;I recently had my first guest post and was featured on the &lt;a href="http://www.management30.com/"&gt;new Management 3.0 site&lt;/a&gt; that is being run by Jurgen Appelo of &lt;a href="http://www.noop.nl/"&gt;http://www.noop.nl/&lt;/a&gt; fame.&amp;#160; It’s my post on &lt;a href="http://www.management30.com/profiles/blogs/absentee-management"&gt;Absentee Management, check it out!&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7414512759580466-4734774117189485961?l=blog.softwareontheside.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=sH48bd6RK4U:u7Ux__n5vvY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=sH48bd6RK4U:u7Ux__n5vvY:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=sH48bd6RK4U:u7Ux__n5vvY:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=sH48bd6RK4U:u7Ux__n5vvY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=sH48bd6RK4U:u7Ux__n5vvY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=sH48bd6RK4U:u7Ux__n5vvY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SoftwareOnTheSide/~4/sH48bd6RK4U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.softwareontheside.com/feeds/4734774117189485961/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.softwareontheside.com/2010/03/featured-on-management-30.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/4734774117189485961?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/4734774117189485961?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoftwareOnTheSide/~3/sH48bd6RK4U/featured-on-management-30.html" title="Featured on Management 3.0" /><author><name>mdclement</name><uri>http://www.blogger.com/profile/07418040981494491081</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.softwareontheside.com/2010/03/featured-on-management-30.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYCQ344fCp7ImA9WxBVFk0.&quot;"><id>tag:blogger.com,1999:blog-7414512759580466.post-3935722446354723803</id><published>2010-02-19T10:22:00.001-07:00</published><updated>2010-02-19T10:22:42.034-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-19T10:22:42.034-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Books" /><title>Recommended Reading</title><content type="html">&lt;p&gt;I’ve been wanting to put together a recommended reading list for some time now, so I guess I’m going to not &lt;a href="http://blog.softwareontheside.com/2010/02/good-vs-great-better-vs-best.html"&gt;let “best” be the enemy of “better”&lt;/a&gt; and just do it.&amp;#160; I have added a small link to it below the “about me” side bar (which I will work on making more prominent soon… need to clean up the sidebars at some point).&lt;/p&gt;  &lt;p&gt;Or you can &lt;a href="http://blog.softwareontheside.com/p/books.html"&gt;use this link to view my recommended reading list&lt;/a&gt;.&amp;#160;&amp;#160; None should be a terrible surprise if you’ve read any of my posts.&amp;#160; I’ll go back and elaborate on them more in the future (give my reasons and analysis) as well as expand (and possibly contract) the list.&amp;#160; Enjoy!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7414512759580466-3935722446354723803?l=blog.softwareontheside.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=Uh5fa8TxFiU:Yt2RVx2bNpQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=Uh5fa8TxFiU:Yt2RVx2bNpQ:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=Uh5fa8TxFiU:Yt2RVx2bNpQ:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=Uh5fa8TxFiU:Yt2RVx2bNpQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=Uh5fa8TxFiU:Yt2RVx2bNpQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=Uh5fa8TxFiU:Yt2RVx2bNpQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SoftwareOnTheSide/~4/Uh5fa8TxFiU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.softwareontheside.com/feeds/3935722446354723803/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.softwareontheside.com/2010/02/recommended-reading.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/3935722446354723803?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/3935722446354723803?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoftwareOnTheSide/~3/Uh5fa8TxFiU/recommended-reading.html" title="Recommended Reading" /><author><name>mdclement</name><uri>http://www.blogger.com/profile/07418040981494491081</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.softwareontheside.com/2010/02/recommended-reading.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4BRnk-eSp7ImA9WxBVFUQ.&quot;"><id>tag:blogger.com,1999:blog-7414512759580466.post-1396857506442610482</id><published>2010-02-19T09:45:00.001-07:00</published><updated>2010-02-19T09:45:57.751-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-19T09:45:57.751-07:00</app:edited><title>Good vs. Great; Better vs. Best</title><content type="html">&lt;p&gt;In &lt;a href="http://www.amazon.com/gp/product/0066620996?ie=UTF8&amp;amp;tag=clemhome-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0066620996"&gt;Good to Great&lt;/a&gt;, Jim Collins states that “good is the enemy of great.”&amp;#160; In &lt;a href="http://www.amazon.com/gp/product/0131177052?ie=UTF8&amp;amp;tag=clemhome-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0131177052"&gt;Working Effectively with Legacy Code&lt;/a&gt;, Michael Feathers states that “we can’t let ‘best’ be the enemy of ‘better’”.&lt;/p&gt;  &lt;p&gt;On the surface these seem contradictory, but I would argue that they are, in fact, complementary.&amp;#160; I have been very much guilty at times of getting “analysis paralysis”, being overly concerned with the “right answer” or the “right way”.&amp;#160; In that case, where you have nothing, &lt;strong&gt;doing something is better than doing nothing&lt;/strong&gt;.&amp;#160; At the very least, doing something, even if it’s wrong, gives you feedback that it’s wrong and you can move on.&amp;#160; The trick is to do something that is low risk.&amp;#160; The smaller your something is, the faster you can get feedback and adjust.&lt;/p&gt;  &lt;p&gt;This goes with the “release early” philosophy of agile.&amp;#160; The other part of that philosophy is “and iterate” which is important as well.&amp;#160; Getting something done allows you to take it and improve it.&amp;#160; Having something concrete via quick prototyping or tracer bullets and iterating can get you there faster than waiting for the “right way” to become apparent.&amp;#160; If we always think “I don’t have time to make it perfect so I won’t do anything” we will never do anything.&amp;#160; “Best” becomes the enemy of “better.”&amp;#160; Martin Fowler said as much:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;When you actually sit down to write some code, you learn things that you didn’t get from thinking about them in modeling terms. There is a feedback process there that you can only really get at from executing some things and seeing what works.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Once we get something good enough, the problem then becomes the attitude that “I don’t think it’s worth the effort to improve it, it’s good enough.”&amp;#160; And here is where “good is the enemy of great.”&amp;#160; The problem becomes when everything is humming along “well enough” that we become complacent.&amp;#160; That is until something shakes things up.&amp;#160; Like when the weight of defects reported become overwhelming because the code was not kept clean and non-legacy (no automated tests).&amp;#160; Or when an economic downturn hits and you realize that you didn’t take the opportunity during the “good years” to fine tune things or expand and improve and are now faced with tough decisions.&lt;/p&gt;  &lt;p&gt;We need to be constantly improving (in code, in business and life), not settling for good, striving for great, but not so worried about best that we don’t pursue better.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7414512759580466-1396857506442610482?l=blog.softwareontheside.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=F9XtZ6QK_Og:imbRp5sqz_g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=F9XtZ6QK_Og:imbRp5sqz_g:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=F9XtZ6QK_Og:imbRp5sqz_g:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=F9XtZ6QK_Og:imbRp5sqz_g:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=F9XtZ6QK_Og:imbRp5sqz_g:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=F9XtZ6QK_Og:imbRp5sqz_g:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SoftwareOnTheSide/~4/F9XtZ6QK_Og" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.softwareontheside.com/feeds/1396857506442610482/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.softwareontheside.com/2010/02/good-vs-great-better-vs-best.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/1396857506442610482?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/1396857506442610482?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoftwareOnTheSide/~3/F9XtZ6QK_Og/good-vs-great-better-vs-best.html" title="Good vs. Great; Better vs. Best" /><author><name>mdclement</name><uri>http://www.blogger.com/profile/07418040981494491081</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.softwareontheside.com/2010/02/good-vs-great-better-vs-best.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcAQH47fCp7ImA9WxBWFEw.&quot;"><id>tag:blogger.com,1999:blog-7414512759580466.post-1733666505320867915</id><published>2010-02-05T16:20:00.001-07:00</published><updated>2010-02-05T16:20:41.004-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-05T16:20:41.004-07:00</app:edited><title>Absentee Management</title><content type="html">&lt;p&gt;I heard the report “&lt;a href="http://www.npr.org/templates/story/story.php?storyId=123363172"&gt;3 Weeks After Quake, Shelter A Main Concern in Haiti&lt;/a&gt;” on NPR recently.&amp;#160; It made me quite sad to hear about all the people that want to help (from inside and outside Haiti) and those that want to get started with rebuilding their lives, but are unable to do so with any sort of efficiency because of a lack of any sort of management direction (from the government of Haiti or the UN or anybody).&lt;/p&gt;  &lt;p&gt;If you don’t have time to listen to the report (only about 4 minutes long), some of the phrases in there are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Some feel that they “should be focused on a longer term solution” &lt;/li&gt;    &lt;li&gt;Some reconstruction is taking place but “not under any sort of coordinated plan” &lt;/li&gt;    &lt;li&gt;Some are working on their own but it “can be quite dangerous” &lt;/li&gt;    &lt;li&gt;The government is “working toward a plan, discussions taking place” &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;“Discussions taking place”?&amp;#160; One of my favorite phrases lately has been “talk does not cook rice”.&amp;#160; In this case, talk does not save lives or rebuild a country.&lt;/p&gt;  &lt;p&gt;So what does this have to do with software development?&amp;#160; In agile we often talk about “self-organizing teams”.&amp;#160; Often we talk about “getting out of the way of the team”.&amp;#160; &lt;strong&gt;This does not mean that management has no role in agile.&lt;/strong&gt;&amp;#160; In fact I would argue that management’s role is even more important!&amp;#160; At the very least managers are responsible for:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;giving parameters for the work to be done (may be in the form of backlog, a product vision), &lt;/li&gt;    &lt;li&gt;providing necessary resources to the team (monetary or people) and &lt;/li&gt;    &lt;li&gt;removing the team’s impediments (make sure the team isn’t stuck).&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;This means that they should be doing, not talking.&amp;#160; Mapping out a course, not just discussing it.&amp;#160; Figuring out which way to point the team next and getting them the resources to get there.&amp;#160; Otherwise the teams will start taking things into their own hands and that “can be quite dangerous.”&amp;#160; At the very least it will result in wasted effort.&amp;#160; &lt;/p&gt;  &lt;p&gt;Even in an extreme case like &lt;a href="http://blog.businessofsoftware.org/2010/02/what-will-happen-when-a-software-company-downs-tools-for-a-week.html"&gt;Red Gate’s “Down Tools” experiment&lt;/a&gt; (which I’m curious to see what the results are) you can see these elements:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;“&lt;em&gt;The only aim is to create something relevant to Red Gate that you wouldn’t have created otherwise.&lt;/em&gt;” – but there is a clearly stated aim and “&lt;em&gt;The only rule is that you have to complete something by Thursday lunchtime.&lt;/em&gt;”&lt;/li&gt;    &lt;li&gt;“&lt;em&gt;Each team will have a discretionary budget of £500 for hardware / software / other stuff we don't already have in the building&lt;/em&gt;” – while this may not be enough for a super ambitious project, it should be more than enough for 4 days and it does set some parameters.&amp;#160; Most importantly it says “we’re behind this… with our pocketbook”&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;A team that is trying to self-organize without management’s direction and help is going to fail almost by definition as they won’t know what to look for in success.&amp;#160; Obviously the stakes for the people of Haiti is much higher, as in many cases we are talking about survival, not just another software project.&amp;#160; But just like the people of Haiti, if a development team has no direction, no resources and no help with impediments, the journey will continue to be bumpy.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7414512759580466-1733666505320867915?l=blog.softwareontheside.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=v57hNVnU07U:53tb4WRv-hI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=v57hNVnU07U:53tb4WRv-hI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=v57hNVnU07U:53tb4WRv-hI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=v57hNVnU07U:53tb4WRv-hI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=v57hNVnU07U:53tb4WRv-hI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=v57hNVnU07U:53tb4WRv-hI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SoftwareOnTheSide/~4/v57hNVnU07U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.softwareontheside.com/feeds/1733666505320867915/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.softwareontheside.com/2010/02/absentee-management.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/1733666505320867915?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/1733666505320867915?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoftwareOnTheSide/~3/v57hNVnU07U/absentee-management.html" title="Absentee Management" /><author><name>mdclement</name><uri>http://www.blogger.com/profile/07418040981494491081</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.softwareontheside.com/2010/02/absentee-management.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4NRHc7cCp7ImA9WxBWEk8.&quot;"><id>tag:blogger.com,1999:blog-7414512759580466.post-6982188641413916574</id><published>2010-02-03T13:29:00.001-07:00</published><updated>2010-02-03T13:29:55.908-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-03T13:29:55.908-07:00</app:edited><title>Blame tied to Responsibility</title><content type="html">&lt;p&gt;When code with a major defect is released to the customer, who’s fault is it?&amp;#160; Who do we blame?&amp;#160; Scott Bellware just posted basically saying &lt;a href="http://blog.scottbellware.com/2010/02/qa-missed-something.html"&gt;“it’s not the tester’s fault”.&lt;/a&gt;&amp;#160; I think it’s fair enough to say that the “QA missed something” syndrome is not healthy, but neither is “there's nothing that QA has ever missed that developers didn't miss first”.&amp;#160; The problem with the argument that “It's less of a tester's job to check that a developers' code is right, but that their tests are right” also implies that the tester didn’t “do their job” because they didn’t find the holes in the tests that lead to the defect not being caught and therefore, released.&lt;/p&gt;  &lt;p&gt;This finger pointing usually happens in organizations where “QA” is the “gatekeeper”.&amp;#160; Sometimes that is the role that the organization has given them or the one that they have set up for themselves.&amp;#160; Either way they have implicitly set themselves up as being blamed for any defects that are released.&amp;#160; Is that fair?&amp;#160; Maybe not, but you can’t have it both ways.&amp;#160; You can’t simultaneously be responsible for it and not get the blame.&lt;/p&gt;  &lt;p&gt;Of course this is coming from a programmer. So what’s my point?&lt;/p&gt;  &lt;p&gt;The attitude on an agile team should be &lt;strong&gt;the team missed something&lt;/strong&gt;.&amp;#160; And in an agile organization, “the whole organization missed something.”&amp;#160; To pin responsibility for any particular failure on any one particular individual or role in an agile team is to absolve the other members of the team from responsibility for success or failure of the team.&amp;#160; The attitude becomes, “if QA is responsible, I can’t get blamed.”&amp;#160; Or conversely “if the programmer is responsible, I (the tester) can’t be blamed.”&amp;#160; Take away the “safety net of blame” and attitudes change… but more on that in the future.&lt;/p&gt;  &lt;p&gt;So when a defect is released, who failed?&amp;#160; The programmer failed, the analyst failed, the tester failed, the user during UAT failed.&amp;#160; In reality the whole team failed, agile or not.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7414512759580466-6982188641413916574?l=blog.softwareontheside.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=f_1UzigNkSs:MiwVX8YGTt0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=f_1UzigNkSs:MiwVX8YGTt0:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=f_1UzigNkSs:MiwVX8YGTt0:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=f_1UzigNkSs:MiwVX8YGTt0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=f_1UzigNkSs:MiwVX8YGTt0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=f_1UzigNkSs:MiwVX8YGTt0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SoftwareOnTheSide/~4/f_1UzigNkSs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.softwareontheside.com/feeds/6982188641413916574/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.softwareontheside.com/2010/02/blame-tied-to-responsibility.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/6982188641413916574?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/6982188641413916574?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoftwareOnTheSide/~3/f_1UzigNkSs/blame-tied-to-responsibility.html" title="Blame tied to Responsibility" /><author><name>mdclement</name><uri>http://www.blogger.com/profile/07418040981494491081</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.softwareontheside.com/2010/02/blame-tied-to-responsibility.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MGSHc5eSp7ImA9WxBXFU8.&quot;"><id>tag:blogger.com,1999:blog-7414512759580466.post-7666056114135265493</id><published>2010-01-26T10:03:00.001-07:00</published><updated>2010-01-26T10:03:49.921-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-26T10:03:49.921-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="The West Wing" /><category scheme="http://www.blogger.com/atom/ns#" term="The Right Thing" /><title>Good Grief Charlie Brown</title><content type="html">&lt;p&gt;If you are familiar at all with the Peanuts comic strip, you’ve seen this frame in various forms over and over again…&lt;/p&gt;  &lt;p&gt;&lt;img src="http://cinie.files.wordpress.com/2009/09/1107charlie_brown_lucy_football1.jpg" /&gt;&lt;/p&gt;  &lt;p&gt;This situation was described aptly in &lt;a href="http://www.amazon.com/gp/product/B000KZNBII?ie=UTF8&amp;amp;tag=clemhome-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B000KZNBII"&gt;The West Wing episode “The Drop In”&lt;/a&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;quot;You are the Charlie Brown of missile defense. The Pentagon is Lucy.&amp;quot; &lt;i&gt;When Leo says he doesn't read the comics, the President explains,&lt;/i&gt; &amp;quot;Charlie Brown wanted to kick a football and Lucy would hold it except that she'd pull it away at the last minute and Charlie Brown would fall on his butt. . . . Each time Lucy would find a way to convince Charlie Brown that this time she wouldn't pull the ball away, but she would and once again Charlie Brown would fall on his butt.&amp;quot; &lt;i&gt;As the President predicted, Leo's high hopes are dashed, and the President tells him,&lt;/i&gt; &amp;quot;By the way, the words you're looking for are, 'Oh, Good Grief.'&amp;quot;&lt;/p&gt;    &lt;p&gt;(summary provided by &lt;a href="http://westwing.bewarne.com/second/34dropin.html"&gt;http://westwing.bewarne.com/second/34dropin.html&lt;/a&gt;)&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;So is Charlie Brown right to continue to trust Lucy or is he unable to learn from his mistakes?&lt;/p&gt;  &lt;p&gt;A friend recently posted &lt;a href="http://humanresourcemusings.blogspot.com/2010/01/cynicism-professionalism.html"&gt;Cynicism &amp;amp; Professionalism&lt;/a&gt; which this is a kinda sorta response to.&amp;#160; Here is a partial quote of my comment that I posted there:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;But I think it's always useful to keep in mind that most people are mostly trying to do the right thing most of the time.     &lt;br /&gt;Whether or not people's intent and their results end up in the same place or not, well that's another story (says the cynic ;) )&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;While “past performance is not an indicator of future results”, I think that we are unwise to ignore past experiences in formulating our response to the future.&amp;#160; Forgiveness is important.&amp;#160; Giving someone the benefit of the doubt is important.&amp;#160; Trusting that people’s intent is generally good is important.&amp;#160; But the lesson I get from Charlie Brown and Lucy is &lt;a href="http://en.wikipedia.org/wiki/George_Santayana"&gt;&amp;quot;Those who cannot remember the past are condemned to repeat it.&amp;quot;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Sometimes you need to leave Lucy there holding the ball so that you’re not left saying “Oh, Good Grief.”&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7414512759580466-7666056114135265493?l=blog.softwareontheside.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=DFo0XJkTxtw:7U2PVFi4u6Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=DFo0XJkTxtw:7U2PVFi4u6Y:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=DFo0XJkTxtw:7U2PVFi4u6Y:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=DFo0XJkTxtw:7U2PVFi4u6Y:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=DFo0XJkTxtw:7U2PVFi4u6Y:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=DFo0XJkTxtw:7U2PVFi4u6Y:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SoftwareOnTheSide/~4/DFo0XJkTxtw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.softwareontheside.com/feeds/7666056114135265493/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.softwareontheside.com/2010/01/good-grief-charlie-brown.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/7666056114135265493?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/7666056114135265493?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoftwareOnTheSide/~3/DFo0XJkTxtw/good-grief-charlie-brown.html" title="Good Grief Charlie Brown" /><author><name>mdclement</name><uri>http://www.blogger.com/profile/07418040981494491081</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.softwareontheside.com/2010/01/good-grief-charlie-brown.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0INR38zeCp7ImA9WxJUEkg.&quot;"><id>tag:blogger.com,1999:blog-7414512759580466.post-935189246585312156</id><published>2009-07-10T08:42:00.001-06:00</published><updated>2009-07-10T12:46:36.180-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-10T12:46:36.180-06:00</app:edited><title>Programmers’ Mecca</title><content type="html">&lt;p&gt;Other than big sites like Microsoft and Google, this has to be the ultimate programmers’ Mecca…&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="320" height="240"&gt; &lt;param name="source" value="http://channel9.msdn.com/App_Themes/default/vp09_06_22.xap" /&gt; &lt;param name="initParams" value="m=mms://mschnlnine.wmod.llnwd.net/a1809/d1/ch9/6/1/7/5/6/4/HanselminutesOn9TourOfFogCreek_s_ch9.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://mschnlnine.vo.llnwd.net/d1/ch9/6/1/7/5/6/4/HanselminutesOn9TourOfFogCreek_large_ch9.png, postid=465716" /&gt; &lt;param name="background" value="#00FFFFFF" /&gt; &lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"&gt; &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none" /&gt; &lt;/a&gt; &lt;/object&gt;&lt;/p&gt;  &lt;p&gt;(note: if you’re in a feed reader, you might need to &lt;a href="http://blog.softwareontheside.com/2009/07/programmers-mecca.html"&gt;go to the site&lt;/a&gt; to see the video)&lt;/p&gt;  &lt;p&gt;Wipe the drool… and control the envy…&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7414512759580466-935189246585312156?l=blog.softwareontheside.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=1zaAPf1F8mc:3V35Atd99YU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=1zaAPf1F8mc:3V35Atd99YU:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=1zaAPf1F8mc:3V35Atd99YU:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=1zaAPf1F8mc:3V35Atd99YU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=1zaAPf1F8mc:3V35Atd99YU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=1zaAPf1F8mc:3V35Atd99YU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SoftwareOnTheSide/~4/1zaAPf1F8mc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.softwareontheside.com/feeds/935189246585312156/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.softwareontheside.com/2009/07/programmers-mecca.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/935189246585312156?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/935189246585312156?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoftwareOnTheSide/~3/1zaAPf1F8mc/programmers-mecca.html" title="Programmers’ Mecca" /><author><name>mdclement</name><uri>http://www.blogger.com/profile/07418040981494491081</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.softwareontheside.com/2009/07/programmers-mecca.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYGQnoyeip7ImA9WxJVFEg.&quot;"><id>tag:blogger.com,1999:blog-7414512759580466.post-1733135108317144019</id><published>2009-07-01T08:05:00.001-06:00</published><updated>2009-07-01T08:05:23.492-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-01T08:05:23.492-06:00</app:edited><title>Failure</title><content type="html">&lt;p&gt;Sometimes failure is the path to success…&lt;/p&gt; &lt;object width="384" height="250"&gt;&lt;param name="movie" value="http://dreams.honda.com/pod_embed.swf?vid=fa&amp;amp;sDomain=dreams.honda.com"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://dreams.honda.com/pod_embed.swf?vid=fa&amp;amp;sDomain=dreams.honda.com" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="384" height="250"&gt;&lt;/embed&gt;&lt;/object&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7414512759580466-1733135108317144019?l=blog.softwareontheside.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=EQAeQOEs2ks:lUW8cN3gY3E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=EQAeQOEs2ks:lUW8cN3gY3E:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=EQAeQOEs2ks:lUW8cN3gY3E:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=EQAeQOEs2ks:lUW8cN3gY3E:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=EQAeQOEs2ks:lUW8cN3gY3E:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=EQAeQOEs2ks:lUW8cN3gY3E:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SoftwareOnTheSide/~4/EQAeQOEs2ks" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.softwareontheside.com/feeds/1733135108317144019/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.softwareontheside.com/2009/07/failure.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/1733135108317144019?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/1733135108317144019?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoftwareOnTheSide/~3/EQAeQOEs2ks/failure.html" title="Failure" /><author><name>mdclement</name><uri>http://www.blogger.com/profile/07418040981494491081</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.softwareontheside.com/2009/07/failure.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YDQ3Y5fCp7ImA9WxJREU4.&quot;"><id>tag:blogger.com,1999:blog-7414512759580466.post-2946513874540289743</id><published>2009-05-12T07:32:00.001-06:00</published><updated>2009-05-12T07:32:52.824-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-12T07:32:52.824-06:00</app:edited><title>Do you understand the words that are coming out of my mouth?</title><content type="html">&lt;p&gt;Often when discussing a disagreement, the two (or more) parties involved will stop communicating.&amp;#160; The natural reaction of most people is to start to defend their position vigorously while ignoring anything the the others are saying.&lt;/p&gt;  &lt;p&gt;This frustrates me to no end.&lt;/p&gt;  &lt;p&gt;The common case is that both sides have valid points to be made and that usually, if both parties are really communicating (read: listening) and intelligent, one side will either realize that they are in error or both will adjust their positions to another better common position.&amp;#160; I have had numerous occasions when I have been arguing a point &lt;strong&gt;and finally started listening&lt;/strong&gt; and realized that there was a way to &lt;a href="https://www.stephencovey.com/7habits/7habits-habit4.php"&gt;get to “win-win”&lt;/a&gt; that wasn’t even on the table originally.&lt;/p&gt;  &lt;p&gt;If you understand my position and reject it, I’m happy to “agree to disagree”.&amp;#160; But before we get there, we’re both going to need to get to a point where we &lt;a href="http://www.imdb.com/title/tt0266915/quotes#qt0319121"&gt;understand the words that are coming out of each other’s mouths&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7414512759580466-2946513874540289743?l=blog.softwareontheside.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=JFZk1TtNJxU:iqUxJ4zVoAc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=JFZk1TtNJxU:iqUxJ4zVoAc:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=JFZk1TtNJxU:iqUxJ4zVoAc:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=JFZk1TtNJxU:iqUxJ4zVoAc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?a=JFZk1TtNJxU:iqUxJ4zVoAc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SoftwareOnTheSide?i=JFZk1TtNJxU:iqUxJ4zVoAc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SoftwareOnTheSide/~4/JFZk1TtNJxU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.softwareontheside.com/feeds/2946513874540289743/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.softwareontheside.com/2009/05/do-you-understand-words-that-are-coming.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/2946513874540289743?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7414512759580466/posts/default/2946513874540289743?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SoftwareOnTheSide/~3/JFZk1TtNJxU/do-you-understand-words-that-are-coming.html" title="Do you understand the words that are coming out of my mouth?" /><author><name>mdclement</name><uri>http://www.blogger.com/profile/07418040981494491081</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.softwareontheside.com/2009/05/do-you-understand-words-that-are-coming.html</feedburner:origLink></entry></feed>

