<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-31854701</atom:id><lastBuildDate>Fri, 07 Nov 2008 17:23:20 +0000</lastBuildDate><title>Neo Diem</title><description>techno-babble from a traveling consultant in the throes of large-scale custom application development.</description><link>http://blog.neodiem.com/default.htm</link><managingEditor>noreply@blogger.com (Tempus Fugate)</managingEditor><generator>Blogger</generator><openSearch:totalResults>74</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><geo:lat>45.442634</geo:lat><geo:long>-122.618335</geo:long><creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/</creativeCommons:license><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/NeoDiem" type="application/rss+xml" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-31854701.post-1807518862373217138</guid><pubDate>Fri, 07 Nov 2008 17:21:00 +0000</pubDate><atom:updated>2008-11-07T09:23:20.569-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">project management</category><category domain="http://www.blogger.com/atom/ns#">planning</category><category domain="http://www.blogger.com/atom/ns#">offshore</category><title>Preparing For Multi-site Engagements</title><description>&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 240px;height:185px;" src="http://neodiem.com/img/virtualteam2.jpg" alt="" border="0" /&gt;
I've spent quite a bit of time in the last several years living and learning with the challenges of doing multi-site projects.  From offshore development where I managed teams operating between the US and India, to near-shore development with teams on both coasts of America, to smaller engagements with 6 people in 3 west coast cities.  I've had successes and not a few glorious failures.  It's the pitfalls, missteps, and screw ups that helped me learn the most.&lt;br&gt;
&lt;br&gt;
Recently, I was asked to give some feedback on the things that have the most impact to new multi-site engagements.  This is a pretty common request these days and I've since written down my thoughts so I could present them more consistently.  This post is a very succinct summation of the big ticket items.&lt;br&gt;
&lt;br&gt;
Naturally, much of this advice would be tailored to the specific circumstances and players, but the items discussed in the post are all generically applicable.  If your situation involves working with teams in India or Manila or Slovenia (as examples), you'd want to get some specific tips on dealing with those cultures.  This is no different than if you will be working with any of the Native American nations or in Silicon Valley where there are special considerations.  Always get the heads up so you can be sensitive to the culture in which you'll be working.  But those are for other posts, on with the show.&lt;br&gt;
&lt;br&gt;
My personal guide is an ordered list I cheekily refer to as the Four T's.  In order of impact they are Trust, Time, Transparency, and Talking.  I'll discuss each a little to explain what I mean.&lt;br&gt;
&lt;br&gt;
Building and maintaining trust is the single most critical thing that can impact your engagement.  It is extremely easy to take this for granted, especially since it seems so obvious.  In reality, we rarely address issues of trust head-on in the corporate world, but they become very important when you don't have face-time to rely on in the relationship.  Nothing builds trust as fast as personal bonding time, nothing destroys it faster than a lack of transparency.  Once trust becomes compromised, every other facet becomes harder and more risky.  Without trust, communication become s suspect and morphs from a tool into a weapon.&lt;br&gt;
&lt;br&gt;
If you want to earn trust, get some face-time.  Obviously, in the real world is best, but lacking that, get on a video chat.  You have to be able to read and see body language.  You have to find a way to bond and see each other as people not resources.  You have to allow everyone to take the measure of everyone else and to fill in the mental picture that they'll remember and substitute into every other conversation regardless of media.&lt;br&gt;
&lt;br&gt;
Recognize up front that coordination among parties in different physical locations is inherently going to take more time.  It takes more iterations to verify directional correctness, ensure quality, and declare accomplishments.  Everything just takes more time.  Stop trying to pretend this isn't the case or even to minimize this to act like it won't.  Just prepare and plan for the impact, embrace the reality when it occurs, and don't get cocky when things are going smooth and you think you can tighten up.&lt;br&gt;
&lt;br&gt;
When it comes to operating transparently, make sure you are delivering messages properly.  Any directional messages should be disseminated with the whole team at the same time.  When possible, do all messaging to the entire team at once.  Then reserve your smaller leadership group for issue resolution and check-pointing.  This can feel unwieldy at first, but the dividends it pays in trust will more than make up for it.  If you are suffering from any trust issues, this can be the only chance at repairing the damage and pulling the team back together.&lt;br&gt;
&lt;br&gt;
Lastly, don't under-estimate the power of Talking.  Emails do not carry tone or intent very well.  They aren't very transparent so they wear down the trust and are the easiest road to miscommunication.  This is not to imply you don't write things down.  On the contrary, always follow up your conversations with a written summary of the talking points decisions, action items, etc.  But as much as possible carry your meaningful conversations over voice.  If you can add the element of your face and body language via video, this is all the better.&lt;br&gt;
&lt;br&gt;
These are important things to consider as you move forward but the attitude in which you apply each of them is also critical.  Remember that you aren't planning for efficiency, you plan so that you'll recognize the problems that WILL occur and fix them without a total collapse.  This is similar to how automobiles are designed.  Some years ago, some automobile companies made amazing and powerful engines but you had to take the whole thing apart to change the oil. Other companies came along with designs that weren't as efficient to run, and were a little more expensive to design and build.  But the oil change was a simple thing anyone could do for a few dollars.  Ultimately the more successful designs were those that made it easiest to deal with the challenges that were certain to arise (changing the oil) as efficiently as possible instead of trying to optimize for performance or build cost.&lt;br&gt;
&lt;br&gt;
The last tip I'll offer in this post is about quality and standards.  When doing multi-site engagements that involve parallel efforts or multiple work streams, consider separating the oversight for quality or standards enforcement into an isolated group.  Leaving the oversight functions within the different operating units allows disparities in enforcement or standards to creep in.  This often is construed as unfair advantage or favoritism or something equally nefarious.  Left within each group this disparity is pretty unavoidable and is a very subtle disease that can do a lot of damage when left unchecked.  Making a distinct group responsible for these functions will help avoid this issue and its variants.  It can also serve as a single neck to choke when trouble does arise.&lt;br&gt;
&lt;br&gt;
Don't forget that tips like these aren't any use if you don't treat people with respect and act with integrity.&lt;br&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/NeoDiem?a=5LJJsE"&gt;&lt;img src="http://feeds.feedburner.com/~a/NeoDiem?i=5LJJsE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=6xt0N"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=6xt0N" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=zWWzN"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=zWWzN" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=fWHBN"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=fWHBN" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=7BUyN"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=7BUyN" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=EE4nN"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=EE4nN" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=BDCxN"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=BDCxN" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=YtSRn"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=YtSRn" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=micon"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=micon" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=pf7GN"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=pf7GN" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=mOjKN"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=mOjKN" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=iWRMN"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=iWRMN" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/445708267" height="1" width="1"/&gt;</description><link>http://blog.neodiem.com/2008/11/preparing-for-multi-site-engagements.htm</link><author>noreply@blogger.com (Tempus Fugate)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-31854701.post-8547115771778218192</guid><pubDate>Wed, 30 Jul 2008 19:47:00 +0000</pubDate><atom:updated>2008-07-30T12:55:32.413-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">technobabble</category><category domain="http://www.blogger.com/atom/ns#">planning</category><category domain="http://www.blogger.com/atom/ns#">database mdm</category><title>Master Data Management</title><description>&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 237px; height: 240px;" src="http://neodiem.com/img/olap.jpg" alt="" border="0"&gt; Recently I had the pleasure of discussing with a prospective client  the bulky subject of Master Data Management (MDM).  In this situation the client was considering  a variety of MDM solutions and wanted some specific direction into which technology/vendor to choose from.&lt;br /&gt;
&lt;br /&gt;
Now it is no secret that I tend to favor Microsoft products but in this case the platform already in place was Oracle so naturally, I wanted to give them &lt;a href="http://thedewmaker.spaces.live.com/blog/cns%21B0332087ACE7C96%213105.entry"&gt;more general advice&lt;/a&gt; instead of just pushing MS MDM.&lt;br /&gt;
&lt;br /&gt;
There are quite a few upfront activities that must be done regardless of which products you are going to use.  I've listed some introductory efforts that need to be done earlier in the process and that can be done before production selection.&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt; &lt;li&gt;&lt;strong&gt;Governance&lt;/strong&gt;&lt;br /&gt;
To  get the ball rolling, you really need to figure out what data you are talking about, where it lives, who thinks they own it now, and what organization you need to address this effort.  Here are some suggestions on how to make this go smoothly:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt; &lt;li&gt;&lt;strong&gt;Identify External Data Ownership&lt;/strong&gt;&lt;br /&gt;
Often there will be multiple owners identified for the same data.  Being able to identify these different uses in their various applications is a significant lever used throughout the rest of the process.  Without a clear understanding of where the data is currently 'owned' and its criticality to various applications, mis-matched expectations will cause problems. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Formalize Ownership in MDM&lt;/strong&gt;&lt;br /&gt;
This often requires significant negotiation and compromise from the various stakeholders.  In organizations where the inter-organization  trust level is high, this is more straight-forward.  In some environments, only a top-down directive will accomplish this.  Whichever tactic is used, establishing formal ownership is a prerequisite for success. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Identify Data Domains&lt;/strong&gt;&lt;br /&gt;
This sounds a lot easier than it always ends of being.  Attributes utilized by disparate systems often have subtleties in their definitions which must be accommodated.  Being able to provide synonym mapping and transition approaches is imperative to keeping comfort levels high between organizations. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Formalize Domain Administration Process&lt;/strong&gt;&lt;br /&gt;
Having an established (and hopefully standardized!) set of processes to perform CRUD operations on domains can take the stress out of relationships where trust levels are sub par between applications. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Establish Organizational Governance&lt;/strong&gt;&lt;br /&gt;
This is often rolled up into Change Management or a similar phase, but in reality needs to be an ongoing activity.  These organizational groupings will allow for escalation procedures, conflict resolution, and increased visibility into the data lifecycles. &lt;/li&gt; &lt;/ol&gt;  &lt;/li&gt;  &lt;br /&gt;
Once you have the basic framework to talk about data ( and who owns it, how it gets maintained, etc. )  you can then delve into the specifics of the data.&lt;br /&gt;
&lt;br /&gt;
&lt;li&gt;&lt;strong&gt;Model Dimensions&lt;/strong&gt;&lt;br /&gt;
If governance is properly addressed, this should be a fairly straightforward exercise for data architects.  They'll go through some steps similar to the following:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt; &lt;li&gt;&lt;strong&gt;Identify Dimensions&lt;/strong&gt;&lt;br /&gt;
What data are you really talking about?  You need to pick a single name for each domain.  Sometimes the same type of data is called different things in different places.  You have to formalize on a common taxonomy. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Identify Consuming Applications&lt;/strong&gt;&lt;br /&gt;
There may be downstream consumers beyond the currently perceived data owners.  Make sure you understand the data lifecycle and flows so you can estimate impacts properly. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Identify Entities Per Dimension&lt;/strong&gt;&lt;br /&gt;
Make sure you flesh out the taxonomy down to the most granular level necessary.  The more detail you include now, the more hours saved later. &lt;/li&gt; &lt;li&gt;Identify Entity Attributes&lt;br /&gt;
This is a critical step that is often treated as a second-class citizen.  In reality, it is a key driver.  Without precision about attributes, the potential values and rules (which come next) can't be properly defined.  It also means your estimates will be incorrect.  &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Quantify Attribute Values&lt;/strong&gt;&lt;br /&gt;
This is only as important as the complexity of the data rules (which come next) and the accuracy of your rule implementation estimates need to be.  If your sources have this well defined, it should be straightforward to ensure this is comprehensive. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Identify Data Rules&lt;/strong&gt;&lt;br /&gt;
This is sometimes referred to ambiguously as Business Rules which is very imprecise.  Here we are speaking not to rules governing operations or activities (hence the term Business) but instead the states, lifecycles, and value cohorts for entities and domains. &lt;/li&gt; &lt;/ol&gt;  &lt;/li&gt; &lt;/ul&gt; &lt;br /&gt;
As you can well imagine this is a significant undertaking for any organization, and can be done in a technology agnostic way.  Once you've identified and quantified this information, you can begin to look at transition plans, data flow planning and infrastructure.  These are very technology and environmentally specific.&lt;br /&gt;
&lt;br /&gt;
As the proverb states: "Measure twice, cut once."&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/NeoDiem?a=kAPUBM"&gt;&lt;img src="http://feeds.feedburner.com/~a/NeoDiem?i=kAPUBM" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=f6hDqJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=f6hDqJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=gvtvAJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=gvtvAJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=HTU5MJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=HTU5MJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=Yk9JWJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=Yk9JWJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=epKQYJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=epKQYJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=aFCc4J"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=aFCc4J" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=rOKavj"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=rOKavj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=XKIAwj"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=XKIAwj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=JoEW3J"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=JoEW3J" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=Zhhz8J"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=Zhhz8J" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=gihCwJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=gihCwJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/350819634" height="1" width="1"/&gt;</description><link>http://blog.neodiem.com/2008/07/master-data-management.htm</link><author>noreply@blogger.com (Tempus Fugate)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-31854701.post-1126555895747230090</guid><pubDate>Tue, 24 Jun 2008 00:12:00 +0000</pubDate><atom:updated>2008-06-23T17:20:36.366-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">technobabble media device</category><title>I Just Want My Media on My TV</title><description>&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 240px;height:180px;" src="http://neodiem.com/img/mediacenterstartmenu.jpg" alt="" border="0" /&gt;
The last couple of weeks have been ridiculously frustrating.  All I want is to get my media, on my television, playing the sound through my stereo. This should be a no brainer, right?&lt;br&gt;
&lt;br&gt;
Well it turns out that once again I must be just an outlying data point in the world of consumer electronics.  What a frustrating adventure this is turning out to be. I've tried lots of different combinations with mixed bag of success and no clear winners.  To start with here's a quick run-down of my basic requirements.&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;My media is on two big hard-drives:
&lt;ul&gt;
&lt;li&gt;1TB external hard-drives&lt;/li&gt;
&lt;li&gt;accessible via USB&lt;/li&gt;
&lt;li&gt;willing to share them over the net with an always on pc, but prefer to just plug them in&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;My media is very big and mixed:
&lt;ul&gt;
&lt;li&gt;about 100K songs, from 10K artists, all in MP3, with cover art and ratings embedded in the tags (about 600 GBs)&lt;/li&gt;
&lt;li&gt;about 10k high-quality pictures (about 100GB)&lt;/li&gt;
&lt;li&gt;about 3K videos, mostly DIVX and XVID, organized in folders by type, series, season, etc. (about 400 GB)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;I need to navigate music by playlists, artists, and genre. I've listed them in the order of importance to me. Playlists need to be 'smart' so they'll respect the ratings, genre, etc. that have been painstakingly maintained. For example, a playlist would be 'Songs in Genre = Folk, Subgenre = Acoustic, Rating &gt; 3'&lt;/li&gt;
&lt;li&gt;Displaying cover art from the file is a must. Displaying other tag attributes is a nice-to-have.&lt;/li&gt;
&lt;li&gt;Displaying a picture slide-show while playing songs is a must.
&lt;ul&gt;
&lt;li&gt;Being able to choose a specific directory is a nice-to-have.&lt;/li&gt;
&lt;li&gt;Being able to pick a set of specific directories is a nice-to-have.&lt;/li&gt;
&lt;li&gt;Assigning a set of directories to a playlist is a nice-to-have.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Being able to navigate videos by type, show, season is important.&lt;/li&gt;
&lt;li&gt;Output via HDMI or DVI is important.&lt;/li&gt;
&lt;li&gt;I have no interest in using a tv tuner, scheduling recordings or any of that other TV nonsense. So not having it in my way is a good thing.&lt;/li&gt;
&lt;li&gt;Being able to edit ratings on screen is important.&lt;/li&gt;
&lt;li&gt;Being able to create playlists on the fly is important.&lt;/li&gt;
&lt;li&gt;Being able to shuffle by playlist, album, artist is important.&lt;/li&gt;
&lt;li&gt;Media will get added routinely, so being able to monitor the folders on the drives is important.&lt;/li&gt;
&lt;li&gt;Start-up time for spinning up music and videos is important.&lt;/li&gt;
&lt;li&gt;Being able to navigate the very large amount of media quickly and by different attributes is important.&lt;/li&gt;
&lt;li&gt;Being able to access this media from more than one television is important.&lt;/li&gt;
&lt;li&gt;Being able to do all this without a dedicated, always-on pc, is only a nice-to-have.&lt;/li&gt;
&lt;li&gt;Being able to get all this with commercial off-the-shelf stuff is important. I don’t crack boxes, and most soft-mods are off the table too.&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
When it comes to home electronics, I'm no slouch.  I've been trying a whole host of devices and combinations.  For example the &lt;a href="http://www.amazon.com/Netgear-EVA8000-Digital-Entertainer-HD/dp/B000NNBK9O/ref=sr_1_1?ie=UTF8&amp;s=electronics&amp;qid=1214263095&amp;sr=8-1"&gt;Netgear EVA8000 Digital Entertainer HD&lt;/a&gt; and the &lt;a href="http://helios-labs.com/"&gt;Helios X5000 Network Media Player&lt;/a&gt; are two examples I've tried.  They both really suck.  Not only are they slow and can't do half of what I need, they are expensive and crashed often.&lt;br&gt;
&lt;br&gt;
I do have a Windows Media Center pc (from Windows Vista Ultimate) which is a pretty good interface. And we have two Xbox 360's.  There are multiple ways to connect these bad boys, but the really obvious one (as a Media Extender) doesn't seem to work out of the box.  Being pretty good at figuring this crap out, if I can't get it to work after a couple long sessions of fiddling, it's just not meant to be (for me). Tips anyone?&lt;br&gt;
&lt;br&gt;
One option I'm considering is the &lt;a href="http://apple.com/appletv"&gt;Apple TV&lt;/a&gt;.  The interface is one of the slickest I've ever seen and the speed appears acceptable.  But it won't play my videos without jumping through mod hoops and I'm not a fan of that.  Unless someone has an alternative?&lt;br&gt;
&lt;br&gt;
So now you know my predicament.  What else should I try?  Ideas? Anyone? Bueller? Bueller?&lt;br&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/NeoDiem?a=TIX4Rc"&gt;&lt;img src="http://feeds.feedburner.com/~a/NeoDiem?i=TIX4Rc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=yHj6OI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=yHj6OI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=d0LXHI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=d0LXHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=QwNWdI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=QwNWdI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=MfovfI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=MfovfI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=Q6LSFI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=Q6LSFI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=pa7irI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=pa7irI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=kWIS7i"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=kWIS7i" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=4ep5Pi"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=4ep5Pi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=BkqdyI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=BkqdyI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=HvL0cI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=HvL0cI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=pBMTSI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=pBMTSI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/318488386" height="1" width="1"/&gt;</description><link>http://blog.neodiem.com/2008/06/i-just-want-my-media-on-my-tv.htm</link><author>noreply@blogger.com (Tempus Fugate)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-31854701.post-1636193752223274317</guid><pubDate>Mon, 02 Jun 2008 23:43:00 +0000</pubDate><atom:updated>2008-06-02T16:46:35.373-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">personal spew</category><category domain="http://www.blogger.com/atom/ns#">technobabble</category><title>It's Been A Circus</title><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://neodiem.com/img/clownfeet.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px;" src="http://neodiem.com/img/clownfeet.jpg" alt="" border="0" /&gt;&lt;/a&gt;Sorry for the delay guys!&lt;br&gt;
&lt;br&gt;
Lately it has been a circus around here.  Lots of new projects and learning going on these days. Who's in a recession?  Not the tech industry!&lt;br&gt;
&lt;br&gt;
So I've been working on Facebook Apps, MOSS customizations, writing tons of Silverlight widgets, reams of XAML and buckets of boatloads of WPF.&lt;br&gt;
&lt;br&gt;
I'll bring you up to date on the latest shenanigans once things calm down a bit. Feel free to post questions if you want to spur my creative juices!&lt;br&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/NeoDiem?a=GVFFqh"&gt;&lt;img src="http://feeds.feedburner.com/~a/NeoDiem?i=GVFFqh" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=amvBlI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=amvBlI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=JOwlEI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=JOwlEI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=pM2o6I"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=pM2o6I" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=pHpGvI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=pHpGvI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=CieK3I"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=CieK3I" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=fFx8WI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=fFx8WI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=1rjo7i"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=1rjo7i" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=DNPi9i"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=DNPi9i" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=fexwzI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=fexwzI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=ollOII"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=ollOII" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=fvBwpI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=fvBwpI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/303313768" height="1" width="1"/&gt;</description><link>http://blog.neodiem.com/2008/06/its-been-circus.htm</link><author>noreply@blogger.com (Tempus Fugate)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-31854701.post-2727623770183559208</guid><pubDate>Fri, 25 Apr 2008 18:23:00 +0000</pubDate><atom:updated>2008-04-25T12:19:06.838-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">agile</category><category domain="http://www.blogger.com/atom/ns#">technobabble</category><category domain="http://www.blogger.com/atom/ns#">leadership</category><title>Leadership and Agile</title><description>&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 188px;height:240px;" src="http://neodiem.com/img/tworoads.jpg" alt="" border="0" /&gt;
This week I had several opportunities to speak with people about Agile.&lt;br&gt;
&lt;br&gt;
As I listened to yet another discussion about Agile there were several things about the conversation that just really stuck out to me.  It started with one strong idea of which I just couldn't seem to let go:
&lt;blockquote&gt;
Agile is great under the umbrella of strong leadership.  If the direction, metrics or criteria for success aren't well understood and broadly accepted across the organization, then returns on investment and efficiencies will likely not be realized.&lt;br&gt;
&lt;/blockquote&gt;
&lt;br&gt;
In high-performing companies the gestalt is achieved when the employees are empowered to self-direction and a feeling of ownership.  Even in these companies, that sense of empowerment and value is only powerful as the individual choices and decisions can be aligned to the bigger vision of the organization as a whole. When the vision or mandates of the organization aren't clearly articulated or fail to be fully accepted within the ranks, then organizations experience churn and confusion.  Without alignment to a bigger mission, the agendas from the various levels of management tend to begin conflicting and drifting as individual interpretations of value and success criteria are formed.  This churn due to conflicting expectations makes it easier for issues to hide and for misalignment to go unchecked for increasing periods of time.&lt;br&gt;
&lt;br&gt;
Even in cases where misalignment is uncovered, the process needed to achieve consensus can then take longer and without strong leadership won't necessarily drive the business impact needed for growth or even sustainment.&lt;br&gt;
&lt;br&gt;
This then is the crux.  Leadership is essential for achieving business value.  You can use Agile processes to seek business value, but without strong leadership you will find the criteria for success shifting too often and hiding behind the easy process of consensus building.&lt;br&gt;
&lt;br&gt;
To bring this back to the Agile conversations, I was feeling frustration with the reactive nature of those who ascribe to the Agile approaches.  They espouse this easy-going attitude of reaction in which direction, strategy, and even the definition of business value are left completely to the client.  This zen-like state in which the Agile practitioner responds fluidly to the changing and ethereal nature of the client demands is unnatural and impractical.  Business value is unlocked by making the hard choices, by understanding the elements of the business value and capability chain better than everyone else and leveraging that unfair advantage.&lt;br&gt;
&lt;blockquote&gt;
The reasonable man adapts himself to the world; the unreasonable one persists in trying to adapt the world to himself. &lt;br&gt;
Therefore, all progress depends on the unreasonable man.&lt;br&gt;
-- &lt;b&gt;George Bernard Shaw &lt;/b&gt;
&lt;/blockquote&gt;
&lt;br&gt;
Simply put, it is called &lt;b&gt;work&lt;/b&gt; because it IS hard.  It's painful and requires discipline.  If you are choosing to avoid the hard choices you are inevitably giving up the business advantages, wasting opportunities, and releasing accountability.  Live in a reactive mode long enough and you remove the incentive to estimate well, to live up to commitments, and to deliver beyond expectations.&lt;br&gt;
&lt;br&gt;
As everyone in technology knows, regardless of how long a task &lt;i&gt;should&lt;/i&gt; take, it always takes at least as long as the plan said it should.  We don't finish early, we just fill up the extra time with more stuff and junk.  We test a little more, refine a little more, increase scope if necessary.  If you aren't pushing the boundary and requiring unreasonable attainment, then you'll never get it either.&lt;br&gt;
&lt;br&gt;
When it comes to Agile, I embrace the incremental nature.  I covet the consensus of reactive expectations.  I do not respect the reduced commitment to discipline, the minimization of leadership, or the dismissal of accountability afforded a facilitator.  As Harry would say, "If you are going to come, come correct."  Harry can be very wise.&lt;br&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/NeoDiem?a=fMkaew"&gt;&lt;img src="http://feeds.feedburner.com/~a/NeoDiem?i=fMkaew" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=kRHXL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=kRHXL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=OcAxL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=OcAxL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=mSbYL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=mSbYL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=RdHWL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=RdHWL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=L6fQL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=L6fQL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=BNPcL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=BNPcL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=Qh5Yl"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=Qh5Yl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=y9Yal"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=y9Yal" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=CQinL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=CQinL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=dWg9L"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=dWg9L" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=hzXQL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=hzXQL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/277805224" height="1" width="1"/&gt;</description><link>http://blog.neodiem.com/2008/04/leadership-and-agile.htm</link><author>noreply@blogger.com (Tempus Fugate)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-31854701.post-4332184335404029287</guid><pubDate>Wed, 02 Apr 2008 00:01:00 +0000</pubDate><atom:updated>2008-04-01T17:23:39.577-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">development</category><category domain="http://www.blogger.com/atom/ns#">web services</category><category domain="http://www.blogger.com/atom/ns#">programming</category><category domain="http://www.blogger.com/atom/ns#">google</category><title>Free Code</title><description>&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 240px; height: 90px;" src="http://chart.apis.google.com/chart?cht=p3&amp;amp;chd=t:70,30&amp;amp;chs=240x90&amp;amp;chl=Tempus%7CFugate" alt="" border="0"&gt;  Lately, I've been really paying attention to how much functionality you can reuse for free from major players.  For example, you can check out the various Google APIs (&lt;a href="http://code.google.com/"&gt;http://code.google.com/&lt;/a&gt;)and the Yahoo! User Interface Library (&lt;a href="http://developer.yahoo.com/yui/"&gt;http://developer.yahoo.com/yui/&lt;/a&gt;).  These libraries are free, released via Open Source licenses, and offer ridiculous amounts of functionality.&lt;br /&gt;
&lt;br /&gt;
As a developer, I love the idea of being able to leverage the work of other people.  Most of the time, this is hard to do because so much of the code that everyone else writes is crap.  ;-)  But seriously, there is even a name for this, we call it Not Invented Here (NIH). The premise being most developers like to know exactly what their code is going to do, so using someone else's code can be hard.&lt;br /&gt;
&lt;br /&gt;
In the case of the big boys like Yahoo! and Google, it becomes a lot easier to trust that the code is going to deliver expected results and not be malicious or buggy.  After all, when it is provided (and used) by a company with billions of dollars of online reputation to uphold, you can pretty much bet they've tested it.&lt;br /&gt;
&lt;br /&gt;
Which isn't to say that just because they are all that, you don't need your own bag of chips, they have their issues too. Dependency and version issues, occasional bugs, and warped programming models are abundant.  But in the end, you are definitely getting your moneys worth.&lt;br /&gt;
&lt;br /&gt;
The chart at the top of this post is generated using the super cool (and free!) Google Chart API which means I won't be paying for Dundas or ChartFX licenses again.  You can find the details at &lt;a href="http://code.google.com/apis/chart/"&gt;http://code.google.com/apis/chart/&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/NeoDiem?a=vjwU9v"&gt;&lt;img src="http://feeds.feedburner.com/~a/NeoDiem?i=vjwU9v" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=xdN8L"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=xdN8L" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=TPUKL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=TPUKL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=z4r8L"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=z4r8L" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=ECljL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=ECljL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=Wed6L"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=Wed6L" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=VBzjL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=VBzjL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=t1sDl"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=t1sDl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=MtOUl"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=MtOUl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=LzBWL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=LzBWL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=tFaHL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=tFaHL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=wQuvL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=wQuvL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/262303102" height="1" width="1"/&gt;</description><link>http://blog.neodiem.com/2008/04/free-code.htm</link><author>noreply@blogger.com (Tempus Fugate)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-31854701.post-4057356558501714045</guid><pubDate>Mon, 10 Mar 2008 18:40:00 +0000</pubDate><atom:updated>2008-03-10T11:43:28.247-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">development</category><category domain="http://www.blogger.com/atom/ns#">testing</category><title>Why Unit Test?</title><description>&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 161px;height:240px;" src="http://neodiem.com/img/lonetreedirt.jpg" alt="" border="0" /&gt;

