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

<channel>
	<title>Maccherone</title>
	<atom:link href="http://maccherone.com/larry/feed/" rel="self" type="application/rss+xml" />
	<link>http://maccherone.com/larry</link>
	<description>Like photography, the impact of data visualization, is a function of perspective, focus, and illumination.</description>
	<lastBuildDate>Thu, 28 Sep 2017 20:50:44 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0.2</generator>
	<item>
		<title>Join me for free webinar October 4th</title>
		<link>http://maccherone.com/larry/2017/09/28/join-me-for-free-webinar-october-4th/</link>
					<comments>http://maccherone.com/larry/2017/09/28/join-me-for-free-webinar-october-4th/#respond</comments>
		
		<dc:creator><![CDATA[Larry Maccherone]]></dc:creator>
		<pubDate>Thu, 28 Sep 2017 20:50:44 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://maccherone.com/larry/?p=373</guid>

					<description><![CDATA[<p>You&#8217;ll learn how to avoid using the power of software development metrics for evil and instead use them as a force for good. Oct 4, 2017 2 PM Eastern Standard Time (US and Canada) Register here with Notion. &#160;</p>
The post <a href="http://maccherone.com/larry/2017/09/28/join-me-for-free-webinar-october-4th/">Join me for free webinar October 4th</a> first appeared on <a href="http://maccherone.com/larry">Maccherone</a>.]]></description>
										<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://maccherone.com/larry/2017/09/28/join-me-for-free-webinar-october-4th/";
		var dzone_title = "Join me for free webinar October 4th";
		var dzone_style = "1";
		var dzone_blurb = "You&#8217;ll learn how to avoid using the power of software development metrics for evil and instead use them as a force for good.Oct 4, 2017 2 PM Eastern Standard Time (US and Canada)Register here with Notion.";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p><a href="http://maccherone.com/larry/wp-content/uploads/2017/09/Screen-Shot-2017-09-28-at-4.48.42-PM.png"><img loading="lazy" src="http://maccherone.com/larry/wp-content/uploads/2017/09/Screen-Shot-2017-09-28-at-4.48.42-PM-300x221.png" alt="" width="600" height="221" class="alignnone size-medium wp-image-385" /></a></p>

<p>You&#8217;ll learn how to avoid using the power of software development metrics for evil and instead use them as a force for good.</p>

<p>Oct 4, 2017 2 PM Eastern Standard Time (US and Canada)</p>

<p>Register <a href = "https://zoom.us/webinar/register/WN_xKtaU7F5TgydQ55txLXpWQ">here</a> with Notion.</p>
<div style="clear:both;">&nbsp;</div>The post <a href="http://maccherone.com/larry/2017/09/28/join-me-for-free-webinar-october-4th/">Join me for free webinar October 4th</a> first appeared on <a href="http://maccherone.com/larry">Maccherone</a>.]]></content:encoded>
					
					<wfw:commentRss>http://maccherone.com/larry/2017/09/28/join-me-for-free-webinar-october-4th/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Discounts available for Around the World of Agile Metrics in One Day</title>
		<link>http://maccherone.com/larry/2017/09/21/discounts-available-for-around-the-world-of-agile-metrics-in-one-day/</link>
					<comments>http://maccherone.com/larry/2017/09/21/discounts-available-for-around-the-world-of-agile-metrics-in-one-day/#respond</comments>
		
		<dc:creator><![CDATA[Larry Maccherone]]></dc:creator>
		<pubDate>Thu, 21 Sep 2017 13:42:46 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://maccherone.com/larry/?p=366</guid>

					<description><![CDATA[<p>Save $150 &#160;</p>
The post <a href="http://maccherone.com/larry/2017/09/21/discounts-available-for-around-the-world-of-agile-metrics-in-one-day/">Discounts available for Around the World of Agile Metrics in One Day</a> first appeared on <a href="http://maccherone.com/larry">Maccherone</a>.]]></description>
										<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://maccherone.com/larry/2017/09/21/discounts-available-for-around-the-world-of-agile-metrics-in-one-day/";
		var dzone_title = "Discounts available for Around the World of Agile Metrics in One Day";
		var dzone_style = "1";
		var dzone_blurb = "Save $150";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p><a href="http://maccherone.com/larry/wp-content/uploads/2017/09/cashregister.jpg"><img loading="lazy" src="http://maccherone.com/larry/wp-content/uploads/2017/09/cashregister-300x225.jpg" alt="" width="300" height="225" class="alignnone size-medium wp-image-367" srcset="http://maccherone.com/larry/wp-content/uploads/2017/09/cashregister-300x225.jpg 300w, http://maccherone.com/larry/wp-content/uploads/2017/09/cashregister-768x576.jpg 768w, http://maccherone.com/larry/wp-content/uploads/2017/09/cashregister.jpg 1024w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p><a href="http://eepurl.com/c4kk0X">Save $150</a></p>
