<?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>Parks Computing &#187; rants</title>
	<atom:link href="http://www.parkscomputing.com/labels/rants/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.parkscomputing.com</link>
	<description>Pedagogy for the autodidactic programmer</description>
	<lastBuildDate>Thu, 12 Jan 2012 22:48:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>Olympic Note Passing</title>
		<link>http://www.parkscomputing.com/2011/06/olympic-note-passing/</link>
		<comments>http://www.parkscomputing.com/2011/06/olympic-note-passing/#comments</comments>
		<pubDate>Sat, 04 Jun 2011 16:21:29 +0000</pubDate>
		<dc:creator>paulmooreparks</dc:creator>
				<category><![CDATA[analogies]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[rants]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[writing]]></category>

		<guid isPermaLink="false">http://www.parkscomputing.com/?p=654</guid>
		<description><![CDATA[A good analogy can often be useful to explain intricate technical details. In an earlier article, &#8220;Wrong Fish Food&#8221;, I related an analogy that I used to describe a technical issue to a non-technical audience. This article shares an analogy I created for a technical audience, because sometimes even techies need an analogy to grasp [...]]]></description>
			<content:encoded><![CDATA[<p>A good analogy can often be useful to explain intricate technical details. In an earlier article, <a href="http://www.parkscomputing.com/2011/04/wrong-fish-food/">&#8220;Wrong Fish Food&#8221;</a>, I related an analogy that I used to describe a technical issue to a non-technical audience. This article shares an analogy I created for a technical audience, because sometimes even techies need an analogy to grasp an unfamiliar technology.</p>
<p><span id="more-654"></span></p>
<p>For the past few years I&#8217;ve been responsible for maintaining a subsystem that allows a point-of-sale system to communicate with external applications. These external applications may display information gathered from the POS and poke inputs back into it. I was involved in the initial development of the subsystem back in 2004 or so, and when the other developers left for other positions it fell to me to continue enhancing and supporting the subsystem.</p>
<p>I wasn&#8217;t happy with the first implementation because of some design problems, but I couldn&#8217;t change the design too much without impacting existing integrations with the subsystem. Instead, over the course of a year or so I made several improvements to the bits of code that integrated the subsystem with other applications and improved the API that the subsystem exposes.</p>
<p>Considering the number of transactions it supports every day across hundreds of installations, I think the subsystem is rather fast and stable. Occasionally, however, whenever there is a performance issue with an application that uses the subsystem, the subsystem itself gets blamed, and I am usually called upon to investigate the issue. While there <em>are</em> some scenarios that can trigger bottlenecks with the subsystem, the problems I investigate are pretty much never the fault of the subsystem.</p>
<p>Finally, after having to explain the intricate technical details yet again, I decided to come up with an analogy to explain how the subsystem works, how it <em>could</em> be a bottleneck is some scenarios, and why it usually wasn&#8217;t the bottleneck in spite of the possibility. I e-mailed the analogy to all interested parties, and it seems to have had the desired effect. I&#8217;ve edited the analogy to remove specific product and subsystem names and provided it here. In the wrap-up, I changed the name of the subsystem to NPS, for Note-Passing Subsystem.</p>
<h2>The Story of Olympic Note Passing</h2>
<p>We&#8217;re going to imagine a strange sport called Olympic Note Passing. Two runners run around adjacent circular tracks: Runner A, and runner F. Each time runner A reaches the outside portion of the track he picks up a message that he will deliver to runner F. Runner F will then deliver this message to the other side of track F. Never mind why this happens; some sports are just unusual (think golf or curling).</p>
<p>Now, the first time this sport was introduced into the Olympics, the messages were passed from runner A to runner F via a specially designed, and somewhat magical, box. This box accepts messages via a device like a bill acceptor, and on the other side of the box is a device like a bill dispenser that spits out formatted, translated copies of the messages that were put into the other side. This way, runners from different nations that speak different languages can still participate in the sport and understand the messages being passed from A to F.</p>
<p>Runners on the two tracks could run at independent speeds, so that runner A could stop for just a moment and place a message into the box before taking off around the track again, and runner F could stop for just a moment to pick up any messages that were waiting.</p>
<div id="attachment_657" class="wp-caption aligncenter" style="width: 668px"><a href="http://www.parkscomputing.com/wp-content/uploads/Note-Passing-1.jpg"><img src="http://www.parkscomputing.com/wp-content/uploads/Note-Passing-1.jpg" alt="Note Passing, Old Style" title="Note Passing, Old Style" width="658" height="270" class="size-full wp-image-657" /></a><p class="wp-caption-text">The original practice of Olympic Note Passing</p></div>
<p>There was a problem with this magic box, however. If runner A was placing messages into one side of the box, runner F could not take any messages out of the box until A was finished. Likewise, if runner F was taking messages out, runner A couldn&#8217;t place any messages into the box. This turned out to be a problem because the runners had to keep stopping and waiting for each other.</p>
<p>This state of affairs threatened to kill the fledgling sport before it ever got started, since spectators didn&#8217;t want to see the two runners stopping, starting, and waiting for each other all the time, so the Olympic committee had to come up with a solution. One intrepid committee member suggested designing new magic boxes so that messages could be inserted and extracted at the same time, but the committee had already spent a lot of money designing the existing boxes, and any new boxes would have to be the same size, shape, and color as the existing boxes and would have to work EXACTLY the same way in every other respect. Furthermore, the guy that designed the original boxes was now working for NASCAR and doing equally silly things to the <a href="http://en.wikipedia.org/wiki/Car_of_Tomorrow">Car of Tomorrow</a>.</p>
<p>The way the committee decided to fix this problem was to station a person on either side of the magic box: helper A, and helper F. Now, runner A just hands messages to helper A on the way around the track, and helper A inserts the message into the machine while runner A keeps moving. Likewise, helper F extracts any waiting messages from the machine and hands them off to runner F when he comes around the track. If helper A sees that the machine is busy and he can&#8217;t insert any messages, he will just put the new messages in his pocket until the machine is available. Helper F will pull messages out of the machine as soon as they are available and keep them in his pocket until runner F comes around the track. If helper F has no messages, he will wave runner F on around the track.</p>
<div id="attachment_658" class="wp-caption aligncenter" style="width: 785px"><a href="http://www.parkscomputing.com/wp-content/uploads/Note-Passing-2.jpg"><img src="http://www.parkscomputing.com/wp-content/uploads/Note-Passing-2.jpg" alt="" title="Note Passing 2" width="775" height="270" class="size-full wp-image-658" /></a><p class="wp-caption-text">New and improved Olympic Note Passing</p></div>
<p>Now, we&#8217;ll bring all of this around to the actual NPS design. Runner A is an AwesomePOS system, and Runner F is FooApp. The magic box is NPS. The messages being passed through the magic box are NPS messages. The redesigned sport, with helper A and helper B, represents the new NPS integration design introduced at SuperCustomer in late 2009 and early 2010. The people stationed on either side of the magic box are the independent threads that are now running in AwesomePOS and FooApp that service the NPS message queue.</p>
<p>With this picture in mind, it should be a little more apparent why NPS is pretty much never the source of any performance issues in current implementations, but why it can be a performance bottleneck if the integration is not done carefully. If AwesomePOS or FooApp have to keep stopping and starting to deal with NPS, it can impact the performance of the entire system. With the new design, however, NPS is much less of a bottleneck since runners A and F can now keep moving around the track a lot more smoothly, but messages can still get from one side of track A to the other side of track F no more quickly than the slower runner can move.</p>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.parkscomputing.com%2F2011%2F06%2Folympic-note-passing%2F&amp;t=Olympic%20Note%20Passing" id="facebook_share_button_654" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none; display: -moz-inline-block; display:inline-block; padding:1px 20px 0 5px; margin: 5px 0; height:15px; border:1px solid #d8dfea; color: #3B5998; background: #fff url(http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif) no-repeat top right;">Share</a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_654') || document.getElementById('facebook_share_icon_654') || document.getElementById('facebook_share_both_654') || document.getElementById('facebook_share_button_654');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_654') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://www.parkscomputing.com/2011/06/olympic-note-passing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I have a wide screen. Let me use it.</title>
		<link>http://www.parkscomputing.com/2011/04/i-have-a-wide-screen-let-me-use-it/</link>
		<comments>http://www.parkscomputing.com/2011/04/i-have-a-wide-screen-let-me-use-it/#comments</comments>
		<pubDate>Mon, 11 Apr 2011 19:20:44 +0000</pubDate>
		<dc:creator>paulmooreparks</dc:creator>
				<category><![CDATA[UI]]></category>
		<category><![CDATA[rants]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.parkscomputing.com/?p=629</guid>
		<description><![CDATA[Dear web-design people, Please don&#8217;t design sites that look like this: Rather, please design sites that look like this: I&#8217;m not knocking Herb Sutter, here. I&#8217;m pretty sure he&#8217;s just using a stock template, but templates that don&#8217;t flow to fit the browser width really puzzle me. Is there a good reason for them that [...]]]></description>
			<content:encoded><![CDATA[<p>Dear web-design people,</p>
<p>Please don&#8217;t design sites that look like this:</p>
<div id="attachment_630" class="wp-caption alignnone" style="width: 310px"><a href="http://www.parkscomputing.com/wp-content/uploads/BadWebDesign.png"><img src="http://www.parkscomputing.com/wp-content/uploads/BadWebDesign-300x164.png" alt="Waste of space!" title="Bad Web Design" width="300" height="164" class="size-medium wp-image-630" /></a><p class="wp-caption-text">Waste of space!</p></div>
<p>Rather, please design sites that look like this:</p>
<div id="attachment_632" class="wp-caption alignnone" style="width: 310px"><a href="http://www.parkscomputing.com/wp-content/uploads/GoodWebDesign.png"><img src="http://www.parkscomputing.com/wp-content/uploads/GoodWebDesign-300x164.png" alt="This uses space more effectively." title="Good Web Design" width="300" height="164" class="size-medium wp-image-632" /></a><p class="wp-caption-text">This uses space more effectively.</p></div>
<p>I&#8217;m not knocking Herb Sutter, here. I&#8217;m pretty sure he&#8217;s just using a stock template, but templates that don&#8217;t flow to fit the browser width really puzzle me. Is there a good reason for them that I&#8217;m just not aware of?</p>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.parkscomputing.com%2F2011%2F04%2Fi-have-a-wide-screen-let-me-use-it%2F&amp;t=I%20have%20a%20wide%20screen.%20Let%20me%20use%20it." id="facebook_share_button_629" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none; display: -moz-inline-block; display:inline-block; padding:1px 20px 0 5px; margin: 5px 0; height:15px; border:1px solid #d8dfea; color: #3B5998; background: #fff url(http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif) no-repeat top right;">Share</a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_629') || document.getElementById('facebook_share_icon_629') || document.getElementById('facebook_share_both_629') || document.getElementById('facebook_share_button_629');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_629') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://www.parkscomputing.com/2011/04/i-have-a-wide-screen-let-me-use-it/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Wrong Fish Food, or, Communicating Frustration Non-technically</title>
		<link>http://www.parkscomputing.com/2011/04/wrong-fish-food/</link>
		<comments>http://www.parkscomputing.com/2011/04/wrong-fish-food/#comments</comments>
		<pubDate>Mon, 04 Apr 2011 16:55:43 +0000</pubDate>
		<dc:creator>paulmooreparks</dc:creator>
				<category><![CDATA[analogies]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[rants]]></category>

		<guid isPermaLink="false">http://www.parkscomputing.com/?p=616</guid>
		<description><![CDATA[If you&#8217;re reading this site, you&#8217;ve probably already determined that I&#8217;m a geek. A hard-core, dyed-in-the-wool, walks-into-trees-because-he&#8217;s-thinking-about-computers kind of geek. My wife and daughters, bless them, are not. Well, my daughters are somewhat nerdy, in a hip kind of way, meaning that they can quote large portions of Star Wars and Lord of the Rings, [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re reading this site, you&#8217;ve probably already determined that I&#8217;m a geek. A hard-core, dyed-in-the-wool, walks-into-trees-because-he&#8217;s-thinking-about-computers kind of geek.</p>
<p>My wife and daughters, bless them, are not. Well, my daughters are somewhat nerdy, in a hip kind of way, meaning that they can quote large portions of <i>Star Wars</i> and <i>Lord of the Rings</i>, but they can also put together an attractive ensemble to wear out on the weekends. They aren&#8217;t as hopeless as their father.</p>
<p>Some days when I come home and sit down to dinner, I want to tell the family about some really silly thing that happened to me at work, but I don&#8217;t want to have to explain the intricacies of programming to set up every story. Instead, on the drive home I&#8217;ll try to come up with an analogy. Here&#8217;s the story that I came up with for something that actually happened to me last week. See if you can figure out what the actual technical issue was.</p>
<h2>The Story of the Wrong Fish Food</h2>
<p>E-mail #1: &#8220;Paul, I just fed a batch of fish food to the fish, and the fish are dying. A chemical analysis showed that the batch contained hydrogenated frobulaxis. What&#8217;s wrong?&#8221;</p>
<p>Reply to e-mail #1: &#8220;Our fish are allergic to hydrogenated frobulaxis. Mix up a batch of food that doesn&#8217;t include that ingredient, and then the fish won&#8217;t die.&#8221;</p>
<p>E-mail #2: &#8220;Paul, I&#8217;m confused. Mix what up? I used a batch that I found in the supply cabinet. Why are the fish dying now?&#8221;</p>
<p>Reply to e-mail #2: &#8220;Either someone put the wrong batch in the cabinet, or someone used the wrong recipe to make the batch that&#8217;s supposed to be in the supply cabinet. See if you can track down the recipe that was used for those batches.&#8221;</p>
<p>E-mail #3: &#8220;Instead, I gave the fish some medicine that keeps them from dying when they consume hydrogenated frobulaxis. Easier.&#8221;</p>
<p>Reply to E-mail #3: &#8220;The problem is, that&#8217;s still wrong. There shouldn&#8217;t be any hydrogenated frobulaxis in the batches that are fed to the fish. If that&#8217;s being added to the production batches, that&#8217;s bad.&#8221;</p>
<p>Of course, I never got an e-mail #4. The fish were alive (barely), and nobody had to do the nasty work of mixing up a new batch of food, because that would be icky. All I could do was just pound my head on the desk.</p>
<p><i>Sigh.</i></p>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.parkscomputing.com%2F2011%2F04%2Fwrong-fish-food%2F&amp;t=Wrong%20Fish%20Food%2C%20or%2C%20Communicating%20Frustration%20Non-technically" id="facebook_share_button_616" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none; display: -moz-inline-block; display:inline-block; padding:1px 20px 0 5px; margin: 5px 0; height:15px; border:1px solid #d8dfea; color: #3B5998; background: #fff url(http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif) no-repeat top right;">Share</a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_616') || document.getElementById('facebook_share_icon_616') || document.getElementById('facebook_share_both_616') || document.getElementById('facebook_share_button_616');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_616') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://www.parkscomputing.com/2011/04/wrong-fish-food/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Hyphens. Use them. They&#8217;re important.</title>
		<link>http://www.parkscomputing.com/2011/02/hyphens-use-them-theyre-important/</link>
		<comments>http://www.parkscomputing.com/2011/02/hyphens-use-them-theyre-important/#comments</comments>
		<pubDate>Wed, 02 Feb 2011 01:40:22 +0000</pubDate>
		<dc:creator>Paul Parks</dc:creator>
				<category><![CDATA[grammar]]></category>
		<category><![CDATA[rants]]></category>
		<category><![CDATA[writing]]></category>

		<guid isPermaLink="false">http://www.parkscomputing.com/?p=399</guid>
		<description><![CDATA[I hate to follow one rant with another one, but I&#8217;ve got to get this off my chest. Look at these pictures: See the difference? The first picture is of a high-school student (my elder daughter, Madeline). The second picture is of a high school student (Sean Penn as Jeff Spicoli in Fast Times at [...]]]></description>
			<content:encoded><![CDATA[<p>I hate to follow one rant with another one, but I&#8217;ve got to get this off my chest. Look at these pictures:</p>
<div id="attachment_400" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.parkscomputing.com/wp-content/uploads/Madeline.jpg"><img class="size-medium wp-image-400" title="A high-school student" src="http://www.parkscomputing.com/wp-content/uploads/Madeline-300x291.jpg" alt="A high-school student" width="300" height="291" /></a><p class="wp-caption-text">This is a high-school student.</p></div>
<p></p>
<div id="attachment_401" class="wp-caption aligncenter" style="width: 308px"><a href="http://www.parkscomputing.com/wp-content/uploads/spicoli2.jpg"><img class="size-medium wp-image-401" title="A high school student." src="http://www.parkscomputing.com/wp-content/uploads/spicoli2-298x300.jpg" alt="A high school student." width="298" height="300" /></a><p class="wp-caption-text">This is a high school student.</p></div>
<p>See the difference? The first picture is of a <strong>high-school student</strong> (my elder daughter, Madeline). The second picture is of a <strong>high school student</strong> (Sean Penn as Jeff Spicoli in <em>Fast Times at Ridgemont High</em>). That&#8217;s the difference a hyphen can make in the meaning of a sentence. The first picture depicts a typical 16-year-old girl; the second picture shows the kind of guy she won&#8217;t be allowed to date.</p>
<p>American English is really lenient about the use of hyphens in compound adjectives, but I&#8217;m seeing a lot more sentences lately where the missing hyphen makes a difference in the meaning of the sentence.</p>
<p>(I&#8217;m pretty sure there are some grammar mistakes in this post. Fire away!)</p>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.parkscomputing.com%2F2011%2F02%2Fhyphens-use-them-theyre-important%2F&amp;t=Hyphens.%20Use%20them.%20They%27re%20important." id="facebook_share_button_399" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none; display: -moz-inline-block; display:inline-block; padding:1px 20px 0 5px; margin: 5px 0; height:15px; border:1px solid #d8dfea; color: #3B5998; background: #fff url(http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif) no-repeat top right;">Share</a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_399') || document.getElementById('facebook_share_icon_399') || document.getElementById('facebook_share_both_399') || document.getElementById('facebook_share_button_399');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_399') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://www.parkscomputing.com/2011/02/hyphens-use-them-theyre-important/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Please Stop Holding Project Status Meetings</title>
		<link>http://www.parkscomputing.com/2011/01/please-stop-holding-project-status-meetings/</link>
		<comments>http://www.parkscomputing.com/2011/01/please-stop-holding-project-status-meetings/#comments</comments>
		<pubDate>Sat, 29 Jan 2011 17:41:40 +0000</pubDate>
		<dc:creator>Paul Parks</dc:creator>
				<category><![CDATA[consulting]]></category>
		<category><![CDATA[rants]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.parkscomputing.com/?p=363</guid>
		<description><![CDATA[(I&#8217;ve also posted this same article on Code Project.) Before I launch into the body of this essay, let me say that I think meetings are wonderful things. I&#8217;ll even go so far as to say that people in my field, software development, probably don&#8217;t have enough meetings. I have to qualify these opinions, however, [...]]]></description>
			<content:encoded><![CDATA[<p>(I&#8217;ve also posted this same article on <a href="http://www.codeproject.com/KB/work/Stop_Project_Meetings.aspx">Code Project</a>.)</p>
<p>Before I launch into the body of this essay, let me say that I think meetings are wonderful things. I&#8217;ll even go so far as to say that people in my field, software development, probably don&#8217;t have enough meetings. I have to qualify these opinions, however, by saying that they only apply to the right <em>kinds</em> of meetings. Regularly scheduled project status meetings that involve an entire team are definitely the wrong kind of meeting. They provide very little useful communication, and they kill productivity. There are better ways to accomplish the purpose of status meetings without actually having them.</p>
<p>  <span id="more-363"></span></p>
<h2>What&#8217;s Wrong with Project Status Meetings?</h2>
<p>A project status meeting usually involves a manager and a team. Each member of the team, in turn, provides an update on the tasks that member has been working on since the last meeting. The manager or other team members may ask for additional information or provide comments on these updates. Team members that have little or no involvement with the tasks that are being discussed just sit and listen (or sleep, or doodle, or do what I do occasionally &#8212; write code long-hand on a pad of paper).</p>
<p>In a particularly malignant version of the status meeting, several teams and their managers are in a meeting with a higher-level manager, but each individual team member still reports on his tasks. On one project, I had meetings like this on a weekly basis, with upwards of 40 different people in one room. It was dreadful.</p>
<p>What makes these meetings so dreadful for me is that I&#8217;m only an active participant for two or three minutes. For the rest of the time (an hour and a half, or more, once a week, on my last project) I don&#8217;t have any real involvement with what&#8217;s being discussed. I&#8217;m a captive. I can neither provide any useful commentary on the discussion nor gain any useful insight from it. Even worse, I&#8217;m a consultant that bills on an hourly basis. I <em>hate</em> wasting my client&#8217;s time on uselessness when I could be doing something more productive with it.</p>
<h2>Why I Think We Do It This Way</h2>
<p>For several reasons, holding a management position is thought of as being a few steps up the career ladder, above the lowly status of the worker bee. I happen to think this situation is unfortunate, but that will be the topic of a later essay. In any case, people currently in management are usually older than the people that they manage, and they usually learned what they know about office interaction when they were younger, or at the very least from people who are older than they are. This means that the habits that are ingrained in managers may reflect a technological state of the art that was current ten or twenty years ago, maybe more.</p>
<p>Before the advent of telephones, e-mail, instant messaging, and wikis, the only way to get a timely update from several members of a team was to gather the members of the team together at a pre-arranged time and place. Fortunately, the telephone pre-dates most people currently in management, so for widely dispersed teams the conference call is in common use.</p>
<p>I try to take advantage of status meetings held both in-person and via conference calls by arranging my schedule so that my virtual working hours fall during the times that the status meetings are held. I dial into the meeting on my cell, using a headset so that my hands can stay on the keyboard. I listen for my name, provide my update and any comments that are relevant, and for the rest of the time I&#8217;m writing code, debugging, documenting, or testing. I&#8217;m less productive than I would be if I didn&#8217;t have to split my brain between the meeting and other tasks, but at least my downtime isn&#8217;t a total loss.</p>
<h2>A Better Way</h2>
<p>Rather than holding status meetings in person or via conference calls, why not take advantage of that wonderful new invention called e-mail? Every team I&#8217;ve worked on since 1993 has had e-mail. It&#8217;s safe to say, in fact, that I would <em>refuse</em> to work on a team in which one or more members didn&#8217;t have an e-mail address. E-mail has reached a comfortable level of ubiquity.</p>
<p>Here is what I propose: On a regular basis (for example, before noon every Monday) each team member would send an e-mail to the team&#8217;s manager and copy every other member of the team. The subject of the e-mail would clearly state that it contains a weekly status update: &quot;Status Update for 2011/01/31.&quot; The body of the e-mail would contain a suitably detailed list of that team member&#8217;s assigned tasks and their status. It might also list the accomplishments of the past week and the problems that are retarding progress on current tasks.</p>
<p>Each team member could read these status updates at some point in the day and perhaps send a follow-up e-mail to other <em>relevant</em> team members to provide additional comments or ask questions. A meeting could be scheduled among interested parties if a topic needed to be discussed in more depth, or a meeting may just happen spontaneously in a phone call or around a whiteboard.</p>
<p>This kind of arrangement provides several advantages. First of all, it eliminates the need to synchronize everyone&#8217;s schedule around an event at a particular time and place every week (or every day, if a team is particularly dysfunctional). Second, it allows a great deal of flexibility in providing status updates to the team. Some people might compose their e-mails on Friday afternoon, some on Sunday evening, and some at 11:47 on Monday morning. Whatever fits into each person&#8217;s style and schedule will work.</p>
<p>Finally, and most importantly to me, if one is really in a flow and madly banging away at the keyboard in a productive state that I like to call &quot;code falling out of the fingers,&quot; there&#8217;s no need to stop that state of productivity to listen to someone else drone about something which has little or no connection to whatever problem that person is thinking about. Each team member can reach a comfortable stopping point and deal with writing or reading the status e-mails on his own time.</p>
<h3>An Aside: Flow Is King</h3>
<p>In software development, particularly, achieving and maintaining flow is crucial for productivity. I worked on a project a while back that had a project status meeting every day at 11:00 AM. This REALLY killed my flow, because I like to spend the first part of each morning taking care of busy work, and by 9:30 or 10:00 I want to be in a really deep flow that may last until 1:00 or 2:00 in the afternoon, or whenever my hunger pangs finally remind that it&#8217;s time for lunch. Once, when my wife and I were engaged, she surprised me at my office while I was in this flow state. It took several seconds for me to even recognize her, and a few more seconds to be able to shift gears into human-to-human conversation. The flow state can be <em>that</em> deep!</p>
<p>If you&#8217;re a manager, you want your team members to be able to achieve and maintain a state of flow. Please, try to avoid doing anything that might interrupt it.</p>
<h2>The Right Kinds of Meetings</h2>
<p>As I wrote earlier, not all meetings are bad. I am a big fan of meetings in which all of the participants are focused on a particular issue. The meeting need not have a published agenda; that can often be a bad sign. All that&#8217;s needed is a clear statement of what the meeting needs to accomplish. For example, &quot;We need to figure out what databases contain the data we need to gather for the migration from product ABC to product XYZ.&quot; That&#8217;s a meeting that has a chance of getting something done.</p>
<p>Another favorite of mine is the ad-hoc meeting, where two or three people might be discussing an idea or a problem, and before long they&#8217;re scribbling on a whiteboard or sitting around a computer trying out ideas.</p>
<p>What these kinds of meetings have in common is that all of the participants are <em>engaged</em>. They&#8217;re working toward a common goal so that they can get work done based on the output of the meeting. Project status meetings, in my experience anyway, never meet this description.</p>
<h2>Why Not Try It?</h2>
<p>I don&#8217;t know why, but I have yet to convince a manager that holds conventional status meetings to switch to e-mail updates instead. I&#8217;d like to hear from some managers about this idea. Why might it not work? Are there downsides that I&#8217;m just not seeing?</p>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.parkscomputing.com%2F2011%2F01%2Fplease-stop-holding-project-status-meetings%2F&amp;t=Please%20Stop%20Holding%20Project%20Status%20Meetings" id="facebook_share_button_363" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none; display: -moz-inline-block; display:inline-block; padding:1px 20px 0 5px; margin: 5px 0; height:15px; border:1px solid #d8dfea; color: #3B5998; background: #fff url(http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif) no-repeat top right;">Share</a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_363') || document.getElementById('facebook_share_icon_363') || document.getElementById('facebook_share_both_363') || document.getElementById('facebook_share_button_363');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_363') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://www.parkscomputing.com/2011/01/please-stop-holding-project-status-meetings/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>It&#8217;s Not a DOS Prompt!</title>
		<link>http://www.parkscomputing.com/2009/11/its-not-a-dos-prompt/</link>
		<comments>http://www.parkscomputing.com/2009/11/its-not-a-dos-prompt/#comments</comments>
		<pubDate>Sat, 14 Nov 2009 02:27:00 +0000</pubDate>
		<dc:creator>Paul Parks</dc:creator>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[rants]]></category>

		<guid isPermaLink="false">http://nightowl/?p=36</guid>
		<description><![CDATA[I&#8217;ve been hearing this a lot lately (you know who you are), so rather than pull all of you aside privately and give this lecture, I thought I&#8217;d do it once, publicly. You&#8217;re not running a DOS prompt. When you click on that shortcut that says, &#8220;Command Prompt&#8221; in Windows XP, or you run cmd.exe [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been hearing this a lot lately (you know who you are), so rather than pull all of you aside privately and give this lecture, I thought I&#8217;d do it once, publicly. You&#8217;re not running a DOS prompt.</p>
<p>When you click on that shortcut that says, &#8220;Command Prompt&#8221; in Windows XP, or you run <code>cmd.exe</code> from the &#8220;Run&#8221; box, you&#8217;re <em>not</em> starting a &#8220;DOS prompt.&#8221; What you are starting is a command line interface, or just &#8220;command line&#8221; if you prefer. If you haven&#8217;t actually run <code>COMMAND.COM</code>, <em>it&#8217;s not DOS!</em>.</p>
<p>So, please, next time don&#8217;t tell me to run your favorite utility &#8220;at the DOS prompt.&#8221; Let DOS rest in peace.</p>
<p>The first person to call Powershell a DOS prompt will get the lecture in real time.</p>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.parkscomputing.com%2F2009%2F11%2Fits-not-a-dos-prompt%2F&amp;t=It%27s%20Not%20a%20DOS%20Prompt%21" id="facebook_share_button_36" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none; display: -moz-inline-block; display:inline-block; padding:1px 20px 0 5px; margin: 5px 0; height:15px; border:1px solid #d8dfea; color: #3B5998; background: #fff url(http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif) no-repeat top right;">Share</a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_36') || document.getElementById('facebook_share_icon_36') || document.getElementById('facebook_share_both_36') || document.getElementById('facebook_share_button_36');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_36') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://www.parkscomputing.com/2009/11/its-not-a-dos-prompt/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Hitchhiker&#8217;s Guide to UI Design</title>
		<link>http://www.parkscomputing.com/2009/08/the-hitchhikers-guide-to-ui-design/</link>
		<comments>http://www.parkscomputing.com/2009/08/the-hitchhikers-guide-to-ui-design/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 23:32:00 +0000</pubDate>
		<dc:creator>Paul Parks</dc:creator>
				<category><![CDATA[UI]]></category>
		<category><![CDATA[rants]]></category>

		<guid isPermaLink="false">http://nightowl/?p=27</guid>
		<description><![CDATA[Larry Osterman talked about Windows 7 user interface changes in a post today, and it generated a minor comment storm, in which I participated. He talked about some buttons that used to be obvious buttons in Windows Vista, but which were made &#8220;flat&#8221; in Windows 7 so that they&#8217;re no longer obviously buttons until the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blogs.msdn.com/larryosterman/archive/2009/08/03/a-few-of-my-favorite-win7-sound-features-ui-refinements.aspx">Larry Osterman talked about Windows 7 user interface changes</a> in a post today, and it generated a minor comment storm, in which I participated. He talked about some buttons that used to be obvious buttons in Windows Vista, but which were made &#8220;flat&#8221; in Windows 7 so that they&#8217;re no longer obviously buttons until the user hovers over them with a mouse.</p>
<p>I <a href="http://blogs.msdn.com/larryosterman/archive/2009/08/03/a-few-of-my-favorite-win7-sound-features-ui-refinements.aspx#9856853">gave my opinion</a> a <a href="http://blogs.msdn.com/larryosterman/archive/2009/08/03/a-few-of-my-favorite-win7-sound-features-ui-refinements.aspx#9857328">couple of times, </a>coming down on the side of non-flat buttons. The whole discussion, though, reminded me of a couple of passages from <a href="http://www.amazon.com/Hitchhikers-Guide-Galaxy-25th-Anniversary/dp/1400052920/ref=sr_1_1?ie=UTF8&amp;qid=1249414638&amp;sr=8-1">The Hitchhiker&#8217;s Guide To the Galaxy</a> that describe the design of the ship The Heart of Gold.</p>
<blockquote><p>The cabin was mostly white, oblong, and about the size of a smallish restaurant. In fact it wasn&#8217;t perfectly oblong: the two long walls were raked round in a slight parallel curve, and all the angles and corners of the cabin were contoured in excitingly chunky shapes. The truth of the matter is that it would have been a great deal simpler and more practical to build the cabin as an ordinary three-dimensional oblong room, but then the designers would have got miserable.</p></blockquote>
<p>That sounds like everything I dislike about UI design these days, particularly in Flash and Silverlight apps where designers feel compelled to recreate UI widgets that behave almost, but not quite, entirely unlike standard widgets.</p>
<blockquote><p>A loud clatter of gunk music flooded through the Heart of Gold cabin as Zaphod searched the sub-etha radio wave bands for news of himself. The machine was rather difficult to operate. For years radios had been operated by means of pressing buttons and turning dials; then as the technology became more sophisticated the controls were made touch-sensitive &#8212; you merely had to brush the panels with your fingers; now all you had to do was wave your hand in the general direction of the components and hope. It saved a lot of muscular expenditure, of course, but meant that you had to sit infuriatingly still if you wanted to keep listening to the same program.</p></blockquote>
<p>That sounds a lot like where flat buttons are headed. In fact, it sounds strikingly like an iPod.</p>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.parkscomputing.com%2F2009%2F08%2Fthe-hitchhikers-guide-to-ui-design%2F&amp;t=The%20Hitchhiker%27s%20Guide%20to%20UI%20Design" id="facebook_share_button_27" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none; display: -moz-inline-block; display:inline-block; padding:1px 20px 0 5px; margin: 5px 0; height:15px; border:1px solid #d8dfea; color: #3B5998; background: #fff url(http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif) no-repeat top right;">Share</a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_27') || document.getElementById('facebook_share_icon_27') || document.getElementById('facebook_share_both_27') || document.getElementById('facebook_share_button_27');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_27') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://www.parkscomputing.com/2009/08/the-hitchhikers-guide-to-ui-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Useless Gadget Features</title>
		<link>http://www.parkscomputing.com/2009/05/useless-gadget-features/</link>
		<comments>http://www.parkscomputing.com/2009/05/useless-gadget-features/#comments</comments>
		<pubDate>Wed, 06 May 2009 23:46:00 +0000</pubDate>
		<dc:creator>Paul Parks</dc:creator>
				<category><![CDATA[hardware]]></category>
		<category><![CDATA[rants]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://nightowl/?p=24</guid>
		<description><![CDATA[I guess I would never make it as the CEO of some electronic gadget company, because I would never dream of loading down every gadget with a web browser and a picture viewer. I love my Nintendo Wii; I&#8217;ve spent hours playing Mario Kart or bowling with the kids. I even got Wii Fit, though [...]]]></description>
			<content:encoded><![CDATA[<p>I guess I would never make it as the CEO of some electronic gadget company, because I would never dream of loading down every gadget with a web browser and a picture viewer. I love my Nintendo Wii; I&#8217;ve spent hours playing Mario Kart or bowling with the kids. I even got Wii Fit, though I use the Balance Board more for Shaun White Snowboarding (and get a better workout doing it). But I&#8217;ve never looked at pictures on my Wii. I&#8217;ve only browsed the web just to see what it looks like, and whether a couple of my sites were readable (not very).</p>
<p>So, I&#8217;m dying to know why gadget companies feel that it&#8217;s necessary to load down every product with useless stuff like this? If a professional geek like me doesn&#8217;t even bother to use these features, then who is using them?</p>
<p>I&#8217;d much rather see gadget makers spend some time and resources on the core functionality of their gadgets (do you hear me, phone people?) than on browsing, social networking, or photo viewing.</p>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.parkscomputing.com%2F2009%2F05%2Fuseless-gadget-features%2F&amp;t=Useless%20Gadget%20Features" id="facebook_share_button_24" style="font-size:11px; line-height:13px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif; text-decoration:none; display: -moz-inline-block; display:inline-block; padding:1px 20px 0 5px; margin: 5px 0; height:15px; border:1px solid #d8dfea; color: #3B5998; background: #fff url(http://b.static.ak.fbcdn.net/images/share/facebook_share_icon.gif) no-repeat top right;">Share</a>
	<script type="text/javascript">
	<!--
	var button = document.getElementById('facebook_share_link_24') || document.getElementById('facebook_share_icon_24') || document.getElementById('facebook_share_both_24') || document.getElementById('facebook_share_button_24');
	if (button) {
		button.onclick = function(e) {
			var url = this.href.replace(/share\.php/, 'sharer.php');
			window.open(url,'sharer','toolbar=0,status=0,width=626,height=436');
			return false;
		}
	
		if (button.id === 'facebook_share_button_24') {
			button.onmouseover = function(){
				this.style.color='#fff';
				this.style.borderColor = '#295582';
				this.style.backgroundColor = '#3b5998';
			}
			button.onmouseout = function(){
				this.style.color = '#3b5998';
				this.style.borderColor = '#d8dfea';
				this.style.backgroundColor = '#fff';
			}
		}
	}
	-->
	</script>
	]]></content:encoded>
			<wfw:commentRss>http://www.parkscomputing.com/2009/05/useless-gadget-features/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