Recently, I had a down and dirty discussion with a team who is gearing up for a new engagement.  This team has been doing Scrum for a while but was struggling with how to fold testing more tightly into their development processes.&lt;br&gt;
&lt;br&gt;
The heart of the matter ended up being differences in the purpose and perception of Unit Tests specifically.  One camp saw the role of Unit Test as "to find bugs".  That's it.  They tell you where the bugs are.  If they are just about finding bugs, they have more value to new developers than established developers.  After all, great developers are much less likely to allow the kind of bugs found by Unit Tests in their code.  As a great developer I'm going to catch bad parameters and logic flaws before checking in my code.  Integration and functional bugs are probably not going to be found in Unit Tests anyway. &lt;br&gt;
&lt;br&gt;
The other camp (read: in my opinion) was resolute that Unit Tests fill a much larger purpose.  To my eyes, Units Tests go way beyond just finding bugs.  Following are four big ways that Unit Tests can add significant value over and above just finding bugs.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Proving Integration&lt;/b&gt;&lt;br&gt;
Today's applications are more distributed and componentized than ever.  The number of moving parts has just sky-rocketed with the use of frameworks and new API's, the prevalence of SOA and more  component-oriented designs.  Personally I see goodness here, but regardless if you like this direction or not, it's happening and is relevant to address.  With this fragmentation comes a need to understand when the integration between components is complete.  Simple Unit Tests can tell you quickly if the work being delegated downstream of a component is completed and ready. As you are bringing on multiple layers of components the pass rates of the Unit Tests at various layers can quickly show you the level of completeness for the entire integrated system.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Sample Code&lt;/b&gt;&lt;br&gt;
One of the difficult parts of delivering a complete software product especially when the product is a framework or an API, if the product is extensible or supports programmability.  In these cases specifically, Unit Tests can serve as great examples of how to utilize the API or exercise the programming model.  They can often be directly consumed as documentation and sample code for SDKs or in knowledge transfers throughout the life of the product.  Building this from outside the team without relying on the author of the component is extremely costly and difficult.  However the returns are typically the most valuable.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Proving Design&lt;/b&gt;&lt;br&gt;
Designing and building components is easy with the current toolsets. The downside of this is that we can create classes and objects so easily that we don't always think about the bigger picture.  Taking time to write code that exercises a new component or interface can act as a sanity check to ensure that the component is easy to use and meets the programmability desires. It's quite often that I see a single API that requires two or three different programming or data interaction models.  Some quick Unit Tests would have shown the designer how difficult and inconsistent the usage of the API had become.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Change Management&lt;/b&gt;&lt;br&gt;
As a great engineer, it might be totally natural for you to write code that has few bugs.  Are the engineers who take up your legacy as experienced?  Will the engineer who will open the code in six months to add some features or fix an integration issue be as comfortable knowing how to change things without breaking anything? Would you?  Being able to run regressions over time adds a wonderful safety net in the identification of the impact of changes upstream, downstream, or inside your code.  It doesn't mean you will (or can) catch everything with Unit Tests but it can sure give you a head start and a level of confidence.&lt;br&gt;
&lt;br&gt;
So perhaps this is more about semantics or expectation setting, but I think it helps to keep in mind the variety of purposes Unit Testing can serve.  When you expand the contributions made by Unit Tests hopefully you will have an incentive to get even your experienced engineers to spend time writing them.&lt;br&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/NeoDiem?a=E1b35V"&gt;&lt;img src="http://feeds.feedburner.com/~a/NeoDiem?i=E1b35V" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=e94oL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=e94oL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=luBgL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=luBgL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=7C5nL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=7C5nL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=KTbQL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=KTbQL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=hYF1L"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=hYF1L" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=jBniL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=jBniL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=8WWPl"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=8WWPl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=rP0il"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=rP0il" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=Ue9oL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=Ue9oL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=VggtL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=VggtL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=mO3TL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=mO3TL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/249032347" height="1" width="1"/&gt;</description><link>http://blog.neodiem.com/2008/03/why-unit-test.htm</link><author>noreply@blogger.com (Tempus Fugate)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-31854701.post-1459177655368712194</guid><pubDate>Wed, 05 Mar 2008 05:07:00 +0000</pubDate><atom:updated>2008-03-04T21:08:57.534-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">principles</category><category domain="http://www.blogger.com/atom/ns#">architecture</category><category domain="http://www.blogger.com/atom/ns#">leadership</category><title>Are You Sure?</title><description>&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 240px;height:192px;" src="http://neodiem.com/img/signposts.jpg" alt="" border="0" /&gt;
It is a pretty normal day for me when a friend says they want to accomplish something and yet they have no idea how to go about it.  They want to start a business, but aren't sure what kind of business.  They want to make more money, but aren't sure how.  They want to get certified/learn new technology/become famous/[insert random goal here].  In all cases, they have an ambiguous idea but not a specific agenda.&lt;br&gt;
&lt;br&gt;
&lt;blockquote&gt;
A man with a watch knows what time it is. A man with two watches is never sure.
 -- &lt;b&gt;Segal's Law&lt;/b&gt;
