<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:georss="http://www.georss.org/georss" 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>Thu, 08 Oct 2009 00:34:18 +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>83</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" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-31854701.post-4085166060389615245</guid><pubDate>Thu, 08 Oct 2009 00:12:00 +0000</pubDate><atom:updated>2009-10-07T17:34:18.920-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">visual studio</category><category domain="http://www.blogger.com/atom/ns#">technobabble</category><category domain="http://www.blogger.com/atom/ns#">azure</category><category domain="http://www.blogger.com/atom/ns#">web services</category><category domain="http://www.blogger.com/atom/ns#">programming</category><title>Azure Adventures</title><description>If you are going to be using Azure, make sure your SQL Server instance isn't on a compressed drive.  Also, running in Windows Advanced Server is much easier than trying to juggle all these pieces on Vista.

If, like me, you already have an instance of SQL Server you need to use the DSINIT tool to get storage initialized before trying to run anything.  It's not a big deal just use dsinit /sqlinstance:. from the azure sdk bin directory.  One trick is to use the period for an unnamed instance.

If, like me, you are running Advanced Server, you need to also run Visual Studio in elevated-mode if you plan to debug at all. And who's kidding, you have to debug right?

I've been playing with the SQL Azure CTP as well and I see some good things in store. I'll post some more useful learnings as I port more code into the cloud.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31854701-4085166060389615245?l=blog.neodiem.com%2Fdefault.htm'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=E8YGYX1okd8:D8ND4GAUMdA:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=E8YGYX1okd8:D8ND4GAUMdA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=E8YGYX1okd8:D8ND4GAUMdA:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=E8YGYX1okd8:D8ND4GAUMdA:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=E8YGYX1okd8:D8ND4GAUMdA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=E8YGYX1okd8:D8ND4GAUMdA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=E8YGYX1okd8:D8ND4GAUMdA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=E8YGYX1okd8:D8ND4GAUMdA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=E8YGYX1okd8:D8ND4GAUMdA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=E8YGYX1okd8:D8ND4GAUMdA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=E8YGYX1okd8:D8ND4GAUMdA:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=E8YGYX1okd8:D8ND4GAUMdA:8QFB7NnbhRw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=8QFB7NnbhRw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=E8YGYX1okd8:D8ND4GAUMdA:UT3xtbGYFzA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=UT3xtbGYFzA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/E8YGYX1okd8" height="1" width="1"/&gt;</description><link>http://blog.neodiem.com/2009/10/azure-adventures.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-4361995899795402083</guid><pubDate>Tue, 07 Jul 2009 20:50:00 +0000</pubDate><atom:updated>2009-07-07T14:07:14.628-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">web services</category><category domain="http://www.blogger.com/atom/ns#">design</category><category domain="http://www.blogger.com/atom/ns#">architecture</category><category domain="http://www.blogger.com/atom/ns#">wcf</category><title>Packaging Contracts for Services</title><description>&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 207px;height:172px;" src="http://neodiem.com/img/wcfservice.jpg" alt="" border="0" /&gt;

