<?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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en-US"><title type="text">assumption of advancement</title><link rel="alternate" type="text/html" href="http://blog.eweibel.net" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/AssumptionOfAdvancement" /><subtitle type="html">Blog about software architecture</subtitle><updated>2012-08-03T10:54:57+00:00</updated><generator>http://wordpress.org/?v=</generator><sy:updatePeriod xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">hourly</sy:updatePeriod><sy:updateFrequency xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">1</sy:updateFrequency><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/AssumptionOfAdvancement" /><feedburner:info uri="assumptionofadvancement" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-nd/3.0/" /><logo>http://creativecommons.org/images/public/somerights20.gif</logo><entry><title type="text">Migrate a VSS repository to TFS</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AssumptionOfAdvancement/~3/g7t6dHkr28o/" /><category term=".NET" /><category term="Good practices" /><author><name>Patrick</name></author><updated>2012-08-02T07:00:00-07:00</updated><id>http://blog.eweibel.net/?p=1264</id><summary type="html">Recently I had to migrate parts from a Microsoft Visual SourceSafe 2005 repository to a Microsoft Team Foundation Server 2010 repository. In this blog post I show what I had to do and what the pitfalls were. The tool To migrate a repository you have at least two possibilities: Migrate the latest snapshot or the [...]</summary><content type="html">&lt;p&gt;&lt;img style="display: inline; float: right" title="Visual Studio" alt="Visual Studio" align="right" src="http://i1.wp.com/i.microsoft.com/visualstudio/_base_v1/images/chrome/visual_studio_logo.png?resize=241%2C36" data-recalc-dims="1" /&gt;Recently I had to migrate parts from a &lt;a href="http://msdn.microsoft.com/library/ms181038%28VS.80%29.aspx" target="_blank"&gt;Microsoft Visual SourceSafe 2005&lt;/a&gt; repository to a &lt;a href="http://www.microsoft.com/visualstudio/en-us/products/2010-editions/team-foundation-server/overview" target="_blank"&gt;Microsoft Team Foundation Server 2010&lt;/a&gt; repository. In this blog post I show what I had to do and what the pitfalls were.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The tool&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To migrate a repository you have at least two possibilities: Migrate the latest snapshot or the whole history. Normally you prefer a migration of the whole history, so you don&amp;#8217;t loose the gained advantage of an version control system.&lt;/p&gt;
&lt;p&gt;To migrate a repository from Visual SourceSafe (VSS) with the complete history, there exists a tool, which comes with Visual Studio: vssconverter.exe. You find the tool in the following directory: C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE.&lt;/p&gt;
&lt;p&gt;To migrate a repository or just a part of it from VSS to Team Foundation Server (TFS), you have to process two steps: Analyse and Migrate.&lt;/p&gt;
&lt;p&gt;There is quite a good documentation about the process and the tool itself at the &lt;a href="http://msdn.microsoft.com/en-us/library/ms253060%28v=vs.100%29" target="_blank"&gt;MSDN&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Analyse step&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In the Analyse step the VSSConverter tool checks if there are any problems and creates an user mapping file.&lt;/p&gt;
&lt;p&gt;To start the analyse step, you have to enter the following at the command line:&lt;/p&gt;
&lt;p&gt;vssconverter.exe analyze analyzesettings.xml&lt;/p&gt;
&lt;p&gt;The analyzesettings.xml file looks like the following:&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:9e37adee-33fb-4c54-b2c9-a31471e0aabd" class="wlWriterEditableSmartContent"&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;
&amp;lt;SourceControlConverter&amp;gt;
&amp;lt;ConverterSpecificSetting&amp;gt;
     &amp;lt;Source name="VSS"&amp;gt;
          &amp;lt;VSSDatabase name="\\server\vss"/&amp;gt;
          &amp;lt;UserMap name="Usermap.xml"/&amp;gt;
     &amp;lt;/Source&amp;gt;
     &amp;lt;ProjectMap&amp;gt;
          &amp;lt;Project Source="$/Project/Scripts/Func"/&amp;gt;
          &amp;lt;Project Source="$/Project/Scripts/Proc"/&amp;gt;
          &amp;lt;Project Source="$/Project/Scripts/Trig"/&amp;gt;
          &amp;lt;Project Source="$/Project/Scripts/View"/&amp;gt;
     &amp;lt;/ProjectMap&amp;gt;
&amp;lt;/ConverterSpecificSetting&amp;gt;
&amp;lt;Settings&amp;gt;
     &amp;lt;Output file="AnalysisReport.xml"/&amp;gt;
&amp;lt;/Settings&amp;gt;
&amp;lt;/SourceControlConverter&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The result of the execution of the command line are two files: Usermap.xml and the AnalysisReport.xml. You can open the AnalysisReport.xml to see if there are any problems. The Usermap.xml file you have to modify before you can continue with the next step.&lt;/p&gt;
&lt;p&gt;In the user mapping file (Usermap.xml) you map the VSS users to the users you use with the TFS. This file looks like the following:&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:32de3a2b-2139-4a8c-be67-c6b7211ecdc8" class="wlWriterEditableSmartContent"&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;
&amp;lt;UserMappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&amp;gt;
  &amp;lt;UserMap From="michael" To="DOMAIN\michael"/&amp;gt;
  &amp;lt;UserMap From="john" To="DOMAIN\john"/&amp;gt;
  &amp;lt;UserMap From="ADMIN" To="DOMAIN\michael"/&amp;gt;