&lt;/blockquote&gt;
&lt;br&gt;
In our era of The Paradox of Choice, it is the amazing potential we all have to stand on the shoulders of giants and achieve greatness that is most often our downfall.&lt;br&gt;
&lt;br&gt;
We have to choose every day as engineers which technologies to support, which languages to learn, which certifications to pursue.  We are bombarded with choices for what social networks to participate in, which email system to rely on, and should we use an Mac or PC?  Is it IPhone or Windows Mobile?&lt;br&gt;
&lt;br&gt;
As an architect, the most valuable thing you can do is be deliberate in your choices.  The hard part is being deliberate quickly.  Digesting the massive amounts of ambiguity at a breathtaking pace to synthesize answers and clarity as and when they are needed, usually well before the obvious answers have become apparent.  If being an architect was just about picking the obvious when it became obvious, then everyone could do it. (Which probably explains why everyone thinks they can do it.)&lt;br&gt;
&lt;br&gt;
If you want to get out there and do something, first narrow down what that something might be.  Perhaps start by writing down what it isn't.  Then start writing down the attributes or identifying characteristics for what it is.  If you can describe what the world looks like when you've achieved your goal, you'll be a good way towards deciding what road will get you there.&lt;br&gt;
&lt;br&gt;
Or don't.&lt;br&gt;
&lt;br&gt;
It's your choice.&lt;br&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/NeoDiem?a=d4xEu4"&gt;&lt;img src="http://feeds.feedburner.com/~a/NeoDiem?i=d4xEu4" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=5Jq6L"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=5Jq6L" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=zVaxL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=zVaxL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=rMO1L"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=rMO1L" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=6yuXL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=6yuXL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=pw6zL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=pw6zL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=OpIgL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=OpIgL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=7UEQl"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=7UEQl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=lSSHl"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=lSSHl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=gzV2L"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=gzV2L" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=e9WuL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=e9WuL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=mtmdL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=mtmdL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/245922090" height="1" width="1"/&gt;</description><link>http://blog.neodiem.com/2008/03/are-you-sure.htm</link><author>noreply@blogger.com (Tempus Fugate)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-31854701.post-3285801818231213931</guid><pubDate>Wed, 20 Feb 2008 17:16:00 +0000</pubDate><atom:updated>2008-02-20T09:22:16.739-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">technobabble</category><category domain="http://www.blogger.com/atom/ns#">project management</category><category domain="http://www.blogger.com/atom/ns#">offshore</category><title>Offshoring for Rank and File</title><description>&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 208px;height:240px;" src="http://neodiem.com/img/borat.jpg" alt="" border="0" /&gt;