<div style="clear:both;">&nbsp;</div>The post <a href="http://maccherone.com/larry/2017/09/21/discounts-available-for-around-the-world-of-agile-metrics-in-one-day/">Discounts available for Around the World of Agile Metrics in One Day</a> first appeared on <a href="http://maccherone.com/larry">Maccherone</a>.]]></content:encoded>
					
					<wfw:commentRss>http://maccherone.com/larry/2017/09/21/discounts-available-for-around-the-world-of-agile-metrics-in-one-day/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ODIM : A framework for choosing the right metrics</title>
		<link>http://maccherone.com/larry/2017/09/13/odim-a-framework-for-choosing-the-right-metrics/</link>
					<comments>http://maccherone.com/larry/2017/09/13/odim-a-framework-for-choosing-the-right-metrics/#respond</comments>
		
		<dc:creator><![CDATA[Larry Maccherone]]></dc:creator>
		<pubDate>Wed, 13 Sep 2017 14:50:24 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://maccherone.com/larry/?p=356</guid>

					<description><![CDATA[<p>What are â€œlamp post metricsâ€? If you lose your keys between the restaurant and the car on a dark night, when you go back to look for them, where are you going to look? Of course, you are going to &#8230; <a href="http://maccherone.com/larry/2017/09/13/odim-a-framework-for-choosing-the-right-metrics/">Continue reading <span class="meta-nav">&#8594;</span></a></p>
The post <a href="http://maccherone.com/larry/2017/09/13/odim-a-framework-for-choosing-the-right-metrics/">ODIM : A framework for choosing the right metrics</a> first appeared on <a href="http://maccherone.com/larry">Maccherone</a>.]]></description>
										<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://maccherone.com/larry/2017/09/13/odim-a-framework-for-choosing-the-right-metrics/";
		var dzone_title = "ODIM : A framework for choosing the right metrics";
		var dzone_style = "1";
		var dzone_blurb = "What are â€œlamp post metricsâ€?If you lose your keys between the restaurant and the car on a dark night, when you go back to look for them, where are you going to look? Of course, you are going to first look where there is light &#8212; under...";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><h1>What are â€œlamp post metricsâ€?</h1>

<p>If you lose your keys between the restaurant and the car on a dark night, when you go back to look for them, where are you going to look? Of course, you are going to first look where there is light &#8212; under the lamp posts. When you pick a metric because it&#8217;s easy to gather, that&#8217;s called a lamp post metric.</p>

<h1>Why are they bad?</h1>

<p>Let&#8217;s look at an example.</p>

<p>A few years ago, someone noticed that when Carmelo &#8220;Melo&#8221; Anthony or Monta Ellis were out sick or injured, their teams had a better chance of winning the game. This was surprising because both players had top ten in the NBA points/game stats for the two years of the analysis. However, points per game is a function of two other metrics: 1) how often you take a shot; and 2) the percentage likelihood that each shot will score. It turns out that these two players had high points per game stats simply because they took more shots. If we were talking about hockey rather than basketball, this would be a good thing. In hockey, good hockey players create more opportunities to take shots but in basketball your team gets a shot essentially every time you go down the court. So, Melo and Ellis were literally stealing shots from other players on the team. That wouldn&#8217;t be so bad if they had the highest chance of sinking each shot but that&#8217;s not the case. They both had a lower chance of scoring each shot than the weighted mean of their teammates on the court.</p>

<p>Points per game is a lamp post metric. It&#8217;s easy to gather and understand. We reward these players literally with fame and fortune based upon this metric. However, what really matters is winning games.</p>

<h1>What does this have to do with ODIM?</h1>

<p>We do this sort of thing all the time in business. We drive behavior with metrics when those metrics are not good proxies for the desired outcomes. That&#8217;s why I introduced the ODIM framework &#8212; to help teams and organizations pick metrics that will drive the desired outcomes.</p>

<p><a href="http://maccherone.com/larry/wp-content/uploads/2017/09/odim.png"><img loading="lazy" src="http://maccherone.com/larry/wp-content/uploads/2017/09/odim-300x131.png" alt="" width="600" height="232" class="alignnone size-medium wp-image-357" /></a></p>

<p>The effect of measurement goes like this:</p>