In working on a green field system recently (green field means it's new from scratch development) the discussion for a series of services turned to the subject of which type of data interaction should be used.  Specifically, should the service be designed using message contracts or data contracts?&lt;br&gt;
&lt;br&gt;
Since it became clear that the basic inflection points were not well understood, I had to hold an impromptu clinic.  After we finished, I wrote down the salient points and turned it into this post.&lt;br&gt;
&lt;br&gt;
The first thing to consider when choosing packaging formats is whether the messages need to be conformed.  You see, many technologies don't comply with the published contract specifications choosing instead to rely on the lowest level XML serialization for interchange.  If these messages already are in use, or you intend to interoperate with a system that has such restrictions, the choice is usually made for you.&lt;br&gt;
&lt;br&gt;
If you are playing green field (as in the conversation sparking this post) it helps to understand that data contracts have good portability which makes them widely applicable.  Message contracts are less capable and therefore can have less portability .&lt;br&gt;
&lt;br&gt;
So the less conformant you are required to be, the more reason to choose data contracts.  The more conformant your requirements, the more likely you will need message contracts or even base XML serialization.&lt;br&gt;
&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31854701-4361995899795402083?l=blog.neodiem.com%2Fdefault.htm'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=DvXp2e3iO_k:o7ji1DpbBQU:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=DvXp2e3iO_k:o7ji1DpbBQU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=DvXp2e3iO_k:o7ji1DpbBQU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=DvXp2e3iO_k:o7ji1DpbBQU:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=DvXp2e3iO_k:o7ji1DpbBQU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=DvXp2e3iO_k:o7ji1DpbBQU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=DvXp2e3iO_k:o7ji1DpbBQU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=DvXp2e3iO_k:o7ji1DpbBQU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=DvXp2e3iO_k:o7ji1DpbBQU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=DvXp2e3iO_k:o7ji1DpbBQU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=DvXp2e3iO_k:o7ji1DpbBQU:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=DvXp2e3iO_k:o7ji1DpbBQU:8QFB7NnbhRw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=8QFB7NnbhRw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=DvXp2e3iO_k:o7ji1DpbBQU:UT3xtbGYFzA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=UT3xtbGYFzA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/DvXp2e3iO_k" height="1" width="1"/&gt;</description><link>http://blog.neodiem.com/2009/07/packaging-contracts-for-services.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-5192213793363190553</guid><pubDate>Wed, 03 Jun 2009 00:07:00 +0000</pubDate><atom:updated>2009-06-02T17:09:45.304-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">technobabble</category><category domain="http://www.blogger.com/atom/ns#">programming</category><category domain="http://www.blogger.com/atom/ns#">performance testing</category><category domain="http://www.blogger.com/atom/ns#">database</category><title>What's The Hold-up?</title><description>You know you are having one of those days when you're writing code like this:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt; select top 5&lt;br /&gt;
(select substring(text, (statement_start_offset / 2 ) + 1,                       ((case when statement_end_offset = -1 then len(convert(nvarchar(max),text)) * 2                                else statement_end_offset end ) - statement_start_offset ) / 2 )&lt;br /&gt;
from sys.dm_exec_sql_text(sql_handle) ) AS statement&lt;br /&gt;
,last_worker_time&lt;br /&gt;
,total_worker_time&lt;br /&gt;
,last_elapsed_time&lt;br /&gt;
,total_elapsed_time&lt;br /&gt;
,execution_count&lt;br /&gt;
from sys.dm_exec_query_stats&lt;br /&gt;
order by last_elapsed_time desc&lt;br /&gt;
&lt;br /&gt;
&lt;/blockquote&gt; &lt;br /&gt;
This technique of pulling from query stats is great for finding those nasty performing culprits, especially in environments when you can't just attach a profiler.&lt;br /&gt;
&lt;br /&gt;
In case you were wondering, I use queries like this instead of sp_who or sp_who2 because it's specifically grabbing the statement that is executing not just the batch.&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31854701-5192213793363190553?l=blog.neodiem.com%2Fdefault.htm'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=cvo0Ivq-NXk:2F2Ak7hDUeo:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=cvo0Ivq-NXk:2F2Ak7hDUeo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=cvo0Ivq-NXk:2F2Ak7hDUeo:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=cvo0Ivq-NXk:2F2Ak7hDUeo:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=cvo0Ivq-NXk:2F2Ak7hDUeo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=cvo0Ivq-NXk:2F2Ak7hDUeo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=cvo0Ivq-NXk:2F2Ak7hDUeo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=cvo0Ivq-NXk:2F2Ak7hDUeo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=cvo0Ivq-NXk:2F2Ak7hDUeo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=cvo0Ivq-NXk:2F2Ak7hDUeo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=cvo0Ivq-NXk:2F2Ak7hDUeo:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=cvo0Ivq-NXk:2F2Ak7hDUeo:8QFB7NnbhRw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=8QFB7NnbhRw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=cvo0Ivq-NXk:2F2Ak7hDUeo:UT3xtbGYFzA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=UT3xtbGYFzA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/cvo0Ivq-NXk" height="1" width="1"/&gt;</description><link>http://blog.neodiem.com/2009/06/whats-hold-up.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-8384958169974832675</guid><pubDate>Thu, 12 Feb 2009 20:59:00 +0000</pubDate><atom:updated>2009-02-12T13:03:06.141-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#">design</category><category domain="http://www.blogger.com/atom/ns#">programming</category><title>Cyclomatic Complexity</title><description>&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 240px; height: 233px;" src="http://neodiem.com/img/spaghetticode.jpg" alt="" border="0"&gt;  Much of my day is spent convincing engineers that there are simpler ways of implementing their designs.  Much of the rest is convincing executives and managers that what they want isn't simple at all.&lt;br /&gt;
&lt;br /&gt;
Invariably some little hot-head tries to argue with me that implementing a general case is more complicated than a special optimized case.  If the punk in question has cracked a book they'll likely bring up some metric like &lt;strong&gt;Cyclomatic Complexity&lt;/strong&gt;.&lt;br /&gt;
&lt;br /&gt;
Thomas McCabe socialized this metric in the 70's as a mechanism for predicting where code would have future maintain problems.  It's often thrown into the blender when people are trying to construct qualitative measures for code quality.  Here's the formal equation:&lt;br /&gt;
&lt;blockquote&gt; &lt;br /&gt;
CC = E - N + P&lt;br /&gt;
&lt;br /&gt;
E = number of edges N = number of nodes P = number of connections or exits &lt;br /&gt;
&lt;/blockquote&gt; &lt;br /&gt;
It can be hard to see how equations like this apply to code so let me say it a different way: &lt;strong&gt;Cyclomatic Complexity represents the number of code paths through a section code.&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
How do you count  the code paths?  Start with one for the entry into the code, and add one more for every decision point.  Decision points are the control of flow statements like &lt;strong&gt;If…Then…Else&lt;/strong&gt; or &lt;strong&gt;Switch&lt;/strong&gt;.  The CC for the following snippet is three (3).&lt;br /&gt;
&lt;blockquote&gt; &lt;br /&gt;
&lt;span style="font-family: Courier New,Courier,mono;"&gt; public int adjustRange( int rangePrimary ) {&lt;/span&gt;&lt;br style="font-family: Courier New,Courier,mono;"&gt;&lt;span style="font-family: Courier New,Courier,mono;"&gt; bool adjustedValue =  42;&lt;/span&gt;&lt;br style="font-family: Courier New,Courier,mono;"&gt;&lt;span style="font-family: Courier New,Courier,mono;"&gt; if ( rangePrimary ==  6 )  {&lt;/span&gt;&lt;br style="font-family: Courier New,Courier,mono;"&gt;&lt;span style="font-family: Courier New,Courier,mono;"&gt;  adjustedValue =  42;&lt;/span&gt;&lt;br style="font-family: Courier New,Courier,mono;"&gt;&lt;span style="font-family: Courier New,Courier,mono;"&gt; } else {&lt;/span&gt;&lt;br style="font-family: Courier New,Courier,mono;"&gt;&lt;span style="font-family: Courier New,Courier,mono;"&gt;  adjustedValue =  9;&lt;/span&gt;&lt;br style="font-family: Courier New,Courier,mono;"&gt;&lt;span style="font-family: Courier New,Courier,mono;"&gt; }&lt;/span&gt;&lt;br style="font-family: Courier New,Courier,mono;"&gt;&lt;span style="font-family: Courier New,Courier,mono;"&gt; return adjustedValue;&lt;/span&gt;&lt;br style="font-family: Courier New,Courier,mono;"&gt;&lt;span style="font-family: Courier New,Courier,mono;"&gt; }&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/blockquote&gt;  This example was really simple  but is illustrative of how the CC may be calculated.&lt;br /&gt;
&lt;br /&gt;
So how complex is complex?  As with most metrics, the interpretation is very subjective.  Since the higher the number, the more complex the code, it stands to reason that code with higher numbers would be more prone to issues.  Perhaps bugs because of the logic convolutions, or issues with maintenance because of the number of things impacted by even simple changes.  In a sweeping generalization I can say that for my reviews, code with values higher than 20 would be suspect, and higher than 30 would likely not pass.&lt;br /&gt;
&lt;br /&gt;
The important thing is to realize it isn't a measure of &lt;em&gt;quality&lt;/em&gt;, just an indicator where better organization or testing might be advisable.  Personally, I tend to gauge an engineers competence inversely to the CCs of the code they routinely produce.  In my experience, engineers who write better code routinely produce code with low CCs and vice versa. &lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31854701-8384958169974832675?l=blog.neodiem.com%2Fdefault.htm'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=NQmCd4kHQmE:dIpIai-Hi1c:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=NQmCd4kHQmE:dIpIai-Hi1c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=NQmCd4kHQmE:dIpIai-Hi1c:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=NQmCd4kHQmE:dIpIai-Hi1c:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=NQmCd4kHQmE:dIpIai-Hi1c:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=NQmCd4kHQmE:dIpIai-Hi1c:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=NQmCd4kHQmE:dIpIai-Hi1c:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=NQmCd4kHQmE:dIpIai-Hi1c:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=NQmCd4kHQmE:dIpIai-Hi1c:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=NQmCd4kHQmE:dIpIai-Hi1c:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=NQmCd4kHQmE:dIpIai-Hi1c:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=NQmCd4kHQmE:dIpIai-Hi1c:8QFB7NnbhRw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=8QFB7NnbhRw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=NQmCd4kHQmE:dIpIai-Hi1c:UT3xtbGYFzA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=UT3xtbGYFzA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/NQmCd4kHQmE" height="1" width="1"/&gt;</description><link>http://blog.neodiem.com/2009/02/cyclomatic-complexity.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-7593408398214795062</guid><pubDate>Fri, 06 Feb 2009 18:30:00 +0000</pubDate><atom:updated>2009-02-06T10:51:54.670-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">technobabble</category><category domain="http://www.blogger.com/atom/ns#">funny</category><title>A Goofball CEO and a Silly Journalist</title><description>&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 240px;height:175px;" src="http://neodiem.com/img/leo-apotheker.jpg" alt="" border="0" /&gt;

If you run a major international company, you shouldn't be dropping cuss words in public.  IMHO.&lt;br&gt;
&lt;br&gt;
In a &lt;a href="http://blogs.zdnet.com/BTL/?p=12267"&gt;recent article&lt;/a&gt;, the SAP co-CEO Leo Apotheker was quoted making some of the dumbest CEO comments I've ever heard.  I wonder what how big his *ahem* bonus must be for him to so blatantly disregard common sense.&lt;br&gt;
&lt;br&gt;
The &lt;a href="http://www.alleyinsider.com/2009/2/sap-clueless-consultants-from-accenture-and-ibm-giving-us-a-bad-name-sap"&gt;follow-on article&lt;/a&gt; was equally hilarious.  It shows how much pressure the Old Timers are under to stay relevant.  Add this to the recent absurdity of the &lt;a href="http://blog.neodiem.com/2009/01/truth-revealed.htm"&gt;Satyam Scandal&lt;/a&gt; and it becomes clear some house cleaning is in order.&lt;br&gt;
&lt;br&gt;
I found the most insightful comment in the follow-on to be:&lt;br&gt;
&lt;blockquote&gt;
The core of most cost/time overruns stems from CIOs committing to ERP, but middle managers insisting after implementation is already well underway that the software be changed to accommodate legacy business processes rather than the other way around.
 -- &lt;a href="http://www.alleyinsider.com/2009/2/sap-clueless-consultants-from-accenture-and-ibm-giving-us-a-bad-name-sap"&gt;Eric Krangel&lt;/a&gt;
&lt;/blockquote&gt;
&lt;br&gt;
Amen, brother.&lt;br&gt;
&lt;br&gt;
But wait, it doesn't stop there. You have to read the comments too.  Here's  my favorite:&lt;br&gt;
&lt;blockquote&gt;
Accenture made me rich when we IPO'd it in 2001.&lt;br&gt;
I'm willing to forgive all else. &lt;br&gt;
&lt;br&gt;
 -- Maurice (commented on the Alley Insider article)
 &lt;/blockquote&gt;
&lt;br&gt;
That pretty much sums up how the Bozo Effect is getting worse.  I think it's time to go back into retirement. Again.&lt;br&gt;
&lt;br&gt;
Or maybe a start-up? Hmmm...&lt;br&gt;
&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31854701-7593408398214795062?l=blog.neodiem.com%2Fdefault.htm'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=uxbk6TAIrO4:D4htJOxigRw:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=uxbk6TAIrO4:D4htJOxigRw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=uxbk6TAIrO4:D4htJOxigRw:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=uxbk6TAIrO4:D4htJOxigRw:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=uxbk6TAIrO4:D4htJOxigRw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=uxbk6TAIrO4:D4htJOxigRw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=uxbk6TAIrO4:D4htJOxigRw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=uxbk6TAIrO4:D4htJOxigRw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=uxbk6TAIrO4:D4htJOxigRw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=uxbk6TAIrO4:D4htJOxigRw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=uxbk6TAIrO4:D4htJOxigRw:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=uxbk6TAIrO4:D4htJOxigRw:8QFB7NnbhRw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=8QFB7NnbhRw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=uxbk6TAIrO4:D4htJOxigRw:UT3xtbGYFzA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=UT3xtbGYFzA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/uxbk6TAIrO4" height="1" width="1"/&gt;</description><link>http://blog.neodiem.com/2009/02/goofball-ceo-and-silly-journalist.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-5529385878441870828</guid><pubDate>Fri, 16 Jan 2009 20:16:00 +0000</pubDate><atom:updated>2009-01-16T12:18:02.938-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">development</category><category domain="http://www.blogger.com/atom/ns#">testing</category><category domain="http://www.blogger.com/atom/ns#">performance testing</category><title>Priming For Performance Testing</title><description>&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 240px;height:236px;" src="http://neodiem.com/img/iceburg.jpg" alt="" border="0" /&gt;
One of the last few endeavors I've had involved planning for some performance testing of the critical application stack for extremely large volume business.  Specifically, they were looking to make some architectural changes because of performance and needed to know which ones to make.  Which explains why I was in a room with a bunch of big-wigs yet again explaining why the performance test is more than throwing requests/transactions/load at the system and seeing what breaks.&lt;br&gt;
&lt;br&gt;
After quite a bit of round-and-round, it became evident that I had to bring us back to basics and get on the same page.  This is hardly new and I find myself often giving impromptu primers on Performance Testing.  This posts covers the basics and illustrates a simple example of how to apply them.&lt;br&gt;
&lt;br&gt;
Let's get started. . .&lt;br&gt;
&lt;br&gt;
When it comes to performance testing, there are two generally accepted types. You can Prove, or you can Predict.  These are not equivalent.  The names may be self-evident but let me give some quick examples to clarify.&lt;br&gt;
&lt;br&gt;
If you are seeking to Prove, you put load on a system and determine that the system can in fact handle the load within set constraints.  For example, it handles X requests using only Y memory and Z processing units with Q response time.  You know it to be true because you &lt;i&gt;&lt;b&gt;actually&lt;/b&gt;&lt;/i&gt; did the work.  It's not simulated work, there aren't stubs, there is no approximation involved.&lt;br&gt;
&lt;br&gt;
If you are seeking to Predict, you put load on the system under constraints in such a way as to understand how the system will react to changes in either load or constraints. For example, the system performed X requests with Q response time utilizing Y memory and Z processing units. Further it performed (X*2) requests with Q response time utilizing (Y*2) memory and Z processing units. Therefore I predict the system can perform (X*3) requests with Q response time utilizing (X*3) memory and Z processing units. Obviously it is never &lt;i&gt;this&lt;/i&gt; simple as there are many ways that variables interact, but you get the idea.&lt;br&gt;
&lt;br&gt;
As part of the discussion, it became clear that an understanding of the basic math involved would be helpful.  Naturally you can't expect a bunch of execs to sit still for a calculus lesson.  But it was possible to give them a simple example to demonstrate how complicated even the "simple" vectors can become very quickly. So we walked through using a &lt;i&gt;very&lt;/i&gt; simple statistical probability formula to calculate a Poisson distribution for the number of concurrent users.&lt;br&gt;
&lt;br&gt;
The simplest form of this generally only uses three variables:&lt;br&gt;
&lt;ol&gt;
&lt;li&gt;User Population&lt;br&gt;
This is the population or total sample size. Just because there are billions of people in the world, not all of them will be using  your application. Hopefully.&lt;/li&gt;
&lt;li&gt;Session Length&lt;br&gt;
This is a measure of how long the operation that each user performs.  As you can imagine, this one is hard to simplify and in sophisticated models is the quickest to require much more work to derive the real value.&lt;/li&gt;
&lt;li&gt;Availability Window&lt;br&gt;
This is a measure of the time range in which the application will be available for use.  Usually you want to exclude maintenance windows, or perhaps reduce this to only include normal business hours.&lt;/li&gt;
&lt;/ol&gt;
&lt;br&gt;
Using these variables, we can create a formula &lt;b&gt;c = (p * s) / A&lt;/b&gt; to allow us to find a concurrency distribution.&lt;br&gt;
&lt;br&gt;
c = Concurrence&lt;br&gt;
p = User Population&lt;br&gt;
s = Session Length&lt;br&gt;
A = Availability Window&lt;br&gt;
&lt;br&gt;
So for example, there are 2000 employees who have access to the portal.  Each user spends an average of 7 minutes submitting an expense report.  They only do this from work during normal business hours (9am-6pm or 9 hours).&lt;br&gt;
&lt;br&gt;
Therefore the likely concurrency is  (2000 * 7) / 540 or 26 users in a 7 minute session using the application.&lt;br&gt;
&lt;br&gt;
These are of course just numbers by probability, not proof.  But it would help you figure out by taking further percentages, what your concurrency expectations &lt;b&gt;might&lt;/b&gt; be.&lt;br&gt;
&lt;br&gt;
This is really just a small scratch on the surface of a very large topic but it helped to demonstrate how large and complicated it can be.  Which is why you should really on expertise and not guesswork.  And why things that appear really simple in models like this, typically are not.&lt;br&gt;
&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31854701-5529385878441870828?l=blog.neodiem.com%2Fdefault.htm'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=-B1HIAstyYA:HX_wtaY-4Ds:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=-B1HIAstyYA:HX_wtaY-4Ds:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=-B1HIAstyYA:HX_wtaY-4Ds:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=-B1HIAstyYA:HX_wtaY-4Ds:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=-B1HIAstyYA:HX_wtaY-4Ds:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=-B1HIAstyYA:HX_wtaY-4Ds:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=-B1HIAstyYA:HX_wtaY-4Ds:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=-B1HIAstyYA:HX_wtaY-4Ds:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=-B1HIAstyYA:HX_wtaY-4Ds:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=-B1HIAstyYA:HX_wtaY-4Ds:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=-B1HIAstyYA:HX_wtaY-4Ds:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=-B1HIAstyYA:HX_wtaY-4Ds:8QFB7NnbhRw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=8QFB7NnbhRw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=-B1HIAstyYA:HX_wtaY-4Ds:UT3xtbGYFzA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=UT3xtbGYFzA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/-B1HIAstyYA" height="1" width="1"/&gt;</description><link>http://blog.neodiem.com/2009/01/priming-for-performance-testing.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-7375679540776933844</guid><pubDate>Sat, 10 Jan 2009 01:06:00 +0000</pubDate><atom:updated>2009-01-09T17:09:04.647-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">technobabble</category><category domain="http://www.blogger.com/atom/ns#">offshore</category><title>A Truth Revealed...</title><description>&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 240px;height:240px;" src="http://neodiem.com/img/fireglass.jpg" alt="" border="0" /&gt;
If you've done any offshore work, and I do mean really done the work not just been near the work, you know what a house of cards some of the industry players can be.  Finally it seems we are getting more details on exactly how messed up this market can get.&lt;br&gt;
&lt;br&gt;
Just recently the head of one of the larger organizations, Satyam Computer Services, released a letter detailing the ongoing fraudulent activity that was riddling the corporate books.  If you've ever competed against these guys you have invariably asked yourself, "How are they making money?" as they priced you out of a deal with ridiculously low costs.  Now you know: &lt;b&gt;They Didn't&lt;/b&gt;.&lt;br&gt;
&lt;br&gt;
You can read more in the &lt;a href="
http://www.nytimes.com/2009/01/08/business/worldbusiness/08satyam.html?partner=rss&amp;emc=rss"&gt;
New York Times&lt;/a&gt; and elsewhere on the web.&lt;br&gt;
&lt;br&gt;
The near term impact means that there will be quite a few companies including GE, GM, Nestle, Caterpillar, Coca-Cola, Microsoft, Pfizer and the US government who will be looking for new IT providers pretty quick.   The real downside is that those companies have been budgeting for years using unrealistic offshore rates.  Shifting that burden to more realistic rate schedules on short notice could be quite a jolt to many corporate bottom-lines.  The ripple effect is that it will take money away from advancements, growth and sustainability just when we need this type of spending the most.&lt;br&gt;
&lt;br&gt;
It's a fun thing to be able to say "I told you so." when you find out a company who consistently undercut the market in extremely detrimental ways finally comes clean.  Unfortunately, it's not very satisfying.  You see, we have the same experience in many markets and segments of our economy.  Rather than paying what something &lt;i&gt;should&lt;/i&gt; be worth and recognizing that money spent is money that feeds our nation, we continually strive to cut costs and do things on the cheap.  Commoditizing high-tech doesn't help anyone, anywhere.  Not in this country, and not in the country you are moving the work too.  And besides not helping in the short-term, the long-term effects of depressed rate structures create unrealistic expectations and remove incentives for growth. They have ripple effects throughout the economies and cultures involved and can do irreversible damage when reality finally does come crashing down.&lt;br&gt;
&lt;br&gt;
This situation is not unlike the consumer credit crisis or the disease that is WalMart. If people think they can pay less, they will.  Even if it isn't best for them or &lt;i&gt;anyone&lt;/i&gt; in the long-term.  In many cases, even if it isn't best for them in the &lt;i&gt;short-term&lt;/i&gt;!  That's why people spend multiple dollars in gas to drive to a further store and save a few pennies.  That's why people buy organic food that has to be shipped &lt;b&gt;from another country&lt;/b&gt; to a horrendous environmental detriment instead of recognizing that industrialization is VITAL to a sustainable civilization. But I digress.&lt;br&gt;
&lt;br&gt;
In the future, we won't always get such a clear explanation of the full cost of those ludicrous deals we take advantage of every day.  Sometimes it isn't just plain-old fraud that's at the root.  But there are always costs and impacts and we should try and understand the big picture instead of being naive consumers.  Remaining ignorant about the supply and service chains that provide everything we consume and rely on is a surefire way to create an even bigger mess in the future (like we need a bigger one than gas prices?).&lt;br&gt;
&lt;br&gt;
Next time you see a deal that seems to good to be true, remember the old adage and realize: It Is.&lt;br&gt;
&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31854701-7375679540776933844?l=blog.neodiem.com%2Fdefault.htm'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=N1DOv5tGYkw:1HXm7lInBcA:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=N1DOv5tGYkw:1HXm7lInBcA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=N1DOv5tGYkw:1HXm7lInBcA:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=N1DOv5tGYkw:1HXm7lInBcA:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=N1DOv5tGYkw:1HXm7lInBcA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=N1DOv5tGYkw:1HXm7lInBcA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=N1DOv5tGYkw:1HXm7lInBcA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=N1DOv5tGYkw:1HXm7lInBcA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=N1DOv5tGYkw:1HXm7lInBcA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=N1DOv5tGYkw:1HXm7lInBcA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=N1DOv5tGYkw:1HXm7lInBcA:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=N1DOv5tGYkw:1HXm7lInBcA:8QFB7NnbhRw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=8QFB7NnbhRw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=N1DOv5tGYkw:1HXm7lInBcA:UT3xtbGYFzA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=UT3xtbGYFzA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/N1DOv5tGYkw" height="1" width="1"/&gt;</description><link>http://blog.neodiem.com/2009/01/truth-revealed.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-8089257056485254803</guid><pubDate>Mon, 08 Dec 2008 18:57:00 +0000</pubDate><atom:updated>2008-12-08T11:02:40.928-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">technobabble</category><category domain="http://www.blogger.com/atom/ns#">marketing</category><title>My Online Eyeballs</title><description>&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 240px;height:205px;" src="http://neodiem.com/img/eyeballs.jpg" alt="" border="0" /&gt;

I'm a huge fan of Fred Wilson.  Have been from the first time I ever read his words.&lt;br&gt;
&lt;br&gt;
Lately, he's wrote a little something on an area that I generally ignore but had been catching my eye.  Specifically, this post was about the challenges and opportunities with online advertising.&lt;br&gt;
&lt;br&gt;
Most of the time, I tend to put my energy into learning about and understanding other areas of technology or trends, but lately I've become more interested.  This is mostly because I have friends that work in various segments of advertising and those specializing in the online space have had interesting things to say.&lt;br&gt;
&lt;br&gt;
One of the great things about Fred is that no matter whether I agree or not, he brings up the salient and pivotal points of the subject matter with precision and elegance.  This is how I would want to write if I could write the way I want. Witness:&lt;br&gt;
&lt;blockquote&gt;&lt;br&gt;
Analog and digital, it turns out, are polar opposites. Analog has physical costs which lead to scarcity driven business models. Digital has zero marginal cost (or near zero) which leads to ubiquity driven business models.&lt;br&gt;
 - from &lt;a href="http://www.avc.com/a_vc/2008/11/trading-analog.html"&gt;Trading Analog Dollars For Digital Pennies&lt;/a&gt; by &lt;a href="http://www.avc.com/"&gt;Fred Wilson&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
&lt;/blockquote&gt;
The remainder of the article is a succinct primer proving once again that smart people are in fact out in the world, kicking ass and taking names.  And then there are geniuses who take the time to write about it for the rest of us.&lt;br&gt;
&lt;br&gt;
What struck me in this discussion is not the conclusion (in any logical progression that's typically the boring part), it was how subtly he separates two behemoths that are often deemed inseparable and treated as such.  Too often, I find myself in the discussion with an educated person who is waving theirs hands about the effort it will take to "move more of our advertising to the web". Or some such nonsense.  They fail to understand that the basic economics, motivators, and operating principles for digital consumers is completely different.  When I listen to a "marketing person" talk about how a platform will have "captive eyeballs" or "impressions" I realize immediately I am talking to &lt;b&gt;&lt;i&gt;someone who doesn't get it&lt;/i&gt;&lt;/b&gt;.&lt;br&gt;
&lt;br&gt;
This was made real in conversation with a buddy of mine recently about some time after Wii Music hit the stores. His introductory comment:&lt;br&gt;
&lt;blockquote&gt;
I own a Wii.  I love music. How did I not know about this?&lt;br&gt;
&lt;/blockquote&gt;
Hmm, lets think about this.  When I consider his lifestyle it is like many of my friends. He uses Firefox with ad-blocking software, watches tv only online and usually just via netflix streaming, listens to pandora or online music, works from home/coffee shops, and doesn't drive.  No wonder it slipped under his radar.&lt;br&gt;
&lt;br&gt;
If you want to get his attention (or mine, or most of my friends) you need to leverage the things we do care about and the media we do invest in.  Simply running ads on blogs won't find a growing hoard of us.  Put that information &lt;b&gt;IN&lt;/b&gt; that same blog and then we'll be all over it.&lt;br&gt;
&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31854701-8089257056485254803?l=blog.neodiem.com%2Fdefault.htm'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=dzkohJtrrxc:PunUfd_HmrI:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=dzkohJtrrxc:PunUfd_HmrI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=dzkohJtrrxc:PunUfd_HmrI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=dzkohJtrrxc:PunUfd_HmrI:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=dzkohJtrrxc:PunUfd_HmrI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=dzkohJtrrxc:PunUfd_HmrI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=dzkohJtrrxc:PunUfd_HmrI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=dzkohJtrrxc:PunUfd_HmrI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=dzkohJtrrxc:PunUfd_HmrI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=dzkohJtrrxc:PunUfd_HmrI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=dzkohJtrrxc:PunUfd_HmrI:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=dzkohJtrrxc:PunUfd_HmrI:8QFB7NnbhRw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=8QFB7NnbhRw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=dzkohJtrrxc:PunUfd_HmrI:UT3xtbGYFzA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=UT3xtbGYFzA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/dzkohJtrrxc" height="1" width="1"/&gt;</description><link>http://blog.neodiem.com/2008/12/my-online-eyeballs.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-4084756489528182801</guid><pubDate>Mon, 01 Dec 2008 21:15:00 +0000</pubDate><atom:updated>2008-12-01T13:27:40.918-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">work</category><category domain="http://www.blogger.com/atom/ns#">planning</category><title>And...I'm Safe.</title><description>It's good to know that according to the big analyst firms, the key areas I'm focused on are going to continue to be the top spending areas in this down-turned economy.&lt;br /&gt;
&lt;br /&gt;
InfoWorld reported in an article &lt;a href="http://www.infoworld.com/article/08/11/19/47FE-five-recession-proof-technologies_1.html"&gt;here&lt;/a&gt;, about the findings of several big IT analysis firms what are supposed to be the top 5 spending priorities for the next year.  Not surprisingly, cloud computing and business optimization were up there.  &lt;br /&gt;
&lt;br /&gt;
When the economy isn't doing well, I often get the question about how my business is doing.  The great thing about helping companies &lt;strong&gt;&lt;em&gt;do business better&lt;/em&gt;&lt;/strong&gt; is that tough times are great motivator in the way that years of plenty are not.  Simply put, if they are making lots of money anyway, it's hard to get people to focus on the costs involved.  When they aren't making money so easily, all of sudden they are very interested in what things cost.&lt;br /&gt;
&lt;br /&gt;
You can apply this to your own life too.  Are you in feast or famine?  Should you be making hay while the sun shines, or playing frisbee?  Having billable work is no excuse to put off training, writing, and exercise.&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31854701-4084756489528182801?l=blog.neodiem.com%2Fdefault.htm'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=6Q3x0QCE96M:eZ5NDhKS7TA:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=6Q3x0QCE96M:eZ5NDhKS7TA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=6Q3x0QCE96M:eZ5NDhKS7TA:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=6Q3x0QCE96M:eZ5NDhKS7TA:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=6Q3x0QCE96M:eZ5NDhKS7TA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=6Q3x0QCE96M:eZ5NDhKS7TA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=6Q3x0QCE96M:eZ5NDhKS7TA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=6Q3x0QCE96M:eZ5NDhKS7TA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=6Q3x0QCE96M:eZ5NDhKS7TA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=6Q3x0QCE96M:eZ5NDhKS7TA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=6Q3x0QCE96M:eZ5NDhKS7TA:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=6Q3x0QCE96M:eZ5NDhKS7TA:8QFB7NnbhRw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=8QFB7NnbhRw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=6Q3x0QCE96M:eZ5NDhKS7TA:UT3xtbGYFzA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=UT3xtbGYFzA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/6Q3x0QCE96M" height="1" width="1"/&gt;</description><link>http://blog.neodiem.com/2008/12/andim-safe.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-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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31854701-1807518862373217138?l=blog.neodiem.com%2Fdefault.htm'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=hxf_9ojpCaQ:4ovnsrSSfQU:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=hxf_9ojpCaQ:4ovnsrSSfQU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=hxf_9ojpCaQ:4ovnsrSSfQU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=hxf_9ojpCaQ:4ovnsrSSfQU:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=hxf_9ojpCaQ:4ovnsrSSfQU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=hxf_9ojpCaQ:4ovnsrSSfQU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=hxf_9ojpCaQ:4ovnsrSSfQU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=hxf_9ojpCaQ:4ovnsrSSfQU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=hxf_9ojpCaQ:4ovnsrSSfQU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=hxf_9ojpCaQ:4ovnsrSSfQU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=hxf_9ojpCaQ:4ovnsrSSfQU:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=hxf_9ojpCaQ:4ovnsrSSfQU:8QFB7NnbhRw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=8QFB7NnbhRw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=hxf_9ojpCaQ:4ovnsrSSfQU:UT3xtbGYFzA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=UT3xtbGYFzA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/hxf_9ojpCaQ" 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-12-08T11:10:20.190-08: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#">mdm</category><category domain="http://www.blogger.com/atom/ns#">database</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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31854701-8547115771778218192?l=blog.neodiem.com%2Fdefault.htm'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=TxsmXfFyoHQ:1GAfy4Z4S88:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=TxsmXfFyoHQ:1GAfy4Z4S88:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=TxsmXfFyoHQ:1GAfy4Z4S88:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=TxsmXfFyoHQ:1GAfy4Z4S88:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=TxsmXfFyoHQ:1GAfy4Z4S88:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=TxsmXfFyoHQ:1GAfy4Z4S88:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=TxsmXfFyoHQ:1GAfy4Z4S88:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=TxsmXfFyoHQ:1GAfy4Z4S88:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=TxsmXfFyoHQ:1GAfy4Z4S88:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=TxsmXfFyoHQ:1GAfy4Z4S88:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=TxsmXfFyoHQ:1GAfy4Z4S88:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=TxsmXfFyoHQ:1GAfy4Z4S88:8QFB7NnbhRw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=8QFB7NnbhRw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=TxsmXfFyoHQ:1GAfy4Z4S88:UT3xtbGYFzA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=UT3xtbGYFzA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/TxsmXfFyoHQ" 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-12-08T11:08:46.982-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">device</category><category domain="http://www.blogger.com/atom/ns#">technobabble</category><category domain="http://www.blogger.com/atom/ns#">music</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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31854701-1126555895747230090?l=blog.neodiem.com%2Fdefault.htm'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=nCg7XB-q8Gc:L_vQdIX-tyI:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=nCg7XB-q8Gc:L_vQdIX-tyI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=nCg7XB-q8Gc:L_vQdIX-tyI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=nCg7XB-q8Gc:L_vQdIX-tyI:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=nCg7XB-q8Gc:L_vQdIX-tyI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=nCg7XB-q8Gc:L_vQdIX-tyI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=nCg7XB-q8Gc:L_vQdIX-tyI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=nCg7XB-q8Gc:L_vQdIX-tyI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=nCg7XB-q8Gc:L_vQdIX-tyI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=nCg7XB-q8Gc:L_vQdIX-tyI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=nCg7XB-q8Gc:L_vQdIX-tyI:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=nCg7XB-q8Gc:L_vQdIX-tyI:8QFB7NnbhRw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=8QFB7NnbhRw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=nCg7XB-q8Gc:L_vQdIX-tyI:UT3xtbGYFzA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=UT3xtbGYFzA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/nCg7XB-q8Gc" 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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31854701-1636193752223274317?l=blog.neodiem.com%2Fdefault.htm'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=4bPxFQwI4DA:wt-B2DQOOHU:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=4bPxFQwI4DA:wt-B2DQOOHU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=4bPxFQwI4DA:wt-B2DQOOHU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=4bPxFQwI4DA:wt-B2DQOOHU:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=4bPxFQwI4DA:wt-B2DQOOHU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=4bPxFQwI4DA:wt-B2DQOOHU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=4bPxFQwI4DA:wt-B2DQOOHU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=4bPxFQwI4DA:wt-B2DQOOHU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=4bPxFQwI4DA:wt-B2DQOOHU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=4bPxFQwI4DA:wt-B2DQOOHU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=4bPxFQwI4DA:wt-B2DQOOHU:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=4bPxFQwI4DA:wt-B2DQOOHU:8QFB7NnbhRw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=8QFB7NnbhRw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=4bPxFQwI4DA:wt-B2DQOOHU:UT3xtbGYFzA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=UT3xtbGYFzA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/4bPxFQwI4DA" 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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31854701-2727623770183559208?l=blog.neodiem.com%2Fdefault.htm'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=v8XWIN0a0dA:jRsQ6FU97Fg:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=v8XWIN0a0dA:jRsQ6FU97Fg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=v8XWIN0a0dA:jRsQ6FU97Fg:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=v8XWIN0a0dA:jRsQ6FU97Fg:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=v8XWIN0a0dA:jRsQ6FU97Fg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=v8XWIN0a0dA:jRsQ6FU97Fg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=v8XWIN0a0dA:jRsQ6FU97Fg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=v8XWIN0a0dA:jRsQ6FU97Fg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=v8XWIN0a0dA:jRsQ6FU97Fg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=v8XWIN0a0dA:jRsQ6FU97Fg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=v8XWIN0a0dA:jRsQ6FU97Fg:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=v8XWIN0a0dA:jRsQ6FU97Fg:8QFB7NnbhRw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=8QFB7NnbhRw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=v8XWIN0a0dA:jRsQ6FU97Fg:UT3xtbGYFzA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=UT3xtbGYFzA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/v8XWIN0a0dA" 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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31854701-4332184335404029287?l=blog.neodiem.com%2Fdefault.htm'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=ykP32rAjFWk:pv5OYLo2OGY:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=ykP32rAjFWk:pv5OYLo2OGY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=ykP32rAjFWk:pv5OYLo2OGY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=ykP32rAjFWk:pv5OYLo2OGY:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=ykP32rAjFWk:pv5OYLo2OGY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=ykP32rAjFWk:pv5OYLo2OGY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=ykP32rAjFWk:pv5OYLo2OGY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=ykP32rAjFWk:pv5OYLo2OGY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=ykP32rAjFWk:pv5OYLo2OGY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=ykP32rAjFWk:pv5OYLo2OGY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=ykP32rAjFWk:pv5OYLo2OGY:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=ykP32rAjFWk:pv5OYLo2OGY:8QFB7NnbhRw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=8QFB7NnbhRw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=ykP32rAjFWk:pv5OYLo2OGY:UT3xtbGYFzA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=UT3xtbGYFzA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/ykP32rAjFWk" 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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31854701-4057356558501714045?l=blog.neodiem.com%2Fdefault.htm'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=W0TvdVU6PGE:2BMpBJKjsqM:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=W0TvdVU6PGE:2BMpBJKjsqM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=W0TvdVU6PGE:2BMpBJKjsqM:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=W0TvdVU6PGE:2BMpBJKjsqM:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=W0TvdVU6PGE:2BMpBJKjsqM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=W0TvdVU6PGE:2BMpBJKjsqM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=W0TvdVU6PGE:2BMpBJKjsqM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=W0TvdVU6PGE:2BMpBJKjsqM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=W0TvdVU6PGE:2BMpBJKjsqM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=W0TvdVU6PGE:2BMpBJKjsqM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=W0TvdVU6PGE:2BMpBJKjsqM:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=W0TvdVU6PGE:2BMpBJKjsqM:8QFB7NnbhRw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=8QFB7NnbhRw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=W0TvdVU6PGE:2BMpBJKjsqM:UT3xtbGYFzA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=UT3xtbGYFzA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/W0TvdVU6PGE" 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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31854701-1459177655368712194?l=blog.neodiem.com%2Fdefault.htm'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=nN3psBR4lX8:xOQeY7WMyHg:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=nN3psBR4lX8:xOQeY7WMyHg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=nN3psBR4lX8:xOQeY7WMyHg:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=nN3psBR4lX8:xOQeY7WMyHg:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=nN3psBR4lX8:xOQeY7WMyHg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=nN3psBR4lX8:xOQeY7WMyHg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=nN3psBR4lX8:xOQeY7WMyHg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=nN3psBR4lX8:xOQeY7WMyHg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=nN3psBR4lX8:xOQeY7WMyHg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=nN3psBR4lX8:xOQeY7WMyHg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=nN3psBR4lX8:xOQeY7WMyHg:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=nN3psBR4lX8:xOQeY7WMyHg:8QFB7NnbhRw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=8QFB7NnbhRw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=nN3psBR4lX8:xOQeY7WMyHg:UT3xtbGYFzA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=UT3xtbGYFzA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/nN3psBR4lX8" 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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31854701-3285801818231213931?l=blog.neodiem.com%2Fdefault.htm'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=fDUvtxJRRiU:wafyn7QZBuk:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=fDUvtxJRRiU:wafyn7QZBuk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=fDUvtxJRRiU:wafyn7QZBuk:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=fDUvtxJRRiU:wafyn7QZBuk:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=fDUvtxJRRiU:wafyn7QZBuk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=fDUvtxJRRiU:wafyn7QZBuk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=fDUvtxJRRiU:wafyn7QZBuk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=fDUvtxJRRiU:wafyn7QZBuk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=fDUvtxJRRiU:wafyn7QZBuk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=fDUvtxJRRiU:wafyn7QZBuk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=fDUvtxJRRiU:wafyn7QZBuk:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=fDUvtxJRRiU:wafyn7QZBuk:8QFB7NnbhRw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=8QFB7NnbhRw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=fDUvtxJRRiU:wafyn7QZBuk:UT3xtbGYFzA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=UT3xtbGYFzA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/fDUvtxJRRiU" 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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31854701-574555194288757736?l=blog.neodiem.com%2Fdefault.htm'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=OtbE-KFryGE:9f6EUTQvgXA:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=OtbE-KFryGE:9f6EUTQvgXA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=OtbE-KFryGE:9f6EUTQvgXA:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=OtbE-KFryGE:9f6EUTQvgXA:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=OtbE-KFryGE:9f6EUTQvgXA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=OtbE-KFryGE:9f6EUTQvgXA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=OtbE-KFryGE:9f6EUTQvgXA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=OtbE-KFryGE:9f6EUTQvgXA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=OtbE-KFryGE:9f6EUTQvgXA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=OtbE-KFryGE:9f6EUTQvgXA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=OtbE-KFryGE:9f6EUTQvgXA:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=OtbE-KFryGE:9f6EUTQvgXA:8QFB7NnbhRw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=8QFB7NnbhRw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=OtbE-KFryGE:9f6EUTQvgXA:UT3xtbGYFzA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=UT3xtbGYFzA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/OtbE-KFryGE" 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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31854701-628427935262218026?l=blog.neodiem.com%2Fdefault.htm'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=MSrnV4fQ6WI:g197u_OVSmo:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=MSrnV4fQ6WI:g197u_OVSmo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=MSrnV4fQ6WI:g197u_OVSmo:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=MSrnV4fQ6WI:g197u_OVSmo:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=MSrnV4fQ6WI:g197u_OVSmo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=MSrnV4fQ6WI:g197u_OVSmo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=MSrnV4fQ6WI:g197u_OVSmo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=MSrnV4fQ6WI:g197u_OVSmo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=MSrnV4fQ6WI:g197u_OVSmo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=MSrnV4fQ6WI:g197u_OVSmo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=MSrnV4fQ6WI:g197u_OVSmo:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=MSrnV4fQ6WI:g197u_OVSmo:8QFB7NnbhRw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=8QFB7NnbhRw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=MSrnV4fQ6WI:g197u_OVSmo:UT3xtbGYFzA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=UT3xtbGYFzA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/MSrnV4fQ6WI" 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>2008-12-08T11:10:48.047-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">device</category><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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31854701-2074145883365180571?l=blog.neodiem.com%2Fdefault.htm'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=e5NV9tneHzA:mJJyd7dCTIc:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=e5NV9tneHzA:mJJyd7dCTIc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=e5NV9tneHzA:mJJyd7dCTIc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=e5NV9tneHzA:mJJyd7dCTIc:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=e5NV9tneHzA:mJJyd7dCTIc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=e5NV9tneHzA:mJJyd7dCTIc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=e5NV9tneHzA:mJJyd7dCTIc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=e5NV9tneHzA:mJJyd7dCTIc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=e5NV9tneHzA:mJJyd7dCTIc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=e5NV9tneHzA:mJJyd7dCTIc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=e5NV9tneHzA:mJJyd7dCTIc:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=e5NV9tneHzA:mJJyd7dCTIc:8QFB7NnbhRw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=8QFB7NnbhRw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=e5NV9tneHzA:mJJyd7dCTIc:UT3xtbGYFzA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=UT3xtbGYFzA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/e5NV9tneHzA" 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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31854701-7917320534558479687?l=blog.neodiem.com%2Fdefault.htm'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=xJHtK8kP4M4:oB9fdd7OUTo:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=xJHtK8kP4M4:oB9fdd7OUTo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=xJHtK8kP4M4:oB9fdd7OUTo:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=xJHtK8kP4M4:oB9fdd7OUTo:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=xJHtK8kP4M4:oB9fdd7OUTo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=xJHtK8kP4M4:oB9fdd7OUTo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=xJHtK8kP4M4:oB9fdd7OUTo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=xJHtK8kP4M4:oB9fdd7OUTo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=xJHtK8kP4M4:oB9fdd7OUTo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=xJHtK8kP4M4:oB9fdd7OUTo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=xJHtK8kP4M4:oB9fdd7OUTo:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=xJHtK8kP4M4:oB9fdd7OUTo:8QFB7NnbhRw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=8QFB7NnbhRw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=xJHtK8kP4M4:oB9fdd7OUTo:UT3xtbGYFzA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=UT3xtbGYFzA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/xJHtK8kP4M4" 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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31854701-8881249820271546379?l=blog.neodiem.com%2Fdefault.htm'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=siBtbBW4he4:fhOaDzeQ6iE:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=siBtbBW4he4:fhOaDzeQ6iE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=siBtbBW4he4:fhOaDzeQ6iE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=siBtbBW4he4:fhOaDzeQ6iE:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=siBtbBW4he4:fhOaDzeQ6iE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=siBtbBW4he4:fhOaDzeQ6iE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=siBtbBW4he4:fhOaDzeQ6iE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=siBtbBW4he4:fhOaDzeQ6iE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=siBtbBW4he4:fhOaDzeQ6iE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=siBtbBW4he4:fhOaDzeQ6iE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=siBtbBW4he4:fhOaDzeQ6iE:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=siBtbBW4he4:fhOaDzeQ6iE:8QFB7NnbhRw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=8QFB7NnbhRw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=siBtbBW4he4:fhOaDzeQ6iE:UT3xtbGYFzA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=UT3xtbGYFzA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/siBtbBW4he4" 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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31854701-1834386643691702496?l=blog.neodiem.com%2Fdefault.htm'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=jeyHnCeYZUY:JXZJSiODtBM:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=jeyHnCeYZUY:JXZJSiODtBM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=jeyHnCeYZUY:JXZJSiODtBM:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=jeyHnCeYZUY:JXZJSiODtBM:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=jeyHnCeYZUY:JXZJSiODtBM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=jeyHnCeYZUY:JXZJSiODtBM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=jeyHnCeYZUY:JXZJSiODtBM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=jeyHnCeYZUY:JXZJSiODtBM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=jeyHnCeYZUY:JXZJSiODtBM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=jeyHnCeYZUY:JXZJSiODtBM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=jeyHnCeYZUY:JXZJSiODtBM:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=jeyHnCeYZUY:JXZJSiODtBM:8QFB7NnbhRw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=8QFB7NnbhRw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=jeyHnCeYZUY:JXZJSiODtBM:UT3xtbGYFzA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=UT3xtbGYFzA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/jeyHnCeYZUY" 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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31854701-7809699468914696657?l=blog.neodiem.com%2Fdefault.htm'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=tl8vnMH3Epg:a6S6jj11eLI:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=tl8vnMH3Epg:a6S6jj11eLI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=tl8vnMH3Epg:a6S6jj11eLI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=tl8vnMH3Epg:a6S6jj11eLI:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=tl8vnMH3Epg:a6S6jj11eLI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=tl8vnMH3Epg:a6S6jj11eLI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=tl8vnMH3Epg:a6S6jj11eLI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=tl8vnMH3Epg:a6S6jj11eLI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=tl8vnMH3Epg:a6S6jj11eLI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?i=tl8vnMH3Epg:a6S6jj11eLI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=tl8vnMH3Epg:a6S6jj11eLI:XAVGb8Xj5zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=XAVGb8Xj5zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=tl8vnMH3Epg:a6S6jj11eLI:8QFB7NnbhRw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=8QFB7NnbhRw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NeoDiem?a=tl8vnMH3Epg:a6S6jj11eLI:UT3xtbGYFzA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NeoDiem?d=UT3xtbGYFzA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NeoDiem/~4/tl8vnMH3Epg" 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></channel></rss>