&amp;lt;/UserMappings&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;I had some troubles here with the correct domain name. The problem result that the user mapping didn&amp;#8217;t work during the migration and all history entries had me as user. So I had to destroy the migrated items in the TFS repository with the following command line statement:&lt;/p&gt;
&lt;p&gt;tf.exe destroy $/Project/Main/Source/Data/Project/SQL&lt;/p&gt;
&lt;p&gt;After that, I corrected the Usermap.xml file and started the migration step again.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Migration step&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For the migration step you need a migration setting file. A such file looks like the following:&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:db7b65bc-37d7-48f6-81bb-dece6ae6cccc" class="wlWriterEditableSmartContent"&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;
&amp;lt;SourceControlConverter&amp;gt;
&amp;lt;ConverterSpecificSetting&amp;gt;
     &amp;lt;Source name="VSS"&amp;gt;
          &amp;lt;VSSDatabase name="\\server\vss"/&amp;gt;
          &amp;lt;UserMap name="Usermap.xml"/&amp;gt;
     &amp;lt;/Source&amp;gt;
     &amp;lt;ProjectMap&amp;gt;
          &amp;lt;Project Source="$/Project/Scripts/Func" Destination="$/Project/Main/Source/Data/Project/SQL/Func"/&amp;gt;
          &amp;lt;Project Source="$/Project/Scripts/Proc" Destination="$/Project/Main/Source/Data/Project/SQL/Proc"/&amp;gt;
          &amp;lt;Project Source="$/Project/Scripts/Trig" Destination="$/Project/Main/Source/Data/Project/SQL/Trig"/&amp;gt;
          &amp;lt;Project Source="$/Project/Scripts/View" Destination="$/Project/Main/Source/Data/Project/SQL/View"/&amp;gt;
     &amp;lt;/ProjectMap&amp;gt;
&amp;lt;/ConverterSpecificSetting&amp;gt;
&amp;lt;Settings&amp;gt;
	 &amp;lt;TeamFoundationServer name="tfs" port="8080" protocol="http" collection="tfs/DefaultCollection"/&amp;gt;
     &amp;lt;Output file="MigrationReport.xml"/&amp;gt;