<p>Effective measurement and visualization provide better insight.
Better insight leads to better decisions.
Better decisions lead to better outcomes.</p>

<p>However, as our NBA example above illustrates, when you are making metrics decisions, it&#8217;s best to begin with the end in mind. By that, I mean, you should start with the Outcomes you are a trying to achieve and work your way backwards to the Decisions that drive those outcomes, then the Insights that will help you get there, and finally the Metrics and visualization that will give you that insight. That&#8217;s why the acronym is ODIM rather than MIDO.</p>

<h1>Back to the NBA example</h1>

<p>We agree that the desired Outcome is winning games. The Decision we want to make is the decision that players make many times a game &#8212; whether to take the shot or pass the ball. The Insight that would best inform this decision are things like, &#8220;From this point on the court, when I&#8217;m up against a player that is bigger/smaller than me, what&#8217;s my chance of scoring?&#8221; and &#8220;What are the chances of the other players from where they are standing or where they could move to?&#8221;. So, you&#8217;d need Measurements (metrics/stats/visualizations) that represent this. From that, you&#8217;ll look for patterns that can easily be used at game speed.</p>

<p>A simple version of this was used by a number of NCAA teams and those teams that used this went much further on average in the NCAA tournament than they were predicted. Their analysis showed that it was bad to take shots at middle distances from about the distance of the free-throw line to the 3-point line. These shots had a lower chance of going in than ones closer in and they were worth less than shots taken from behind the 3-point line. These NCAA teams coached their players to not take shots from this middle-distance and in looking at the heat map of shots, it&#8217;s clear they achieved this.</p>

<p>Not all insights are so heuristically simple. You may need more nuanced coaching and it&#8217;ll take time to change game-time behaviors. One-on-one coaching using retrospective analysis of each shot a player took in the last game where the coaching is informed by these stats will go a long way toward achieving this.</p>

<h1>Agile Team Example</h1>

<p>Letâ€<img src="https://s.w.org/images/core/emoji/14.0.0/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />s say your teamâ€<img src="https://s.w.org/images/core/emoji/14.0.0/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />s desired Outcome is to ship more value, sooner. Each day, maybe several times a day, they make the Decision to either take on more tasks or to help finish the ones that their team has already started. If they have the Insight that lower work in progress (WiP) directly correlates with faster time to market, then the Measurement of the team&#8217;s current WiP will give them the needed insight to make the best decision between pulling in something new to work on versus doing something to finish work already started&#8230; even if that something means swarming on work with other team members.</p>

<h1>Join me for a workshop on ODIM&#8230; and more</h1>

<p>Seats are filling up fast for my workshop, Around the World of Agile Metrics in One Day, on October 17 in downtown Raleigh, NC. If you found this post on ODIM useful, it&#8217;s only one of many similar pieces of content we explore during the day.</p>

<p><a href="https://www.eventbrite.com/e/around-the-world-of-agile-metrics-in-one-day-tickets-35191132625?ref=ebtnebregn" target="_blank"><img src="https://www.eventbrite.com/custombutton?eid=35191132625" alt="Eventbrite - Around the World of Agile Metrics in One Day" /></a></p>
<div style="clear:both;">&nbsp;</div>The post <a href="http://maccherone.com/larry/2017/09/13/odim-a-framework-for-choosing-the-right-metrics/">ODIM : A framework for choosing the right metrics</a> first appeared on <a href="http://maccherone.com/larry">Maccherone</a>.]]></content:encoded>
					
					<wfw:commentRss>http://maccherone.com/larry/2017/09/13/odim-a-framework-for-choosing-the-right-metrics/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Upcoming Event</title>
		<link>http://maccherone.com/larry/2017/09/07/upcoming-event/</link>
					<comments>http://maccherone.com/larry/2017/09/07/upcoming-event/#respond</comments>
		
		<dc:creator><![CDATA[Larry Maccherone]]></dc:creator>
		<pubDate>Thu, 07 Sep 2017 14:50:21 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://maccherone.com/larry/?p=353</guid>

					<description><![CDATA[<p>Powered by Eventbrite &#160;</p>
The post <a href="http://maccherone.com/larry/2017/09/07/upcoming-event/">Upcoming Event</a> first appeared on <a href="http://maccherone.com/larry">Maccherone</a>.]]></description>
										<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://maccherone.com/larry/2017/09/07/upcoming-event/";
		var dzone_title = "Upcoming Event";
		var dzone_style = "1";
		var dzone_blurb = "Powered by Eventbrite";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><div style="width:100%; text-align:left;" ><iframe loading="lazy"  src="https://www.eventbrite.com/e/around-the-world-of-agile-metrics-in-one-day-tickets-35191132625?ref=eweb" frameborder="0" height="1000" width="100%" vspace="0" hspace="0" marginheight="5" marginwidth="5" scrolling="auto" allowtransparency="true"></iframe><div style="font-family:Helvetica, Arial; font-size:12px; padding:10px 0 5px; margin:2px; width:100%; text-align:left;" ><a class="powered-by-eb" style="color: #ADB0B6; text-decoration: none;" target="_blank" href="http://www.eventbrite.com/">Powered by Eventbrite</a></div></div>
