<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CkUMRHcyfyp7ImA9WhdSGEs.&quot;"><id>tag:blogger.com,1999:blog-3928270290184327528</id><updated>2011-07-28T08:38:05.997-05:00</updated><category term="master data management" /><category term="Microsoft" /><category term="Team Foundation Server" /><category term="information architecture" /><category term="tools" /><category term="Subversion" /><category term="enterprise architecture" /><category term="Software Development" /><category term="SQL Server" /><category term="Songsmith" /><category term="SOA" /><category term="ASP.NET" /><category term="OpenID" /><category term="SaaS" /><category term="Customer Interaction" /><category term="Agile" /><category term="charity" /><category term="DotNetNuke" /><category term="Single Sign-on" /><category term="CMS" /><category term="source control" /><category term="services" /><category term="We Are Microsoft" /><category term="architecture" /><category term="database" /><title>Jeff Townes</title><subtitle type="html">Techie Musings at the Towne Pub</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://jtownes.parivedasolutions.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://jtownes.parivedasolutions.com/" /><author><name>Jeff Townes</name><uri>http://www.blogger.com/profile/15624001897642002503</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_EtwGEgK12oA/TLRH3zkxd2I/AAAAAAAAAD0/jEmrNB_3k60/S220/IMG_1051.JPG" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>16</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/JeffTownes" /><feedburner:info uri="jefftownes" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CUcCRnc9eSp7ImA9WxFTFU8.&quot;"><id>tag:blogger.com,1999:blog-3928270290184327528.post-8204206971423881393</id><published>2010-04-05T21:58:00.001-05:00</published><updated>2010-04-05T22:04:27.961-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-05T22:04:27.961-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Single Sign-on" /><category scheme="http://www.blogger.com/atom/ns#" term="OpenID" /><title>Defeating the Password Anti-Pattern with OpenID</title><content type="html">&lt;p&gt;Most websites provide registered users with access to some type of secure “members only” content, but they ask users to create a new username and password (and remember it each time they return).&amp;#160; Unfortunately, we users can’t remember any more passwords.&amp;#160; We can barely remember the usernames and passwords for the accounts we have already!&lt;/p&gt;  &lt;p&gt;Being overwhelmed is only part of the problem.&amp;#160; A larger threat is that users may contribute to their own identity theft.&amp;#160; Users often reuse the same username and password at multiple sites as a coping mechanism to simplify the accounts they have to remember.&amp;#160; Websites that require an email address as a username exacerbate the problem because users (very often) use the same password for the website login that they use to manage their email account access.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;These behaviors all feed something that security experts call the “password anti-pattern” – sharing the username and password from one site with another site.&amp;#160; If one site gets hacked, bad guys may have access to other unrelated information. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://openid.net/"&gt;OpenID&lt;/a&gt; provides an effective solution to the online account / identity problem by allowing consumers to use a single account identity to access secure content on multiple websites.&amp;#160; Websites that support SSO with OpenID are called “relying parties”, and these sites &lt;em&gt;rely on&lt;/em&gt; an issuing provider for identity management and authentication.&amp;#160; Account credentials are not shared between sites, so the password anti-pattern is defeated.&lt;/p&gt;  &lt;p&gt;Here’s how it works:&amp;#160; When a user wishes to access secure content, the relying party website redirects the user to the issuing provider to login, the issuing provider authenticates the user, and then the issuing provider redirects the user back to the relying party after authentication is complete.&amp;#160; An alternate user experience delivers similar capabilities using a browser pop-up rather than redirecting across sites.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;If interested, you can read the OpenID 2.0 technology specification here:&amp;#160; &lt;a title="http://openid.net/specs/openid-authentication-2_0.html#anchor2" href="http://openid.net/specs/openid-authentication-2_0.html#anchor2"&gt;http://openid.net/specs/openid-authentication-2_0.html#anchor2&lt;/a&gt;.&amp;#160; (Pour yourself a stiff cup of coffee before reading.)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3928270290184327528-8204206971423881393?l=jtownes.parivedasolutions.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JeffTownes/~4/rZHa5fKBq48" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jtownes.parivedasolutions.com/feeds/8204206971423881393/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3928270290184327528&amp;postID=8204206971423881393" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/8204206971423881393?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/8204206971423881393?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JeffTownes/~3/rZHa5fKBq48/defeating-password-anti-pattern-with.html" title="Defeating the Password Anti-Pattern with OpenID" /><author><name>Jeff Townes</name><uri>http://www.blogger.com/profile/15624001897642002503</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_EtwGEgK12oA/TLRH3zkxd2I/AAAAAAAAAD0/jEmrNB_3k60/S220/IMG_1051.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://jtownes.parivedasolutions.com/2010/04/defeating-password-anti-pattern-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4MR3s6cCp7ImA9WxFTFUg.&quot;"><id>tag:blogger.com,1999:blog-3928270290184327528.post-7699243324920622934</id><published>2010-04-05T21:09:00.001-05:00</published><updated>2010-04-06T08:03:06.518-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-06T08:03:06.518-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Single Sign-on" /><category scheme="http://www.blogger.com/atom/ns#" term="OpenID" /><title>Consumer Single Sign-on using OpenID</title><content type="html">&lt;p&gt;Early this year, I began work with a large Dallas-area client to launch a consumer-facing website that will issue user accounts and deliver single sign-on among and between websites hosted by the company and its partners.&amp;#160; The site will enable users to navigate freely across a wide range of web channels:&amp;#160; e-commerce, social networking, affinity programs, content delivery sites, and others.&lt;/p&gt;  &lt;p&gt;As part of that initiative, our team recommended OpenID 2.0 (&lt;a title="http://openid.net/" href="http://openid.net/"&gt;http://openid.net/&lt;/a&gt;) as the technology solution for consumer SSO:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;OpenID is an authentication protocol that makes it easy for people to sign up and access web accounts &lt;/li&gt;    &lt;li&gt;OpenID enables single sign-on between web sites using a centrally-maintained username and password &lt;/li&gt;    &lt;li&gt;The protocol provides a way for sites to verify the identity of an end user without requesting a password for each site &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The typical OpenID implementation involves integrating a given website (the “relying party”) with a separate third-party website (the “issuing provider”) that will issue accounts and manage authentication centrally – the relying party site will &lt;em&gt;rely on&lt;/em&gt; the issuing provider for authentication.&amp;#160; &lt;/p&gt;  &lt;p&gt;OpenID adoption has grown rapidly, and the US Government is piloting a program to manage citizen access to government resources using OpenID:&amp;#160; &lt;a title="http://openid.net/2010/03/03/open-identity-exchange-commences-open-government-pilot-national-institutes-of-health/" href="http://openid.net/2010/03/03/open-identity-exchange-commences-open-government-pilot-national-institutes-of-health/"&gt;http://openid.net/2010/03/03/open-identity-exchange-commences-open-government-pilot-national-institutes-of-health/&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Our project is unique because our client is launching a new issuing provider website and integrating its other web properties with the new issuing provider (as relying parties) for authentication and single sign-on.&amp;#160; Few companies choose (or need) to become issuing providers, but the unique shape of this client’s industry offer it a great opportunity.&amp;#160; Our team is excited to be helping them deliver – and I am excited to be learning about the emerging technologies in the Identity 2.0 space.&lt;/p&gt;  &lt;p&gt;Stay tuned for more…&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3928270290184327528-7699243324920622934?l=jtownes.parivedasolutions.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JeffTownes/~4/2g_vdWdyAAc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jtownes.parivedasolutions.com/feeds/7699243324920622934/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3928270290184327528&amp;postID=7699243324920622934" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/7699243324920622934?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/7699243324920622934?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JeffTownes/~3/2g_vdWdyAAc/consumer-single-sign-on-using-openid.html" title="Consumer Single Sign-on using OpenID" /><author><name>Jeff Townes</name><uri>http://www.blogger.com/profile/15624001897642002503</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_EtwGEgK12oA/TLRH3zkxd2I/AAAAAAAAAD0/jEmrNB_3k60/S220/IMG_1051.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://jtownes.parivedasolutions.com/2010/04/consumer-single-sign-on-using-openid.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04MSXc6cSp7ImA9WxBbGE8.&quot;"><id>tag:blogger.com,1999:blog-3928270290184327528.post-2196213003080952588</id><published>2010-03-17T05:32:00.002-05:00</published><updated>2010-03-17T05:33:08.919-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-17T05:33:08.919-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><category scheme="http://www.blogger.com/atom/ns#" term="database" /><title>SQL Server 2008:  Allow users to save design changes that require tables to be dropped and re-created</title><content type="html">I discovered today that SQL Server 2008 wants to save me from myself.&amp;nbsp; While I appreciate the intent, I’m beyond salvation.&amp;nbsp; I prefer productivity.&lt;br /&gt;
Scenario:&amp;nbsp; I tried to disable null values for a column in our development database, but SQL Server warned me that saving changes will require tables to be dropped and re-created:&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/_EtwGEgK12oA/S6CvpcNKD8I/AAAAAAAAACQ/A3otWHyRQA8/s1600-h/image%5B8%5D.png"&gt;&lt;img alt="image" border="0" height="341" src="http://lh3.ggpht.com/_EtwGEgK12oA/S6CvpyjrqxI/AAAAAAAAACU/n00IZUK2U40/image_thumb%5B4%5D.png?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline;" title="image" width="422" /&gt;&lt;/a&gt;&lt;br /&gt;
Luckily, there’s an easy option to put the user back in control:&amp;nbsp; &lt;br /&gt;
Tools &amp;gt; Options &amp;gt; Designers &amp;gt; Table and Database Designers &amp;gt; Prevent saving changes that require table re-creation&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/_EtwGEgK12oA/S6CvqND_yQI/AAAAAAAAACY/fxfj6wjlg_g/s1600-h/image%5B3%5D.png"&gt;&lt;img alt="image" border="0" height="348" src="http://lh3.ggpht.com/_EtwGEgK12oA/S6CvqR-9V_I/AAAAAAAAACc/51MVyGcTMv4/image_thumb%5B1%5D.png?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline;" title="image" width="585" /&gt;&lt;/a&gt; &lt;br /&gt;
I unchecked the flag, and I was in control again. (Or, at least in control of &lt;em&gt;this…&lt;/em&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3928270290184327528-2196213003080952588?l=jtownes.parivedasolutions.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JeffTownes/~4/OSopY8pDugw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jtownes.parivedasolutions.com/feeds/2196213003080952588/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3928270290184327528&amp;postID=2196213003080952588" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/2196213003080952588?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/2196213003080952588?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JeffTownes/~3/OSopY8pDugw/sql-server-2008-allow-users-to-save.html" title="SQL Server 2008:  Allow users to save design changes that require tables to be dropped and re-created" /><author><name>Jeff Townes</name><uri>http://www.blogger.com/profile/15624001897642002503</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_EtwGEgK12oA/TLRH3zkxd2I/AAAAAAAAAD0/jEmrNB_3k60/S220/IMG_1051.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_EtwGEgK12oA/S6CvpyjrqxI/AAAAAAAAACU/n00IZUK2U40/s72-c/image_thumb%5B4%5D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://jtownes.parivedasolutions.com/2010/03/sql-server-2008-allow-users-to-save.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UNSHY9eSp7ImA9WxNQFEs.&quot;"><id>tag:blogger.com,1999:blog-3928270290184327528.post-3912702095801199594</id><published>2009-09-20T12:23:00.002-05:00</published><updated>2009-09-20T12:54:59.861-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-20T12:54:59.861-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SOA" /><category scheme="http://www.blogger.com/atom/ns#" term="information architecture" /><category scheme="http://www.blogger.com/atom/ns#" term="master data management" /><category scheme="http://www.blogger.com/atom/ns#" term="enterprise architecture" /><title>Information architecture is required to deliver the promised value of SOA</title><content type="html">&lt;p&gt;Last month, I posted that “&lt;a href="http://jtownes.parivedasolutions.com/2009/08/soa-does-it-deliver-its-promised-value.html" target="_blank"&gt;SOA is limited in its ability to create value for an organization&lt;/a&gt;”&amp;#160; because services are often not reusable.&amp;#160; At some level, developers seem responsible for the failure because we are tasked with developing tailored line-of-business applications, so we do not consider the broader goal of enterprise reusability.&amp;#160; And, as I noted in that post, we also have difficulty transitioning from a “build it” mindset to a “find it” approach where we look before we leap into development.&amp;#160; At the same time, business stakeholders share responsibility for the failure of SOA.&amp;#160; These application owners and line-of-business executives are focused on meeting short-term business needs, and they often shortchange the required ongoing investment in enterprise-wide design, governance, and training.&lt;/p&gt;  &lt;p&gt;I believe there is another significant (and overlooked) reason why SOA does not deliver its promised business value:&amp;#160; information architecture.&amp;#160; By design, services expose endpoints into business application silos.&amp;#160; These services cannot be effectively integrated unless they all speak the same language – that is, unless they all understand and share the same information architecture.&amp;#160; In the absence of SOA, application developers create line-of-business applications that have their own unique data stores, and they use data synchronization to push and pull information across the enterprise.&amp;#160; The design is effective because business owners do not have an expectation that information will be integrated immediately.&amp;#160; This architecture does not scale when SOA becomes an IT or enterprise goal.&lt;/p&gt;  &lt;p&gt;SOA introduces a significant increase in operational complexity because, suddenly, multiple applications share part of the enterprise picture – but none are complete.&amp;#160; The old patterns of nightly sync jobs and data reconciliation are not enough.&amp;#160; Business owners demand that at least &lt;em&gt;one&lt;/em&gt; of the systems serve as a trustworthy system of record in real time.&amp;#160; Developers respond by scheduling hourly (or even more frequent) sync jobs, and the architecture struggles to keep pace with the business demand for high-integrity data.&lt;/p&gt;  &lt;p&gt;So, what’s the solution?&amp;#160; SOA must be coupled with information architecture so that critical information can be consolidated, not replicated, and multiple applications can share a unified view of master data.&amp;#160; Senior management must define enterprise-level business strategy for technology rather than delegating all technology decisions to business units and their line-of-business needs.&amp;#160; At the same time, enterprise architects must explain to business unit leaders that the data integrity they demand will only result from tighter integration with the information in other business units.&amp;#160; Information architects should outline master data management programs and organize the governance structures required to support them.&amp;#160; Technologists must justify these programs based on business objectives, and ultimately, LOB data fiefdoms must be replaced with an enterprise view.&lt;/p&gt;  &lt;p&gt;Then, and only then, will SOA deliver its full promised value.&amp;#160; Applications will share a common understanding of critical business information.&amp;#160; Updates will propagate natively to other applications rather than relying on a &lt;a href="http://www.rubegoldberg.com/" target="_blank"&gt;Rube Goldberg&lt;/a&gt; framework of jobs and packages to synchronize, consolidate, and cleanse data.&amp;#160; Data quality will improve, and governance structures will protect its ongoing integrity.&amp;#160; Most importantly, business leaders will share a common set of actionable knowledge to drive operations and analytics.&lt;/p&gt;  &lt;p&gt;A serious evaluation of information architecture seems absent in many discussions about SOA, but this enterprise information management is the missing link.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3928270290184327528-3912702095801199594?l=jtownes.parivedasolutions.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JeffTownes/~4/2B4818iFTBI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jtownes.parivedasolutions.com/feeds/3912702095801199594/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3928270290184327528&amp;postID=3912702095801199594" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/3912702095801199594?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/3912702095801199594?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JeffTownes/~3/2B4818iFTBI/information-architecture-is-required-to.html" title="Information architecture is required to deliver the promised value of SOA" /><author><name>Jeff Townes</name><uri>http://www.blogger.com/profile/15624001897642002503</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_EtwGEgK12oA/TLRH3zkxd2I/AAAAAAAAAD0/jEmrNB_3k60/S220/IMG_1051.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://jtownes.parivedasolutions.com/2009/09/information-architecture-is-required-to.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUMRns_fCp7ImA9WxNQE0o.&quot;"><id>tag:blogger.com,1999:blog-3928270290184327528.post-3891482593610128265</id><published>2009-09-19T11:02:00.001-05:00</published><updated>2009-09-19T11:04:47.544-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-19T11:04:47.544-05:00</app:edited><title>Happy Talk Like A Pirate Day!</title><content type="html">&lt;p&gt;I love shamelessly fun-seeking holidays… St. Patrick’s Day, Halloween, and… &lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;ct=res&amp;amp;cd=1&amp;amp;url=http%3A%2F%2Fwww.talklikeapirate.com%2Fpiratehome.html&amp;amp;ei=GAC1SqaiDJCb8Aai47CTDw&amp;amp;usg=AFQjCNFLvaz5ni5n6HrljInZ4auuB9MSGw" target="_blank"&gt;National Talk Like a Pirate Day&lt;/a&gt;!&amp;#160; What a great excuse to have a little fun with family and friends.&amp;#160; So…&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Ahoy!&amp;#160; Be ye with me, mateys?&amp;#160; Raise yer bottles and scupper yer cutlass!&amp;#160; Weigh anchor, sea dogs! It’s now or in Davy Jones’ locker.&amp;#160; If not for me, for the rum.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Ay, fair winds to ye!!&lt;img style="display: inline; margin-left: 0px; margin-right: 0px" align="right" src="http://2.bp.blogspot.com/_sTl28qiTNJ0/SSlh36cHVDI/AAAAAAAAAv8/kJsE9GVSyI0/s400/pirate_monkey_yar.jpg" width="187" height="187" /&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Arrrrrrrrrr….&lt;/em&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3928270290184327528-3891482593610128265?l=jtownes.parivedasolutions.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JeffTownes/~4/ISvP57jTYkM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jtownes.parivedasolutions.com/feeds/3891482593610128265/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3928270290184327528&amp;postID=3891482593610128265" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/3891482593610128265?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/3891482593610128265?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JeffTownes/~3/ISvP57jTYkM/happy-talk-like-pirate-day.html" title="Happy Talk Like A Pirate Day!" /><author><name>Jeff Townes</name><uri>http://www.blogger.com/profile/15624001897642002503</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_EtwGEgK12oA/TLRH3zkxd2I/AAAAAAAAAD0/jEmrNB_3k60/S220/IMG_1051.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_sTl28qiTNJ0/SSlh36cHVDI/AAAAAAAAAv8/kJsE9GVSyI0/s72-c/pirate_monkey_yar.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://jtownes.parivedasolutions.com/2009/09/happy-talk-like-pirate-day.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEHRHc8eyp7ImA9WxNSFE0.&quot;"><id>tag:blogger.com,1999:blog-3928270290184327528.post-544261967447044261</id><published>2009-08-27T15:16:00.002-05:00</published><updated>2009-08-27T15:23:55.973-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-27T15:23:55.973-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SOA" /><category scheme="http://www.blogger.com/atom/ns#" term="services" /><category scheme="http://www.blogger.com/atom/ns#" term="SaaS" /><category scheme="http://www.blogger.com/atom/ns#" term="architecture" /><title>SOA:  Does it deliver its promised value?</title><content type="html">&lt;p&gt;&lt;a href="http://borrell.parivedasolutions.com/" target="_blank"&gt;Brian Orrell&lt;/a&gt; sent me a link to a David Chappell (the SOA expert, not the comedian) blog post titled “&lt;a href="http://www.davidchappell.com/blog/2009/08/is-soa-failing-2008-interview.html" target="_blank"&gt;Is SOA Failing&lt;/a&gt;?”.&amp;#160; In his post, Chappell states plainly that the “value [of SOA] is nowhere near as large as we’d hoped.”&amp;#160; He goes further in a podcast by saying that “SOA is failing.”&amp;#160; Overall, Chappell delivered his usual dose of thought-provoking content and it was a solid message. Key points:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;SOA is failing because services are (often) not reusable&lt;/li&gt;    &lt;li&gt;The failure is largely human – technology can deliver, but humans struggle to design or consume services in that form&lt;/li&gt;    &lt;li&gt;SOA works better when it delivers highly-technical services (e.g. identity management) or when it delivers raw data&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;…and as a separate nugget, he included a distinction I had not thought about yet:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;SOA usually describes services consumed by technologies or developers&lt;/li&gt;    &lt;li&gt;SaaS describes consumer-facing services&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I wholly agree with David Chappell:&amp;#160; SOA is limited in its ability to create value for an organization.&amp;#160; Recently, I spent time at a large non-profit organization creating services (and implementing &lt;a href="http://www.codeplex.com/servicesengine" target="_blank"&gt;MSE&lt;/a&gt;) to centralize user authentication &amp;amp; authorization for a number of .NET applications.&amp;#160; Our team developed and exposed new services so that applications could call into a central system for identity management.&amp;#160; We also used services to expose raw data: states, countries, members, etc.&lt;/p&gt;  &lt;p&gt;The architecture worked well, but the value was elusive .&amp;#160; First, abstracting security logic from each application and centralizing it sounds simple, but in practice it was challenging to reuse identical logic for all applications.&amp;#160; A bigger limiter was that it took a substantial effort to train and transition the client staff from an “I need to build my own…” mindset to a “I need to go find…” mindset.&amp;#160; Arguably, there was significant value lost in translation. &lt;/p&gt;  &lt;p&gt;SOA delivered a solution for our need, and the software is serving the organization well.&amp;#160; But, SOA did not deliver the enormous value that experts like Chappell once touted that it would.&amp;#160; SOA is useful, but I am not convinced that it is game-changing.&lt;/p&gt;  &lt;p&gt;What do you think?&amp;#160; Is SOA failing?&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3928270290184327528-544261967447044261?l=jtownes.parivedasolutions.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JeffTownes/~4/kwYO3hBVIeo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jtownes.parivedasolutions.com/feeds/544261967447044261/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3928270290184327528&amp;postID=544261967447044261" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/544261967447044261?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/544261967447044261?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JeffTownes/~3/kwYO3hBVIeo/soa-does-it-deliver-its-promised-value.html" title="SOA:  Does it deliver its promised value?" /><author><name>Jeff Townes</name><uri>http://www.blogger.com/profile/15624001897642002503</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_EtwGEgK12oA/TLRH3zkxd2I/AAAAAAAAAD0/jEmrNB_3k60/S220/IMG_1051.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://jtownes.parivedasolutions.com/2009/08/soa-does-it-deliver-its-promised-value.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQFSH8zfip7ImA9WxNTEE4.&quot;"><id>tag:blogger.com,1999:blog-3928270290184327528.post-646422973931859601</id><published>2009-08-11T19:27:00.002-05:00</published><updated>2009-08-11T19:35:19.186-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-11T19:35:19.186-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Software Development" /><title>The Cost of ‘Good Enough’</title><content type="html">&lt;p&gt;A recent Visual Studio Magazine article (&lt;a href="http://visualstudiomagazine.com/articles/2009/07/01/the-cost-of-static.aspx" target="_blank"&gt;The Cost of Static&lt;/a&gt;) hints that offshore development can have costly downsides hidden in the form of missed requirements or poor implementations.  While I agree that offshore development (or any level of offshore/onshore/nearshore/remote development) can be costly, I think the author missed a bigger risk.&lt;/p&gt;&lt;p&gt;The real cost is the cost of “good enough.”  When developers slack and deliver software that is merely good enough, companies lose the opportunity to capitalize on excellent work.  Excellent work can attract new customers, lower operating costs, build brands, or help the companies achieve other critical objectives.  Errors, re-work, or missed intent can cost companies dearly.  Not only do these problems force businesses to invest additional funds, they also jeopardize organizational relationships and goodwill.&lt;/p&gt;&lt;p&gt;Good enough won’t cut it.  Unfortunately, there are many developers who deliver “good enough” regularly.  This article highlighted one such example.  Similar results could have come from  a local contractor or an offshore firm.  Location is irrelevant.  The real caution for businesses is to hire the best talent available to meet business objectives and deliver quality software.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3928270290184327528-646422973931859601?l=jtownes.parivedasolutions.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JeffTownes/~4/aRPL9UH7Mjg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jtownes.parivedasolutions.com/feeds/646422973931859601/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3928270290184327528&amp;postID=646422973931859601" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/646422973931859601?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/646422973931859601?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JeffTownes/~3/aRPL9UH7Mjg/cost-of-good-enough.html" title="The Cost of ‘Good Enough’" /><author><name>Jeff Townes</name><uri>http://www.blogger.com/profile/15624001897642002503</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_EtwGEgK12oA/TLRH3zkxd2I/AAAAAAAAAD0/jEmrNB_3k60/S220/IMG_1051.JPG" /></author><thr:total>1</thr:total><feedburner:origLink>http://jtownes.parivedasolutions.com/2009/08/cost-of-good-enough.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYCRXw9eip7ImA9WxNTEE4.&quot;"><id>tag:blogger.com,1999:blog-3928270290184327528.post-1439795212277374718</id><published>2009-08-11T17:32:00.002-05:00</published><updated>2009-08-11T17:36:04.262-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-11T17:36:04.262-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Software Development" /><title>Delivering Quality Software</title><content type="html">&lt;p&gt;Coworkers who know me well will tell you that I am passionate about delivering quality software.&amp;#160; I have a mild obsession with unit tests, code coverage, complexity statistics, FxCop analyses, and the like.&amp;#160; I get a geeky satisfaction when I pop open a code coverage report during a code review and see coverage stats up in the 90s.&amp;#160; And few things are more professionally satisfying to me as a developer than a good code review session where we boil a seemingly complex ball of logic down into a few simple lines.&amp;#160; Ah, great success!&lt;/p&gt;  &lt;p&gt;Now, I’ll admit that I’m a rare breed.&amp;#160; I write lists for everything, I love my Quicken account registers, and I spend an inordinate amount of brain cycles thinking about efficiency (my car-packing skills are the stuff of legend!!).&amp;#160; But, while these traits may explain my attention to detail, they don’t explain why I care.&lt;/p&gt;  &lt;p&gt;Delivering quality software allows me to innovate faster and deliver more than others who don’t monitor quality.&amp;#160; &lt;/p&gt;  &lt;p&gt;As a creator/architect/designer, I can try new ideas with the confidence of knowing that bugs will surface immediately.&amp;#160; If my code breaks something, automated unit tests will fire error notifications and I will know about the problems – fast.&amp;#160; These messages give me the information to address problems quickly before additional logic complicates the fix… and they also give my team the guilty pleasure of asking me to don an obligatory “you broke the build” pink&amp;#160; cowboy hat.&amp;#160; (We geeks love our build rituals.)&amp;#160; As a result, I can try new ideas without investing hours or days in manual regression tests for each trivial change.&amp;#160; Effective unit tests take time to write, but they pay me back with dividends.&lt;/p&gt;  &lt;p&gt;Since I can innovate faster, I can deliver more.&amp;#160; Naysayers and change-phobes no longer can persuade me that it will “take too much time to make a change.”&amp;#160; I can refactor with courage and deliver better software.&lt;/p&gt;  &lt;p&gt;Plus, it’s fun…&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3928270290184327528-1439795212277374718?l=jtownes.parivedasolutions.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JeffTownes/~4/jkz7O4vGD4o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jtownes.parivedasolutions.com/feeds/1439795212277374718/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3928270290184327528&amp;postID=1439795212277374718" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/1439795212277374718?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/1439795212277374718?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JeffTownes/~3/jkz7O4vGD4o/delivering-quality-software.html" title="Delivering Quality Software" /><author><name>Jeff Townes</name><uri>http://www.blogger.com/profile/15624001897642002503</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_EtwGEgK12oA/TLRH3zkxd2I/AAAAAAAAAD0/jEmrNB_3k60/S220/IMG_1051.JPG" /></author><thr:total>1</thr:total><feedburner:origLink>http://jtownes.parivedasolutions.com/2009/08/delivering-quality-software.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMERHo4fyp7ImA9WxVWEks.&quot;"><id>tag:blogger.com,1999:blog-3928270290184327528.post-7638744265616247110</id><published>2009-02-18T11:37:00.002-06:00</published><updated>2009-02-21T18:43:25.437-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-21T18:43:25.437-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Software Development" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><title>Handy Link for the ASP.NET Page Lifecycle</title><content type="html">&lt;p&gt;Some of us have been building ASP.NET applications since the 1.0/1.1 days when we had to think about (and see) all of the event wiring in the code-behind pages.  For developers that are learning ASP.NET web development today, some of the event wiring seems like “magic.”  &lt;/p&gt;&lt;p&gt;I have mixed feelings about the helpfulness of these tools.  On one hand, “magic” is great for helping new .NET developers become productive quickly, but it’s also a hindrance for those times when knowing the full page lifecycle would be useful.  It’s good for developers to know what is happening under the covers.&lt;/p&gt;&lt;p&gt;In case you’d like to learn the ASP.NET page lifecycle (or need a link to send to others who are learning), here is a great link that describes the events and how the fit together:&lt;br /&gt; &lt;a title="http://www.beansoftware.com/ASP.NET-Tutorials/Page-Life-Cycle.aspx" href="http://www.beansoftware.com/ASP.NET-Tutorials/Page-Life-Cycle.aspx"&gt;http://www.beansoftware.com/ASP.NET-Tutorials/Page-Life-Cycle.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Thanks for the link, Danny.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3928270290184327528-7638744265616247110?l=jtownes.parivedasolutions.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JeffTownes/~4/6erPTeD0SeU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jtownes.parivedasolutions.com/feeds/7638744265616247110/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3928270290184327528&amp;postID=7638744265616247110" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/7638744265616247110?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/7638744265616247110?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JeffTownes/~3/6erPTeD0SeU/handy-link-for-aspnet-page-lifecycle.html" title="Handy Link for the ASP.NET Page Lifecycle" /><author><name>Jeff Townes</name><uri>http://www.blogger.com/profile/15624001897642002503</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_EtwGEgK12oA/TLRH3zkxd2I/AAAAAAAAAD0/jEmrNB_3k60/S220/IMG_1051.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://jtownes.parivedasolutions.com/2009/02/handy-link-for-aspnet-page-lifecycle.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkEDQXoyfip7ImA9WxNTEE4.&quot;"><id>tag:blogger.com,1999:blog-3928270290184327528.post-1827671721362437521</id><published>2009-01-18T15:35:00.005-06:00</published><updated>2009-08-11T17:44:30.496-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-11T17:44:30.496-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term="Songsmith" /><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft" /><title>Microsoft Songsmith Rocks!!</title><content type="html">Check out Microsoft Songsmith: &lt;a href="http://research.microsoft.com/en-us/um/redmond/projects/songsmith/"&gt;http://research.microsoft.com/en-us/um/redmond/projects/songsmith/&lt;/a&gt;. We spent some time goofing with it this weekend to blow off steam during a 37-hour code-a-thon, and it's awesome. You sing (whatever comes to mind...) to a beat, and it then adds music to accompany your ramblings and off-pitch vocals. It's like karaoke without any rules, and I'm hooked. It says it's still a "Microsoft Research" product, and the video advertisement is hokey, but the product is almost as entrancing as Rock Band.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3928270290184327528-1827671721362437521?l=jtownes.parivedasolutions.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JeffTownes/~4/6Z4tVqIpVRY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jtownes.parivedasolutions.com/feeds/1827671721362437521/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3928270290184327528&amp;postID=1827671721362437521" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/1827671721362437521?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/1827671721362437521?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JeffTownes/~3/6Z4tVqIpVRY/microsoft-songsmith-rocks.html" title="Microsoft Songsmith Rocks!!" /><author><name>Jeff Townes</name><uri>http://www.blogger.com/profile/15624001897642002503</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_EtwGEgK12oA/TLRH3zkxd2I/AAAAAAAAAD0/jEmrNB_3k60/S220/IMG_1051.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://jtownes.parivedasolutions.com/2009/01/microsoft-songsmith-rocks.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQBRno8fSp7ImA9WxVRE0w.&quot;"><id>tag:blogger.com,1999:blog-3928270290184327528.post-1350666983883687223</id><published>2009-01-18T14:58:00.004-06:00</published><updated>2009-01-18T16:05:57.475-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-18T16:05:57.475-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="We Are Microsoft" /><category scheme="http://www.blogger.com/atom/ns#" term="DotNetNuke" /><category scheme="http://www.blogger.com/atom/ns#" term="CMS" /><title>DNN serves a purpose, but...</title><content type="html">I spent this weekend working with some of my coworkers to develop a content-managed website for a local charity. We've worked 37 hours since 2:30 PM on Friday, so we're a bit short on sleep... which may explain why I'm feeling feisty.&lt;br /&gt;&lt;br /&gt;So, about that feistiness...&lt;br /&gt;&lt;br /&gt;DNN is &lt;em&gt;not&lt;/em&gt; my favorite tool. For this weekend charity challenge, we developed the website on the DotNetNuke (DNN) platform to ensure that the small staff at our charity would be able to manage it. DNN provides tools to update site content, upload photos and documents, and manage event calendars, announcements, etc. So, it serves a purpose. But, those features come at a cost. The platform is slow, it is cumbersome to style, and it is not a good platform for custom applications. It is a simple CMS platform.&lt;br /&gt;&lt;br /&gt;I have developed many DNN sites over the past few years, and I had hoped the performance shortcomings and feature bloat would have been addressed in this new version. I was disappointed to learn that it's still the same ole' DNN... painful.&lt;br /&gt;&lt;br /&gt;Our team is happy with the choice to use DNN because it will provide a solid solution for Cedar Hill ISD. It's simple. But, i would not recommend it to any organization with a dedicated IT staff or any organizaiton that wishes to extend it with custom features. Look to a different platform (SharePoint, Sitecore CMS, etc.) instead.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3928270290184327528-1350666983883687223?l=jtownes.parivedasolutions.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JeffTownes/~4/B7qDkF94LQ4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jtownes.parivedasolutions.com/feeds/1350666983883687223/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3928270290184327528&amp;postID=1350666983883687223" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/1350666983883687223?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/1350666983883687223?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JeffTownes/~3/B7qDkF94LQ4/dnn-serves-purpose-but.html" title="DNN serves a purpose, but..." /><author><name>Jeff Townes</name><uri>http://www.blogger.com/profile/15624001897642002503</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_EtwGEgK12oA/TLRH3zkxd2I/AAAAAAAAAD0/jEmrNB_3k60/S220/IMG_1051.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://jtownes.parivedasolutions.com/2009/01/dnn-serves-purpose-but.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQAQXczfyp7ImA9WxVRE0w.&quot;"><id>tag:blogger.com,1999:blog-3928270290184327528.post-2678407404573792114</id><published>2009-01-18T14:48:00.003-06:00</published><updated>2009-01-18T16:05:40.987-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-18T16:05:40.987-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="We Are Microsoft" /><category scheme="http://www.blogger.com/atom/ns#" term="charity" /><title>Great working with Cedar Hill ISD Education Foundation</title><content type="html">This year, our We Are Microsoft team developed a new content-managed website for Cedar Hill ISD Education Foundation. You can see the new site at &lt;a href="http://www.cedarhillef.org/"&gt;http://www.cedarhillef.org/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Cedar Hill EF is a foundation that provides programs and academic support for students in the Cedar Hill Independent School District. Their old website, &lt;a href="http://www.chisd.org/CHfoundation/index.htm"&gt;http://www.chisd.org/CHfoundation/index.htm&lt;/a&gt;, provided them with a venue to share their mission, but the organization did not have tools to easily manage their message and update site content. We created a new content-managed website with tools for staff to update content, events, and photos. We setup their new domain name, configured new corporate email, created a blog, and setup a Flickr site for them to manage photos of their events.&lt;br /&gt;&lt;br /&gt;Many thanks to Microsoft for sponsoring this event!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3928270290184327528-2678407404573792114?l=jtownes.parivedasolutions.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JeffTownes/~4/8l6Z6gCOjeY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jtownes.parivedasolutions.com/feeds/2678407404573792114/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3928270290184327528&amp;postID=2678407404573792114" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/2678407404573792114?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/2678407404573792114?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JeffTownes/~3/8l6Z6gCOjeY/great-working-with-cedar-hill-isd.html" title="Great working with Cedar Hill ISD Education Foundation" /><author><name>Jeff Townes</name><uri>http://www.blogger.com/profile/15624001897642002503</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_EtwGEgK12oA/TLRH3zkxd2I/AAAAAAAAAD0/jEmrNB_3k60/S220/IMG_1051.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://jtownes.parivedasolutions.com/2009/01/great-working-with-cedar-hill-isd.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQMQ3g9fCp7ImA9WxVRE0w.&quot;"><id>tag:blogger.com,1999:blog-3928270290184327528.post-3400600178905408480</id><published>2008-11-18T10:38:00.005-06:00</published><updated>2009-01-18T16:06:22.664-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-18T16:06:22.664-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="We Are Microsoft" /><category scheme="http://www.blogger.com/atom/ns#" term="charity" /><title>We Are Microsoft Charity Challenge!</title><content type="html">I've registered again for the We Are Microsoft Charity Challenge. The event benefits charities who need technology support to better serve their communities. It's a fun weekend, so I hope you'll join, too.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.wearemicrosoft.com/"&gt;&lt;br /&gt;&lt;img height="125" src="http://www.wearemicrosoft.com/images/WeAreMicrosoft_Box.gif" width="125" border="0" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3928270290184327528-3400600178905408480?l=jtownes.parivedasolutions.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JeffTownes/~4/O-zO8B5_bc4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jtownes.parivedasolutions.com/feeds/3400600178905408480/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3928270290184327528&amp;postID=3400600178905408480" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/3400600178905408480?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/3400600178905408480?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JeffTownes/~3/O-zO8B5_bc4/we-are-microsoft-charity-challenge.html" title="We Are Microsoft Charity Challenge!" /><author><name>Jeff Townes</name><uri>http://www.blogger.com/profile/15624001897642002503</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_EtwGEgK12oA/TLRH3zkxd2I/AAAAAAAAAD0/jEmrNB_3k60/S220/IMG_1051.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://jtownes.parivedasolutions.com/2008/11/we-are-microsoft-charity-challenge.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcCQX8_eCp7ImA9WxdXEEo.&quot;"><id>tag:blogger.com,1999:blog-3928270290184327528.post-5104380003285787826</id><published>2008-06-21T13:09:00.002-05:00</published><updated>2008-06-21T13:14:20.140-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-21T13:14:20.140-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Software Development" /><title>Do Not Fool Yourself:  Prototype != Production</title><content type="html">&lt;p&gt;As developers, we get attached to our work because we take pride in our accomplishments.  The trouble is that we get a little &lt;em&gt;too&lt;/em&gt; attached to progress and miss the bigger picture.  We build prototypes to vet out our designs, test new technologies, and demonstrate concepts to our colleagues.  But, we shouldn’t fool ourselves… prototypes are not production code.&lt;br /&gt;&lt;br /&gt;It happens on every project.  We begin building a solution to demonstrate our vision to our client / product manager / IT director / business user.  But, we take a few shortcuts.  Honestly, who hasn’t, right?  We skip the unit tests.  We may not wire it up to a production-ready data model.  And, we sure don’t subject our code to the scrutiny of our peers.  After all, it’s a prototype, right?  We’re just trying to rally everyone around a vision!  We give ourselves the standard line… “oh, I’ll refactor it and add the test cases ‘later’”. &lt;br /&gt;&lt;br /&gt;But then “later” arrives.  Now we’re invested in this prototype.  After all, it &lt;em&gt;is&lt;/em&gt; the solution that sold the business on the viability of a few new features, and… it works!  Our perspective is skewed.  We think… “Gee, why can’t I just start with this and build around it?”  (…except that it’s not 1950 and none of us really think like Beaver Cleaver and the “gee” generation…).  In any case, we become comfortable with our shortcuts, and we explain them away. &lt;br /&gt;&lt;br /&gt;Resist the urge.  Just say no.  Prototype code should not be in Production. &lt;br /&gt;&lt;br /&gt;First, if you treat your prototype as the starting point for your “real” solution, you’re starting on the wrong side of the statistics.  You now have 0% code coverage on your unit tests (or maybe a meager 10-15%), which is hardly the mark of excellence on a production-ready product.  Nobody wants to start work with a losing record.  I encourage our teams to shoot for an ‘A’ average – 90% code coverage on all code.  If 90% is good enough for our nation’s universities, then it’s good enough for me. &lt;br /&gt;&lt;br /&gt;Next, if you use your prototype as your “real” solution, you inherit your own bad decisions.  We’re geeks – educated, intellectual, creative application designers.  All of us can find something we don’t like about the code we wrote last year/month/week.  Why?  We learned something new that improved our habits and made us better developers.  Well, the same goes for an individual solution.  For some reason, our ideas are always better the second time around.  Most likely it’s because we subject our ideas to peer critique and we vet our code through peer reviews.  Inspection begets improvement.  But, it’s also (at least partially) because we felt some pain along the way as we implemented our solution – we remember the pain, and we work to overcome it the second time around.&lt;/p&gt;&lt;p&gt;So, do yourself a favor.  Relegate your prototype code to a “Prototype” branch in Subversion and begin building production-ready code with a new folder from the trunk.  Start fresh for your production application.  You will thank yourself later.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3928270290184327528-5104380003285787826?l=jtownes.parivedasolutions.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JeffTownes/~4/Vs4e0rC89qc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jtownes.parivedasolutions.com/feeds/5104380003285787826/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3928270290184327528&amp;postID=5104380003285787826" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/5104380003285787826?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/5104380003285787826?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JeffTownes/~3/Vs4e0rC89qc/do-not-fool-yourself-prototype.html" title="Do Not Fool Yourself:  Prototype != Production" /><author><name>Jeff Townes</name><uri>http://www.blogger.com/profile/15624001897642002503</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_EtwGEgK12oA/TLRH3zkxd2I/AAAAAAAAAD0/jEmrNB_3k60/S220/IMG_1051.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://jtownes.parivedasolutions.com/2008/06/do-not-fool-yourself-prototype.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMHRXg7cSp7ImA9WxVRE0w.&quot;"><id>tag:blogger.com,1999:blog-3928270290184327528.post-1190857869293224472</id><published>2008-06-06T22:54:00.005-05:00</published><updated>2009-01-18T16:07:14.609-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-18T16:07:14.609-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Team Foundation Server" /><category scheme="http://www.blogger.com/atom/ns#" term="Subversion" /><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft" /><category scheme="http://www.blogger.com/atom/ns#" term="source control" /><title>TFS Project Extraction Tool - Anyone have a solution?</title><content type="html">&lt;p&gt;We are in need of a production-ready tool to extract Team Foundation Server project source code (including all history) from our TFS server so that we can turn it over to clients at the end of each engagement. We have played with the CodePlex projects, but they're still a bit too buggy to rely on.&lt;/p&gt;&lt;p&gt;Doug Seven mentioned this feature will be available in Rosario using a feature called Project Collections. Does anyone know if there are any plans to release a solution sooner? We would like to continue recommending TFS for our clients, but this is a critical requirement that TFS currently cannot meet. &lt;/p&gt;&lt;p&gt;We will likely recommend Subversion until a solution is released.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3928270290184327528-1190857869293224472?l=jtownes.parivedasolutions.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JeffTownes/~4/e5_cOOQoFiE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jtownes.parivedasolutions.com/feeds/1190857869293224472/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3928270290184327528&amp;postID=1190857869293224472" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/1190857869293224472?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/1190857869293224472?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JeffTownes/~3/e5_cOOQoFiE/tfs-project-extraction-tool-anyone-have.html" title="TFS Project Extraction Tool - Anyone have a solution?" /><author><name>Jeff Townes</name><uri>http://www.blogger.com/profile/15624001897642002503</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_EtwGEgK12oA/TLRH3zkxd2I/AAAAAAAAAD0/jEmrNB_3k60/S220/IMG_1051.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://jtownes.parivedasolutions.com/2008/06/tfs-project-extraction-tool-anyone-have.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYBQXk4eyp7ImA9WxdRGEw.&quot;"><id>tag:blogger.com,1999:blog-3928270290184327528.post-4994174006998513554</id><published>2008-06-06T21:41:00.009-05:00</published><updated>2008-06-06T22:42:30.733-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-06T22:42:30.733-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Software Development" /><category scheme="http://www.blogger.com/atom/ns#" term="Customer Interaction" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><title>Agile:  More Customer, More Better</title><content type="html">This is it. I just got back from TechEd 2008 in Orlando, and I've got the itch to start blogging. I finally have something to say...&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Customers, I want to hear from you. I want as much customer interaction as you can give me.&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;While at TechEd, I attended a Birds-of-a-Feather (BOF) discussion on Agile Development with .NET. The discussion was an open &lt;a href="http://en.wikipedia.org/wiki/Fishbowl_%28conversation%29"&gt;fishbowl&lt;/a&gt; style conversation with questions from the audience and a rotating group of people like me offering up answers from our project experiences with Agile.&lt;br /&gt;&lt;br /&gt;Overall, it was an engaging discusssion among techies. Many came to learn about the &lt;a href="http://agilemanifesto.org/"&gt;Agile manifesto &lt;/a&gt;and the benefits of Agile so that they could try it with their teams. Some came to pontificate, which is fair game for BOF sessions. But a few, I dare say, were shopping for excuses. They were looking for justifications to avoid customer interaction so they could get back to their true passion - coding.&lt;br /&gt;&lt;br /&gt;One attendee, let's call him Joe, personified the problem. During a short Q&amp;amp;A, Joe expressed concern that his customers were not engaged in his projects. They often skipped iteration review meetings, so his team had little opportunity to gather customer feedback. Ok, nothing strange there. We have all heard and felt that before.&lt;br /&gt;&lt;br /&gt;The problem surfaced during a later discussion about Joe's project work habits. Joe was frustrated that his team couldn't hit its velocity because his customers continually "bothered" him with questions and ideas. He wished they would "leave him alone" so that he could... code. He felt that customers should save their comments for the iteration review meeting rather than "bother" him during his precious coding time. He didn't see the irony that he was complaining earlier that his customers were not engaged. The truth was that they were engaged when they had something to offer, but he wanted them to play by his rules.&lt;br /&gt;&lt;br /&gt;Developers like Joe view Agile as an excuse to avoid customers rather than as a tool to engage them. Comments like Joe's give business executives pause when they hear about Agile. They fear that developers will interpret Agile as "ad hoc" and will isolate themselves from processes designed to encourage communication. In fact, Agile seeks to augment communication rather than isolate it. Joe is misguided.&lt;br /&gt;&lt;br /&gt;Developers (and projects) cannot be successful without frequent customer interaction. Customers do not "get in the way" of progress. Instead, they are critical to project success because the feedback customers offer alters the shape and direction of each project. And, that's a great thing. Afterall... they &lt;em&gt;are&lt;/em&gt; the customer. It's much more satisfying, personally and professionally, to have happy customers than disgruntled ones. Take time to listen when they come knocking.  Make adjustments if you can, and prioritize the rest for later.  We want to make our customers happy, right?&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;So, for any of my customers out there who are reading this... Please, keep "bothering" me. I want to hear from you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3928270290184327528-4994174006998513554?l=jtownes.parivedasolutions.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JeffTownes/~4/ZdVrjz8edRg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jtownes.parivedasolutions.com/feeds/4994174006998513554/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3928270290184327528&amp;postID=4994174006998513554" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/4994174006998513554?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3928270290184327528/posts/default/4994174006998513554?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JeffTownes/~3/ZdVrjz8edRg/agile-more-customer-more-better.html" title="Agile:  More Customer, More Better" /><author><name>Jeff Townes</name><uri>http://www.blogger.com/profile/15624001897642002503</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_EtwGEgK12oA/TLRH3zkxd2I/AAAAAAAAAD0/jEmrNB_3k60/S220/IMG_1051.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://jtownes.parivedasolutions.com/2008/06/agile-more-customer-more-better.html</feedburner:origLink></entry></feed>

