<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/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" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-4215962051788443675</atom:id><lastBuildDate>Mon, 23 Jan 2012 20:01:22 +0000</lastBuildDate><category>Course</category><category>Research</category><category>Mocking</category><category>tools</category><category>Craftsmanship</category><category>XP</category><category>AUT</category><category>bugs</category><category>Agile practices. Planning</category><category>Software Craftsmanship</category><category>Agile Management</category><category>MSTest</category><category>Feedback</category><category>UAT</category><category>Typemock</category><category>IDE</category><category>Crap4Net</category><category>Test management</category><category>Unit Tests</category><category>Quality</category><category>Coaches</category><category>Agile Principles</category><category>C++</category><category>Agile Practitioners IL</category><category>Unit Test Patterns</category><category>TDD</category><category>ALM</category><category>tips</category><category>Planning</category><category>GUI Testing</category><category>Scrum. Random Thoughts</category><category>Rapid-Dev</category><category>Documentation</category><category>Events</category><category>Agile practices.</category><category>Frameworks.</category><category>rant</category><category>Windows 7</category><category>NUnit</category><category>Add-in</category><category>Agile Values</category><category>Agile practices. Random Thoughts</category><category>Design</category><category>Agile practices</category><category>Isolator</category><category>Java</category><category>Refactoring</category><category>Framworks.</category><category>AUT.</category><category>CC.Net</category><category>Development Practices</category><category>outlook</category><category>Team System</category><category>Frameworks</category><category>Conferences</category><category>PDC</category><category>Engineering Practices</category><category>Scrum</category><category>Integration Tests</category><category>Random Thoughts</category><category>ALT .NET</category><category>Source COntrol</category><category>WPF</category><category>Terminology</category><category>Self Improvment</category><category>ATDD</category><category>Metrics</category><category>GoogleTest</category><title>IMistaken</title><description>Agile Software Development, Automated Unit Testing (TDD), .NET.</description><link>http://imistaken.blogspot.com/</link><managingEditor>noreply@blogger.com (Lior Friedman:)</managingEditor><generator>Blogger</generator><openSearch:totalResults>156</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/rss+xml" href="http://feeds.feedburner.com/Imistaken" /><feedburner:info uri="imistaken" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4215962051788443675.post-6412895866652461968</guid><pubDate>Mon, 23 Jan 2012 20:01:00 +0000</pubDate><atom:updated>2012-01-23T12:01:22.823-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Conferences</category><title>What I’ll be doing at Agile Practitioners 2012</title><description>I’ve been quiet for some time now. mainly because I was very busy in making &lt;a href="http://agilepractitioners2012.com/"&gt;Agile Practitioners 2012&lt;/a&gt; event happen. It was and still is a lot of work but most of it is fun and I do hope that all the people coming will enjoy it.&lt;br /&gt;
over the last couple of weeks I’ve been asked a couple of times what would be good session to go to. basically I don’t know all of the speakers are good and while I haven't heard all of them speaking those I did had excellent sessions. Its really hard to choose from them.&lt;br /&gt;
But out of all of them here's a list of those I’m planning to to attend. &lt;br /&gt;
of the three available workshops (&lt;a href="http://agilepractitioners2012.com/conference-workshops/gojko-adzic-winning-big-with-specification-by-example/"&gt;Gojko&lt;/a&gt;, &lt;a href="http://agilepractitioners2012.com/conference-workshops/introductory-workshop-on-agile-testing/"&gt;David&lt;/a&gt; and &lt;a href="http://agilepractitioners2012.com/corey-haines-improving-your-tdd/"&gt;Corey&lt;/a&gt;) ill attend the Improving your TDD. ITs not often that I have the chance to hear about my main passion from leaders of the industry and this rare opportunity is too much for me to pass. (I do hope I’ll have the chance to peek in the two others though)&lt;br /&gt;
On the second day naturally ill hear the two main keynotes.&lt;br /&gt;
but other then that I think ill go with the following:&lt;br /&gt;
1) &lt;a href="http://agilepractitioners2012.com/agile-meets-the-falafel-land-culture-clash-or-common-cause/"&gt;Agile Meets the Falafel-Land: Culture Clash or Common Cause?&lt;/a&gt;&lt;br /&gt;
While at the end I do believe people are people, the notion about us being a little different then the rest does appeal to me. and it would be great to hear how other people deal with things that are unique to our culture.&lt;br /&gt;
2) &lt;a href="http://agilepractitioners2012.com/10-phrases-that-can-derail-an-agile-project/"&gt;10 Phrases That Can Derail an Agile Project&lt;/a&gt;&lt;br /&gt;
Being a close friend of Gil I had a couple of chances to hear him and I enjoyed it every time.Also I have a feeling that this session will have a few practical lessons for me to learn. Gil is really bringing some Product Owner wisdom and knowledge that I find very useful in my line of business.&lt;br /&gt;
3) &lt;a href="http://agilepractitioners2012.com/conference-program/design-for-testeblity-is-a-fraud/"&gt;Design For Testeblity is a Fraud&lt;/a&gt;&lt;br /&gt;
while I already heard this session before. I think it will be a little hard for me to skip this one.&lt;br /&gt;
4) &lt;a href="http://agilepractitioners2012.com/weaning-a-legacy-platform-from-offshore-qa/"&gt;Weaning a Legacy Platform From Offshore QA&lt;/a&gt;&lt;br /&gt;
I Find offshoring to be a very weird concept. one of those things that sounds like a very good idea until you actually try to do it. Too many times I’ve seen it fail. While I respect the fact that in some contexts that may be good idea. I still would like to be prepared to the day when someone asks me to help bring work back.&lt;br /&gt;
5) &lt;a href="http://agilepractitioners2012.com/the%c2%a0mythical%c2%a0man-month-%e2%80%93-an-agile-perspective/"&gt;The Mythical Man-Month –     &lt;br /&gt;An Agile Perspective&lt;/a&gt;&lt;br /&gt;
Hearing about Brooks is always a good idea. Besides this is my first chance to hear Ohad, something I’ve been wanting to do for quite some time now. &lt;br /&gt;
&lt;br /&gt;
So what session you are planning on going to? if you still haven’t decided that’s ok. But if you haven’t already registered Shame on you, quickly before anyone notice go &lt;a href="http://agilepractitioners2012.com/conference-online-registeration/"&gt;here&lt;/a&gt; and register. There’s still enough time and a few places left&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215962051788443675-6412895866652461968?l=imistaken.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=vp7knnW1vqw:lTmTNJuZaAE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=vp7knnW1vqw:lTmTNJuZaAE:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Imistaken/~4/vp7knnW1vqw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Imistaken/~3/vp7knnW1vqw/what-ill-be-doing-at-agile.html</link><author>noreply@blogger.com (Lior Friedman:)</author><thr:total>0</thr:total><feedburner:origLink>http://imistaken.blogspot.com/2012/01/what-ill-be-doing-at-agile.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4215962051788443675.post-4776289897476050156</guid><pubDate>Mon, 07 Nov 2011 17:44:00 +0000</pubDate><atom:updated>2011-11-07T09:44:51.391-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Scrum</category><category domain="http://www.blogger.com/atom/ns#">Agile Practitioners IL</category><title>Agile Practitioner IL – Fourth Meeting</title><description>I had much fun at yesterday meeting. I really liked the amount of questions and interest people showed. While they didn’t make my life easy, I really enjoyed the conversation and discussion.&lt;br /&gt;
for those who missed here are the slides &lt;br /&gt;
&lt;div id="__ss_10059597" style="width: 425px;"&gt;
&lt;strong style="display: block; margin: 12px 0px 4px;"&gt;&lt;a href="http://www.slideshare.net/liorf/applying-agile-to-a-single-team-in-big-organization" target="_blank" title="Agile in unfriendly territories"&gt;Agile in unfriendly territories&lt;/a&gt;&lt;/strong&gt; &lt;iframe frameborder="0" height="355" marginheight="0" marginwidth="0" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/10059597" width="425"&gt;&lt;/iframe&gt;    &lt;br /&gt;
&lt;div style="padding-bottom: 12px; padding-left: 0px; padding-right: 0px; padding-top: 5px;"&gt;
View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/liorf" target="_blank"&gt;liorf&lt;/a&gt; &lt;/div&gt;
&lt;/div&gt;
Hope to see you all again net month and of course at the &lt;a href="http://agilepractitioners2012.com/"&gt;Agile Practitioners 2012 conference&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215962051788443675-4776289897476050156?l=imistaken.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=nL_96DOzL9g:oYMilvCyFU8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=nL_96DOzL9g:oYMilvCyFU8:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Imistaken/~4/nL_96DOzL9g" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Imistaken/~3/nL_96DOzL9g/agile-practitioner-il-fourth-meeting.html</link><author>noreply@blogger.com (Lior Friedman:)</author><thr:total>0</thr:total><feedburner:origLink>http://imistaken.blogspot.com/2011/11/agile-practitioner-il-fourth-meeting.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4215962051788443675.post-3252373639618741988</guid><pubDate>Thu, 27 Oct 2011 23:05:00 +0000</pubDate><atom:updated>2011-10-27T16:05:20.363-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Agile practices</category><title>Agile Contracts</title><description>Agile contracts is an interesting thing. one of the main push back against going agile I get in places is that while agile is nice and all there is no way we can convince our customer to work like this. “they want a fixed price fixed scope deal”. In any case this post is not going to talk about why Agile contracts are a good idea, or how to get buy-in from your clients to sign an agile contracts. This post is going to talk about:&lt;br /&gt;
&lt;h2&gt;

The forces against an agile contract&lt;/h2&gt;
&lt;h3&gt;

The power of Inertia&lt;/h3&gt;
&lt;h3&gt;

&lt;span class="Apple-style-span" style="font-size: small; font-weight: normal;"&gt;People don’t change easily. The fact that our industry has been using a “Fixed …” contract for several decades now goes against trying anything else. Especially if that something else is substantially different. An agile Contract is exactly that. Different.&lt;/span&gt;&lt;/h3&gt;
&lt;h3&gt;

Risk&lt;/h3&gt;
&lt;h3&gt;

&lt;span class="Apple-style-span" style="font-size: small; font-weight: normal;"&gt;An agile contract puts the risk on the paying side (the customer), he is going to pay for the work done, even if that work is of lesser value. Naturally if its value is low enough&amp;nbsp; he can bail out. But still the risk is on him. While a “Fixed …” puts the risk on the development team. they need to fulfill their part before they get paid.&lt;/span&gt;&lt;/h3&gt;
&lt;h3&gt;

Trust&lt;/h3&gt;
our industry has not been that great at delivering working software. (to say the least). Most software projects either fails completely or significantly does not meets expectation (either they miss the timeline, exceeds the budget or reduce scope)Potential Profit. An agile contract actually says exactly that. By going for a flexible scope (or time) we actually say we don’t know exactly what will happen, we don’t know what we can deliver (or when). That’s a hard message to tell the one who is paying.&lt;br /&gt;
&lt;h3&gt;