I've been doing offshore work as long as the next guy, if the next guy has been doing it for almost a decade.  There are successes and failures and lots of learning along the way.  It's hardly the only thing I've done, but it's a good share of the pot.&lt;br&gt;
&lt;br&gt;
Recently, I was asked to speak with some gents about how their offshore effort was going.  Which is usually code for "We don't think it's going well".  And by all accounts from the team, it wasn't going all that well.  It helps when everyone at least starts from the level of dissatisfaction.&lt;br&gt;
&lt;br&gt;
Whenever we start to talk about the concept of managing work efforts in more than one location, everyone spits out the same mantras.  Communicate, be sensitive to cultural differences, etc.  The thing is there aren't all that many that have moved past the theory into practical application.  I should say demonstrably successful application.  A big part of this shortcoming, from my perspective, has been that while we can have concepts in our heads like cultural differences, and detailed communication plans, we miss what can be the subtle point of these guidelines.&lt;br&gt;
&lt;br&gt;
Let's borrow from a recent experience at Big Redmond Software Company.  Companies (like Microsoft or Google) don't really run tight ships.  Not in the way the unfamiliar would think.  At the foundation, they expect individuals to be very self-sufficient and to work with minimal communication.  Contributors are expected to bridge gaps in their own style.  These companies are impactful because they have leveraged the ability to walk down the hall and say "Build this" while pointing to the contents of a Visio diagram or the corner of a whiteboard.  The resources are expected to be accountable for the applicability and context of their solutions, not just the code or outputs they produce. The business value driving the work should naturally be taken into account by the self-reliant resources who are tasked with unlocking that capability.&lt;br&gt;
&lt;br&gt;
When you start moving that work to different geographies and timezones, suddenly that level of communication isn't enough.  The expectation on all parties is to minimize communication since that is a cost both parties share.  But how they each tend to approach that goal is often different.  Remember that the sender is expecting to point and grunt and have accountability and context magically shift.  They'll be available for questions, they expect to review the progress and deliverables and throw stones along the way.  But if it takes more than [insert arbitrary threshold here] energy and time commitment, then it just isn't working out.  It would have been easier to do it myself in house.&lt;br&gt;
&lt;br&gt;
Meanwhile, the receiver of the work has an expectation that the work will be fully-formed, coherent, and that they will not have significant decision-making requirements.  Give me enough information up-front to be self-sufficient and yardstick with which to measure success.  I'll come back when the output meets the success criteria.  My accountability only extends to the output according to the specifications and acceptance criteria.  If those have been ill-defined, that is the senders responsibility.&lt;br&gt;
&lt;br&gt;
Obviously, I over simplify a little and as always YMMV.  But in practice, understanding the different accountability and communication expectations we place on resources on different sides of a pond (or client-facing fence) will help you be more successful at leveraging offshore resources.&lt;br&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/NeoDiem?a=1Wwd1F"&gt;&lt;img src="http://feeds.feedburner.com/~a/NeoDiem?i=1Wwd1F" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=OVFPL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=OVFPL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=0y9NL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=0y9NL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=djmLL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=djmLL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=mRSgL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=mRSgL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=XqrsL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=XqrsL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=Ql3TL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=Ql3TL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=Q61dl"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=Q61dl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=ouKRl"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=ouKRl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=COQeL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=COQeL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=TofyL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=TofyL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=Fl6LL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=Fl6LL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/238290198" height="1" width="1"/&gt;</description><link>http://blog.neodiem.com/2008/02/offshoring-for-rank-and-file.htm</link><author>noreply@blogger.com (Tempus Fugate)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-31854701.post-574555194288757736</guid><pubDate>Sat, 02 Feb 2008 19:57:00 +0000</pubDate><atom:updated>2008-02-02T12:00:24.211-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">rant</category><category domain="http://www.blogger.com/atom/ns#">technobabble</category><title>How "Open" Can It Be?</title><description>&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 168px;height:240px;" src="http://neodiem.com/img/fistofmoney.jpg" alt="" border="0" /&gt;
Something that has bothered me from the beginning of the Open Source movement (and I use the word very loosely) is the seeming hypocrisy of these commercial companies that have huge revenue streams based around the idea of Open Source software.&lt;br&gt;
&lt;br&gt;
Not to go off on a rant here, but how &lt;b&gt;&lt;i&gt;open&lt;/i&gt;&lt;/b&gt; can they really be when they've got hundreds of people paying money for them to support their specific releases?  To my mind the idea of Open Source was always that the source could and would be extended by the community at large.  However if you are going to start asking people to pay for the specific versions of extensions that you are providing, you've essentially closed the system.  At this point, it seems to me you aren't an Open Source contributor any more.  You are someone who took an Open Source offering, tweaked it, and are now asking people to pay for your tweaks, thereby closing it.  If you did this once, perhaps a point could be argued, but when you've been building on &lt;b&gt;YOUR&lt;/b&gt; specific tweaks for release after release, and your support policies are version specific, then you are just like any other software company.  Okay, perhaps there is a little more transparency into the code, but still.&lt;br&gt;
&lt;blockquote&gt;
” SANTA CLARA, CA January 16, 2008 Sun Microsystems, Inc. (NASDAQ: JAVA) today announced it has entered into a definitive agreement to acquire MySQL AB, an open source icon and developer of one of the world's fastest growing open source databases for approximately $1 billion in total consideration. The acquisition accelerates Sun's position in enterprise IT to now include the $15 billion database market. Today's announcement reaffirms Sun's position as the leading provider of platforms for the Web economy and its role as the largest commercial open source contributor.”&lt;br&gt;
From:  &lt;a href="http://www.sun.com/aboutsun/pr/2008-01/sunflash.20080116.1.xml"&gt;http://www.sun.com/aboutsun/pr/2008-01/sunflash.20080116.1.xml&lt;/a&gt;
&lt;br&gt;
&lt;/blockquote&gt;
&lt;br&gt;
Exactly how open to the inputs of Joe developer are they really going to be when they have to sustain a $15 &lt;i&gt;billion&lt;/i&gt; dollar Support industry around these products.  Do they really expect us to believe they are going to leave the evolution of these products to the average engineer?  The community at large?  Hell no.  They have product teams and planners and release strategists just like every one else.  They just don't have the huge upfront investment in research and development, they essentially jumpstarted their code from the masses.  And they won't have a huge testing effort, they'll just rest on the backs of the industry at large. Which makes for good stability.&lt;br&gt;
&lt;br&gt;
I hate to see such blatant parasitical behavior cowering behind the beauty that could be Open Source.  Greedy bastards.&lt;br&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/NeoDiem?a=U1TojC"&gt;&lt;img src="http://feeds.feedburner.com/~a/NeoDiem?i=U1TojC" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=guRtL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=guRtL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=32QSL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=32QSL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=76PLL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=76PLL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=06XNL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=06XNL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=IbGZL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=IbGZL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=bsjdL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=bsjdL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=7Xlyl"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=7Xlyl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=fg7Vl"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=fg7Vl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=huGOL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=huGOL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=AuUtL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=AuUtL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=cQgCL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=cQgCL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/230419855" height="1" width="1"/&gt;</description><link>http://blog.neodiem.com/2008/02/how-open-can-it-be.htm</link><author>noreply@blogger.com (Tempus Fugate)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-31854701.post-628427935262218026</guid><pubDate>Thu, 17 Jan 2008 01:15:00 +0000</pubDate><atom:updated>2008-01-16T17:22:12.993-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">technobabble</category><category domain="http://www.blogger.com/atom/ns#">development</category><category domain="http://www.blogger.com/atom/ns#">programming</category><title>Running The Gauntlet</title><description>&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 240px;height:233px;" src="http://neodiem.com/img/gauntletshirt.jpg" alt="" border="0" /&gt;