&amp;lt;/Settings&amp;gt;
&amp;lt;/SourceControlConverter&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This setting file looks quite similar to the analyse setting file. But in the ProjectMap section you have the destination attribute where you define the directory in the TFS repository where you want to migrate the VSS data. &lt;/p&gt;
&lt;p&gt;In the Settings section there is an important entry TeamFoundationServer. For TFS 2010 you have to define the attribute collection. It wont work without this attribute.&lt;/p&gt;
&lt;p&gt;You start the migration with the following command line statement:&lt;/p&gt;
&lt;p&gt;vssconverter.exe migrate migratesettings.xml&lt;/p&gt;
&lt;p&gt;As a result of this statement you will receive a MigrationReport.xml file, which you can watch in a browser if there were any problems. I recommend also to have a look in the VSSConverter.log file. There are some valuable additional information.&lt;/p&gt;
&lt;p&gt;&lt;a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.eweibel.net%2F%3Fp%3D1264&amp;amp;title=Migrate%20a%20VSS%20repository%20to%20TFS" id="wpa2a_2"&gt;&lt;img src="http://i0.wp.com/blog.eweibel.net/wp-content/plugins/add-to-any/share_save_171_16.png?resize=171%2C16" alt="Share" data-recalc-dims="1"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class='yarpp-related-rss'&gt;
&lt;p&gt;Related posts:&lt;ol&gt;
&lt;li&gt;&lt;a href='http://blog.eweibel.net/?p=954' rel='bookmark' title='Visualize changes in your repository'&gt;Visualize changes in your repository&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/AssumptionOfAdvancement/~4/g7t6dHkr28o" height="1" width="1"/&gt;</content><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.eweibel.net/?feed=rss2&amp;p=1264</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://blog.eweibel.net/?p=1264</feedburner:origLink></entry><entry><title type="text">VDD – the new programming manifesto?</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AssumptionOfAdvancement/~3/eH29JZme_xs/" /><category term="Agile" /><author><name>Patrick</name></author><updated>2012-07-17T07:00:00-07:00</updated><id>http://blog.eweibel.net/?p=1248</id><summary type="html">When I was at the NDC, I had also the possibility to visit with colleagues the city of Oslo. During a stop in front of a little shop, a colleague discovered a post card about Viking laws. When I read it, I was really surprised how well the laws fit to today&amp;#8217;s software practices. The [...]</summary><content type="html">&lt;p&gt;&lt;a href="http://i0.wp.com/blog.eweibel.net/wp-content/uploads/VikingLaws1.jpg" rel="lightbox[1248]"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="VikingLaws" border="0" alt="VikingLaws" align="right" src="http://i0.wp.com/blog.eweibel.net/wp-content/uploads/VikingLaws_thumb1.jpg?resize=310%2C551" data-recalc-dims="1" /&gt;&lt;/a&gt;When I was at the &lt;a href="http://blog.eweibel.net/?p=1224" target="_blank"&gt;NDC&lt;/a&gt;, I had also the possibility to visit with colleagues the city of Oslo. During a stop in front of a little shop, a colleague discovered a &lt;a href="http://butikk.naturkultur.no/butikk.cfm?a=product_inline&amp;amp;b_kid=3000&amp;amp;b_id=89846" target="_blank"&gt;post card about Viking laws&lt;/a&gt;. When I read it, I was really surprised how well the laws fit to today&amp;#8217;s software practices.&lt;/p&gt;
&lt;p&gt;The Viking laws are grouped in four paragraphs. I pick the most interesting laws for each paragraph and try to make some relations to the software engineering.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Be brave and aggressive&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Here you can read laws like &amp;quot;Be versatile and agile&amp;quot;, &amp;quot;Attack one target at a time&amp;quot; or &amp;quot;Don&amp;#8217;t plan everything in detail&amp;quot;. Those laws are valid for agile software projects too. But one of the more interesting laws is &amp;quot;Use top quality weapons&amp;quot; &amp;#8211; just replace the word &amp;quot;weapons&amp;quot; with the word &amp;quot;tools&amp;quot;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Be prepared&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In this paragraph you can read laws like &amp;quot;Keep weapons in good conditions&amp;quot;, which means in software development to keep your code and tools in good conditions. Another laws is &amp;quot;Keep in shape&amp;quot;, which means to do continuous learning and improve your skills. Also the law &amp;quot;find good battle comrades&amp;quot; is interesting, because learning from other programmers or engineers in our industry is very important (by practicing pair programming for example).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Be a good merchant&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This paragraph is maybe about business orientation and business value for the customers in the software industry.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Keep the camp in order&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When I read this paragraph I thought about the &amp;quot;&lt;a href="http://programmer.97things.oreilly.com/wiki/index.php/The_Boy_Scout_Rule" target="_blank"&gt;Boy scout rule&lt;/a&gt;&amp;quot;, which fits quite well. Also team work is an important point here.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;So there are so many well fitted laws here &amp;#8211; why don&amp;#8217;t we do Viking Driven Development &lt;img src='http://i0.wp.com/blog.eweibel.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' data-recalc-dims="1" /&gt; ?&lt;/p&gt;
&lt;p&gt;&lt;a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.eweibel.net%2F%3Fp%3D1248&amp;amp;title=VDD%20%E2%80%93%20the%20new%20programming%20manifesto%3F" id="wpa2a_4"&gt;&lt;img src="http://i0.wp.com/blog.eweibel.net/wp-content/plugins/add-to-any/share_save_171_16.png?resize=171%2C16" alt="Share" data-recalc-dims="1"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class='yarpp-related-rss'&gt;
&lt;p&gt;Related posts:&lt;ol&gt;
&lt;li&gt;&lt;a href='http://blog.eweibel.net/?p=4' rel='bookmark' title='Object oriented programming (Part 1)'&gt;Object oriented programming (Part 1)&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/AssumptionOfAdvancement/~4/eH29JZme_xs" height="1" width="1"/&gt;</content><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.eweibel.net/?feed=rss2&amp;p=1248</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments><feedburner:origLink>http://blog.eweibel.net/?p=1248</feedburner:origLink></entry><entry><title type="text">My personal wrap-up of the NDC 2012</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AssumptionOfAdvancement/~3/bVzfKiJC0jM/" /><category term="First experiencies" /><category term="New technology" /><category term="Private" /><author><name>Patrick</name></author><updated>2012-06-20T15:43:34-07:00</updated><id>http://blog.eweibel.net/?p=1224</id><summary type="html">I was at the Norwegian Developer Conference (NDC) 2012 in Oslo. It is one of the best conferences I know in Europe. One reason is, that a lot of alpha-geeks are speaking there. There were during three days 8 parallels tracks, so you have to manage your program. My program looked like this: Wednesday, 6.6.2012 [...]</summary><content type="html">&lt;p&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" border="0" align="right" src="http://i1.wp.com/www.ndcoslo.com//images/212151/430244.jpg" data-recalc-dims="1" /&gt;I was at the Norwegian Developer Conference (&lt;a href="http://www.ndcoslo.com/" target="_blank"&gt;NDC&lt;/a&gt;) 2012 in Oslo. It is one of the best conferences I know in Europe. One reason is, that a lot of &lt;a href="http://www.martinfowler.com/bliki/AlphaGeek.html" target="_blank"&gt;alpha-geeks&lt;/a&gt; are speaking there.&lt;/p&gt;
&lt;p&gt;There were during three days 8 parallels tracks, so you have to manage your program. My program looked like this:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Wednesday, 6.6.2012&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43524962" target="_blank"&gt;Keynote, Aral Balkan&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43536417" target="_blank"&gt;Decisions, Decisions, Dan North&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43536488" target="_blank"&gt;Professional Software Development, Robert C. Martin (Uncle Bob)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43548633" target="_blank"&gt;Agile Estimating, Mike Cohn&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43549083" target="_blank"&gt;Modeling Distributed Systems with NServiceBus Studio, Udi Dahan&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43549084" target="_blank"&gt;Fakes, Isolation Unit Tests, Jonathan &amp;#8220;Peli&amp;#8221; de Halleux&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43588434" target="_blank"&gt;Social Clairvoyance, Gary Short&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Thursday, 7.6.2012&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43612952" target="_blank"&gt;The process, technology and practice of Continuous Delivery, Dave Farley&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43612884" target="_blank"&gt;Busting the BDD myths, Gojko Adzic&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43612920" target="_blank"&gt;Reinventing Softare Quality, Gojko Adzic&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43624438" target="_blank"&gt;Moving from Scrum to Kanban, Rachel Davies&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43624435" target="_blank"&gt;The surprising science behind agile leadership, Jonathan Rasmusson&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43659003" target="_blank"&gt;Dealing with Dynamically-Typed Legacy Code, Micheal Feathers&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43659006" target="_blank"&gt;Deep Design Lessons, Micheal Feathers&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Friday, 8.6.2012&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43672296" target="_blank"&gt;Developers: The Prima Donnas of the 21st Century, Hadi Hariri&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43676912" target="_blank"&gt;RabbitMQ Hands On, Alvaro Videla&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43676938" target="_blank"&gt;NDC Cage Match: NodeJS vs. ASP.NET, Rob Conery, Damian Edwards, Jon Galloway&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43808810" target="_blank"&gt;Clojure for the Web, Bodil Stokke&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Responsive Web Design, Bruce Lawson&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/43808772" target="_blank"&gt;Caring about Code Quality, Venkat Subramaniam&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Highlights&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;One highlight was the speaker &lt;a href="http://gojko.net/" target="_blank"&gt;Gojko Adz&lt;/a&gt;ic. I knew him already, because I read his blog. But I didn&amp;#8217;t know how entertaining he could be without loose a bit of useful information. I liked also his sarcasm. Another highlight was the rant of &lt;a href="http://hadihariri.com/" target="_blank"&gt;Hadi Hariri&lt;/a&gt; about not getting things done. But one of the biggest highlights was the keynote by &lt;a href="http://aralbalkan.com/" target="_blank"&gt;Aral Balkan&lt;/a&gt;. It was a fresh clear and motivating keynote, just great.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;There were a lot of talks about software quality, which was nice to see. This is a topic which is also very important for myself. But there weren&amp;#8217;t that much new fresh talks about the topic itself. The only exception here was the second talk of Gojko.&lt;/p&gt;
&lt;p&gt;&lt;a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.eweibel.net%2F%3Fp%3D1224&amp;amp;title=My%20personal%20wrap-up%20of%20the%20NDC%202012" id="wpa2a_6"&gt;&lt;img src="http://i1.wp.com/blog.eweibel.net/wp-content/plugins/add-to-any/share_save_171_16.png?resize=171%2C16" alt="Share" data-recalc-dims="1"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class='yarpp-related-rss'&gt;
&lt;p&gt;Related posts:&lt;ol&gt;
&lt;li&gt;&lt;a href='http://blog.eweibel.net/?p=99' rel='bookmark' title='ASP.NET MVC arrived'&gt;ASP.NET MVC arrived&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/AssumptionOfAdvancement/~4/bVzfKiJC0jM" height="1" width="1"/&gt;</content><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.eweibel.net/?feed=rss2&amp;p=1224</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments><feedburner:origLink>http://blog.eweibel.net/?p=1224</feedburner:origLink></entry><entry><title type="text">Quality isn’t a tool–You can’t install it!</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AssumptionOfAdvancement/~3/YF6y27YHq7s/" /><category term="Agile" /><category term="Good practices" /><category term="Software engineering" /><author><name>Patrick</name></author><updated>2012-06-20T13:52:11-07:00</updated><id>http://blog.eweibel.net/?p=1213</id><summary type="html">Did you ask yourself why a team in an organization produces very good software quality and another team in the same organization just struggles to get things done and those things are in really bad quality? Interesting is also that for both teams exists the same rules (methologies, procedures, tools, frameworks, etc.). But why could [...]</summary><content type="html">&lt;p&gt;&lt;a href="http://i1.wp.com/blog.eweibel.net/wp-content/uploads/Fotolia_36622856_S.jpg" rel="lightbox[1213]"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="time, quality and money concept" border="0" alt="time, quality and money concept" align="right" src="http://i2.wp.com/blog.eweibel.net/wp-content/uploads/Fotolia_36622856_S_thumb.jpg?resize=290%2C209" data-recalc-dims="1" /&gt;&lt;/a&gt;Did you ask yourself why a team in an organization produces very good software quality and another team in the same organization just struggles to get things done and those things are in really bad quality? Interesting is also that for both teams exists the same rules (methologies, procedures, tools, frameworks, etc.). But why could and does this happen?&lt;/p&gt;
&lt;p&gt;Some people – mostly managers or vendors – try to distill quality to a recipe. Vendors could sell it expensively (with consulting) and managers can buy it to prove their bosses that they didn’t make something wrong (they used the standard procedures and tools). This whole thing is ridiculous, also because it happens again and again (also with agile practices).&lt;/p&gt;
&lt;p&gt;So, you can’t buy quality, neither you can install it in your team or organization. Also it isn’t a tool, which makes the quality (many managers think that frameworks guarantee quality, which is completely wrong). But why can one team be so much better than another one? So we are back to my question at the beginning of this blog post.&lt;/p&gt;
&lt;p&gt;The only reason for this difference are the people. The people or some of them in the good team care about their profession. So they keep up-to-date (read blogs, articles, books, etc.) and leads other team members to become better. But the one of the most important things is unfortunately discipline. So you have to improve yourself constantly (keep you out of the comfort zone) and look always for improvements for you and your team. And yes, that isn’t easy.&lt;/p&gt;
&lt;p&gt;Once you are one of those people, be aware of being dogmatic, just stay pragmatic but insist on the important principles as long your arguments are reasonable.&lt;/p&gt;
&lt;p&gt;And the managers? If they are not able to change themselves (especially the middle management), then it’s up to you to change the organization – it’s your career and life.&lt;/p&gt;
&lt;p&gt;&lt;a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.eweibel.net%2F%3Fp%3D1213&amp;amp;title=Quality%20isn%E2%80%99t%20a%20tool%E2%80%93You%20can%E2%80%99t%20install%20it%21" id="wpa2a_8"&gt;&lt;img src="http://i0.wp.com/blog.eweibel.net/wp-content/plugins/add-to-any/share_save_171_16.png?resize=171%2C16" alt="Share" data-recalc-dims="1"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class='yarpp-related-rss'&gt;
&lt;p&gt;Related posts:&lt;ol&gt;
&lt;li&gt;&lt;a href='http://blog.eweibel.net/?p=1033' rel='bookmark' title='Data quality as a business value'&gt;Data quality as a business value&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/AssumptionOfAdvancement/~4/YF6y27YHq7s" height="1" width="1"/&gt;</content><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.eweibel.net/?feed=rss2&amp;p=1213</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">13</slash:comments><feedburner:origLink>http://blog.eweibel.net/?p=1213</feedburner:origLink></entry><entry><title type="text">Are stale data evil?</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AssumptionOfAdvancement/~3/HW_8NVi5_XM/" /><category term="Software architecture" /><author><name>Patrick</name></author><updated>2012-02-27T03:38:51-08:00</updated><id>http://blog.eweibel.net/?p=1198</id><summary type="html">When you&amp;#8217;re a software engineer who produces software for enterprises like banks or assurances, then it is normal you have huge databases (several gigabytes). Such systems have an operative application where users do the daily business of the company and there are more informative parts (or strategic parts) of the systems which the management uses. [...]</summary><content type="html">&lt;p&gt;&lt;a href="http://i1.wp.com/blog.eweibel.net/wp-content/uploads/Fotolia_37310173_S.jpg" rel="lightbox[1198]"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="Sexy young woman as devil in fire" border="0" alt="Sexy young woman as devil in fire" align="right" src="http://i0.wp.com/blog.eweibel.net/wp-content/uploads/Fotolia_37310173_S_thumb.jpg?resize=242%2C272" data-recalc-dims="1" /&gt;&lt;/a&gt;When you&amp;#8217;re a software engineer who produces software for enterprises like banks or assurances, then it is normal you have huge databases (several gigabytes). Such systems have an operative application where users do the daily business of the company and there are more informative parts (or strategic parts) of the systems which the management uses. At a first glance, there isn&amp;#8217;t a problem with those two views, but as you probably know, those companies have for the second part for the management a data ware house solution.&lt;/p&gt;
&lt;p&gt;But what if your customer doesn&amp;#8217;t want a data ware house solution? Or if he couldn&amp;#8217;t afford one? Then you will probably add reports, search views to your application. In this blog post I describe some of the aspects if you&amp;#8217;ve to choose this variation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Stale data as a requirement&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Unfortunately the question &amp;quot;how old can the data on this report/search be?&amp;quot; is rarely asked. When the answer is &amp;quot;The report/search has to show the right data&amp;quot;, then you have to ask the customer again. The problem is, the data is maybe already stale after the query, because somebody changed some data.&lt;/p&gt;
&lt;p&gt;In my experience there are only a few reports, which need as little as possible stale data. But it is essential that you ask this question.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Isolate only as far as needed&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Most searches or reports need essential tables in your relational database, so it is important that those searches or reports don&amp;#8217;t have an effect to your daily business. You ask yourself maybe now, how those queries could have any impact?&lt;/p&gt;
&lt;p&gt;If you use Microsoft SQL Server, then the default isolation level is &amp;quot;Read committed&amp;quot;. If a query isn&amp;#8217;t that clever made, it could happen, that the query blocks a whole table (Intended Shared Lock which blocks any inserts or updates). If that happen, your users will remark that by waiting while they try to save their data.&lt;/p&gt;
&lt;p&gt;When you create a search or an report you have to ask yourself always, which Isolation level you will use. When you use dirty reads (Isolation level &amp;quot;Read uncommitted&amp;quot;), then you&amp;#8217;ll probably never generate any locks, but you have to deal with data which is wrong. This because data could be roll backed and the same query wouldn&amp;#8217;t bring the roll backed data again.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Stale data or even wrong data on a search or an informational report hasn&amp;#8217;t to be wrong or a mistake. Sometimes it&amp;#8217;s just good enough to fulfil the requirements and make the customer happy. And that&amp;#8217;s what it&amp;#8217;s all about.&lt;/p&gt;
&lt;p&gt;&lt;a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.eweibel.net%2F%3Fp%3D1198&amp;amp;title=Are%20stale%20data%20evil%3F" id="wpa2a_10"&gt;&lt;img src="http://i2.wp.com/blog.eweibel.net/wp-content/plugins/add-to-any/share_save_171_16.png?resize=171%2C16" alt="Share" data-recalc-dims="1"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class='yarpp-related-rss'&gt;
&lt;p&gt;Related posts:&lt;ol&gt;
&lt;li&gt;&lt;a href='http://blog.eweibel.net/?p=677' rel='bookmark' title='Round-up of a data centric architecture'&gt;Round-up of a data centric architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://blog.eweibel.net/?p=1033' rel='bookmark' title='Data quality as a business value'&gt;Data quality as a business value&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://blog.eweibel.net/?p=367' rel='bookmark' title='Reason of silence'&gt;Reason of silence&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/AssumptionOfAdvancement/~4/HW_8NVi5_XM" height="1" width="1"/&gt;</content><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.eweibel.net/?feed=rss2&amp;p=1198</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://blog.eweibel.net/?p=1198</feedburner:origLink></entry><entry><title type="text">Anti-Pattern ‘Validation by Execute ‘n’ Rollback’</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AssumptionOfAdvancement/~3/tYCmJ3-BSqU/" /><category term="Anti patterns" /><category term="Software engineering" /><author><name>Patrick</name></author><updated>2012-02-21T12:53:12-08:00</updated><id>http://blog.eweibel.net/?p=1182</id><summary type="html">Recently in some reviews I saw an anti-pattern. First you have to know, in the code, there was a validation of the data before it was stored in the database. So far so good. But when I looked at the validation code, I saw the following: public void Validate() { DoProcess(true); } And the persist [...]</summary><content type="html">&lt;p&gt;Recently in some reviews I saw an &lt;a href="http://en.wikipedia.org/wiki/Anti-pattern" target="_blank"&gt;anti-pattern&lt;/a&gt;. First you have to know, in the code, there was a validation of the data before it was stored in the database. So far so good. But when I looked at the validation code, I saw the following:&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:4784647f-555d-445a-b026-eff18742640e" class="wlWriterEditableSmartContent"&gt;
&lt;pre class="brush: c#;"&gt;public void Validate()
{
	DoProcess(true);
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;And the persist logic (with some business logic) looked like this:&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:2984d7b9-08dc-4564-b9ca-ec0282a83dea" class="wlWriterEditableSmartContent"&gt;
&lt;pre class="brush: c#;"&gt;public void Process()
{
	DoProcess(false);
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;So, I asked myself, what the Boolean means. Well, here is the method signature:&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:f3969625-29f1-43dc-9d12-6aa1c2b25bc3" class="wlWriterEditableSmartContent"&gt;
&lt;pre class="brush: c#;"&gt;public void DoProcess(bool bValidate)&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Hmm, the code looks quite magic so far and the argument (and the method name) itself is more or less an anti-pattern already. But when I checked the DoProcess method, I saw something more or less like this:&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:99c75cc4-33a5-4803-a995-3b49ff14fcb3" class="wlWriterEditableSmartContent"&gt;
&lt;pre class="brush: c#;"&gt;public void DoProcess(bool bValidate)
{
	using (SqlConnection con = new SqlConnection(connectionString))
	{
		con.Open();
		SqlTransaction transaction = con.BeginTransaction();
		
		// Some business logic here...

		if(bValidate)
		{
			transaction.Rollback();
		}
		else
		{
			transaction.Commit();
		}
	}
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://i0.wp.com/blog.eweibel.net/wp-content/uploads/Fotolia_20233238_S1.jpg" rel="lightbox[1182]"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Fotolia_20233238_S" border="0" alt="Fotolia_20233238_S" align="right" src="http://i0.wp.com/blog.eweibel.net/wp-content/uploads/Fotolia_20233238_S_thumb1.jpg?resize=103%2C103" data-recalc-dims="1" /&gt;&lt;/a&gt;The idea behind this code is, if it could be executed successfully, that means a successful validation. If there are any problems during the execution, those problems are the result of the validation. The execution itself wouldn&amp;#8217;t be a problem after a successful validation (now I need a drink&amp;#8230;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Doing it better&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s easy to find bad things, but it&amp;#8217;s sometimes harder to do things right. But in this case, the better way is easy. First, you have to separate your business logic from the data access logic. This means following the &lt;a href="http://en.wikipedia.org/wiki/Separation_of_concerns" target="_blank"&gt;separation of concern principle&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The next point is, that you&amp;#8217;re able to validate your model. So put the logic where it should be. If you use a &lt;a href="http://en.wikipedia.org/wiki/Domain_model" target="_blank"&gt;domain model&lt;/a&gt;, the logic to validate an entity has to be on that entity. Or if you have a &lt;a href="http://martinfowler.com/eaaCatalog/tableModule.html" target="_blank"&gt;table module approach&lt;/a&gt;, the logic to validate an entity has to be on the corresponding table module.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Side effects&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;There are also other problems with this anti-pattern. There are some side effects with the data.&lt;/p&gt;
&lt;p&gt;As you know, transactions should be as short as possible to prevent lock problems with your data. But if you have combined the business logic and data access logic, your transactions are much longer than needed. To make it worse, this anti-pattern forces you to do it at least twice.&lt;/p&gt;
&lt;p&gt;There are reasonable use cases for &lt;a href="http://en.wikipedia.org/wiki/Isolation_%28database_systems%29" target="_blank"&gt;dirty reads&lt;/a&gt;: For example fast searches. In this case you accept dirty reads and you don&amp;#8217;t want any locks on your data in the database. Normally, the chance to have a dirty read isn&amp;#8217;t that high, but with this anti-pattern the chances to get a dirty read are significantly higher.&lt;/p&gt;
&lt;p&gt;&lt;a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.eweibel.net%2F%3Fp%3D1182&amp;amp;title=Anti-Pattern%20%E2%80%98Validation%20by%20Execute%20%E2%80%98n%E2%80%99%20Rollback%E2%80%99" id="wpa2a_12"&gt;&lt;img src="http://i1.wp.com/blog.eweibel.net/wp-content/plugins/add-to-any/share_save_171_16.png?resize=171%2C16" alt="Share" data-recalc-dims="1"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class='yarpp-related-rss yarpp-related-none'&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/AssumptionOfAdvancement/~4/tYCmJ3-BSqU" height="1" width="1"/&gt;</content><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.eweibel.net/?feed=rss2&amp;p=1182</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments><feedburner:origLink>http://blog.eweibel.net/?p=1182</feedburner:origLink></entry><entry><title type="text">Who should make decisions about technologies?</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AssumptionOfAdvancement/~3/WDJnjDdNeZ4/" /><category term="New technology" /><category term="Software engineering" /><author><name>Patrick</name></author><updated>2012-02-13T08:00:00-08:00</updated><id>http://blog.eweibel.net/?p=1167</id><summary type="html">One of the biggest problems of software engineering companies in Switzerland is currently to get new software developers. To get new employees there are several points as for example salary, environment, career possibilities and technologies. The last point looks easy but in reality it isn&amp;#8217;t that easy. Why are essential technology decisions (like languages, frameworks, [...]</summary><content type="html">&lt;p&gt;&lt;a href="http://i1.wp.com/blog.eweibel.net/wp-content/uploads/Fotolia_36561464_S.jpg" rel="lightbox[1167]"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="Stay on course" border="0" alt="Stay on course" align="right" src="http://i0.wp.com/blog.eweibel.net/wp-content/uploads/Fotolia_36561464_S_thumb.jpg?resize=280%2C222" data-recalc-dims="1" /&gt;&lt;/a&gt;One of the biggest problems of software engineering companies in Switzerland is currently to get new software developers. To get new employees there are several points as for example salary, environment, career possibilities and technologies. The last point looks easy but in reality it isn&amp;#8217;t that easy. Why are essential technology decisions (like languages, frameworks, application servers or big libraries) not only made by developers? Why does the management mostly make those decisions?&lt;/p&gt;
&lt;p&gt;In this blog post I try to see the technology aspect for creating software from different perspectives. Those views based on experiences and talks I had during the last ten years.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Customer&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As expected the technology used for the software is for the customer irrelevant. But for him counts the working functionality and some non-functional requirements as usability or performance.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Product owner or product manager&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The product owner neither is interested in the used technology directly. He&amp;#8217;s mainly interested to get the functionality in time and in budget. But he&amp;#8217;s also interested to get a good quality of the product, else he&amp;#8217;ll receive complaints from the users (of the customer).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;IT department&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The IT department who has to operate the system is somehow interested in technology. They usually don&amp;#8217;t like new technology. One reason is for sure &amp;quot;never change a running system&amp;quot;. Another reason is the needed knowhow for every technology. They have to concern the cost of maintaining that knowhow. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Software Architect&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The software architect (and I am currently one) is special. When he&amp;#8217;s interested in technology, he should take responsibility in the project. If not, you have an architect who lives in the &amp;quot;ivory tower&amp;quot;. Mainly the architect should concern more about structure, integration of components or other systems, maintainability and quality.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Human resource management&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In most of the companies this part get lost. Today it is hard (specially in Switzerland) to get new developers. So, new and fancy technologies make a job or company more attractive. This means, that the human resource management is interested to use up-to-date technologies.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Developer&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Well, most developers care about technology. Specially younger developers more because they had the possibility to try those at the university or in little projects with their colleagues. For those developers technology is essential for the daily job and to be motivated. If they have not the possibility to use new technology they will leave the company after one or two years. And that isn&amp;#8217;t cheap for the company.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Management&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Today most companies use some self-made frameworks. One reason they spent money to create one is the fear of creative developers who want &amp;quot;to fulfil themself&amp;quot;. This means for the management that those developers are out of control and create overcomplicated things with a lot of different technologies. I think this fear is unjustified today, but in the days when everybody could call himself a developer it was not only rightless.   &lt;br /&gt;But the management has the difficult task to concern all the roles I described before and make a reasonably decision.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It seams there is a fight between the developers and the management who should make decisions about technologies. It is important that the management has all the information it needs and can concern all the risks of an introduction of a new technology. But the management has to be open to all the facts and arguments and should not presume to make a decision based on old experiences, assumptions or prejudices.   &lt;br /&gt;If the decisions are too offensive, then you have at the end quite everything in the IT department (for example all java application server products). On the other hand, if the decisions are too defensive, then you will have a stagnation. This will be very expensive to solve because you have to spend a lot of many to get up-to-date again.&lt;/p&gt;
&lt;p&gt;&lt;a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.eweibel.net%2F%3Fp%3D1167&amp;amp;title=Who%20should%20make%20decisions%20about%20technologies%3F" id="wpa2a_14"&gt;&lt;img src="http://i1.wp.com/blog.eweibel.net/wp-content/plugins/add-to-any/share_save_171_16.png?resize=171%2C16" alt="Share" data-recalc-dims="1"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class='yarpp-related-rss yarpp-related-none'&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/AssumptionOfAdvancement/~4/WDJnjDdNeZ4" height="1" width="1"/&gt;</content><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.eweibel.net/?feed=rss2&amp;p=1167</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://blog.eweibel.net/?p=1167</feedburner:origLink></entry><entry><title type="text">TF.exe or maybe the most useful tool for TFS</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AssumptionOfAdvancement/~3/rDK2BbD7oQ8/" /><category term=".NET" /><category term="Good practices" /><author><name>Patrick</name></author><updated>2012-01-31T14:51:17-08:00</updated><id>http://blog.eweibel.net/?p=1154</id><summary type="html">When you&amp;#8217;ve to use TFS, then there are moments when you&amp;#8217;re missing some features in the UI tools in Visual Studio. In those situations the console tool tf.exe is very useful. In this short blog post I summarized the commands I used the most. Update an old version of a branch It could happen, that [...]</summary><content type="html">&lt;p&gt;&lt;a href="http://i0.wp.com/blog.eweibel.net/wp-content/uploads/visualstudio.png" rel="lightbox[1154]"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="visualstudio" border="0" alt="visualstudio" align="right" src="http://i2.wp.com/blog.eweibel.net/wp-content/uploads/visualstudio_thumb.png?resize=181%2C54" data-recalc-dims="1" /&gt;&lt;/a&gt;When you&amp;#8217;ve to use &lt;a href="http://en.wikipedia.org/wiki/Team_Foundation_Server" target="_blank"&gt;TFS&lt;/a&gt;, then there are moments when you&amp;#8217;re missing some features in the UI tools in Visual Studio. In those situations the console tool &lt;a href="http://msdn.microsoft.com/en-us/library/z51z7zy0.aspx" target="_blank"&gt;tf.exe&lt;/a&gt; is very useful. In this short blog post I summarized the commands I used the most.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update an old version of a branch&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It could happen, that the production branch or an older feature branch isn&amp;#8217;t up-to-date, because somebody forgot one or several merges from the main branch. To fix that, there could be used the following statement:&lt;/p&gt;
&lt;p&gt;tf.exe merge /recursive /force /version:T $/Project/Main/Source $/Project/Production/Source&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Delete a branch permanently&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;After a while the number of merged feature branches increase. Normally, you would delete the merged feature branches, so they aren&amp;#8217;t any longer visible in Visual Studio. But in my case, I display also the deleted items and this means, that I see all the deleted feature branches. To remove the old merged feature branches, there could be used the following statement:&lt;/p&gt;
&lt;p&gt;tf.exe destroy $/Project/Development/FeatureX&lt;/p&gt;
&lt;p&gt;&lt;a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.eweibel.net%2F%3Fp%3D1154&amp;amp;title=TF.exe%20or%20maybe%20the%20most%20useful%20tool%20for%20TFS" id="wpa2a_16"&gt;&lt;img src="http://i2.wp.com/blog.eweibel.net/wp-content/plugins/add-to-any/share_save_171_16.png?resize=171%2C16" alt="Share" data-recalc-dims="1"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class='yarpp-related-rss'&gt;
&lt;p&gt;Related posts:&lt;ol&gt;
&lt;li&gt;&lt;a href='http://blog.eweibel.net/?p=622' rel='bookmark' title='Branching practices'&gt;Branching practices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://blog.eweibel.net/?p=1082' rel='bookmark' title='Branch or not to branch'&gt;Branch or not to branch&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/AssumptionOfAdvancement/~4/rDK2BbD7oQ8" height="1" width="1"/&gt;</content><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.eweibel.net/?feed=rss2&amp;p=1154</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">2</slash:comments><feedburner:origLink>http://blog.eweibel.net/?p=1154</feedburner:origLink></entry><entry><title type="text">Education in companies</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AssumptionOfAdvancement/~3/1NxhOeYhGW4/" /><category term="Good practices" /><author><name>Patrick</name></author><updated>2012-01-31T09:00:00-08:00</updated><id>http://blog.eweibel.net/?p=1150</id><summary type="html">I do a lot of trainings and courses in the company where I work currently. And I was also in a lot of courses too. But I think, that those courses or trainings don&amp;#8217;t work really. The reason, why is that they are just so called &amp;#34;sheep dips&amp;#34;. Sheep dip training doesn’t work The first [...]</summary><content type="html">
&lt;p&gt;&lt;a href="http://i2.wp.com/blog.eweibel.net/wp-content/uploads/image19.png" rel="lightbox[1150]"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" align="right" src="http://i1.wp.com/blog.eweibel.net/wp-content/uploads/image_thumb19.png?resize=191%2C231" data-recalc-dims="1" /&gt;&lt;/a&gt;I do a lot of trainings and courses in the company where I work currently. And I was also in a lot of courses too. But I think, that those courses or trainings don&amp;#8217;t work really. The reason, why is that they are just so called &amp;quot;sheep dips&amp;quot;. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sheep dip training doesn’t work&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The first time when I heard the expression &amp;quot;sheep dip&amp;quot; was in the excellent book &amp;quot;&lt;a href="http://www.amazon.de/gp/product/1934356050/ref=as_li_tf_tl?ie=UTF8&amp;#038;tag=assumptiofadv-21&amp;#038;linkCode=as2&amp;#038;camp=1638&amp;#038;creative=6742&amp;#038;creativeASIN=1934356050" title="Pragmatic Thinking &amp;#038; Learning" target="_blank"&gt;Pragmatic Thinking and Learning&lt;/a&gt;&amp;quot;. It means a training where a lot of people receive a lot of information, mostly just by sitting, listening and watching a lot of PowerPoint slides.&lt;/p&gt;
&lt;p&gt;A sheep dip is in real the following (from &amp;quot;Pragmatic Thinking &amp;amp; Learning&amp;quot;):&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;A sheep dip (for real) is a large tank in which you dunk the unsuspecting &lt;br /&gt;sheep to clean them up and rid them of parasites (see picture). The sheep line up (as sheep do) you grab one and dunk in the tank for an intensive, alien, and largely toxic experience. It wears off, of course, so you have to dip them again.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The problem is the exact same with the education trainings in companies. A lot of employees spend time and the revenue is very, very little.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Doing it better&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The question is &amp;quot;How can we do education better?&amp;quot;. In my experience there are some better ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pair programming &lt;/li&gt;
&lt;li&gt;Little workshops (just the team) &lt;/li&gt;
&lt;li&gt;Collaboration platforms &lt;/li&gt;
&lt;li&gt;Good documentation &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One of the best ways to learn is to get feedback fast. In a &amp;quot;sheep dip&amp;quot; training/course there is nearly no chance to have a such feedback. Therefor pair programming is very good, but hard to do. At least one of the two developers has to be experienced, so the knowledge transfer could happen.&lt;/p&gt;
&lt;p&gt;Another way I like very much are little workshops. Normally I ask a developer team, if they are interested in some kind of workshops (reviews, designing, architecture, etc.) based on some reviews of their outcome. The feedback what I received so far is very positive.&lt;/p&gt;
&lt;p&gt;I think collaboration platforms, like wikis or OneNote, are still underestimated in corporate environments. But I had a chance to participate in a team where they used OneNote. It was really great, because they added all little tricks and tips how to handle problems with the frameworks and tools in this collaborative platform.&lt;/p&gt;
&lt;p&gt;The last way is a good documentation. But what is a good documentation? Well, for me it has to be up-do-date, clear, short, contains examples and easy to read. Another point is, that the documentation has to be searchable. It should be easy to find things fast and just in one place.&lt;/p&gt;
&lt;p&gt;&lt;a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.eweibel.net%2F%3Fp%3D1150&amp;amp;title=Education%20in%20companies" id="wpa2a_18"&gt;&lt;img src="http://i2.wp.com/blog.eweibel.net/wp-content/plugins/add-to-any/share_save_171_16.png?resize=171%2C16" alt="Share" data-recalc-dims="1"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class='yarpp-related-rss yarpp-related-none'&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/AssumptionOfAdvancement/~4/1NxhOeYhGW4" height="1" width="1"/&gt;</content><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.eweibel.net/?feed=rss2&amp;p=1150</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">3</slash:comments><feedburner:origLink>http://blog.eweibel.net/?p=1150</feedburner:origLink></entry><entry><title type="text">Services and customer orientation</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AssumptionOfAdvancement/~3/0e-mjBRc4NY/" /><category term="Private" /><author><name>Patrick</name></author><updated>2012-01-31T08:30:00-08:00</updated><id>http://blog.eweibel.net/?p=1143</id><summary type="html">Usually I don&amp;#8217;t blog here about personal topics. But as some friends know, I was some days ago in the united states &amp;#8211; to be more precise, at the west coast. I visited the cities San Francisco, Las Vegas and Los Angeles. I was a great trip and I enjoyed the cities, the landscape (Grand [...]</summary><content type="html">&lt;p&gt;&lt;a href="http://i0.wp.com/blog.eweibel.net/wp-content/uploads/GrandCanyon.jpg" rel="lightbox[1143]"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="GrandCanyon" border="0" alt="GrandCanyon" align="right" src="http://i1.wp.com/blog.eweibel.net/wp-content/uploads/GrandCanyon_thumb.jpg?resize=318%2C213" data-recalc-dims="1" /&gt;&lt;/a&gt;Usually I don&amp;#8217;t blog here about personal topics. But as some friends know, I was some days ago in the united states &amp;#8211; to be more precise, at the west coast. I visited the cities San Francisco, Las Vegas and Los Angeles. I was a great trip and I enjoyed the cities, the landscape (&lt;a href="http://en.wikipedia.org/wiki/Grand_Canyon" target="_blank"&gt;Grand Canyon&lt;/a&gt;) and a lot more.&lt;/p&gt;
&lt;p&gt;To be honest, one of the most things which impressed me on the trip was the service and customer orientation of the staff in the hotels, restaurants or taxis. I think there is a gap between what Europe (specially Switzerland) and the USA regarding services and customer orientation. The old world &amp;#8211; or Europe &amp;#8211; could learn one or more things from the USA.&lt;/p&gt;
&lt;p&gt;In the following chapters I try to describe some experiences and conclusion about my experiences during the trip.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Be professional&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When I did the helicopter flight to the Grand Canyon, the whole service chain (chauffeur from the hotel, the pilot, the service staff) was just perfect and everything works. They know what they are doing and how the whole process works.&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s a great experience for a customer when he feels, when a service provider has everything under control and his a master at what he&amp;#8217;s doing. Such an experience builds also trust and the customer will return again.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Be personal&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This point is where I think the biggest gap between Europe and the USA is. For example at Starbucks they ask you for your first name so they call you when they finished the coffee or bagels. In Switzerland for example you have to guess if the coffee which was finished is for you or not.&lt;/p&gt;
&lt;p&gt;One of the most important things to do as a service provider is to make the customer happy. For that you have to build trust and make him feel safe. To build trust, the customer has to know you, so it isn&amp;#8217;t unprofessional to speak not only about things which are work related.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It was a great experience to see another way of customer orientation. But there were also some problems, which also exists in Europe. As a service provider you need very good and competent staff. Unfortunately, in some hotels I met a concierge, which wasn&amp;#8217;t able to help or understand my need really. And that is what destroy trust, which is unfortunately a really fragile thing.&lt;/p&gt;
&lt;p&gt;&lt;a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.eweibel.net%2F%3Fp%3D1143&amp;amp;title=Services%20and%20customer%20orientation" id="wpa2a_20"&gt;&lt;img src="http://i0.wp.com/blog.eweibel.net/wp-content/plugins/add-to-any/share_save_171_16.png?resize=171%2C16" alt="Share" data-recalc-dims="1"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class='yarpp-related-rss yarpp-related-none'&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/AssumptionOfAdvancement/~4/0e-mjBRc4NY" height="1" width="1"/&gt;</content><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.eweibel.net/?feed=rss2&amp;p=1143</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://blog.eweibel.net/?p=1143</feedburner:origLink></entry></feed>