Potential Profit&lt;/h3&gt;
This one is a little elusive. One of thing we do as a development team when we go for a “fixed …” is add buffers to mitigate our risks. At one place I used to work I saw a two days chunk of actual work being priced as 11 weeks for the client. And he was willing to pay (there is a cost for putting the risk on the developers). For us as a development team this represent a significant potential profit. If we could just estimate accurately and actually finish the work in the time we say we can. The buffers just become easy money. No matter how many times we under estimate work, every time when we do a new estimate we are always sure that this time it will be different. This time we have considered everything. After all we are smart people.&lt;br /&gt;
&lt;br /&gt;
As you can see there are strong forces affecting both side to resist going for an agile contract. Can you think of more?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215962051788443675-3252373639618741988?l=imistaken.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=UF1yya-YWzY:BtfSsPjoACI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=UF1yya-YWzY:BtfSsPjoACI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Imistaken/~4/UF1yya-YWzY" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Imistaken/~3/UF1yya-YWzY/agile-contracts.html</link><author>noreply@blogger.com (Lior Friedman:)</author><thr:total>10</thr:total><feedburner:origLink>http://imistaken.blogspot.com/2011/10/agile-contracts.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4215962051788443675.post-4901027981473258315</guid><pubDate>Wed, 26 Oct 2011 11:42:00 +0000</pubDate><atom:updated>2011-10-26T04:42:57.110-07:00</atom:updated><title>Can you spot the Contradiction?</title><description>&lt;p&gt;Here’s a job description I got over the mail (the original message was in Hebrew so I’ve translated):&lt;/p&gt;  &lt;p&gt;Subject : Project manager – Control of Agile software&lt;/p&gt;  &lt;p&gt;A project manage with control of Agile software is need for an international development company dealing in Wireless Electronics&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Must – BSC in engineering&lt;/li&gt;    &lt;li&gt;1-2 years of experience in project management or in project scheduling and task tracking as part of the project team&lt;/li&gt;    &lt;li&gt;Experience in Configuration management – significant advantage.&lt;/li&gt;    &lt;li&gt;Experience in production processes, moving from research to production – an advantage &lt;/li&gt;    &lt;li&gt;Must have knowledge in Excel, Ms-project, Agile software&lt;/li&gt;    &lt;li&gt;Great interpersonal skills, teamwork, ability to work under pressure&lt;/li&gt;    &lt;li&gt;Fast learner of systems and processes, ability to dive into details&lt;/li&gt;    &lt;li&gt;Excellent English&lt;/li&gt;    &lt;li&gt;Willingness to travel&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Can you see what’s wrong here?&lt;/p&gt;  &lt;p&gt;(i.e. why does a real agile person will not get close to this job?)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215962051788443675-4901027981473258315?l=imistaken.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=ixlaRcggHxE:6-4fGfJ1HcQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=ixlaRcggHxE:6-4fGfJ1HcQ:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Imistaken/~4/ixlaRcggHxE" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Imistaken/~3/ixlaRcggHxE/can-you-spot-contradiction.html</link><author>noreply@blogger.com (Lior Friedman:)</author><thr:total>10</thr:total><feedburner:origLink>http://imistaken.blogspot.com/2011/10/can-you-spot-contradiction.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4215962051788443675.post-7886323825862897916</guid><pubDate>Mon, 24 Oct 2011 13:17:00 +0000</pubDate><atom:updated>2011-10-24T06:17:46.922-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">AUT</category><category domain="http://www.blogger.com/atom/ns#">TDD</category><category domain="http://www.blogger.com/atom/ns#">Development Practices</category><title>“I have a Legacy System” is a lame excuse</title><description>&lt;strong&gt;Q&lt;/strong&gt;: “why have you not written any automated unit test until now?”&lt;br /&gt;
&lt;strong&gt;A&lt;/strong&gt;: “ look, we have a and complex big system. no one has written automated tests for it. it will take me too long to do it just now. I know its important but we have XXXXXXX so we cant do it now”&lt;br /&gt;
This kind of excuse, which sadly I hear way too often,&amp;nbsp; rate high among the “list of most lamest excuses”.&lt;br /&gt;
Don’t believe me?&lt;br /&gt;
How about this?&lt;br /&gt;
&lt;strong&gt;Q&lt;/strong&gt;: “when are you going to cut down on your expanses and start saving money?”&lt;br /&gt;
&lt;strong&gt;A&lt;/strong&gt;: “Look, I’ve already have a big mortgage on my house, and the cost of living has risen lately. So now is definitely not a good time to start saving. In fact since I just need to replace my car with a new one I’m just on my way to the bank to get an additional loan.”&lt;br /&gt;
or maybe this?&lt;br /&gt;
&lt;strong&gt;Q&lt;/strong&gt;: “you know that you were diagnosed with high cholesterol, when are you going to start a healthy diet?”&lt;br /&gt;
&lt;strong&gt;A&lt;/strong&gt;: ”you know you are right. But we are just entering the holiday season so now is not a very good time to start. In fact I cant wait for the family dinners, Health is not high on my family priorities, I’m guessing that’s why its so good”.&lt;br /&gt;
and this?&lt;br /&gt;
&lt;strong&gt;Q&lt;/strong&gt;: “why aren’t you using a source control system?”&lt;br /&gt;
&lt;strong&gt;A&lt;/strong&gt;: “well we have this big batch of code and its kind of a big mess. We thought about starting to use a source control, but it will take us too long to port our code into such a tool, and train all the developers. And you know we need to do XXXXXXX, so now is not really a good time”&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: 19px; font-weight: bold;"&gt;Its Never too early to start&lt;/span&gt;&lt;br /&gt;
I think you got the point.&lt;br /&gt;
It all boils down to accumulating debt, technical debt in case of software development. That is,&amp;nbsp; you know you need to do something now. ASAP! But since&amp;nbsp; the effort involved seems to be high, you delay. You decide to take on additional debt, and with it comes additional interest. Causing you to do more rework and have less time and the monster feeds itself.&lt;br /&gt;
Face it, like most necessities in life there will never be the perfect time to do it. Test automation on all levels (unit,integration acceptance E2E,…) is not an option.&amp;nbsp; More and more teams realize that and do something about it. To stay competitive you will have to do it also, later will only make it harder.&amp;nbsp; &lt;br /&gt;
The fact that your system is big and complex is the real problem, Test Automation is one proven way to tackle that problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215962051788443675-7886323825862897916?l=imistaken.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=zHHzpQnnBs4:yw1IwvvX0eI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=zHHzpQnnBs4:yw1IwvvX0eI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Imistaken/~4/zHHzpQnnBs4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Imistaken/~3/zHHzpQnnBs4/i-have-legacy-system-is-lame-excuse.html</link><author>noreply@blogger.com (Lior Friedman:)</author><thr:total>0</thr:total><feedburner:origLink>http://imistaken.blogspot.com/2011/10/i-have-legacy-system-is-lame-excuse.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4215962051788443675.post-1038720107682813903</guid><pubDate>Mon, 17 Oct 2011 14:57:00 +0000</pubDate><atom:updated>2011-10-17T07:57:00.966-07:00</atom:updated><title>Agile Practitioners IL– Fourth Meeting</title><description>&lt;img align="right" alt="Agile Practitioners IL - 4th Meeting" height="117" src="http://evbdn.eventbrite.com/s3-s3/eventlogos/17138175/1976729451-1.png" style="display: inline; float: right;" width="261" /&gt;Just wanted to let you know that the Agile Practitioner group will be meeting for the fourth time on November the 6th. This time I’ll be giving the first part of the session and I’ll be talking about how agile can be adopted by a small part (maybe a single team) inside a bigger organization that might be using other more traditional processes.&lt;br /&gt;
Like always entrance is free but registration is required. So please register &lt;a href="http://www.eventbrite.com/event/2344861544"&gt;here&lt;/a&gt; (SAP our hosts did ask that you will remember to bring your event ticket to the meeting) &lt;br /&gt;
You all are invited to attend and I also ask you to help us attract more people to the meeting. Please invite your friends, colleagues or anyone else you feel might be interested in coming. We really like to&amp;nbsp; grow up our relatively small community.&lt;br /&gt;
And last come if you haven’t already and join us at linkedin:&amp;nbsp; &lt;a href="http://www.linkedin.com/groups?gid=81807&amp;amp;trk=hb_side_g"&gt;http://www.linkedin.com/groups?gid=81807&amp;amp;trk=hb_side_g&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215962051788443675-1038720107682813903?l=imistaken.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=OkvXZy2_f_A:_5Y-fWkCQUY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=OkvXZy2_f_A:_5Y-fWkCQUY:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Imistaken/~4/OkvXZy2_f_A" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Imistaken/~3/OkvXZy2_f_A/agile-practitioners-il-fourth-meeting.html</link><author>noreply@blogger.com (Lior Friedman:)</author><thr:total>0</thr:total><feedburner:origLink>http://imistaken.blogspot.com/2011/10/agile-practitioners-il-fourth-meeting.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4215962051788443675.post-2575302552163846134</guid><pubDate>Mon, 10 Oct 2011 11:41:00 +0000</pubDate><atom:updated>2011-10-16T07:33:39.023-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Engineering Practices</category><category domain="http://www.blogger.com/atom/ns#">Design</category><title>Your code should Always be working</title><description>Source control branches is always a good topic to argue about. if you read any of my previous topic (or just know me a little) you are aware that personably I think those to be a complete waste of time and effort. My personal experience (which is validated against places I consult in) is that most usages of branches are covering some inherent process problems that best be solved instead of hidden. but that’s not what I want to&amp;nbsp; talk about.  &lt;br /&gt;
what I do want to discuss is one of the main argument people raise for justifying their need to use source branches. and usually it goes like this:  &lt;br /&gt;
&lt;blockquote&gt;
yes we would love to work on one main trunk, we see the great value in that. However, not all programmer knows how to work their code without breaking the rest of the system. therefore we use branches to prevent the system from breaking during development of new features. and we integrate their work based on needs and stability.&lt;/blockquote&gt;
Frankly I can relate to this. I can understand what is missing here. We need some good strategies for working on code without hurting system stability. so here are some options for you.  &lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: 19px; font-weight: bold;"&gt;Invisible Coding&lt;/span&gt;  &lt;br /&gt;
The first and most trivial technique is using build it (in the programming language) mechanism for disabling code. Yes something like the infamous #ifdef directive for C/C++ that exists in most (all) modren software languages. The main idea here is that all new additions to the code are marked as disabled until they are ready be activated and integrated into the main system.  &lt;br /&gt;
For most this would seem as an ugly patching/hacking and most programmers has a a natural dislike of such an option. and probably with a good reason. After all if the code is not active what is the big difference than just using a separate branch? well not much, the only real benefit in this is that at least one side of the integration is always done. when you are working on a new feature and still work on the main trunk, even if your new code is disabled, it is always updated with other changes being done to the system. And since in most cases enabling/disabling the new parts is quote easy. With just a little care you can do parts of the second side of the integration in an ongoing fashion making the final integration easier, safer and faster.  &lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: 19px; font-weight: bold;"&gt;Decoupling of New Code&lt;/span&gt;  &lt;br /&gt;
The second strategy takes the “invisible code” approach one step further. the main idea here is to write the new code into the main system, but this code will be decoupled from the main code in such a way that it will be easy to prevent actual usage of the new code until it is ready. Its like building a new part beside the main system and only connecting it when it is good and ready. technically speaking it’s a little harder to achieve and sometime require a little bit of juggling and some getting used to thinking this way. On the upside this make sure that all new code is integrated into the system in such a way that only the final steps of the integration (making sure everything works) is left for the end. the back and forth tedious merging is done along the way. Also, from my experience most developers find this approach natural and tend to work like this anyway when adding new stuff. However, the down side, is that in many cases the harder part is to actually to the connecting of the new parts into the existing system. sometime you find that you missed some staff that invalidate part/most/all you work done in isolation. I usually advice people trying to go this way to start by first&amp;nbsp; solving the connecting part. that is start by making the system integrate into a “dummy” new part making all the calls do nothing. and when that’s ready go over and fill in the missing parts.  &lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: 19px; font-weight: bold;"&gt;Work Small&lt;/span&gt;  &lt;br /&gt;
This is kind of a process work around. it has nothing to do with how to write code. The main idea is to always work on small features. so small that in fact they can be started and finished in a couple of days&amp;nbsp; making the use of a branch just a big overhead with no actual need. If you can start and finish in a matter of days, you can just work on your local copy focusing the actual code changes in a very short, delivering everything at the end. Actually this is just like branching but since it is for such a short period of time integration will not be an issue and most likely merging will not be required.  &lt;br /&gt;
actually this strategy has all sorts of benefit outside the technical domain so it is a recommended idea no matter what else you do, and if/when needed it can also be combined with other strategies  &lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: 19px; font-weight: bold;"&gt;Test Automation&lt;/span&gt;  &lt;br /&gt;
Well this is probably the one thing that will make your code work at all time. if you have a good suite of automated tests that does a decent job at covering your system, the rest just falls into place. You just work on the main trunk and make sure that everything continue to function by running the tests after each change and before delivering. If you broke anything the tests will let you know, and you can just find another way of doing this. Of course having such a suite is something that sadly most people are short on. and those that do have are usually already solved this problem a long time ago. but lets face it you do need test automation no matter how you work.  &lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: 19px; font-weight: bold;"&gt;The Mikado Method (The Missing Link)&lt;/span&gt;&lt;img align="right" height="133" src="http://themarketingxfactor.com/images/editorimages/productivity_puzzle.jpg" style="display: inline; float: right;" width="200" /&gt;  &lt;br /&gt;
That’s one is new for me, while I have encountered this over a &lt;a href="http://danielbrolund.wordpress.com/2009/03/28/start-paying-your-technical-debt-the-mikado-method/"&gt;year ago&lt;/a&gt;, only recently I managed to actually dive deep and read the book (an excellent one BTW, which can be downloaded &lt;a href="http://mikadomethod.wordpress.com/book/"&gt;here&lt;/a&gt; (for now)).  &lt;br /&gt;
and for me that was the missing piece in the puzzle, the main idea of the Mikado method is turning the problem upside down. you start by stating you goal, you find out what are the prerequisites for achieving you goal, you apply them to your system, see what breaks, find what’s need to be done to complete the prerequisites, writ it down in a graph and then &lt;strong&gt;&lt;u&gt;revert your system back. &lt;/u&gt;&lt;/strong&gt;then we repeat the process for each derived prerequisite and continue to so until we find actual things that can be done without breaking the system. This is a very short and probably not so good description of the Mikado process. but the book does a great job at that so just go ahead and read the first two chapters to get you going.  &lt;br /&gt;
The great thing about this method is that it uses the power of a source control system, in way that allow a programmer to chart his way until he maps all/most of the things to do in order to reach the Goal, and only then actual work on the code is started. This allow one to start working in small steps from the end to the start while keeping the system intact all the way. at the end this is just taking the “Work Small”&amp;nbsp; strategy and applying it to the “technical” side, resulting in breaking down the work into small technical steps that can be safely taken. and the best part is that this is an actual technical technique that can be practiced and mastered.   &lt;br /&gt;
&lt;br /&gt;
This are the strategy I have used and will use and for me those things work. I’m sure most of the things stated here works well in combined together and the trick is to use the right tool for the task. would love to hear about more techniques for handling the same situation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215962051788443675-2575302552163846134?l=imistaken.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=Rbo-Vvurz_E:AML_64npdbg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=Rbo-Vvurz_E:AML_64npdbg:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Imistaken/~4/Rbo-Vvurz_E" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Imistaken/~3/Rbo-Vvurz_E/you-code-should-always-be-working.html</link><author>noreply@blogger.com (Lior Friedman:)</author><thr:total>5</thr:total><feedburner:origLink>http://imistaken.blogspot.com/2011/10/you-code-should-always-be-working.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4215962051788443675.post-3630855795133916786</guid><pubDate>Thu, 06 Oct 2011 06:40:00 +0000</pubDate><atom:updated>2011-10-05T23:40:40.577-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Conferences</category><category domain="http://www.blogger.com/atom/ns#">Agile Practitioners IL</category><title>Agile Practitioners 2012 Update</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://lh5.ggpht.com/-gTaEUhwd-FM/To1M6sZNsYI/AAAAAAAAAMA/tCL70e0dRn0/s1600-h/image%25255B3%25255D.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img align="right" alt="image" border="0" height="115" src="http://lh5.ggpht.com/-ayx67lMLjSE/To1M7XxaE0I/AAAAAAAAAME/iqTJKN6WrFA/image_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom-color: initial; border-bottom-style: initial; border-bottom-width: 0px; border-left-color: initial; border-left-style: initial; border-left-width: 0px; border-right-color: initial; border-right-style: initial; border-right-width: 0px; border-top-color: initial; border-top-style: initial; border-top-width: 0px; display: inline; float: right; margin-bottom: 5px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
I think this is my first post on the conference, so lets start from the beginning.&lt;br /&gt;
On January the 31st. We will be having a big agile day conference locally in Israel. We have been working in the last few months to make everything happen, from bringing in international speakers, looking for great content locally to arranging for a place to host the event.&lt;br /&gt;
we also brought up a website for the conference: &lt;a href="http://agilepractitioners2012.com/"&gt;http://agilepractitioners2012.com/&lt;/a&gt;. go there to get more details about what the conference is about.&lt;br /&gt;
I would like to let you know (and remind those who do know) that the call for paper is still open and we are still looking for great sessions given by great people to have in the day.&lt;br /&gt;
if you have anything worth sharing please come and suggest a session: &lt;a href="http://agilepractitioners2012.com/call-for-papers/"&gt;http://agilepractitioners2012.com/call-for-papers/&lt;/a&gt;&lt;br /&gt;
the call for paper is open until October the 16th, don’t miss it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215962051788443675-3630855795133916786?l=imistaken.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=_xBW-85CJqs:cQLim3RKanU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=_xBW-85CJqs:cQLim3RKanU:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Imistaken/~4/_xBW-85CJqs" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Imistaken/~3/_xBW-85CJqs/agile-practitioners-2012-update.html</link><author>noreply@blogger.com (Lior Friedman:)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-ayx67lMLjSE/To1M7XxaE0I/AAAAAAAAAME/iqTJKN6WrFA/s72-c/image_thumb%25255B1%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://imistaken.blogspot.com/2011/10/agile-practitioners-2012-update.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4215962051788443675.post-2617191037969598017</guid><pubDate>Mon, 03 Oct 2011 17:59:00 +0000</pubDate><atom:updated>2011-10-03T10:59:18.887-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ATDD</category><category domain="http://www.blogger.com/atom/ns#">Course</category><category domain="http://www.blogger.com/atom/ns#">TDD</category><title>TDD for Legacy Systems</title><description>We know test automation is crucial probably even mandatory, and TDD is a great practice to use, but lets face it our existing system is not test friendly to say the least.&lt;br /&gt;
so now what?&lt;br /&gt;
TDD for Legacy system is&amp;nbsp; my way to help people tackle this problem. During this two day training we will learn how to cope with existing systems. We will go over the basics of Test First&amp;nbsp;methodologies and learn how to turn a system from a big&amp;nbsp; chunk of legacy code, into something that is covered by a suite of automated tests. we will discuss issues of setting up a continuous integration server, different type of testing that can be applied, how to tackle existing system design and how to slowly but surely improve our code base while writing automated tests for the existing code.&lt;br /&gt;
the training will assume no previous knowledge of test automation, however it is&amp;nbsp; hands on and does require previous experience in programming (at least one year on a real live system).&lt;br /&gt;
if you are interested and want to learn more details about the course syllabus and content can be found &lt;a href="http://liorfriedman.com/training/tdd/tddlegacynet"&gt;here&lt;/a&gt;&lt;br /&gt;
and of course you can just register &lt;a href="http://liorfriedman.com/registrationform?layout=blog"&gt;here&lt;/a&gt;&lt;br /&gt;
so don’t wait up, take you r first step and come learn about modern software development.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215962051788443675-2617191037969598017?l=imistaken.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=OzWshofcbBY:IrdnnAL1Uu8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=OzWshofcbBY:IrdnnAL1Uu8:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Imistaken/~4/OzWshofcbBY" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Imistaken/~3/OzWshofcbBY/tdd-for-legacy-systems.html</link><author>noreply@blogger.com (Lior Friedman:)</author><thr:total>0</thr:total><feedburner:origLink>http://imistaken.blogspot.com/2011/10/tdd-for-legacy-systems.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4215962051788443675.post-1716124817718275793</guid><pubDate>Wed, 07 Sep 2011 19:54:00 +0000</pubDate><atom:updated>2011-09-07T12:54:54.985-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Scrum</category><category domain="http://www.blogger.com/atom/ns#">Agile Management</category><title>Agile Practitioner IL - 3rd Meeting</title><description>Sunday evening we met for the 3rd time. This time &lt;a href="http://osherove.com/"&gt;Roy Osherove&lt;/a&gt; discussed &lt;a href="http://5whys.com/blog/video-ten-mistakes-software-team-leaders-make.html"&gt;10 mistakes team leaders make&lt;/a&gt; an updated version of the slides can also be found &lt;a href="http://www.slideshare.net/royosherove/ten-mistakes-software-team-leaders-make-by-roy-osherove-5whyscom"&gt;here&lt;/a&gt;.&lt;br /&gt;
During the talk Roy mentioned several books, out of those I really recommend Johanna Rothman &amp;amp; Eshter Derby, &lt;a href="http://www.jrothman.com/Books/behind-closed-doors.html"&gt;Behind Closed Doors: Secrets of Great Management&lt;/a&gt;. For me that book was a career changer. I recall reading it as a team leader and for the first time I felt someone actually wrote a book that explained to me what a team leader job is all about. Also the book is filled with practical techniques that can be applied as is. from planning to conducting one on ones. Just the sort of advice I needed at that time.&lt;br /&gt;
&lt;h3&gt;
Scrum Master vs. Team Leader&lt;/h3&gt;
Towards the end of the session a discussion rose regarding the place of the scrum master and about the amount of authority he as over the team. &lt;br /&gt;
On one hand we all know that a scrum master is not the team leader. and it is considered a bad practice to make the team leader into one. However, it is also clear that the Scrum Master as defined by his roles and responsibilities, should lead the team helping them to become better at what they do. and in fact in most cases the natural candidates for becoming the scrum masters are the team leaders. &lt;br /&gt;
So where does the line from leader to manager is drawn?&lt;br /&gt;
Actually I don’t have a good answer for that. My gut feeling tells me that a “good” team leader, will fit the role of a scrum master very easily. Yes there are some traps and pitfalls that he should avoid, but if he is “good” that should not be a problem. However, many team leaders are not “good” and there is a real danger making them scrum masters. While as a team leaders they might manage to still function, as scrum masters they are not equipped to handle an agile transition which by itself is hard enough. In most cases they just ruin any attempt at any kind of an agile process. In my eyes the job of a scrum master is so much harder and it take a more experienced person with the “right” state of mind to do a good job. Leading a team is much harder then managing it.&lt;br /&gt;
&lt;h3&gt;
The “Good” team leader&lt;/h3&gt;
the million dollar question is of course how to sort the “good” team leaders from the rest? &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Are they the team leaders which demonstrate the best productivity in their teams?&lt;/li&gt;
&lt;li&gt;Are the the one most liked by their teams?&lt;/li&gt;
&lt;li&gt;are they the ones most appreciated by their managers?&lt;/li&gt;
&lt;li&gt;or is it something completely different?&lt;/li&gt;
&lt;/ul&gt;
don’t really know.&lt;br /&gt;
The only thing I did found along the way, is that there is a strong correlation between team leaders exert minimal authority over the team to those who becomes great scrum masters. So when I see a team leader which doesn’t “tell” his team what to do, and instead asked them many questions I know that there is a good candidate for becoming a Scrum Master.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215962051788443675-1716124817718275793?l=imistaken.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=208ixK5_L_c:JRO3vIIcdA4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=208ixK5_L_c:JRO3vIIcdA4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Imistaken/~4/208ixK5_L_c" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Imistaken/~3/208ixK5_L_c/agile-practitioner-il-3rd-meeting.html</link><author>noreply@blogger.com (Lior Friedman:)</author><thr:total>7</thr:total><feedburner:origLink>http://imistaken.blogspot.com/2011/09/agile-practitioner-il-3rd-meeting.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4215962051788443675.post-4669265565153181874</guid><pubDate>Wed, 07 Sep 2011 06:16:00 +0000</pubDate><atom:updated>2011-09-06T23:17:06.113-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Agile Principles</category><category domain="http://www.blogger.com/atom/ns#">Agile Management</category><title>Making your team manage their own work</title><description>&lt;p&gt;I really think that team leader should stop being the ones which split the work into tasks and decide who does what.&lt;/p&gt;  &lt;p&gt;I’ve written more about this subject and it was published &lt;a href="http://5whys.com/blog/making-your-team-manage-their-own-work.html"&gt;here&lt;/a&gt; at the &lt;a href="http://5whys.com/"&gt;5whys&lt;/a&gt; blog. (which is an excellent reading materials for team leaders)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215962051788443675-4669265565153181874?l=imistaken.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=MPU8eWXQZt4:wpw9ChFN7HU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=MPU8eWXQZt4:wpw9ChFN7HU:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Imistaken/~4/MPU8eWXQZt4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Imistaken/~3/MPU8eWXQZt4/making-your-team-manage-their-own-work.html</link><author>noreply@blogger.com (Lior Friedman:)</author><thr:total>0</thr:total><feedburner:origLink>http://imistaken.blogspot.com/2011/09/making-your-team-manage-their-own-work.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4215962051788443675.post-4040522120605436746</guid><pubDate>Mon, 05 Sep 2011 10:11:00 +0000</pubDate><atom:updated>2011-09-05T03:11:58.032-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Course</category><category domain="http://www.blogger.com/atom/ns#">TDD</category><title>Bug: $10, Future Bug: $200, Angry clients: $5,000, One TDD course: Priceless</title><description>&lt;p&gt;When you write code for a living, mistakes can be expensive. They can create bugs that will crop up in the next version or the version after that, they can cause problems down the line for the end user who can't use the software and worst of all, they can create bugs that you spend longs days (and nights) working to find before the release.&lt;/p&gt;  &lt;p&gt;One way of avoiding these mistakes is Test Driven Design - write the test before the code and the bug (if any) is easy to find. And a course in Test Driven Design is not that expensive - and even less so today :)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://goo.gl/3VMqM"&gt;http://goo.gl/3VMqM&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215962051788443675-4040522120605436746?l=imistaken.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=5KQE4H7R1Z8:bbRUXberMWc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=5KQE4H7R1Z8:bbRUXberMWc:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Imistaken/~4/5KQE4H7R1Z8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Imistaken/~3/5KQE4H7R1Z8/bug-10-future-bug-200-angry-clients.html</link><author>noreply@blogger.com (Lior Friedman:)</author><thr:total>0</thr:total><feedburner:origLink>http://imistaken.blogspot.com/2011/09/bug-10-future-bug-200-angry-clients.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4215962051788443675.post-6233250597549581793</guid><pubDate>Thu, 01 Sep 2011 08:17:00 +0000</pubDate><atom:updated>2011-09-07T12:11:01.461-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Course</category><title>Introduction To TDD – Early Bird</title><description>Just wanted to remind that you can still get the early bird pricing for my upcoming training on September the 18th. People who will register by Tuesday the 6/9 will get a 50% discount for the course (making the cost only 600NIS per person). &lt;br /&gt;
Details about the course can be found &lt;a href="http://www.liorfriedman.com/training/tdd/tdd-intro"&gt;here&lt;/a&gt;, &lt;br /&gt;
Registration details can be found &lt;a href="http://www.liorfriedman.com/registrationform?layout=blog"&gt;HERE&lt;/a&gt;&lt;br /&gt;
If you have any other question feel free to &lt;a href="http://www.liorfriedman.com/contact"&gt;contact&lt;/a&gt; me&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215962051788443675-6233250597549581793?l=imistaken.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=aC2qyYrM9H0:98GKys1-jIQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=aC2qyYrM9H0:98GKys1-jIQ:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Imistaken/~4/aC2qyYrM9H0" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Imistaken/~3/aC2qyYrM9H0/introduction-to-tdd-early-bird.html</link><author>noreply@blogger.com (Lior Friedman:)</author><thr:total>0</thr:total><feedburner:origLink>http://imistaken.blogspot.com/2011/09/introduction-to-tdd-early-bird.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4215962051788443675.post-4337049753426283387</guid><pubDate>Fri, 19 Aug 2011 06:25:00 +0000</pubDate><atom:updated>2011-08-18T23:25:01.530-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Course</category><category domain="http://www.blogger.com/atom/ns#">TDD</category><title>The value of a 1 day introduction to TDD workshop</title><description>&lt;p&gt;Next month I’ll be teaching a 1 day &lt;a href="http://www.liorfriedman.com/training/tdd/tdd-intro"&gt;Introduction to TDD .NET&lt;/a&gt; workshop. And I was asked to explain what is the value of attending such a workshop. Clearly one can’t learn how to TDD in a single day, and indeed this is not the goal of the workshop.&lt;/p&gt;  &lt;h3&gt;So what is the value in a single day Introduction to TDD workshop?&lt;/h3&gt;  &lt;p&gt;I will let the reader judge for themselves. However here are the things I expect to cover during the day.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Go over the basic rules of the TDD practice&lt;/li&gt;    &lt;li&gt;Explain and demonstrate what a testing framework is used for.&lt;/li&gt;    &lt;li&gt;Introduce base Isolation principles.&lt;/li&gt;    &lt;li&gt;Explain concrete ways for mastering the TDD skill.&lt;/li&gt;    &lt;li&gt;Go over the humps of pain – i.e. the main obstacles for doing TDD&lt;/li&gt;    &lt;li&gt;Let participant practice their firsts steps in a safe environment.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;I expect people to come out from the workshop with the following:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Knowing  the costs involved in TDD.&lt;/li&gt;    &lt;li&gt;Understanding the benefits.&lt;/li&gt;    &lt;li&gt;Know what needs to be done in order to actually learn it&lt;/li&gt;    &lt;li&gt;Be aware of the main obstacles and pitfalls in the road for mastering TDD&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;So is all this worth a single day of your time?&lt;/p&gt;&lt;p&gt;if you think it is you can &lt;b&gt;&lt;a href="http://www.liorfriedman.com/registrationform?layout=blog"&gt;Register Here&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215962051788443675-4337049753426283387?l=imistaken.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=AOA4UsUTUmw:JefjUveH2NA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=AOA4UsUTUmw:JefjUveH2NA:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Imistaken/~4/AOA4UsUTUmw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Imistaken/~3/AOA4UsUTUmw/value-of-1-day-introduction-to-tdd.html</link><author>noreply@blogger.com (Lior Friedman:)</author><thr:total>0</thr:total><feedburner:origLink>http://imistaken.blogspot.com/2011/08/value-of-1-day-introduction-to-tdd.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4215962051788443675.post-1248382592071150234</guid><pubDate>Sun, 14 Aug 2011 21:37:00 +0000</pubDate><atom:updated>2011-08-14T14:40:50.220-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Self Improvment</category><category domain="http://www.blogger.com/atom/ns#">tips</category><category domain="http://www.blogger.com/atom/ns#">Agile practices</category><category domain="http://www.blogger.com/atom/ns#">TDD</category><category domain="http://www.blogger.com/atom/ns#">Development Practices</category><title>Starting TDD – One Day Experiment</title><description>&lt;p&gt;A repeating question I encounter a lot is how to start with practicing TDD. in fact a while back I wrote a series of post on how one can start this in various contexts&lt;/p&gt;  &lt;p&gt;(&lt;a href="http://imistaken.blogspot.com/2010/05/starting-tdd-part-1.html"&gt;part 1&lt;/a&gt;, &lt;a href="http://imistaken.blogspot.com/2010/05/starting-tdd-part-2.html"&gt;part 2&lt;/a&gt;, &lt;a href="http://imistaken.blogspot.com/2010/05/starting-tdd-part-3.html"&gt;part 3&lt;/a&gt;, &lt;a href="http://imistaken.blogspot.com/2010/05/starting-tdd-part-4.html"&gt;part 4&lt;/a&gt;, &lt;a href="http://imistaken.blogspot.com/2010/05/starting-tdd-part-5.html"&gt;part 5&lt;/a&gt;, &lt;a href="http://imistaken.blogspot.com/2010/05/starting-tdd-part-6.html"&gt;part 6&lt;/a&gt;, &lt;a href="http://imistaken.blogspot.com/2010/05/starting-tdd-conclusion.html"&gt;conclusions&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;some people claim that TDD is a group activity,  therefore it’s a waste of effort to practice alone. I believe that TDD is a personal skill, and while its better to have the whole team doing it,  it can be practiced alone. Nothing should prevent you from trying to improve the quality of your code. (and in most cases the added value will negate any delays you might experience initially).&lt;/p&gt;  &lt;p&gt;in this post I’m offering another way to start. in fact I think that a controlled experiment might be a better way to describe this. but anyway&lt;/p&gt;  &lt;h2&gt;Practicing TDD for 1 Day&lt;/h2&gt;  &lt;p&gt;To start you should dedicate a full day for this. while I'm sure this exercise can divided into several sections, I think that to truly benefit from this (and avoid the cost of context switching) it should be done in a single day.&lt;/p&gt;  &lt;p&gt;By the end of the day I expect you to achieve the following:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;have a good understanding of what TDD is and what are the rules to follow &lt;/li&gt;    &lt;li&gt;write some basic unit tests on a simple problem &lt;/li&gt;    &lt;li&gt;write a test case for your own system &lt;/li&gt;    &lt;li&gt;have a basic understanding of the tools involved in the process. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;I also expect that you wont achieve the following:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;fully appreciate the costs and benefits of doing TDD &lt;/li&gt;    &lt;li&gt;understand how to apply TDD in all situation &lt;/li&gt;    &lt;li&gt;Be able to write tests to all parts of your system &lt;/li&gt;    &lt;li&gt;have a deep understanding of Isolation techniques &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;(or put simply at the end of the day you will know some of the basics, but that’s about it)&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h2&gt;Setup&lt;/h2&gt;  &lt;p&gt;in order to complete the day you will need to download and install some tools. specifically you will need  a Testing Framework and a mocking framework.&lt;/p&gt;  &lt;h3&gt;Testing framework &lt;/h3&gt;  &lt;p&gt;any framework will do, really its not that important at this stage. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;.NET use MsTest or &lt;a href="http://www.nunit.org/"&gt;NUnit&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Java – &lt;a href="http://www.junit.org/"&gt;JUnit&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;c++ – &lt;a href="http://code.google.com/p/googletest/"&gt;GoogleTest&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Mocking framework&lt;/h3&gt;  &lt;p&gt;pick one of the power tools available:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;.NET use &lt;a href="http://www.typemock.com/"&gt;Typemock&lt;/a&gt; Isolator or &lt;a href="http://www.telerik.com/products/mocking.aspx"&gt;JustMock&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Java – &lt;a href="http://code.google.com/p/powermock/"&gt;PowerMock&lt;/a&gt; (you’ll need either &lt;a href="http://easymock.org/"&gt;EasyMock&lt;/a&gt; or &lt;a href="http://mockito.org/"&gt;Mockito&lt;/a&gt; in addition) &lt;/li&gt;    &lt;li&gt;c++ – &lt;a href="http://www.typemock.com/isolatorpp-product-page"&gt;Isolator++&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;(some of the tools are commercial so you will need to use their trial edition which is good for a few weeks)&lt;/p&gt;  &lt;h2&gt;Learning phase&lt;/h2&gt;  &lt;p&gt;The first step is to get a basic understanding of the principles involved. for this I would recommend the following session by &lt;a href="http://www.viddler.com/explore/RoyOsherove/videos/17/"&gt;Uncle Bob&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Attempting as it might be don’t skip this part. It takes about an hour, but the important basics are in this. In order to succeed one must know what are the rules of the game and what are the expectations. doing TDD is not just about writing tests, its about how to write code differently. And the goal is to try this different way, not just write tests.&lt;/p&gt;  &lt;h2&gt;Do a Code Kata&lt;/h2&gt;  &lt;p&gt;pick a kata from the following &lt;a href="http://codingkata.org/katas/;jsessionid=1pwjx6tr5x93wj1i4jgbwt81n"&gt;page&lt;/a&gt;, any kata will do but I would recommend going with one of the katas in the Beginner++ section.&lt;/p&gt;  &lt;p&gt;your goal in this step is to practice TDD on the kata.&lt;/p&gt;  &lt;p&gt;that is apply the basic rules of TDD while trying to tackle a relatively simple problem.&lt;/p&gt;  &lt;p&gt;I would expect you to be able to go through the kata (mostly) in under an hour&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h2&gt;Learn Isolation Principles&lt;/h2&gt;  &lt;p&gt;The next step is to get familiar with your mocking framework of choice. Most likely, the easiest way to do it would be to go the the relevant tool website and get through the “getting started” or the “Introduction” parts.  The goal is to understand what are mocking framework, what they are used for, and specifically learn the API of the tools and be able to use it.&lt;/p&gt;  &lt;p&gt;If you want to invest a little more time and learn some of the theory behind this, &lt;a href="http://www.infoq.com/presentations/integration-tests-scam"&gt;here’s&lt;/a&gt; a very nice session (hour and a half) by J.B. Rainsberger which I personally like very much.&lt;/p&gt;  &lt;p&gt;you should end this part by  doing the following:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Create  a new project.&lt;/li&gt;    &lt;li&gt;To this project add 2 classes one that you want to test (Class A) and one which is used by Class A  (Class B)&lt;/li&gt;    &lt;li&gt;Add a method that just throw an exception to class B and make Class A invoke that method somewhere.&lt;/li&gt;    &lt;li&gt;Next write a unit test which test Class A, specifically the part should activate the code in A that invokes the prepared method on class B. &lt;/li&gt;    &lt;li&gt;Use the mocking framework in order to make this unit test work/pass.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Yes this is a very simple exercise, but in order to finish it you will need to pass through all the basic steps for using the mocking framework tool. &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h2&gt; &lt;/h2&gt;  &lt;h2&gt;Take a break for lunch&lt;/h2&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;ul&gt;&lt;!--EndFragment--&gt;&lt;/ul&gt;  &lt;h2&gt;Tackling the real system&lt;/h2&gt;  &lt;p&gt;The last part of the day is dedicated to write some unit test on your real life system. What we want to achieve is to actually write some tests on the real system that you actually works on.&lt;/p&gt;  &lt;p&gt;The first step is to pick a place in the system to start in. The trick here is to chose an good part that on one hand wouldn’t be the hardest most complex part, but on the other hand still would surface the real issue that will be encountered later on. The ideal place should be a place that is focused on logic. Try not to go for upper part containing any GUI sections, and also try to avoid the lowest parts dealing with the data base (if there is one). If possible try to pick a class that reside somewhere in the middle tiers. hopefully somewhere inside the business logic. &lt;/p&gt;  &lt;p&gt;After you picked your part, locate the class you actually want to write test for. When you have it, the first step is to locate the dependencies of the class you will need to handle. Start by writing those down on a piece of paper, and then dedicate some time to figure out how they are going to be isolated. Usually what helps is answering the following questions:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;How are the dependent instances (the one used by the class under test) get created&lt;/li&gt;    &lt;li&gt;How are they get “connected” (injected)into the class under test&lt;/li&gt;    &lt;li&gt;what is the expected behavior you need in your tests&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;answering these question will help you later on in setting up the fakes (mocks) in your test.&lt;/p&gt;  &lt;h2&gt;Write some tests&lt;/h2&gt;  &lt;p&gt;next just write a couple of things you would like to test. The key here to start simple. think of a specific behaviors you want to test. for each behavior, think what is the initial state the test should start at, what is the action you want to test, and what is the expected behavior (result) of that action (and how you clean up after the test). When you have all those just try to write the test. &lt;/p&gt;  &lt;p&gt;And always remember to have &lt;u&gt;&lt;strong&gt;&lt;span &gt;patient&lt;/span&gt;&lt;/strong&gt;&lt;/u&gt;.&lt;/p&gt;  &lt;p&gt;The first test in a new system is always the hardest to write. Even an experienced TDD’er is likely to take a couple of hours to actually get some tests on a new system. For a beginner it might take longer.&lt;/p&gt;  &lt;h2&gt;Summarize the day&lt;/h2&gt;  &lt;p&gt;Last action of the day is to think and reflect on the experiment. if you followed the steps, then you should have some tests on your real system.  Now it is time to reflect on those and see what else you can learn. Think on all the things you accomplished during the day. Chart down the things that you need to invest more time in. Recap the main difficulties you encountered, and most important decide upon a few key actions you would like to take in order to continue your  learning.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;And of course let me know how it went.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215962051788443675-1248382592071150234?l=imistaken.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=CxuE4DuDxsY:cS0u8KzjZTo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=CxuE4DuDxsY:cS0u8KzjZTo:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Imistaken/~4/CxuE4DuDxsY" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Imistaken/~3/CxuE4DuDxsY/starting-tdd-one-day-experiment.html</link><author>noreply@blogger.com (Lior Friedman:)</author><thr:total>3</thr:total><feedburner:origLink>http://imistaken.blogspot.com/2011/08/starting-tdd-one-day-experiment.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4215962051788443675.post-3606966460877456141</guid><pubDate>Sun, 07 Aug 2011 20:13:00 +0000</pubDate><atom:updated>2011-08-07T13:14:53.822-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Scrum</category><category domain="http://www.blogger.com/atom/ns#">Planning</category><title>Agile Planning is just Enough</title><description>&lt;p&gt;Actually Agile planning is based upon two main principles:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Just enough &lt;/li&gt;    &lt;li&gt;Just in time &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;that is, at each stage we plan just enough to get us going and answer the important questions at that stage and than we stop.&lt;/p&gt;  &lt;p&gt;In this &lt;a href="http://www.gilzilberfeld.com/2011/08/sad-truth-about-agile-planning.html"&gt;post&lt;/a&gt; Gil talks about agile planning how it mainly focused on short term. Well Gil you missed some important staff about what you call Agile planning.&lt;/p&gt;  &lt;p&gt;lets start by saying that talking about agile planning as a concrete thing is basically misleading, agile planning is just a set of very basic principles (which I tried summarizing above). One need to refer to concrete planning practices in order to udge them.Planning is scrum does not look like planning in Kanban which does not look like planning in XP… &lt;/p&gt;  &lt;p&gt;The example used is taken from a medical field, in which the stake holders &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;“needed to know everything would be ready in time, three years in advance.”. &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Well sorry there is no such magic in our field. NO one can know what will happen three years in advance. &lt;/p&gt;  &lt;p&gt;when you  claim to be able to do that you are simply lying, both to your sponsor and probably to yourself as well. You can estimate, you can guess or you can extrapolate based on prior knowledge. &lt;/p&gt;  &lt;p&gt;you will never KNOW. &lt;/p&gt;  &lt;p&gt;Even when you sign a contract with millions of dollars in fines for being late, you cant know. you are just doing an educated guessing taking all the buffers and safeties you need in order to hopefully meet you goals in the given time. And BTW in most case you don’t (just check out Chaos report if you don’t believe me)&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;Long Term Planning&lt;/h3&gt;  &lt;p&gt;Gil is right about one important thing, almost every project need a long term plan. Question is and always will be is just how long do we need our plan and how detailed do we need it to be.&lt;/p&gt;  &lt;p&gt;In scrum for example, there are 3 levels of planning:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;the daily planning (done in each daily meeting) – we plan in extreme details what will be done in the next day&lt;/li&gt;    &lt;li&gt;the sprint planning – we plan in details which tasks will be done during a sprint ( a few week ahead)&lt;/li&gt;    &lt;li&gt;the Release planning – we plan the list of stories which we will deliver in the next release (typically 3-6 months)&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;And here Scrum stops. &lt;/p&gt;  &lt;p&gt;That doesn’t mean there are no longer term planning, just that the longer term is “out of scope” for the basic Scrum process. u will still need a product roadmap, you will still need a strategic planning. and maybe just maybe (like in the example Gil gave) you will need to give a list of expected features for the next “big” version. However this kind of planning will always be more vague, will deal in general capabilities we would like our product to  have and at the end will always be open to interpretation. it would never be concrete enough to actually start working on. &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;The nice thing that at the end my recommendations and Gil are the same (well we do basically believe in the same things):&lt;/p&gt;  &lt;p&gt; do a release plan (3-6 months ahead) make sure you are working on the highest priority features and make your best to develop them as fast as you can, and always keep your progress visible top your customer.  &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;So lets do a reality check, planning is nice and important, but &lt;a href="http://agilemanifesto.org/"&gt;“responding to change over following a plan”&lt;/a&gt; is what makes agile processes works. The longer the time frame you are planning chances are higher that this change will be bigger and come sooner.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215962051788443675-3606966460877456141?l=imistaken.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=nmWnlsCOqNI:8y5zdaS_L_A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=nmWnlsCOqNI:8y5zdaS_L_A:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Imistaken/~4/nmWnlsCOqNI" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Imistaken/~3/nmWnlsCOqNI/agile-planning-is-just-enough.html</link><author>noreply@blogger.com (Lior Friedman:)</author><thr:total>0</thr:total><feedburner:origLink>http://imistaken.blogspot.com/2011/08/agile-planning-is-just-enough.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4215962051788443675.post-7681219077591112127</guid><pubDate>Wed, 20 Jul 2011 13:50:00 +0000</pubDate><atom:updated>2011-07-20T07:42:58.749-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Random Thoughts</category><category domain="http://www.blogger.com/atom/ns#">Design</category><title>So how are design pattern working for you?</title><description>&lt;p&gt;A confession. I never did manage to make design pattern work for me.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;&lt;img style="margin: 0px 0px 5px; display: inline; float: right" align="right" src="http://www.alfredo-haeberli.com/images/products/pattern/pattern01.jpg" width="182" height="182" /&gt;A disclaimer. I don’t think that this is because design patterns are in any way “wrong” or “bad”.&lt;/strong&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Yes, I do use them occasionally and Yes, I do know a fair share of them. However, I always have this nagging feeling that I should know more patterns, and at the end of the day, when I’m actually designing my systems I rarely go:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;“ahmm I can use the XXXX pattern to do this”.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;So why is this so?&lt;/strong&gt; why after so many years of using design patterns talking about patterns and even arguing quite a lot about them, I still can’t make them work for me?&lt;/p&gt;  &lt;p&gt;I wonder…&lt;/p&gt;  &lt;h3&gt;The human brain as a pattern matching machine&lt;/h3&gt;  &lt;p&gt;&lt;img style="margin: 0px 0px 5px; display: inline; float: right" align="right" src="data:image/jpg;base64,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" /&gt;Start of July I attended at Vipul Kocher &lt;a href="http://sela.co.il/s/sigist11/Presentations.html"&gt;session&lt;/a&gt; during the SIGIST conference, in his session Vipul talked quite a lot about patterns and specifically about testing patterns. All and all it was a very interesting session, out of which I would like to repeat two main idea’s. First, Vipul initial claim was that our brain is basically a very sophisticated and efficient pattern matching machine. We use patterns on a daily basis. We see patterns everywhere, we recognize all kind of patterns we create new pattern, and often enough we even use Meta patterns (patterns which are used to create new patterns). No wonder our brain is such effective in matching patterns. &lt;/p&gt;  &lt;h3&gt;Learning to speak&lt;/h3&gt;  &lt;p&gt;&lt;img style="margin: 0px 0px 5px; display: inline; float: right" align="right" src="data:image/jpg;base64,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" width="185" height="185" /&gt;Vipul’s second idea I would like to quote, is the fact that human apply this pattern matching ability in or language learning process. &lt;/p&gt;  &lt;p&gt;And in the first time we are not even aware we are doing so. &lt;/p&gt;  &lt;p&gt;When learning our native tongue, our brains learns patterns for matching single words, to match complete sentences, to match grammars rule and to match common mistakes. And it does so without us being conscious to the process.&lt;/p&gt;  &lt;p&gt;The second time we learn a language the process is different, instead of absorbing the patterns instinctively, we apply a conscious learning technique.Instead of understanding specific word, we translate meaning from our native tongue, instead of deducting the grammar we LEARN grammars rules from books (or a teacher). This is also a way of learning. However in general the end result is inferior, usage of our native tongue will always remain easier and will always be of higher quality.&lt;/p&gt;  &lt;h3&gt;Misplaced Design Patterns&lt;/h3&gt;  &lt;p&gt;When talking about design patterns there are a couple of anti pattern I see in their usage. Again, I  don’t claim there is something inherently wrong with patterns. I do see however problems with their usage. The most common issue I see, is a problem in applying patterns. Specifically, too often I see misplaced design patterns scattered around systems.  Look at your current system you are developing. How many singletons do you see there? are all of them necessary? how many times you have argues with someone that while XXX is a great pattern, using it here seem to be out of place?  &lt;/p&gt;  &lt;p&gt;Initially I thought that this is caused by simple lack of pattern knowledge and understanding. However I think the reason is simpler than that. Our brain is always on the look for patterns, our thought process is rigged to order the world around us into known patterns and shapes. It does so instinctively all the time, and specifically during design it tricks us to see patterns which actually might not be there. It takes a really trained eye and conscious effort to compensate. Failure in doing so results in having a misplaced pattern in our system.&lt;/p&gt;  &lt;h3&gt;Design Pattern as a language&lt;/h3&gt;  &lt;p&gt;Haim describe in “&lt;a href="http://effectivesoftwaredesign.com/2011/07/11/design-patterns-and-the-tower-of-babel/"&gt;Design Patterns and the Tower of Babel&lt;/a&gt;” one very important benefit of using patterns. Patterns serve as a common design language for us, and this is good.&lt;/p&gt;  &lt;p&gt;However there is a catch. At least for me, the Design Pattern language is our second language. As a second language I will always find it harder to use. When using a secondary language (as in English ),  I always struggle for the right words (patterns), I fail to understand the nuances behind them, I make stupid grammar mistakes and occasionally I use inappropriate words (if you don’t believe me read this article again). When I use Design pattern I feel the same, no matter how much effort I invested and will invest in learning patterns, I think that for me the cause is lost. I &lt;strong&gt;&lt;u&gt;will not&lt;/u&gt;&lt;/strong&gt; be able to use design pattern as my “native design tongue  &lt;/p&gt;  &lt;h3&gt;So what should we do?&lt;/h3&gt;  &lt;p&gt;&lt;img style="margin: 0px 0px 5px; display: inline; float: right" align="right" src="http://t1.gstatic.com/images?q=tbn:ANd9GcScXwLpOYdbjOfXX0G4LMt_bGPkiFbUdrS6ePhTrIsJ1RhH1mcj_A" /&gt;I see two options, the first is making sure that pattern does become the native tongue for new comers to our profession. On the upside design patterns has got a hold and I do see this more and more new comers learn them very early. However,I think that this process is going too slow. In order to actually see this done on a bigger scale, design pattern should be embedded into basic training and should be thought at universities (which I haven’t seen happening yet)&lt;/p&gt;  &lt;p&gt;The second option is for people like me, those that will always have a different native “design tongue”. Like always, the first step is to admit that we have a problem. The problem is that the pattern language will always feel uncomfortable and be less effective for us.  We still can and should use it, but when we do, we should be aware that we are “translating” and in the process our meaning can get twisted. &lt;/p&gt;  &lt;p&gt;This is very frustrating. Especially when a “native pattern speaker“ meet a “second langue pattern speaker” like me. No matter how I try to avoid it, I end up reverting to my native language in order to “keep up” and when I do confusion start to hit (resulting occasionally in some heated arguments). Therefore the second step is to always keep in mind and be aware that this is happening.&lt;/p&gt;  &lt;h3&gt;When two “Foreign pattern speakers” meet&lt;/h3&gt;  &lt;p&gt;And last, and this is what I should always remember to verify, sometime on the other side there is another “pattern as a second language“  kind of guy. When this happen to be the case, we can sometime, just maybe, skip the whole pattern things. Chances are that it will be easier to communicate using our native design tongue.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;So what are you? &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;a native design pattern speaker?&lt;/li&gt;    &lt;li&gt;learnt design pattern as your second language?&lt;/li&gt; &lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215962051788443675-7681219077591112127?l=imistaken.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=wC2bjEIPVpk:rH8aqS9Xv18:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=wC2bjEIPVpk:rH8aqS9Xv18:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Imistaken/~4/wC2bjEIPVpk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Imistaken/~3/wC2bjEIPVpk/so-how-are-design-pattern-working-for.html</link><author>noreply@blogger.com (Lior Friedman:)</author><thr:total>1</thr:total><feedburner:origLink>http://imistaken.blogspot.com/2011/07/so-how-are-design-pattern-working-for.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4215962051788443675.post-3205640097088504954</guid><pubDate>Thu, 07 Jul 2011 14:31:00 +0000</pubDate><atom:updated>2011-07-07T07:37:37.641-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Agile Practitioners IL</category><title>Agile Practitioner IL– First Meeting</title><description>&lt;p align="left"&gt;First group meeting went great.  (Here is the group forming)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-dxMs__LN2zs/ThXDHzrxB4I/AAAAAAAAAKc/LciONk6j7PA/s1600-h/006%25255B7%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="006" border="0" alt="006" src="http://lh5.ggpht.com/-d2qbGwf5mU4/ThXDJHcLO_I/AAAAAAAAAKg/O0Um6nMKQlg/006_thumb%25255B4%25255D.jpg?imgmax=800" width="331" height="250" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Thank you all for coming and participating&lt;/p&gt;  &lt;p&gt;Elad Sofer&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-WLi4tnipaSw/ThXDJ0Qi3KI/AAAAAAAAAKk/z-th1D3_Eds/s1600-h/008%25255B3%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="008" border="0" alt="008" src="http://lh5.ggpht.com/-Vq1tIZbdc2E/ThXDK3kgZCI/AAAAAAAAAKo/OX4rDXYK6UY/008_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;which seems to be enjoying himself here, just &lt;a href="http://blog.thescrumster.com/archives/564"&gt;blogged&lt;/a&gt; about it and I couldn’t have said it any better than myself.&lt;/p&gt;  &lt;p&gt;I will only talk about the second part of the meeting.&lt;/p&gt;  &lt;p&gt;During this part, we tried to get a feeling on where the group would like to take this forum/meeting/activity.&lt;/p&gt;  &lt;p&gt;W attempted to gather some ideas on the following:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;What content would we like to discuss&lt;/li&gt;    &lt;li&gt;How we would like o conduct these sessions&lt;/li&gt;    &lt;li&gt;who would we like to hear talking.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;and after some discussion and debate:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-I5bHhWV_BQA/ThXDLoJVhnI/AAAAAAAAAKs/meGLK--Ex34/s1600-h/009%25255B3%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="009" border="0" alt="009" src="http://lh3.ggpht.com/-ZyHngZv6Epw/ThXDMLgR7uI/AAAAAAAAAKw/RZZok35o4bo/009_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;    &lt;a href="http://lh6.ggpht.com/-IYPaeYA0RMc/ThXDMw3hyaI/AAAAAAAAAK0/AB1NdmVhkvs/s1600-h/012%25255B4%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="012" border="0" alt="012" src="http://lh3.ggpht.com/-NMZ5DvU7lfY/ThXDNd6cnsI/AAAAAAAAAK4/fNHjLrGcSwg/012_thumb%25255B1%25255D.jpg?imgmax=800" width="303" height="233" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Here are our main “finding”&lt;/p&gt;  &lt;h3&gt;Topics of Interest&lt;/h3&gt;  &lt;p&gt;The four winning topics are:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-p_0OxlPxvYw/ThXDOfvnbfI/AAAAAAAAAK8/1NJU_5VVo7Q/s1600-h/014%25255B3%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="014" border="0" alt="014" src="http://lh5.ggpht.com/-GVn7oto9QpA/ThXDPKTnMwI/AAAAAAAAALA/Dka6Zjq6mX0/014_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Continuous Deployment&lt;/li&gt;    &lt;li&gt;Agile for Executive (how to convince and how to include them in the process)&lt;/li&gt;    &lt;li&gt;Agile in Enterprises&lt;/li&gt;    &lt;li&gt;How to start the development of a new product using an agile method&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;the runner-up topics were:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-rVxgVH19Gkw/ThXDPo0x6xI/AAAAAAAAALE/WEjPQ8tms8o/s1600-h/013%25255B3%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="013" border="0" alt="013" src="http://lh3.ggpht.com/-EQijtf24PLs/ThXDQnnfbJI/AAAAAAAAALI/M1FRhvs3V8M/013_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;choosing content for a sprint&lt;/li&gt;    &lt;li&gt;Agile in none SW development projects (support, Maintenance, IT,…)&lt;/li&gt;    &lt;li&gt;Scrum in details + real life experience&lt;/li&gt;    &lt;li&gt;dealing with the Integration phase in an Agile process.&lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;How to conduct these meetings&lt;/h3&gt;  &lt;p&gt;About the how, the consensus was that a session which is divided into two parts in which one is a lecture and one is an activity based was great.&lt;/p&gt;  &lt;p&gt;another idea was as follows:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;1/3 Presentation&lt;/li&gt;    &lt;li&gt;1/3 collecting ideas for discussion and choosing which ones to discuss&lt;/li&gt;    &lt;li&gt;1/3 Discussions in small groups on the above&lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Who would we like to hear&lt;/h3&gt;  &lt;p&gt;and last on the who front we got 2 local names &lt;a href="http://osherove.com/"&gt;Roy Osherove&lt;/a&gt; and &lt;a href="http://lnbogen.com/"&gt;Oren Ellenbogen&lt;/a&gt; (consider yourself invited), and two international speakers: Martin Fowler, Alistair Cockburn (I wonder if we can get on of them to visit)&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;and just before I forget, I would like to thanks everyone who helped make this group come into life.&lt;/p&gt;  &lt;p&gt;Especially &lt;a href="http://blog.thescrumster.com/"&gt;Elad&lt;/a&gt; and &lt;a href="http://kirschilan.wordpress.com/"&gt;Ilan&lt;/a&gt; who partnered up with me, and really did most of the work to create this group. To &lt;a href="http://weblogs.asp.net/israelio/"&gt;Ohad&lt;/a&gt; Israeli and Nice for hosting the event giving us their excellent facilities to conduct this meeting. and Last to &lt;a href="http://www.typemock.com/"&gt;Typemock&lt;/a&gt; who sponsored the event and made sure we wont stay hungry&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215962051788443675-3205640097088504954?l=imistaken.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=V14R4AVexEQ:sJRO_lBFOQg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=V14R4AVexEQ:sJRO_lBFOQg:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Imistaken/~4/V14R4AVexEQ" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Imistaken/~3/V14R4AVexEQ/agile-practitioner-il-first-meeting.html</link><author>noreply@blogger.com (Lior Friedman:)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-d2qbGwf5mU4/ThXDJHcLO_I/AAAAAAAAAKg/O0Um6nMKQlg/s72-c/006_thumb%25255B4%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://imistaken.blogspot.com/2011/07/agile-practitioner-il-first-meeting.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4215962051788443675.post-7838445673263302924</guid><pubDate>Tue, 05 Jul 2011 08:08:00 +0000</pubDate><atom:updated>2011-07-05T13:04:31.285-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Course</category><category domain="http://www.blogger.com/atom/ns#">TDD</category><title>TDD .NET Course</title><description>&lt;p&gt;Next month &lt;strike&gt;(starting on August the 8th)&lt;/strike&gt; (Starting on August the 14th) I’ll be conducting a public “&lt;a href="http://www.liorfriedman.com/training/tdd/tdd-net"&gt;TDD .NET&lt;/a&gt;” course . Registration is now open for everyone,  so  go &lt;a href="http://www.liorfriedman.com/blabla?layout=blog"&gt;&lt;b&gt;&lt;span class="Apple-style-span"&gt;here&lt;/span&gt;&lt;/b&gt;&lt;/a&gt; and book your place.&lt;/p&gt;  &lt;p&gt;The course &lt;strong&gt;TDD.NET&lt;/strong&gt; is based on practical experience and lesson learnt gathered over the past several years. The course main goal is teach basic concepts of TDD practitioners while giving participants enough practical knowledge to start practicing on their own.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215962051788443675-7838445673263302924?l=imistaken.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=gJSboG2aKKY:KAQ5qO-gCDg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=gJSboG2aKKY:KAQ5qO-gCDg:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Imistaken/~4/gJSboG2aKKY" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Imistaken/~3/gJSboG2aKKY/tdd-net-course.html</link><author>noreply@blogger.com (Lior Friedman:)</author><thr:total>4</thr:total><feedburner:origLink>http://imistaken.blogspot.com/2011/07/tdd-net-course.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4215962051788443675.post-66645410060109617</guid><pubDate>Tue, 28 Jun 2011 06:19:00 +0000</pubDate><atom:updated>2011-06-27T23:41:03.127-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Scrum</category><category domain="http://www.blogger.com/atom/ns#">Conferences</category><category domain="http://www.blogger.com/atom/ns#">Agile Principles</category><title>5 Reasons for Doing Scrum</title><description>&lt;p&gt;A while back ago I gave a talk about what are the main benefits any organization should expect when changing its process into an agile (Scrum) process.&lt;/p&gt;  &lt;p&gt;Here is the recording of that session. Its about 50 minutes long and its in Hebrew. &lt;/p&gt;  &lt;p&gt;Hope you enjoy it &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:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:ac0b982f-8d2c-4286-8fa9-b7888b38bd5f" class="wlWriterEditableSmartContent"&gt;&lt;div&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="437" height="370" id="viddler_friedmal_3"&gt;&lt;param name="movie" value="http://www.viddler.com/player/77a5b470/"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;param name="allowNetworking" value="all"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="flashVars" value="f=1&amp;amp;autoplay=f&amp;amp;disablebranding=f"&gt;&lt;embed src="http://www.viddler.com/player/77a5b470/" width="437" height="370" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" allownetworking="all" name="viddler_friedmal_3" flashvars="f=1&amp;amp;autoplay=f&amp;amp;disablebranding=f"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215962051788443675-66645410060109617?l=imistaken.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=lJxVOH1pkFM:WzhCQpL5qvk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=lJxVOH1pkFM:WzhCQpL5qvk:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Imistaken/~4/lJxVOH1pkFM" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Imistaken/~3/lJxVOH1pkFM/5-reasons-for-doing-scrum.html</link><author>noreply@blogger.com (Lior Friedman:)</author><thr:total>1</thr:total><feedburner:origLink>http://imistaken.blogspot.com/2011/06/5-reasons-for-doing-scrum.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4215962051788443675.post-6527371250878180221</guid><pubDate>Mon, 13 Jun 2011 14:39:00 +0000</pubDate><atom:updated>2011-06-13T07:40:41.624-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Events</category><category domain="http://www.blogger.com/atom/ns#">Agile Practitioners IL</category><title>Open session With Jurgen Appelo</title><description>&lt;p&gt;As a prequel to the first &lt;a href="http://www.linkedin.com/groups?home=&amp;amp;gid=81807&amp;amp;trk=anet_ug_hm&amp;amp;goback=%2Egmp_81807"&gt;Agile Practitioners IL&lt;/a&gt; group &lt;a href="http://imistaken.blogspot.com/2011/06/new-agile-user-group-first-meeting.html"&gt;meeting&lt;/a&gt; (register &lt;a href="http://www.eventbrite.com/event/1774314021"&gt;here&lt;/a&gt;). &lt;a href="http://www.jurgenappelo.com/"&gt;Jurgen Appleo&lt;/a&gt; has kindly offered to give a short, one hour, session during his visit next week. I know this is a very short notice but knowing Jurgen, I’m sure it be worth while.&lt;/p&gt;  &lt;p&gt;The event is limited in space so for further details and registration go &lt;a href="http://www.linkedin.com/news?viewArticle=&amp;amp;articleID=573965966&amp;amp;gid=81807&amp;amp;type=member&amp;amp;item=57771534&amp;amp;articleURL=http%3A%2F%2Fevents%2Elinkedin%2Ecom%2FAgile-practioners-IL-Jurgen-appelo%2Fpub%2F697897&amp;amp;urlhash=8Fwj&amp;amp;goback=%2Egmp_81807%2Egde_81807_member_57771534"&gt;here&lt;/a&gt;. And don’t forget that we would still like to see you all at the first formal group kick off meeting.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215962051788443675-6527371250878180221?l=imistaken.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=MhqqjsgweJg:UEWxSPhVOR0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=MhqqjsgweJg:UEWxSPhVOR0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Imistaken/~4/MhqqjsgweJg" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Imistaken/~3/MhqqjsgweJg/open-session-with-jurgen-appelo.html</link><author>noreply@blogger.com (Lior Friedman:)</author><thr:total>1</thr:total><feedburner:origLink>http://imistaken.blogspot.com/2011/06/open-session-with-jurgen-appelo.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4215962051788443675.post-8847929035350019693</guid><pubDate>Mon, 06 Jun 2011 11:53:00 +0000</pubDate><atom:updated>2011-06-06T05:16:07.834-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Events</category><category domain="http://www.blogger.com/atom/ns#">Scrum</category><category domain="http://www.blogger.com/atom/ns#">Conferences</category><title>Video of my talk at “QA &amp; Development In Agile” conference</title><description>&lt;p&gt;Last month I spoke at “QA &amp;amp; Development in Agile” gathering. &lt;a href="http://sela.co.il/"&gt;SELA&lt;/a&gt; were kind enough to video my talk and to make it avail;able online.&lt;/p&gt;  &lt;p&gt;Details about the talk (with the actual slides) can be found &lt;a href="http://imistaken.blogspot.com/2011/05/my-presentation-at-qa-and-development.html"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;and if you want to tune in and listen to the actual talk (about 30 minutes in Hebrew) you can do it &lt;a href="http://scc.sela.co.il/SCC/Pages/ShowLecture/ShowLecture.aspx?lectureId=539"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Also I would appreciate any feedback you can share. So feel free to add your comments.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215962051788443675-8847929035350019693?l=imistaken.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=W3e0UrkeZTk:Wjb8OXxahjI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=W3e0UrkeZTk:Wjb8OXxahjI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Imistaken/~4/W3e0UrkeZTk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Imistaken/~3/W3e0UrkeZTk/video-of-my-talk-at-qa-development-in.html</link><author>noreply@blogger.com (Lior Friedman:)</author><thr:total>0</thr:total><feedburner:origLink>http://imistaken.blogspot.com/2011/06/video-of-my-talk-at-qa-development-in.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4215962051788443675.post-2018282628435915547</guid><pubDate>Sun, 05 Jun 2011 15:04:00 +0000</pubDate><atom:updated>2011-06-05T08:08:09.034-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Events</category><category domain="http://www.blogger.com/atom/ns#">Agile Practitioners IL</category><title>New Agile User Group – First Meeting</title><description>&lt;p&gt;I‘ve been wanting for quite some time now to setup a monthly meeting for people &lt;a href="http://lh6.ggpht.com/-sf9EGYvffn0/Teua3NDmylI/AAAAAAAAAKM/YIjuqEk4a5I/s1600-h/my_Logo%25255B3%25255D.png"&gt;&lt;img style="display: inline; float: right" title="my_Logo" alt="my_Logo" align="right" src="http://lh3.ggpht.com/-eY0TKKq5BH8/Teua4DOfmXI/AAAAAAAAAKQ/Hb8O261Otnw/my_Logo_thumb%25255B1%25255D.png?imgmax=800" width="240" height="108" /&gt;&lt;/a&gt;who are interested in Agile. Since the demise of “Agile Israel” meetings I haven’t seen any sersiou sattempt of setting such a group, although I feel that many in the industry are interested . Therefore I would like to invite you over to the first group meeting of the “Agile Practitioners IL” . &lt;/p&gt;  &lt;p&gt;This session subject will be "Feedback". We will have Elad Sofer (which is also a co-founder of this group) talk about &lt;b&gt;"Feedback - The secret ingredient of success"&lt;/b&gt;, why feedback is so important for success and how it is used Since this is our first meeting we shall also try to gather feedback from participants on what else they would like to hear, and how they would like to see this monthly meeting evolve.&lt;/p&gt;  &lt;p&gt;If you want to get involved, please RSVP at &lt;a href="http://www.eventbrite.com/event/1774314021"&gt;http://www.eventbrite.com/event/1774314021&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;&lt;b&gt;Location:&lt;/b&gt; &lt;/h3&gt;  &lt;h3&gt;&lt;span style="font-size: 16px; font-weight: normal" class="Apple-style-span"&gt;Nice System&lt;/span&gt;&lt;/h3&gt;  &lt;h3&gt;&lt;span style="font-size: 16px; font-weight: normal" class="Apple-style-span"&gt;&lt;/span&gt;&lt;span style="font-size: 16px; font-weight: normal" class="Apple-style-span"&gt;Hapnina 8, Raanana.&lt;/span&gt;&lt;/h3&gt;  &lt;h3&gt;&lt;span style="font-size: 16px; font-weight: normal" class="Apple-style-span"&gt;&lt;/span&gt;&lt;/h3&gt; &lt;b&gt;   &lt;h3&gt;&lt;b&gt;Time:&lt;/b&gt; &lt;/h3&gt; &lt;/b&gt;  &lt;p&gt;Gathering starts at 17:30&lt;/p&gt;  &lt;p&gt;  &lt;br /&gt;You can join the Agile Practitioner IL group at &lt;a href="http://www.linkedin.com/groups/Scrum-Practitioner-Israel-81807?trk=myg_ugrp_ovr"&gt;http://www.linkedin.com/groups/Scrum-Practitioner-Israel-81807?trk=myg_ugrp_ovr&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;Food and drinks are sponsored by &lt;a href="http://www.typemock.com/"&gt;Typemock LTD&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-uSCa27O-P8w/Teua41xu8uI/AAAAAAAAAKU/HZiZyNP1NKc/s1600-h/clip_image002%25255B3%25255D.gif"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 4px 4px 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://lh6.ggpht.com/-puKmOzEwuvg/Teua5q3QZZI/AAAAAAAAAKY/fC9GNiekjoI/clip_image002_thumb.gif?imgmax=800" width="240" height="59" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215962051788443675-2018282628435915547?l=imistaken.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=4TqPyhgMFrA:YOJioaoSthg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=4TqPyhgMFrA:YOJioaoSthg:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Imistaken/~4/4TqPyhgMFrA" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Imistaken/~3/4TqPyhgMFrA/new-agile-user-group-first-meeting.html</link><author>noreply@blogger.com (Lior Friedman:)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-eY0TKKq5BH8/Teua4DOfmXI/AAAAAAAAAKQ/Hb8O261Otnw/s72-c/my_Logo_thumb%25255B1%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://imistaken.blogspot.com/2011/06/new-agile-user-group-first-meeting.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4215962051788443675.post-3444287426100174529</guid><pubDate>Wed, 01 Jun 2011 06:56:00 +0000</pubDate><atom:updated>2011-05-31T23:59:13.971-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">IDE</category><title>Flaw in SolutionContexts.GetEnumerator</title><description>&lt;p&gt;I’m guessing that this post will be useful to a very small number of people if at all. However there might be a bigger lesson here for people writing their own collections and that is how not to code GetEnumerator method.&lt;/p&gt;  &lt;p&gt;but first some background information.&lt;/p&gt;  &lt;p&gt;when working with a visual studio add-in I needed find out weather a specific project is excluded from the build cycle.&lt;/p&gt;  &lt;p&gt;the DTE provide interfaces and object to access this info and the code I ended up with looked like this:&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (SolutionContext context &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; &lt;/pre&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;    ApplicationObject.Solution.SolutionBuild.&lt;/pre&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;        ActiveConfiguration.SolutionContexts)&lt;/pre&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt; {&lt;/pre&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (context.ProjectName.Contains(project.Name))&lt;/pre&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; !context.ShouldBuild;&lt;/pre&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;However, this code resulted in an exception popping from time to time which took me a little while to understand.&lt;br /&gt;&lt;br /&gt;the exception I got was :&lt;br /&gt;&lt;blockquote&gt;  &lt;p&gt;System.ArgumentException&lt;br /&gt;The parameter is incorrect. (Exception from HRESULT: 0x80070057 (E_INVALIDARG))&lt;br /&gt;System.Collections.IEnumerator GetEnumerator()&lt;br /&gt;   at EnvDTE.SolutionContexts.GetEnumerator()&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;where the line number pointed to the foreach statement.&lt;/p&gt;&lt;p&gt;After some digging I found that this happens if in the solution you have an unloaded project as part of the solution. and the fix was quite simple jut replace the foreach with a simple for resulting in something like:&lt;/p&gt;&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; var contexts = ApplicationObject.Solution.&lt;/pre&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;    SolutionBuild.ActiveConfiguration.&lt;/pre&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;    SolutionContexts;&lt;/pre&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;  &lt;/pre&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; i = 0; i &amp;lt; contexts.Count; i++)&lt;/pre&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt; {&lt;/pre&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;try&lt;/span&gt;&lt;/pre&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;     {&lt;/pre&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;         var context = contexts.Item(i + 1);&lt;/pre&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (context.ProjectName.Contains(project.Name))&lt;/pre&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; !context.ShouldBuild;&lt;/pre&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt;     }&lt;/pre&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (ArgumentException)&lt;/pre&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt;  14:&lt;/span&gt;     {&lt;/pre&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt;  15:&lt;/span&gt;         &lt;span style="color: #008000"&gt;//this is thrown when a project is unloaded&lt;/span&gt;&lt;/pre&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum16"&gt;  16:&lt;/span&gt;     }&lt;/pre&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum17"&gt;  17:&lt;/span&gt; }&lt;/pre&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum18"&gt;  18:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Now I can understand why an unloaded project will throw an exception if you try to access its configuration data. What I don’t understand is why they didn’t handle this inside the GetEnumerator and instead choose to crash it as well.&lt;br /&gt;&lt;br /&gt;I think this is a &lt;em&gt;mistake, &lt;/em&gt;in general if a piece of the information is missing don’t fail the entire operation just exclude that piece from the result.&lt;em&gt; &lt;/em&gt;that way you will enable the user to decide what to do with the info he does have.&lt;br /&gt;&lt;p&gt;what do you think?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215962051788443675-3444287426100174529?l=imistaken.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=JOMALVLPkh0:RqL9cRo0Ii8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=JOMALVLPkh0:RqL9cRo0Ii8:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Imistaken/~4/JOMALVLPkh0" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Imistaken/~3/JOMALVLPkh0/flaw-in-solutioncontextsgetenumerator.html</link><author>noreply@blogger.com (Lior Friedman:)</author><thr:total>4</thr:total><feedburner:origLink>http://imistaken.blogspot.com/2011/05/flaw-in-solutioncontextsgetenumerator.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4215962051788443675.post-3394594122765946677</guid><pubDate>Thu, 26 May 2011 08:49:00 +0000</pubDate><atom:updated>2011-05-26T01:50:33.683-07:00</atom:updated><title>Don’t you love useful error messages?</title><description>&lt;p&gt;&lt;a href="http://lh5.ggpht.com/-fDoFgKbcxFQ/Td4UArjQctI/AAAAAAAAAKE/DMqQU6nlMg0/s1600-h/image%25255B3%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-BP4Y7EO6-4M/Td4UB8dvxwI/AAAAAAAAAKI/gaPCgYrzHIY/image_thumb%25255B1%25255D.png?imgmax=800" width="715" height="285" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;Ok now what?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215962051788443675-3394594122765946677?l=imistaken.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=Pviwos8-9Q8:sHc60dtQTOM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Imistaken?a=Pviwos8-9Q8:sHc60dtQTOM:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Imistaken?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Imistaken/~4/Pviwos8-9Q8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Imistaken/~3/Pviwos8-9Q8/dont-you-love-useful-error-messages.html</link><author>noreply@blogger.com (Lior Friedman:)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-BP4Y7EO6-4M/Td4UB8dvxwI/AAAAAAAAAKI/gaPCgYrzHIY/s72-c/image_thumb%25255B1%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://imistaken.blogspot.com/2011/05/dont-you-love-useful-error-messages.html</feedburner:origLink></item></channel></rss>