<div style="clear:both;">&nbsp;</div>The post <a href="http://maccherone.com/larry/2017/09/07/upcoming-event/">Upcoming Event</a> first appeared on <a href="http://maccherone.com/larry">Maccherone</a>.]]></content:encoded>
					
					<wfw:commentRss>http://maccherone.com/larry/2017/09/07/upcoming-event/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Want to learn more about my ideas in person?</title>
		<link>http://maccherone.com/larry/2017/09/06/want-to-learn-more-about-my-ideas-in-person/</link>
					<comments>http://maccherone.com/larry/2017/09/06/want-to-learn-more-about-my-ideas-in-person/#respond</comments>
		
		<dc:creator><![CDATA[Larry Maccherone]]></dc:creator>
		<pubDate>Wed, 06 Sep 2017 14:28:06 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://maccherone.com/larry/?p=347</guid>

					<description><![CDATA[<p>Join my mailing list so I can let you know about my upcoming workshops and seminars. Subscribe to our mailing list * indicates required Email Address * First Name Last Name &#160;</p>
The post <a href="http://maccherone.com/larry/2017/09/06/want-to-learn-more-about-my-ideas-in-person/">Want to learn more about my ideas in person?</a> first appeared on <a href="http://maccherone.com/larry">Maccherone</a>.]]></description>
										<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://maccherone.com/larry/2017/09/06/want-to-learn-more-about-my-ideas-in-person/";
		var dzone_title = "Want to learn more about my ideas in person?";
		var dzone_style = "1";
		var dzone_blurb = "Join my mailing list so I can let you know about my upcoming workshops and seminars.    #mc_embed_signup{background:#fff; clear:left; font:14px Helvetica,Arial,sans-serif; }    /* Add your own MailChimp form style overrides in your site stylesheet or...";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p>Join my mailing list so I can let you know about my upcoming workshops and seminars.</p>

<p><!-- Begin MailChimp Signup Form -->
<link href="//cdn-images.mailchimp.com/embedcode/classic-10_7.css" rel="stylesheet" type="text/css">
<style type="text/css">
    #mc_embed_signup{background:#fff; clear:left; font:14px Helvetica,Arial,sans-serif; }
    /* Add your own MailChimp form style overrides in your site stylesheet or in this style block.
       We recommend moving this block and the preceding CSS link to the HEAD of your HTML file. */
</style></p>

<div id="mc_embed_signup">
<form action="//linkedin.us16.list-manage.com/subscribe/post?u=789f95b15689f18b28e770886&amp;id=dbc9ead303" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>
    <div id="mc_embed_signup_scroll">
    <h2>Subscribe to our mailing list</h2>
<div class="indicates-required"><span class="asterisk">*</span> indicates required</div>
<div class="mc-field-group">
    <label for="mce-EMAIL">Email Address  <span class="asterisk">*</span>
</label>
    <input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL">
</div>
<div class="mc-field-group">
    <label for="mce-FNAME">First Name </label>
    <input type="text" value="" name="FNAME" class="" id="mce-FNAME">
</div>
<div class="mc-field-group">
    <label for="mce-LNAME">Last Name </label>
    <input type="text" value="" name="LNAME" class="" id="mce-LNAME">
</div>
    <div id="mce-responses" class="clear">
        <div class="response" id="mce-error-response" style="display:none"></div>
        <div class="response" id="mce-success-response" style="display:none"></div>
    </div>    <!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups-->
    <div style="position: absolute; left: -5000px;" aria-hidden="true"><input type="text" name="b_789f95b15689f18b28e770886_dbc9ead303" tabindex="-1" value=""></div>
    <div class="clear"><input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="button"></div>
    </div>
</form>
</div>

<p><script type='text/javascript' src='//s3.amazonaws.com/downloads.mailchimp.com/js/mc-validate.js'></script><script type='text/javascript'>(function($) {window.fnames = new Array(); window.ftypes = new Array();fnames[0]='EMAIL';ftypes[0]='email';fnames[1]='FNAME';ftypes[1]='text';fnames[2]='LNAME';ftypes[2]='text';}(jQuery));var $mcj = jQuery.noConflict(true);</script>
<!--End mc_embed_signup--></p>
<div style="clear:both;">&nbsp;</div>The post <a href="http://maccherone.com/larry/2017/09/06/want-to-learn-more-about-my-ideas-in-person/">Want to learn more about my ideas in person?</a> first appeared on <a href="http://maccherone.com/larry">Maccherone</a>.]]></content:encoded>
					
					<wfw:commentRss>http://maccherone.com/larry/2017/09/06/want-to-learn-more-about-my-ideas-in-person/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Find my latest content on Medium</title>
		<link>http://maccherone.com/larry/2017/09/06/find-my-latest-content-on-medium/</link>
					<comments>http://maccherone.com/larry/2017/09/06/find-my-latest-content-on-medium/#respond</comments>
		
		<dc:creator><![CDATA[Larry Maccherone]]></dc:creator>
		<pubDate>Wed, 06 Sep 2017 14:09:20 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://maccherone.com/larry/?p=339</guid>

					<description><![CDATA[<p>https://medium.com/@lmaccherone &#160;</p>
The post <a href="http://maccherone.com/larry/2017/09/06/find-my-latest-content-on-medium/">Find my latest content on Medium</a> first appeared on <a href="http://maccherone.com/larry">Maccherone</a>.]]></description>
										<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://maccherone.com/larry/2017/09/06/find-my-latest-content-on-medium/";
		var dzone_title = "Find my latest content on Medium";
		var dzone_style = "1";
		var dzone_blurb = "https://medium.com/@lmaccherone";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p><a href="http://maccherone.com/larry/wp-content/uploads/2017/09/globe.jpg"><img loading="lazy" src="http://maccherone.com/larry/wp-content/uploads/2017/09/globe-300x225.jpg" alt="" width="300" height="225" class="alignnone size-medium wp-image-341" srcset="http://maccherone.com/larry/wp-content/uploads/2017/09/globe-300x225.jpg 300w, http://maccherone.com/larry/wp-content/uploads/2017/09/globe-768x575.jpg 768w, http://maccherone.com/larry/wp-content/uploads/2017/09/globe.jpg 1024w" sizes="(max-width: 300px) 100vw, 300px" />
</a></p>

<p><a href="https://medium.com/@lmaccherone">https://medium.com/@lmaccherone</a></p>
<div style="clear:both;">&nbsp;</div>The post <a href="http://maccherone.com/larry/2017/09/06/find-my-latest-content-on-medium/">Find my latest content on Medium</a> first appeared on <a href="http://maccherone.com/larry">Maccherone</a>.]]></content:encoded>
					
					<wfw:commentRss>http://maccherone.com/larry/2017/09/06/find-my-latest-content-on-medium/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Announcing node-localstorage</title>
		<link>http://maccherone.com/larry/2012/10/29/announcing-node-localstorage/</link>
					<comments>http://maccherone.com/larry/2012/10/29/announcing-node-localstorage/#respond</comments>
		
		<dc:creator><![CDATA[Larry Maccherone]]></dc:creator>
		<pubDate>Mon, 29 Oct 2012 23:02:14 +0000</pubDate>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[CoffeeScript]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[localStorage]]></category>
		<category><![CDATA[Node.js]]></category>
		<guid isPermaLink="false">http://maccherone.com/larry/?p=333</guid>

					<description><![CDATA[<p>A drop-in replacement for localStorage that runs on node.js. I&#8217;m working on a project to do local caching using localStorage. I want it to work in both node.js as well as in the browser. I have a similar situation with &#8230; <a href="http://maccherone.com/larry/2012/10/29/announcing-node-localstorage/">Continue reading <span class="meta-nav">&#8594;</span></a></p>
The post <a href="http://maccherone.com/larry/2012/10/29/announcing-node-localstorage/">Announcing node-localstorage</a> first appeared on <a href="http://maccherone.com/larry">Maccherone</a>.]]></description>
										<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://maccherone.com/larry/2012/10/29/announcing-node-localstorage/";
		var dzone_title = "Announcing node-localstorage";
		var dzone_style = "1";
		var dzone_blurb = "A drop-in replacement for localStorage that runs on node.js.I&#8217;m working on a project to do local caching using localStorage. I want it to work in both node.js as well as in the browser. I have a similar situation with my RallyAnalytics project where...";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p><em>A drop-in replacement for localStorage that runs on node.js.</em></p>

<p>I&#8217;m working on a project to do local caching using localStorage. I want it to work in both node.js as well as in the browser. I have a similar situation with my RallyAnalytics project where I use driverdan&#8217;s <a href="https://github.com/driverdan/node-XMLHttpRequest">node-XMLHttpRequest</a> as a drop-in replacement for the browser&#8217;s native XMLHttpRequest object. So, I decided that the best approach would be to build my caching mechanism on top of the localStorage interface. Since I couldn&#8217;t find one in the wild, I created node-localstorage. It might be useful for testing or you may have a situation like mine where you want to run the same code on the server/desktop as you run in the browser.</p>

<p><a href="https://github.com/lmaccherone/node-localstorage">github repository</a> (including usage and installation documentation)</p>
<div style="clear:both;">&nbsp;</div>The post <a href="http://maccherone.com/larry/2012/10/29/announcing-node-localstorage/">Announcing node-localstorage</a> first appeared on <a href="http://maccherone.com/larry">Maccherone</a>.]]></content:encoded>
					
					<wfw:commentRss>http://maccherone.com/larry/2012/10/29/announcing-node-localstorage/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>The ODIM and Performance Index Frameworks</title>
		<link>http://maccherone.com/larry/2012/07/03/the-odim-and-performance-index-frameworks/</link>
					<comments>http://maccherone.com/larry/2012/07/03/the-odim-and-performance-index-frameworks/#respond</comments>
		
		<dc:creator><![CDATA[Larry Maccherone]]></dc:creator>
		<pubDate>Tue, 03 Jul 2012 12:54:06 +0000</pubDate>
				<category><![CDATA[Presentation]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Measurement]]></category>
		<guid isPermaLink="false">http://maccherone.com/larry/?p=313</guid>

					<description><![CDATA[<p>Slides from my talk in silicon valley on my ODIM and Rally&#8217;s Performance Index frameworks for agile measurement. &#160;</p>
The post <a href="http://maccherone.com/larry/2012/07/03/the-odim-and-performance-index-frameworks/">The ODIM and Performance Index Frameworks</a> first appeared on <a href="http://maccherone.com/larry">Maccherone</a>.]]></description>
										<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://maccherone.com/larry/2012/07/03/the-odim-and-performance-index-frameworks/";
		var dzone_title = "The ODIM and Performance Index Frameworks";
		var dzone_style = "1";
		var dzone_blurb = "Slides from my talk in silicon valley on my ODIM and Rally&#8217;s Performance Index frameworks for agile measurement.";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p>Slides from my talk in silicon valley on <a href="http://maccherone.com/larry/wp-content/uploads/2012/03/ODIM-and-Performance-Index-2.pdf">my ODIM and Rally&#8217;s Performance Index frameworks</a> for agile measurement.</p>
<div style="clear:both;">&nbsp;</div>The post <a href="http://maccherone.com/larry/2012/07/03/the-odim-and-performance-index-frameworks/">The ODIM and Performance Index Frameworks</a> first appeared on <a href="http://maccherone.com/larry">Maccherone</a>.]]></content:encoded>
					
					<wfw:commentRss>http://maccherone.com/larry/2012/07/03/the-odim-and-performance-index-frameworks/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>The CoffeeScript emperor has no clothes</title>
		<link>http://maccherone.com/larry/2012/02/02/the-coffeescript-emperor-has-no-clothes/</link>
					<comments>http://maccherone.com/larry/2012/02/02/the-coffeescript-emperor-has-no-clothes/#comments</comments>
		
		<dc:creator><![CDATA[Larry Maccherone]]></dc:creator>
		<pubDate>Thu, 02 Feb 2012 11:32:05 +0000</pubDate>
				<category><![CDATA[CoffeeScript]]></category>
		<guid isPermaLink="false">http://maccherone.com/larry/?p=292</guid>

					<description><![CDATA[<p>Subtitle: when CoffeeScript rock stars run around naked in public Just because you can do something doesn&#8217;t mean you should. Leaving the parentheses out of your CoffeeScript might make your code look a bit more &#8220;natural&#8221;, but it almost always &#8230; <a href="http://maccherone.com/larry/2012/02/02/the-coffeescript-emperor-has-no-clothes/">Continue reading <span class="meta-nav">&#8594;</span></a></p>
The post <a href="http://maccherone.com/larry/2012/02/02/the-coffeescript-emperor-has-no-clothes/">The CoffeeScript emperor has no clothes</a> first appeared on <a href="http://maccherone.com/larry">Maccherone</a>.]]></description>
										<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://maccherone.com/larry/2012/02/02/the-coffeescript-emperor-has-no-clothes/";
		var dzone_title = "The CoffeeScript emperor has no clothes";
		var dzone_style = "1";
		var dzone_blurb = "Subtitle: when CoffeeScript rock stars run around naked in publicJust because you can do something doesn&#8217;t mean you should. Leaving the parentheses out of your CoffeeScript might make your code look a bit more &#8220;natural&#8221;, but it almost...";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><h3>Subtitle: when CoffeeScript rock stars run around naked in public</h3>

<p>Just because you can do something doesn&#8217;t mean you should. Leaving the parentheses out of your CoffeeScript might make your code look a bit more &#8220;natural&#8221;, but it almost always makes the code less readable and in a many cases, it makes it impossible for the CoffeeScript compiler to understand your intent. It&#8217;s more &#8220;natural&#8221; to go around naked but you shouldn&#8217;t. Just like you need to cover your private parts when you go outside, I feel strongly that <strong>you should properly cloth your CoffeeScript function/method parameters in parentheses</strong>.</p>

<p>In the last few months alone, on StackOverflow, there have a been at least six questions that I have flagged as caused by this issue:</p>

<ul>
<li><a href="http://stackoverflow.com/questions/9098412/coffeescript-calling-a-method-of-returned-object-chaining">Chaining</a></li>
<li><a href="http://stackoverflow.com/questions/7200464/method-call-syntax-in-coffeescript">Calling functions with no parameters</a></li>
<li><a href="http://stackoverflow.com/questions/7532616/multiline-function-calls-in-coffeescript">Lambdas with multiple functions</a></li>
<li><a href="http://stackoverflow.com/questions/4849818/how-do-i-make-a-get-request-using-coffeescript">Help showing code flow with jquery</a></li>
<li><a href="http://stackoverflow.com/questions/7636555/require-a-library-with-configuration-in-coffeescript">Calling a function which calls a function</a></li>
<li><a href="http://stackoverflow.com/questions/6586953/coffeescript-function-call-parameters-and-brackets">Confusing space</a></li>
</ul>

<p>In all of the cases above, there is an idiom that you can&#8217;t precisely/clearly express without parentheses around function/method parameters. Often, the coder realizes that it&#8217;s ambiguous but &#8220;hopes&#8221; that the compiler can figure out his intent. He posts a question on StackOverflow once he is able to show that it cannot. In all of these cases,  the coder has learned CoffeeScript by looking at a bunch of examples that leave out the parentheses and he doesn&#8217;t realize that you <strong>can</strong> put them in&#8230; or he wants to know how the cool-kids express it without them. In each case, the answer is invariably, &#8220;Simply add parentheses and it will work as expected.&#8221;</p>

<p>If this is confusing the compiler and the new users who want to be CoffeeScript cool-kids, we CoffeeScript bloggers should all make an effort to post <strong>all</strong> examples with the parentheses left in. I&#8217;m going so far as to leave them in all of my code and my collaborators seem to appreciate it. If nobody ever needs to read your code, then feel free to walk around naked in a drug-addled state within the privacy of your own home. But as soon as you step out the door, or want anyone else to read your code&#8230;</p>

<p>It&#8217;s perfectly fine to leave them out of if-statements, while-loop, etc. We like our female rock starts to show a little cleavage and some folks get turned on by Mick Jagger&#8217;s tight leather pants.</p>

<p>Chaining (needed for compiler to understand intent)</p>

<p><code>someObject.slideLeft(4).invert().slideUp(10)</code></p>

<p>Calling a parameter-less method (also necessary)</p>

<p><code>someIterator.next()</code></p>

<p>Function/method calling (even when not chaining, for human clarity)</p>

<p><code>someFunction(parameterA, parameterB)</code></p>

<p>&#8230;I even favor including them when the last parameter is a callback (although I do cringe every time I see that lonesome closing paren a few lines down so I&#8217;m OK with you leaving them out in this case).</p>

<p><code>someMethodNeedingACallback(parameterA, (err, data) -&gt;
    console.log(data)
)</code></p>

<p>Functions with no parameters (could live without this, but IMHO, it&#8217;s more readable with it)</p>

<p><code>f = () -&gt;
    return "hello"  # notice how I also like to say "return". That's another clarity choice.</code></p>

<p>One last argument to try to convince you&#8230; Python is the most readable programming language out there. The Python BDFL has come out time and again in favor of readability even at the expense of conciseness. Python used to have a parentheses-less <code>print</code> statement, but Guido feels so strongly that this was a mistake, that he went through the very painful backward-breaking change to <a href="http://docs.python.org/release/3.0.1/whatsnew/3.0.html">require parentheses for print function calls in Python 3.0</a>. I would go so far as to argue that we should remove this &#8220;feature&#8221; from the CoffeeScript spec but even if we don&#8217;t, we should stop using it.</p>

<p>I know&#8230; you want to show that you are a CoffeeScript cool-kid. You can write a one-line list comprehension that is like a brilliant guitar solo. But I think it&#8217;s cooler for my code to be readable and for the compiler to precisely understand what I intend. The list comprehension guitar solo may be showing off but we expect our cool rock stars to show off. However, it&#8217;s uncool (even for rock stars) to be <a href="http://www.forkparty.com/1164/rock-stars">drug-addled running around naked in public</a>. Be the rock star without the drugs&#8230; or running around without your function/method calls properly clothed in parentheses.</p>
<div style="clear:both;">&nbsp;</div>The post <a href="http://maccherone.com/larry/2012/02/02/the-coffeescript-emperor-has-no-clothes/">The CoffeeScript emperor has no clothes</a> first appeared on <a href="http://maccherone.com/larry">Maccherone</a>.]]></content:encoded>
					
					<wfw:commentRss>http://maccherone.com/larry/2012/02/02/the-coffeescript-emperor-has-no-clothes/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title>Introducing coffeedoctest</title>
		<link>http://maccherone.com/larry/2012/01/15/introducing-coffeedoctest/</link>
					<comments>http://maccherone.com/larry/2012/01/15/introducing-coffeedoctest/#respond</comments>
		
		<dc:creator><![CDATA[Larry Maccherone]]></dc:creator>
		<pubDate>Sun, 15 Jan 2012 17:25:06 +0000</pubDate>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[CoffeeScript]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[Craftsmanship]]></category>
		<category><![CDATA[Documentation]]></category>
		<category><![CDATA[Node.js]]></category>
		<guid isPermaLink="false">http://maccherone.com/larry/?p=286</guid>

					<description><![CDATA[<p>The examples you add to document your project are like a map to the buried treasure that is your library/API/tool/etc. But if the examples are wrong, it&#8217;s like labeling the map with &#8220;promised land&#8221; right over the spot where it &#8230; <a href="http://maccherone.com/larry/2012/01/15/introducing-coffeedoctest/">Continue reading <span class="meta-nav">&#8594;</span></a></p>
The post <a href="http://maccherone.com/larry/2012/01/15/introducing-coffeedoctest/">Introducing coffeedoctest</a> first appeared on <a href="http://maccherone.com/larry">Maccherone</a>.]]></description>
										<content:encoded><![CDATA[<p><!--S-ButtonZ 1.1.5 Start--></p>
<div style="float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://maccherone.com/larry/2012/01/15/introducing-coffeedoctest/";
		var dzone_title = "Introducing coffeedoctest";
		var dzone_style = "1";
		var dzone_blurb = "The examples you add to document your project are like a map to the buried treasure that is your library/API/tool/etc. But if the examples are wrong, it&#8217;s like labeling the map with &#8220;promised land&#8221; right over the spot where it should...";
		//-->
		</script><br />
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div>
<p><!--S-ButtonZ 1.1.5 End--></p>
<p>The examples you add to document your project are like a map to the buried treasure that is your library/API/tool/etc. But if the examples are wrong, it&#8217;s like labeling the map with &#8220;promised land&#8221; right over the spot where it should say, &#8220;there be dragons&#8221;.</p>
<p>It&#8217;s less about testing your code with your documentation, than the other way around. Make sure that the examples in your documenation stay current with your code. <strong>coffeedoctest</strong> is a way to test your documentation with your code&#8230; to make sure that the map matches the terrain.</p>
<p>If you&#8217;ve spent any time working in Python, then you are probably familiar with <a href="http://docs.python.org/release/2.5.2/lib/module-doctest.html">doctest</a>. Coffeedoctest is built along the same lines.</p>
<p>For entire story visit the <a href="https://github.com/lmaccherone/coffeedoctest">coffeedoctest project page</a> on github.</p>
<div style="clear:both;">&nbsp;</div>The post <a href="http://maccherone.com/larry/2012/01/15/introducing-coffeedoctest/">Introducing coffeedoctest</a> first appeared on <a href="http://maccherone.com/larry">Maccherone</a>.]]></content:encoded>
					
					<wfw:commentRss>http://maccherone.com/larry/2012/01/15/introducing-coffeedoctest/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