This week I had the chance to discuss using Team Foundation Server in a large team setting specifically as concerns Build and Deployment.&lt;br&gt;
&lt;br&gt;
As I was organizing my thoughts to answer a question about check-in policies, merging and branching, and so forth and I kept coming back to my guiding principles:&lt;br&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;The Build is the build.  There is only one Build.&lt;br&gt;&lt;/li&gt;
&lt;li&gt;Build anywhere you like, as much as you like, but it only counts if it is in the Build.&lt;br&gt;&lt;/li&gt;
&lt;li&gt;If it doesn't work in the Build, it doesn't work.&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
Now I am certainly familiar with having to manage simultaneous release schedules, juggling branches, and so forth, but that doesn't mean I like it.  I absolutely support the mainline concept.  Much like the Highlander, when it comes to the build, there can be only one.&lt;br&gt;
&lt;br&gt;
We could argue that there are many techniques to allow these fancy behaviors but that doesn't make it okay.  Just because you &lt;b&gt;can&lt;/b&gt; do something, doesn't mean you &lt;i&gt;should&lt;/i&gt;.  Experience tells us that if you have a big team, you can't afford to have anyone interrupt the flow of the system.  This includes breaking the build, causing failures of critical tests, etc.  When more people or organizations are involved, the cost increases.&lt;br&gt;
&lt;br&gt;
In the agile communities there is a push towards Continuous Integration (CI) which is really an attempt to implement the Only One Build concept as an ideal.  When you can do it, you should.  When the amount of code grows or the number of loose connections increases this can be cost-prohibitive, primarily in time.  Compiling 1.8 million lines of code is going to take a little while regardless of how big the build machine might be.  And when it comes to running Build Verification Tests, these problems are compounded.  Especially if you are using disparate services that are loosely coupled.&lt;br&gt;
&lt;br&gt;
The idea behind CI is to bring compilation and integration issues to the attention of the team as soon as possible thereby minimizing distribution.  Going beyond that are tools that would actually test code entering the system before check-ins occur and reject or accept them based on the results.  With TFS policies this is fairly straightforward to set up and an open source effort has begun to bring this to life.  You can find out more about this effort at &lt;a href="http://www.opengauntlet.org/"&gt;http://www.opengauntlet.org/&lt;/a&gt;. &lt;br&gt;
&lt;br&gt;
If you prefer to wait until this functionality is built-in, you'll be glad to know that the next product release most likely will include a similar feature with a working title of "Gated Checkin". &lt;br&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/NeoDiem?a=og8aQn"&gt;&lt;img src="http://feeds.feedburner.com/~a/NeoDiem?i=og8aQn" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=LIVNL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=LIVNL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=7GjJL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=7GjJL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=o7qBL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=o7qBL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=rpndL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=rpndL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=UOpIL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=UOpIL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=t0ALL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=t0ALL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=nAnUl"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=nAnUl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=THPAl"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=THPAl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=sOgLL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=sOgLL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=zl6DL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=zl6DL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=zdGaL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=zdGaL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/230419857" height="1" width="1"/&gt;</description><link>http://blog.neodiem.com/2008/01/running-gauntlet.htm</link><author>noreply@blogger.com (Tempus Fugate)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-31854701.post-2074145883365180571</guid><pubDate>Mon, 24 Dec 2007 01:38:00 +0000</pubDate><atom:updated>2007-12-23T17:40:43.465-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">technobabble</category><category domain="http://www.blogger.com/atom/ns#">phone</category><title>I Need A New Phone</title><description>My friend has a cool Nokia with a 3 or 4 megapixel camera and it just puts my Dash to shame.  Which means that now I'm in the market for a new phone.&lt;br /&gt;
&lt;br /&gt;
Here are some things I care about in weighted order of importance:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-left: 40px;"&gt;1. 3+ megapixels&lt;br /&gt;
2. autofocus&lt;br /&gt;
3. windows mobile 5+&lt;br /&gt;
4. works on t-mobile&lt;br /&gt;
72. standard headphone jack&lt;br /&gt;
74. sd card slot&lt;br /&gt;
81. flash&lt;br /&gt;
89. gps&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
So any ideas?&lt;br /&gt;
&lt;br /&gt;
Right now I am considering the HTC Touch Cruise and the HTC TyTN II.  But I'd love to find some more options to choose from.  Surely there are other choices?&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/NeoDiem?a=Izgc0L"&gt;&lt;img src="http://feeds.feedburner.com/~a/NeoDiem?i=Izgc0L" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=AW73L"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=AW73L" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=QJDqL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=QJDqL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=qVGQL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=qVGQL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=f9VkL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=f9VkL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=nv6hL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=nv6hL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=idlLL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=idlLL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=WoZFl"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=WoZFl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=9n35l"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=9n35l" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=u99uL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=u99uL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=QbGrL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=QbGrL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=h3tzL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=h3tzL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/230419858" height="1" width="1"/&gt;</description><link>http://blog.neodiem.com/2007/12/i-need-new-phone.htm</link><author>noreply@blogger.com (Tempus Fugate)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-31854701.post-7917320534558479687</guid><pubDate>Thu, 06 Dec 2007 17:41:00 +0000</pubDate><atom:updated>2007-12-06T10:03:10.530-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">outlook</category><category domain="http://www.blogger.com/atom/ns#">technobabble</category><category domain="http://www.blogger.com/atom/ns#">exchange</category><category domain="http://www.blogger.com/atom/ns#">vista</category><title>Outlook 2007 on Vista accessing Exchange using HTTP over RPC</title><description>If that title didn't mean anything to you, ignore this post. (Well, you can click an advert on the right first! ;-)&lt;br /&gt;
&lt;br /&gt;
Just recently I've updated my laptop to the latest Windows operating system release named Vista.  Since I'm out in the field, I don't have a nice persistent connection to my corporate network and Exchange mailbox.  After installing Office 2007 (which I'd been using for some time and can say is quite good!) I needed to get my email configured again.  So I point and clicked everything as it was configured before.  Alas, no joy.&lt;br /&gt;
&lt;br /&gt;
After researching a bit online including a very poorly worded and far too succinct KB article (found &lt;a href="http://support.microsoft.com/default.aspx/kb/913843/en-us"&gt;here&lt;/a&gt;), I got it running again. I've listed the important steps below, skip them at your peril.&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt; &lt;li&gt;&lt;strong&gt;Open regedit or your other favorite registry editing tool.&lt;/strong&gt;&lt;br /&gt;
If this is unfamiliar go get your geeky computer friend to help.  You can really screw things up playing in the registry, so only do this if you know what you are about.&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Locate the following subkey:&lt;br /&gt;
HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Outlook\RPC&lt;/strong&gt;&lt;br /&gt;
You might not have the RPC portion of the key. I didn't. Just create it if missing.&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Add a new DWORD value named &lt;em&gt;DefConnectOpts&lt;/strong&gt; with a value of 0.&lt;/em&gt;&lt;br /&gt;
You have to get the name correct, and make sure the value is set to zero.&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Restart your machine.&lt;/strong&gt;&lt;br /&gt;
This is usually the first step I skip. You can't do it this time. It won't take effect until restart.  There probably is a service or .dll that can just be unloaded, but what a hassle. Keep it simple and just reboot.&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Delete the profile you had, and recreate it with valid settings.&lt;/strong&gt;&lt;br /&gt;
At this point it should let you login to your Exchange server via RPC over HTTP.  If it didn't you probably skipped a step or hit that special "you're screwed" portion of code. Call your techie friend.&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt; &lt;/ol&gt; My default Vista install did not have the RPC portion of the above key. So, I just created the key, then added the new value.  I first deleted the old profile, then rebooted the computer.  I created a new profile and it worked.  Your mileage may vary.&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/NeoDiem?a=xjT7GG"&gt;&lt;img src="http://feeds.feedburner.com/~a/NeoDiem?i=xjT7GG" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=922IL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=922IL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=ArmSL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=ArmSL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=az0VL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=az0VL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=munfL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=munfL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=xHHoL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=xHHoL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=1YURL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=1YURL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=O9QIl"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=O9QIl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=xXGzl"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=xXGzl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=rycBL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=rycBL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=4ilPL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=4ilPL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=RJojL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=RJojL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/230419859" height="1" width="1"/&gt;</description><link>http://blog.neodiem.com/2007/12/outlook-2007-on-vista-accessing.htm</link><author>noreply@blogger.com (Tempus Fugate)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-31854701.post-8881249820271546379</guid><pubDate>Sat, 24 Nov 2007 18:46:00 +0000</pubDate><atom:updated>2007-11-24T10:52:46.940-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">technobabble</category><category domain="http://www.blogger.com/atom/ns#">programming</category><title>3 Pass Coding</title><description>&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 240px;height:188px;" src="http://neodiem.com/img/threecolors.jpg" alt="" border="0" /&gt;Back in the day at Microsoft we used to look for and train developers who were 1 pass coders.  In today's world everyone is a 3 pass coder and they are starting to drag me down with them.&lt;br&gt;
&lt;br&gt;
Let me explain the difference between a 1 pass and a 3 pass coder.&lt;br&gt;
&lt;br&gt;
When you are writing code there are several layers (or aspects) of design and implementation activity that have to be balanced.  Firstly, you have the very simple, but often disputed, question of whether the code will meet a functional objective.  This is often referred to Working.  If the code won't perform the purpose the code is intended for it Doesn't Work and the rest of its qualities aren't relevant.  Assuming that it can be made to fulfill its intended purpose (i.e. it Works), then the other two aspects suddenly become important.&lt;br&gt;
&lt;br&gt;
The next most tangible aspect of coding is the speed at which the code will execute or process units of work, transactions, operations, etc.  Regardless of the velocity or metrics implied, the measure of this aspect of coding is generally called Performance.  Making something Work is the first step which is immediately followed by does it Work Fast.&lt;br&gt;
&lt;br&gt;
Lastly you have a host of intangibles of varying degrees of importance.  There can be many tangible expressions of these intangible attributes used by different people at different times.  The number of comments, the readability of the control flow, the robustness of the error and state management, and the lack of logic or bounding bugs; are all examples and all of which are related.  We put these closely-coupled items in a big bucket called Quality.  This may also referred to as Maintainability, Elegance, etc.  If you can make it Work, and make it Work Fast, can you make it Work Correctly?&lt;br&gt;
&lt;br&gt;
Now when someone starts out coding, they generally are capable of keeping only one layer in their mind at a time.  They start by making the code Work.  They just want to see it do what they think it should do.  Of course, once it does that, then they immediately concern themselves with making it Work Fast.  It is about this time that consumers of their code start exercising the possibilities and uncovering flaws and boundaries of the code.  So a review of code usually focused on specific bugs or concerns is undertaken until eventually it is determined the code must Work Correctly.  This lifecycle usually involves 3 distinct reviews or Passes on the code.  It is written, then reviewed for performance or capacity, then again for bugs and boundaries.&lt;br&gt;
&lt;br&gt;
On the other hand, a 1 Pass coder will have such a clear picture in mind of the code, the control of flow, the logic loops, the impediments and enhancements to speed, the boundary conditions and bug potentials, that the exercise is compressed into a single Pass of coding.  All the work is done upfront in the design and in the construction of each line so that intangibles are caught during the initial pass.&lt;br&gt;
&lt;br&gt;
At least that's how we used to do it.  It's how I used to do it.&lt;br&gt;
&lt;br&gt;
Now engineers are so woefully under-skilled.  They aren't forced to learn logic or bit math.  They didn't take any classes on algorithm design or perform exercises on bug potentials.  They just want to see it Work and then have testers tell them what else needs fixing.  If you want it to Work Fast they just buy bigger boxes or more of them.  The days of discipline are gone.&lt;br&gt;
&lt;br&gt;
When I have to oversee their work or explain an implementation I find myself being forced to speak in terms of what it takes to make it Work because the other layers trip them up.  If I show them tight, elegant code with robust error and state management and efficient control of flow, they can't read or follow it.  When I assign bugs they want to debug and watch the code execute because they can't find the bugs by reading the code. I have to worry about losing my own skills just working alongside them.&lt;br&gt;
&lt;br&gt;
Yesterday for a personal coding project I came across a bug running the program and my first thought was to set a breakpoint and see what happened.  I wanted to slap myself out of the chair!  I'm better than that. I can READ and understand code.  Which doesn't mean I don't take advantage of the debugger, but it shouldn't be my first thought.  I'm a 1 Pass coder and I intend to stay that way.&lt;br&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/NeoDiem?a=6cMT4B"&gt;&lt;img src="http://feeds.feedburner.com/~a/NeoDiem?i=6cMT4B" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=75gVL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=75gVL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=twFQL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=twFQL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=Jh8TL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=Jh8TL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=W9FNL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=W9FNL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=3LCgL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=3LCgL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=PzrRL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=PzrRL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=pxtTl"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=pxtTl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=8GC2l"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=8GC2l" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=ocv8L"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=ocv8L" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=8K4vL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=8K4vL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=hTAbL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=hTAbL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/230419860" height="1" width="1"/&gt;</description><link>http://blog.neodiem.com/2007/11/3-pass-coding.htm</link><author>noreply@blogger.com (Tempus Fugate)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-31854701.post-1834386643691702496</guid><pubDate>Tue, 23 Oct 2007 15:41:00 +0000</pubDate><atom:updated>2007-10-23T08:51:11.589-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">technobabble</category><category domain="http://www.blogger.com/atom/ns#">design</category><title>Eventual Correctness</title><description>&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 234px;height:240px;" src="http://neodiem.com/img/signs.jpg" alt="" border="0" /&gt;Have you ever heard the term &lt;b&gt;Directional Correctness&lt;/b&gt; or perhaps &lt;b&gt;Directionally Correct&lt;/b&gt;?  In the software business it is often used for when the concepts, functionality or usefulness of a thing is understood or apparent, even when there are details or bugs that prohibit full acceptance.&lt;br&gt;
&lt;br&gt;
If you are building a form for the user to input data, having all the form elements and the submit button without any formatting, style, or validation would be considered Directionally Correct.&lt;br&gt;
&lt;br&gt;
The process of building something new is often littered with the broken attempts and failed assertions.  This is actually one of the driving motivations between &lt;a href="http://en.wikipedia.org/wiki/Test-driven_development"&gt;Test Driven Development&lt;/a&gt;.  Good designers use iterative processes to arrive at a great solution, it doesn't just magically appear.  Great designers help those around them iterate also.&lt;br&gt;
&lt;br&gt;
Have you ever looked back at the end of the day and realized you worked on the same design element the entire day? Have you ever had a user or consumer completely yank the carpet out from under you and realize that all the progress you made wasn't progress at all? A key reason this occurs is because we get too focused on the details too soon in the game.  After all, the greatest engineers are perfectionists.  It isn't done until it's Right.  And that is what trips us up.&lt;br&gt;
&lt;br&gt;
As engineers and designers we should foster or sense of elegance and perfection.  Just not right away.  We need to evolve our solutions, not magically produce them instantly.  Produce something ambiguous and generic but somewhat functional.  Or at least demonstrative of functionality.  Get the users and consumers hand-waving in the general direction.  Once you've achieved some agreement on the direction you are taking, then you can start hammering in nails and confirming details.&lt;br&gt;
&lt;br&gt;
Besides being able to verify your work with consumers, it is important to delay details for your own benefit as well.  The old Forest vs. Trees problems can impact even the most seasoned woodsman.  As you implement your vision the details will reveal themselves.  The gaps and holes will become obvious and you can address them with precision and prejudice.  If you focus on details only after you have verified your directional correctness, they won't move or shift  so you can be certain your specific solutions will serve.&lt;br&gt;
&lt;br&gt;
It can be hard to iterate, especially with our innate desire for perfection.  Iteration is like delayed gratification.  You &lt;i&gt;can&lt;/i&gt; make it perfect, it &lt;i&gt;will&lt;/i&gt; be amazing and elegant. . .eventually.&lt;br&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/NeoDiem?a=lk1Y6f"&gt;&lt;img src="http://feeds.feedburner.com/~a/NeoDiem?i=lk1Y6f" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=sRMcL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=sRMcL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=Adj4L"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=Adj4L" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=IJWZL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=IJWZL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=RUW7L"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=RUW7L" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=Ko8NL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=Ko8NL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=eWWuL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=eWWuL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=a0jJl"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=a0jJl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=TQh4l"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=TQh4l" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=SU8aL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=SU8aL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=pXgpL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=pXgpL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=BahML"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=BahML" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/230419861" height="1" width="1"/&gt;</description><link>http://blog.neodiem.com/2007/10/eventual-correctness.htm</link><author>noreply@blogger.com (Tempus Fugate)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-31854701.post-7809699468914696657</guid><pubDate>Fri, 19 Oct 2007 23:23:00 +0000</pubDate><atom:updated>2007-10-19T16:27:06.938-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">technobabble</category><category domain="http://www.blogger.com/atom/ns#">adaptive</category><category domain="http://www.blogger.com/atom/ns#">principles</category><title>Absorbing Change</title><description>&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 240px;height:156px;" src="http://neodiem.com/img/driversview.jpg" alt="" border="0" /&gt;Embracing change is something at which I am usually very adept.&lt;br&gt;
&lt;br&gt;
Some might even say that is because I am responsible for most of the change that I see around me.  At least on projects.  But that isn't fair.  I recognize as well as anyone the necessity to stabilize from time to time. To slow the pace at which change is being identified and absorbed into an organization.  Many of the processes and much of the effort I exert is designed specifically to assist with the absorption of change; controlling the velocity that change impacts ongoing efforts.&lt;br&gt;
&lt;blockquote&gt;
Don't worry about design, if you listen to your code a good design will appear...Listen to the technical people. If they are complaining about the difficulty of making changes, then take such complaints seriously and give them time to fix things.&lt;br&gt;
-- &lt;b&gt;Martin Fowler&lt;/b&gt;&lt;br&gt;
&lt;/blockquote&gt;
&lt;br&gt;
Sometimes large changes are required.  It is natural for individual contributors to get invested in their work and become very attached to their specific deliverables or designs.  To my mind, being flexible is a critical component of competence.  Without adaptability, your useful as a contributor is minimized and in some cases suspect.&lt;br&gt;
&lt;br&gt;
Going beyond the ability to handle change as someone customer-facing is the capability to influence both the speed at which change is introduced to the delivery organization and the expectations of the customers creating that change.&lt;br&gt;
&lt;br&gt;
To be a good lead, protect the pace of change you expect from your people.  To be a good consultant, manage expectations with your clients about the changes they want to introduce.&lt;br&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/NeoDiem?a=PrczN5"&gt;&lt;img src="http://feeds.feedburner.com/~a/NeoDiem?i=PrczN5" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=wXIVL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=wXIVL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=JSRFL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=JSRFL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=aXCOL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=aXCOL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=OyyxL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=OyyxL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=KCpyL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=KCpyL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=hBGaL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=hBGaL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=VeNHl"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=VeNHl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=Khnul"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=Khnul" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=DbrDL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=DbrDL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=ZrFxL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=ZrFxL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=lrZuL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=lrZuL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/230419862" height="1" width="1"/&gt;</description><link>http://blog.neodiem.com/2007/10/absorbing-change.htm</link><author>noreply@blogger.com (Tempus Fugate)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-31854701.post-588805180781393169</guid><pubDate>Wed, 17 Oct 2007 16:18:00 +0000</pubDate><atom:updated>2007-10-17T09:21:29.484-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">technobabble</category><title>Dead Man Walking</title><description>&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 240px;height:234px;" src="http://neodiem.com/img/hospitalhallway.jpg" alt="" border="0" /&gt;Most software projects fail.  The statistics are varied but a pretty fair sweeping generalization of all the research would indicate that most software projects fail.&lt;br&gt;
&lt;br&gt;
If most of them fail, then it is logical to surmise that at any point you care to examine them, the majority will be dying.  Sure, they might hang on.  They might be fighting horribly and even look like they have a chance to succeed.  But most of them fail.  They die.&lt;br&gt;
&lt;br&gt;
If you were out hiking in the woods and came upon a man mauled by a bear and he was shouting incomprehensibly and swearing like a sailor what would be your reaction?  A helpful or trained person might run over and assess the situation.  They would question and listen, they might possibly poke or prod.  The answers might be meaningful or simply swearing or more realistically just &lt;i&gt;Pain, Pain, Pain&lt;/i&gt;!  The conversation would get more succinct, more direct.  &lt;i&gt;Answer me or I can't help you!&lt;/i&gt;  Neither would stop to criticize poor grammar or discuss the appropriateness of language.  They would listen to the &lt;b&gt;content&lt;/b&gt; and contribute to the sharing of information. Presumably, they both want to save the dying man. &lt;br&gt;
&lt;br&gt;
As the situation progresses, the person trying to assist the dying man would make decisions based on what they independently observe is hurting, by which movement brings the loudest screams, or by which open wound is bleeding most profusely.  Because the priority of the situation demands it, they would ignore the swearing and the sweat and the blood.  If the wounded soul gets out of control, they might sedate them if possible, or simply slap them to snap them back to reality and focus.  Having been in similar situations, I can tell you there is shouting and flailing galore.  The communication will be rough, it will be high velocity, and it will rarely be diplomatic or couched in rhetoric and hyperbole.  After all, someone is dying.&lt;br&gt;
&lt;br&gt;
If you are starting a new project, chances are it is already dying.  Will you watch politely while it bleeds out?  Will you bind the hands of those who can set the bones or knit the flesh?  When a person with their hands in the gaping head wound says "Move!", don't demand they say Please.  Remember, your project is dying.&lt;br&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/NeoDiem?a=oDh77e"&gt;&lt;img src="http://feeds.feedburner.com/~a/NeoDiem?i=oDh77e" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=9Pz9L"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=9Pz9L" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=JSVZL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=JSVZL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=03THL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=03THL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=38nEL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=38nEL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=EHnuL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=EHnuL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=InXkL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=InXkL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=Uq0El"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=Uq0El" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=fEVal"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=fEVal" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=Ks3rL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=Ks3rL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=2WK2L"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=2WK2L" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=BW9hL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=BW9hL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/230419863" height="1" width="1"/&gt;</description><link>http://blog.neodiem.com/2007/10/dead-man-walking.htm</link><author>noreply@blogger.com (Tempus Fugate)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-31854701.post-2977249885074837853</guid><pubDate>Tue, 16 Oct 2007 17:37:00 +0000</pubDate><atom:updated>2007-10-16T10:39:51.457-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">technobabble</category><title>We Have a Piper Down!</title><description>&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 213px;height:240px;" src="http://neodiem.com/img/pipes.jpg" alt="" border="0" /&gt;Yesterday I was attempting to customize my Flickr feed so that my Twitter posts would be more readable and I used Yahoo! Pipes to make it all happen.&lt;br&gt;
&lt;br&gt;
The above buzzword-laden sentence is an example of flurry of intertwined concepts and technology that is rapidly becoming a cornerstone of my life.  And I love it!&lt;br&gt;
&lt;br&gt;
Yahoo! Pipes is very cool technology.  A stunning example of driving adoption through value-added services that are intangibly monetized.  (What a friggin' mouthful.)  What I mean by that is that Yahoo! Is providing this service free of cost and what they are realizing is a slew of benefits that don't have direct immediate financial gains.  The long-term gains of developer loyalty and driving adoption of their related services (Security, Mail, Blog, Reader, Calendar, etc.) will pay off in spades if they continue this trend.&lt;br&gt;
&lt;br&gt;
During the early years of Windows there was the Win32 War.  Some people thought 16-bit processing was better, others wanted 32-bit.  Apple as a platform or Windows or OS2 or ?  It became apparent that the way to win platform adoption was by having the most applications for that platform.  You get the most applications by making it as easy as possible for developers to create those applications.  This is the same today when the "platform" is a service you want used, and the "developer" is a consumer who points and clicks and publishes feeds.&lt;br&gt;
&lt;br&gt;
The thing I found most intriguing about the Yahoo! Pipes offering is how easy they've made it to leverage all the outstanding work that others have created.  Not only is there a &lt;b&gt;massive&lt;/b&gt; wealth of capabilities directly in the tool, but the ability to clone other Pipes means the learning curve and information sharing is ridiculously easy.  Whoever is running the show over there needs a serious raise, and a bigger budget. More of this and better press would put Yahoo! as a platform much more seriously in the running.&lt;br&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/NeoDiem?a=LxuegE"&gt;&lt;img src="http://feeds.feedburner.com/~a/NeoDiem?i=LxuegE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=iF2fL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=iF2fL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=gkm6L"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=gkm6L" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=vzsZL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=vzsZL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=1AblL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=1AblL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=CpfvL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=CpfvL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=GJarL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=GJarL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=3Kgul"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=3Kgul" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=Ntofl"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=Ntofl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=qWPyL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=qWPyL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=ZJO8L"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=ZJO8L" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=ZwZyL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=ZwZyL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/230419864" height="1" width="1"/&gt;</description><link>http://blog.neodiem.com/2007/10/we-have-piper-down.htm</link><author>noreply@blogger.com (Tempus Fugate)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-31854701.post-1092531097151228220</guid><pubDate>Wed, 12 Sep 2007 15:59:00 +0000</pubDate><atom:updated>2007-09-12T09:01:47.078-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">technobabble</category><category domain="http://www.blogger.com/atom/ns#">project management</category><title>Don't Get Bullied</title><description>&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 240px;height:203px;" src="http://neodiem.com/img/easybutton.jpg" alt="" border="0" /&gt;Building software for a crowd of generic consumers while challenging, operates by some reasonably straightforward rules that can be reasonably understood.  For example, simpler is better.&lt;br&gt;
&lt;br&gt;
On the other hand, building custom software for an educated user-base to fulfill specialized processing is excruciating because of the unreasonableness of it all.&lt;br&gt;
&lt;br&gt;
The closer your users are to the problem, the more ideas they will have on HOW to solve the problem.  This naturally leads to a slew of fragmented and disjointed concepts as they attempt to articulate in fits and starts their individual, informed, ideas about how the system should function.&lt;br&gt;
&lt;br&gt;
At the other end of the spectrum, having educated and empowered users who will discourse with you about the nature of the problems to be solved, listening with open-minds to potential solutions, providing feedback to perfect the product, this can be hyper-productive.&lt;br&gt;
&lt;br&gt;
We like to say, "They know enough to be dangerous."&lt;br&gt;
&lt;br&gt;
When you have fragmented and disjoint components that don't subscribe to a cohesive approach to problem resolution you end up with lots of superfluous code that is usually much more complicated then it needs to be.  Twice as much code doesn't make the solution twice as complex, &lt;b&gt;more code adds exponential complexity&lt;/b&gt;.&lt;br&gt;
&lt;br&gt;
This is not to say that you altering the end-goal for the functionality being delivered, you are changing HOW the software will meet the end-goal of functionality.  When you subscribe to a cohesive vision, the product isn't just easier to create, it is simpler to test, quicker to validate, more robust in operation, faster to debug, and much easier for a user to adopt.  The evidence supporting this is vast and varied across the technology landscape.  The simpler answers always have broader adoption.&lt;br&gt;
&lt;br&gt;
When you approaching an engagement, ask yourself what kind of user-base is supporting your efforts.  Are they generic and uninformed?  Keep it simple.  Are they educated, pushy, and sure of their solution?  Good luck with that (unless you can change the game).  Are they empowered but open?  Engage them early and often and you'll be really successful.&lt;br&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/NeoDiem?a=BNzoLG"&gt;&lt;img src="http://feeds.feedburner.com/~a/NeoDiem?i=BNzoLG" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=PLPeL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=PLPeL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=QcT9L"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=QcT9L" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=upKSL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=upKSL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=K8GTL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=K8GTL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=THRfL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=THRfL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=hId9L"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=hId9L" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=BET2l"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=BET2l" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=oI6zl"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=oI6zl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=acfKL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=acfKL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=iTJoL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=iTJoL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=sZUfL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=sZUfL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/230419865" height="1" width="1"/&gt;</description><link>http://blog.neodiem.com/2007/09/dont-get-bullied.htm</link><author>noreply@blogger.com (Tempus Fugate)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-31854701.post-8251164877300865185</guid><pubDate>Fri, 07 Sep 2007 15:47:00 +0000</pubDate><atom:updated>2007-09-07T08:49:12.229-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">technobabble</category><title>Is That Your Hand In My Pocket?</title><description>&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 250px; height: 300px;" src="http://neodiem.com/img/moneyfromheaven.jpg" alt="" border="0"&gt;Yesterday we heard from our own news sources about a recent release from the US Justice Department about allowing fees for priority routing of internet traffic.  Today, courtesy of the BBC, we see a simple restatement. &lt;blockquote&gt; The US Justice Department has said that internet service providers should be allowed to charge for priority traffic.&lt;br /&gt;
&lt;br /&gt;
The agency said it was opposed to "network neutrality", the idea that all data on the net is treated equally.&lt;br /&gt;
-- &lt;a href="http://news.bbc.co.uk/1/hi/technology/6983375.stm"&gt;BBC News&lt;/a&gt;&lt;/blockquote&gt; Why can't our news ever spell anything out this simply?&lt;br /&gt;
&lt;br /&gt;
What’s next? An Uber-Elite Network that’s much faster than the current one…oh wait, we already have I2…&lt;br /&gt;
Well how about a private network that you have to pay for higher bandwidth…oh wait, all the major carriers already do that…&lt;br /&gt;
&lt;br /&gt;
Hmm…something is fishy about this, I just can’t quite put my finger on it.&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/NeoDiem?a=mcCJGo"&gt;&lt;img src="http://feeds.feedburner.com/~a/NeoDiem?i=mcCJGo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=yNPNL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=yNPNL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=IaArL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=IaArL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=vIe0L"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=vIe0L" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=RqeWL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=RqeWL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=tllbL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=tllbL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=3UHFL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=3UHFL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=2fR6l"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=2fR6l" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=QAqXl"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=QAqXl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=rsBtL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=rsBtL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=KaiZL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=KaiZL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=vGBcL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=vGBcL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/230419866" height="1" width="1"/&gt;</description><link>http://blog.neodiem.com/2007/09/is-that-your-hand-in-my-pocket.htm</link><author>noreply@blogger.com (Tempus Fugate)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-31854701.post-9186680017238555905</guid><pubDate>Thu, 06 Sep 2007 18:20:00 +0000</pubDate><atom:updated>2007-09-06T11:25:03.888-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">personal spew</category><title>Come On, Jump On</title><description>&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;height:240px;" src="http://neodiem.com/img/magnifyingeye.jpg" alt="" border="0" /&gt;Big projects are great.&lt;br&gt;
&lt;br&gt;
Okay, I work in consulting so that seems a little obvious.  But hear me out.  Big projects aren't just excellent because they usually mean big money.  They are also great because of all the intangible benefits and unaccounted for side-effects.&lt;br&gt;
&lt;br&gt;
When people are working on big projects, the little inefficiencies and mistakes they are used to compensating for become exaggerated and glaringly obvious.  Likewise, those who can really deliver get an opportunity to do so on scale that is unmistakable.  Your performance or lack of it is much easier to identify when the magnifying glass that is a large project is applied to it.&lt;br&gt;
&lt;br&gt;
Of course, it isn't just personal performance.  The demands of your clients, the companies you work with, the policies you have in place for growing people.  All these are put under the stress of longer durations, more bodies, and a much wider diversity of insanity.&lt;br&gt;
&lt;blockquote&gt;
The meta-lesson for me here is; if you, like me, have the tenacity to jump onto the back of a moving band-wagon then it seems polite to let the guys at the front do the driving.&lt;br&gt;
-- &lt;b&gt;David Ing&lt;/b&gt; (&lt;a href="http://www.from9till2.com/default.aspx"&gt;From 9 till 2&lt;/a&gt;)&lt;br&gt;
&lt;/blockquote&gt;
One cool thing I really have come to really appreciate is how the gravity well of a big project showcases the motivations, self-sufficiencies, and sometimes even the loyalties of those you work with regularly.&lt;br&gt;
&lt;br&gt;
Let's face it, steering a titanic is hard.  Really frickin' hard.  If it is for only a short time, or when the penalties are small, you can overlook lots of sniping, counter-productive, or selfish behavior.  Start stretching the durations or increasing the costs of failure, and watch how the spotlight finds those who act counter to the culture or the company.&lt;br&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/NeoDiem?a=eRW7jk"&gt;&lt;img src="http://feeds.feedburner.com/~a/NeoDiem?i=eRW7jk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=UwXgL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=UwXgL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=W6QjL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=W6QjL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=LF5IL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=LF5IL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=3VkFL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=3VkFL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=BDWaL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=BDWaL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=Ydl5L"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=Ydl5L" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=wginl"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=wginl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=qtdSl"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=qtdSl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=8EyxL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=8EyxL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=EkOIL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=EkOIL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=Brw9L"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=Brw9L" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/230419867" height="1" width="1"/&gt;</description><link>http://blog.neodiem.com/2007/09/come-on-jump-on.htm</link><author>noreply@blogger.com (Tempus Fugate)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-31854701.post-3133223418111934273</guid><pubDate>Fri, 17 Aug 2007 22:14:00 +0000</pubDate><atom:updated>2007-08-17T15:18:22.066-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">moving forward</category><category domain="http://www.blogger.com/atom/ns#">recruiting</category><title>The Traits You Can't Fake</title><description>&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 206px;height:130px;" src="http://neodiem.com/img/curious.jpg" alt="" border="0" /&gt;From project to project and company to company, the question about how to find great resources, how to interview well and weed the gems from the rough has consistently arisen.  This problem is closely related to the situation faced when trying to figure out who to reward and how to measure contributions for individuals in vastly different roles or environments.&lt;br&gt;
&lt;br&gt;
Whether evaluating a candidate for a potential fit or comparing two very different but competent engineers, I have found there are two traits that help me separate the wheat and the chaff.&lt;br&gt;
&lt;br&gt;
&lt;blockquote&gt;I prefer the folly of enthusiasm to the indifference of wisdom.&lt;br&gt;
-- &lt;b&gt;Anatole France&lt;/b&gt;&lt;/blockquote&gt;
&lt;br&gt;
First off, you can't fake enthusiasm.  There is simply no substitute for the intangible value that enthusiasm supplies.  Someone who is consistently happy and has only average ability is worth far more than someone who is very skilled but always grumpy or disgruntled.&lt;br&gt;
&lt;br&gt;
&lt;blockquote&gt;If you are not fired with enthusiasm, you will be fired with enthusiasm.&lt;br&gt;
-- &lt;b&gt;Vince Lombardi&lt;/b&gt;&lt;/blockquote&gt;
&lt;br&gt;
Ask yourself if you trust that they'll get things done if (and when) you leave them alone.  Find out if they're looking to get on your specific bus, or if they are just looking for a ride, any ride.  Make sure they can demonstrate passion for both positive and negative things around them.  Even the most staid among us can get passionate about things we love or enjoy.  But if they are broadly accepting of all annoyances, they probably aren't going to be very creative about working efficiently.  If they won't talk about the little things that bother and motivate them, they probably lack that insistence on quality that true performers must have.  Likewise, they should be able to articulate why the things they enjoy are enjoyable!  If you can't get pin them on both extremes, rest assured their work product won't be either.&lt;br&gt;
&lt;br&gt;
&lt;blockquote&gt;Creativity is a natural extension of our enthusiasm.&lt;br&gt;
-- &lt;b&gt;Earl Nightingale&lt;/b&gt;&lt;/blockquote&gt;
&lt;br&gt;
The second trait is a follow on to the beauty of passion: inquisitiveness.  Given opportunity, do they ask lots of questions?  People with passion want to understand problems and propose improvements.  The natural state of an evolving mind is to be filled with questions.  Smart people, experienced people, know that questions are an imperative prerequisite to understanding.  If they don't want to ask questions, they aren't really seeking to understand.&lt;br&gt;
&lt;br&gt;
&lt;blockquote&gt;Curiosity is, in great and generous minds, the first passion and the last.&lt;br&gt;
-- &lt;b&gt;Samuel Johnson&lt;/b&gt;&lt;/blockquote&gt;
&lt;br&gt;
When you observe how someone questions, you see how their mind works.  You see the speed with which they assimilate and incorporate new information.  You often will see the clues to their biases in the solutions they espouse; you can see how disciplined they are by how they stay on focus or by how rigorously they apply new vocabulary.  When questions don't have answers or answers that are incomplete, you can glimpse how they handle frustration, disappointment, and even their own ignorance.  One of the quickest and surest ways to gather insight into the mind of another is to watch them learn something new.&lt;br&gt;
&lt;br&gt;
&lt;blockquote&gt;Curiosity is idle only to those who fail to realize that it may be a very rare and indispensable thing.&lt;br&gt;
-- &lt;b&gt;James Harvey Robinson&lt;/b&gt;&lt;/blockquote&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/NeoDiem?a=vvzDZQ"&gt;&lt;img src="http://feeds.feedburner.com/~a/NeoDiem?i=vvzDZQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=zLLtL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=zLLtL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=jPSkL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=jPSkL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=uY13L"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=uY13L" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=fFihL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=fFihL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=6RFEL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=6RFEL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=v6oZL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=v6oZL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=qb74l"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=qb74l" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=TjIRl"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=TjIRl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=6luML"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=6luML" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=JV9IL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=JV9IL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NeoDiem?a=1PARL"&gt;&lt;img src="http://feeds.feedburner.com/~f/NeoDiem?i=1PARL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/230419868" height="1" width="1"/&gt;</description><link>http://blog.neodiem.com/2007/08/traits-you-cant-fake.htm</link><author>noreply@blogger.com (Tempus Fugate)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogge