<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/atom10full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"><id>tag:blogger.com,1999:blog-24663619</id><updated>2008-04-08T12:23:41.994-07:00</updated><title type="text">Business Analysis</title><link rel="alternate" type="text/html" href="http://agileanalysis.blogspot.com/" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://agileanalysis.blogspot.com/feeds/posts/default" /><author><name>Akshay Dhavle</name><uri>http://www.blogger.com/profile/03105245771080772055</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>19</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="self" href="http://feeds.feedburner.com/agilebusinessanalysis" type="application/atom+xml" /><entry><id>tag:blogger.com,1999:blog-24663619.post-5306871132175690796</id><published>2008-04-08T12:14:00.000-07:00</published><updated>2008-04-08T12:23:42.061-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="lean" /><category scheme="http://www.blogger.com/atom/ns#" term="user stories" /><category scheme="http://www.blogger.com/atom/ns#" term="estimation" /><category scheme="http://www.blogger.com/atom/ns#" term="sizing" /><title type="text">Size or Estimate</title><content type="html">&lt;div style="text-align: justify;"&gt;Estimation, I think, has been one of the biggest problems of mankind. The Software development industry is no exception to this sad reality. We almost never seem to get it right.&lt;br /&gt;&lt;br /&gt;The problem with the word "estimate" is that it's personal. It's relative to the person who is estimating. Moreover, it's a unit of time. That is why I prefer "sizing" stories rather than estimating them. Size is a non disputed (standard) unit, which measures the level of complexity involved in developing a piece of functionality, a story. The size is standard across a particular project team.&lt;br /&gt;&lt;br /&gt;Pizzas are a great example of standard size. They come in small, medium and large sizes and, given the context of the vendor, the whole world knows what a small pizza means.&lt;br /&gt;&lt;br /&gt;Pizza Appetite is the capacity to consume pizzas. A 5 year old will find a small pizza to big to eat. A teenager will probably find it perfectly filling. At 25, I find the small pizza too small. I can comfortably eat a medium pizza (or 2 small pizzas). I am sure there are people I don't know who can eat nothing less than a large pizza (or 4 small pizzas)!!&lt;br /&gt;&lt;br /&gt;Stories are like pizzas. Given the context of a project, they have fixed sizes. As a developer spends more time on a project, getting older (and wiser), his/her capacity to develop complex stories increases. And this is where the trouble starts. At the beginning of the project the developer could do 1 small story every day. But now, instead of realizing that he can do a medium story (or 2 small stories) in a day, he begins to think that the medium story is actually a small one. The thing to remember is that the size of the story remains the same. It's just that the developer can now do more complex stuff in a given time.&lt;br /&gt;&lt;br /&gt;Complexity points are never to be estimated (in fact they can't be estimated because they are not relative to individuals). In the OLAP terminology, complexity points are the fact. An estimate is a calculation you (as an individual) do when you are looking at them from the Time dimension.&lt;br /&gt;&lt;br /&gt;So if you are estimating units of time, it makes sense for you to re-estimate so that you take into account your improved understanding of the system.&lt;br /&gt;&lt;br /&gt;When you are sizing stories in complexity points be very careful not to fall in this trap. Re-sizing even sounds wrong anyway.&lt;br /&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/agilebusinessanalysis/~3/266551315/size-or-estimate.html" title="Size or Estimate" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=24663619&amp;postID=5306871132175690796" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://agileanalysis.blogspot.com/feeds/5306871132175690796/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/5306871132175690796" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/5306871132175690796" /><author><name>Akshay Dhavle</name><uri>http://www.blogger.com/profile/03105245771080772055</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://agileanalysis.blogspot.com/2008/04/size-or-estimate.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-24663619.post-690741041759300685</id><published>2008-02-15T00:36:00.000-08:00</published><updated>2008-02-14T11:07:17.409-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="goals" /><category scheme="http://www.blogger.com/atom/ns#" term="lean" /><title type="text">Functional Goals</title><content type="html">&lt;div style="text-align: justify;"&gt;After &lt;a href="http://agileanalysis.blogspot.com/2008/02/iterationless.html"&gt;this&lt;/a&gt; post, I have had a number of conversations with people about what I really meant by setting functional targets instead of story point (velocity) targets. In one such discussion, I was given an example where someone set a goal to run for 90 minutes!!&lt;br /&gt;&lt;br /&gt;At first glance you might not find the last statement worth the exclamation marks at the end of it. But this is exactly the difference between functional targets and velocity targets. I think it's wrong to set a target of running for 90 minutes. The real goal is to burn X number of calories. Or to travel X number of kilometers.&lt;br /&gt;&lt;br /&gt;Once you set your goal right, you are open to find better ways of achieving it. If your goal is burning calories, you'd probably do it better (faster) by skipping rope for 30 minutes than by running for 90 minutes.&lt;br /&gt;&lt;br /&gt;Now all you have to worry about is&lt;br /&gt;&lt;ul&gt;&lt;li&gt;the &lt;span style="font-weight: bold;"&gt;rate&lt;/span&gt; at which you are actually burning calories AND&lt;br /&gt;&lt;/li&gt;&lt;li&gt;what can you do to &lt;span style="font-weight: bold;"&gt;improve this rate&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;So instead of planning to complete 30 points next iteration (going by yesterday's weather, etc), I'd plan to achieve a set of features and keep optimizing the rate at which I am able to produce features assuming that I never compromise quality in wake of going faster.&lt;br /&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/agilebusinessanalysis/~3/235118184/functional-goals.html" title="Functional Goals" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=24663619&amp;postID=690741041759300685" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://agileanalysis.blogspot.com/feeds/690741041759300685/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/690741041759300685" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/690741041759300685" /><author><name>Akshay Dhavle</name><uri>http://www.blogger.com/profile/03105245771080772055</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://agileanalysis.blogspot.com/2008/02/functional-goals.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-24663619.post-3475161614840061824</id><published>2008-02-12T21:46:00.000-08:00</published><updated>2008-02-12T09:22:50.364-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="lean" /><category scheme="http://www.blogger.com/atom/ns#" term="estimation" /><category scheme="http://www.blogger.com/atom/ns#" term="distributed lean" /><title type="text">Iterationless...</title><content type="html">&lt;div style="text-align: justify;"&gt;After working in week-long iterations for 2 and a half years, going iterationless left me a little confused on my recent project. Of course when I say iterationless, I mean using extremely small iterations to bring in a flow to stories. Lean? Distributed Lean, maybe?&lt;br /&gt;&lt;br /&gt;Firstly, I like the idea of trying something new. The team being small and the project being developed in ruby helps this experiment a lot. There are, however, somethings missing in this way of working. I'll list them down and give my view on each of them in this post.&lt;br /&gt;&lt;br /&gt;To realize what we missed, let's look at what we get from iterations. The following are the main motives behind iterations.&lt;br /&gt;&lt;/div&gt;&lt;ol style="text-align: justify;"&gt;&lt;li&gt;Celebrate small successes&lt;/li&gt;&lt;li&gt;Get regular feedback from clients (showcases)&lt;/li&gt;&lt;li&gt;Let the whole team know what we will be focusing on in the next iteration, including the business context around it (Iteration Planning Meeting)&lt;/li&gt;&lt;li&gt;Re-estimate stories based on additional information gathered during the earlier development (Iteration Planning Meeting)&lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;So let's see how we are trying to handle each of these situations.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;1. Celebrate small successes.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;This is very important. To look back and realize that we actually celebrated achieving a story-point targets each iteration, however, now sounds really lame. The moment you move your focus away from finishing a set of stories in a given time TO finishing a set of features and going to production, the world starts making more sense.&lt;br /&gt;&lt;div style="text-align: justify;"&gt; &lt;br /&gt;I think in this aspect chucking iterations totally makes sense. What this means is you should have a very strong release plan, with frequent (less than a month long) releases.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;2. Getting regular feedback from clients&lt;/span&gt;&lt;br /&gt;Showcases have nothing to do with iterations. Iterations only provide regularity to showcases. To say that we will do showcases once a week (and do it) is I think good enough.&lt;br /&gt;&lt;br /&gt;One thing to beware of is that showcases-bound-to-timelines (once a week) and development-bound-to-releases (of irregular time intervals) can be quite tricky to handle.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;3. Let the whole team know what the focus of the next iteration is&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Ours being a small (ideal?) team, I don't see too many problems in this area.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;4. Re-estimate stories based on new knowledge&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;This, I thought, was the most important aspect we were missing out. But once you realize that your story point sizing is only relative to any other story you estimated, the world seems much better. This means that as long as your triangulation is correct, you are ok.&lt;br /&gt;&lt;br /&gt;One thing that IPMs give us though, is an opportunity for the whole team to estimate together. Right now I am unsure of how important this method is. I am posting a few questions related to this at the end of this post. It'll be great to get some feedback on these.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;All in all I think going iterationless is beneficial in terms of:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Shifting the team's focus from story points to features / business value.&lt;/li&gt;&lt;li&gt;Letting the team focus on estimating complexity of stories much more clearly.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;What I am unclear about is estimation.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;If we spend 2 hours every week to estimate together, are we going against lean philosophy?&lt;/li&gt;&lt;li&gt;On the contrary, if we estimate just-in-time, in smaller groups (pair to work on the story) are we losing the "group touch" to estimation?&lt;/li&gt;&lt;li&gt;Also if we estimate just-in-time (when we decide to play a story), the business doesn't get an opportunity to re-prioritize based on sizing.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/agilebusinessanalysis/~3/233834699/iterationless.html" title="Iterationless..." /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=24663619&amp;postID=3475161614840061824" title="2 Comments" /><link rel="replies" type="application/atom+xml" href="http://agileanalysis.blogspot.com/feeds/3475161614840061824/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/3475161614840061824" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/3475161614840061824" /><author><name>Akshay Dhavle</name><uri>http://www.blogger.com/profile/03105245771080772055</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://agileanalysis.blogspot.com/2008/02/iterationless.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-24663619.post-2763548331442826525</id><published>2007-11-29T04:03:00.000-08:00</published><updated>2008-01-24T07:48:03.108-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="Analyst" /><category scheme="http://www.blogger.com/atom/ns#" term="business" /><title type="text">Agile Business Analysts</title><content type="html">&lt;div style="text-align: justify;"&gt;Yesterday, Craig Brown asked &lt;a href="http://betterprojects.blogspot.com/2007/11/do-we-need-agile-business-analysts.html"&gt;Do we need Agile Business Analysts?&lt;/a&gt;. Two and a half years back when I joined &lt;a href="http://www.thoughtworks.com"&gt;ThoughtWorks&lt;/a&gt;, I would have said "No, we don't". Today I strongly disagree with the view that Business Analysts can be done away with on Agile projects.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The objective of an Agile project is to provide maximum value to the client as soon as possible.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Now I agree that the ideal situation would be when you have business users &amp;amp; developers who agree and abide by this sentiment. You can happily get rid of the BA in such a situation. Real life, for some reason, is never ideal.&lt;br /&gt;&lt;br /&gt;Anyone who has interacted with business users on a medium to large project will have faced situations where it has been hard for the business users to come to a consensus on what they want. Business users are generally representatives of different functions of the organization. Each of them has expectations from the application which more often than not are conflicting. Keeping these users focused on what we set to achieve when we started building the software is what a BA does.&lt;br /&gt;&lt;br /&gt;Being on an agile project gives the business users many chances to dream, many chances to make changes. Developers are human too. They dream about technology. While sometimes this can lead to some really cool/unique/usable feature in the product, it can also lead to "overcoolified unnecessities". Now in an ideal situation, all these dreams would come true. Unfortunately, dreams in the real world are bound by budgets &amp;amp; deadlines. Managing these dreams, ideas, changes so as to keep them aligned to the original business objective and deliver most value in the given time and budget is what a BA does.&lt;br /&gt;&lt;br /&gt;What agile aims at, is to start minimal and change as required. When a small bug on a story turns out to be a big chunk of enhanced functionality, we create a new story. The tasks mentioned above, along with writing user stories, supporting implementation of the functionality, planning the iterations and releases, testing the developed functionality, etc. together makes for a considerable chunk of work. That's when you create a seperate role called Business Analysts.&lt;br /&gt;&lt;br /&gt;Now this role can definitely be performed by developers. In my experience, though, good developers don't really want to do any of this. They want to write good code. That's what they are best at. That's where they will deliver maximum value.&lt;br /&gt;&lt;br /&gt;Hence Business Analysts.&lt;br /&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/agilebusinessanalysis/~3/225874754/agile-business-analysts.html" title="Agile Business Analysts" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=24663619&amp;postID=2763548331442826525" title="8 Comments" /><link rel="replies" type="application/atom+xml" href="http://agileanalysis.blogspot.com/feeds/2763548331442826525/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/2763548331442826525" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/2763548331442826525" /><author><name>Akshay Dhavle</name><uri>http://www.blogger.com/profile/03105245771080772055</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://agileanalysis.blogspot.com/2007/11/agile-business-analysts.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-24663619.post-7104460706049962897</id><published>2007-02-14T11:32:00.000-08:00</published><updated>2007-02-14T12:09:54.075-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="integration" /><category scheme="http://www.blogger.com/atom/ns#" term="usability" /><title type="text">StubbornSoft &amp; MammothSoft</title><content type="html">&lt;span style="font-style: italic;font-family:lucida grande;" &gt;I met a couple of villains today &lt;/span&gt;&lt;span style="font-style: italic;font-family:lucida grande;" &gt;&lt;br /&gt;a formidable lot. &lt;/span&gt;&lt;span style="font-style: italic;font-family:lucida grande;" &gt;&lt;br /&gt;StubbornSoft was one of them called,&lt;/span&gt;&lt;span style="font-style: italic;font-family:lucida grande;" &gt;&lt;br /&gt;the other was MammothSoft&lt;/span&gt;&lt;span style="font-style: italic;font-family:lucida grande;" &gt;&lt;br /&gt;&lt;br /&gt;StubbornSoft had it's own ways &lt;/span&gt;&lt;span style="font-style: italic;font-family:lucida grande;" &gt;&lt;br /&gt;for the user it didn't care. &lt;/span&gt;&lt;span style="font-style: italic;font-family:lucida grande;" &gt;&lt;br /&gt;MammothSoft would smugly say &lt;/span&gt;&lt;span style="font-style: italic;font-family:lucida grande;" &gt;&lt;br /&gt;"Try, change me if you dare."&lt;/span&gt;&lt;span style="font-style: italic;font-family:lucida grande;" &gt;&lt;br /&gt;&lt;br /&gt;In a moment I then realized &lt;/span&gt;&lt;span style="font-style: italic;font-family:lucida grande;" &gt;&lt;br /&gt;my dark and ugly fate. &lt;/span&gt;&lt;span style="font-style: italic;font-family:lucida grande;" &gt;&lt;br /&gt;When both of them cried out to me &lt;/span&gt;&lt;span style="font-style: italic;font-family:lucida grande;" &gt;&lt;br /&gt;Why, come let's integrate&lt;/span&gt;&lt;span style="font-style: italic;font-family:lucida grande;" &gt;&lt;br /&gt;&lt;br /&gt;We'll make a heavenly trio they said&lt;/span&gt;&lt;span style="font-style: italic;font-family:lucida grande;" &gt;&lt;br /&gt;our technologies cutting-edge &lt;/span&gt;&lt;span style="font-style: italic;font-family:lucida grande;" &gt;&lt;br /&gt;So smart piece of code as us &lt;/span&gt;&lt;span style="font-style: italic;font-family:lucida grande;" &gt;&lt;br /&gt;there'd ne'er be, we pledge&lt;/span&gt;&lt;span style="font-style: italic;font-family:lucida grande;" &gt;&lt;br /&gt;&lt;br /&gt;"I am quite small" to them said I, &lt;/span&gt;&lt;span style="font-style: italic;font-family:lucida grande;" &gt;&lt;br /&gt;"my features are too few. &lt;/span&gt;&lt;span style="font-style: italic;font-family:lucida grande;" &gt;&lt;br /&gt;But I let users do their job &lt;/span&gt;&lt;span style="font-style: italic;font-family:lucida grande;" &gt;&lt;br /&gt;and go home happy too"&lt;/span&gt;&lt;span style="font-style: italic;font-family:lucida grande;" &gt;&lt;br /&gt;&lt;br /&gt;"And what do we have to do with that?" &lt;/span&gt;&lt;span style="font-style: italic;font-family:lucida grande;" &gt;&lt;br /&gt;They asked to my dismay &lt;/span&gt;&lt;span style="font-style: italic;font-family:lucida grande;" &gt;&lt;br /&gt;"We were made to make the boss happy&lt;/span&gt;&lt;span style="font-style: italic;font-family:lucida grande;" &gt;&lt;br /&gt;not users anyway..."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);font-size:180%;" &gt;Software is for users&lt;/span&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/agilebusinessanalysis/~3/225874755/stubbornsoft-mammothsoft.html" title="StubbornSoft &amp; MammothSoft" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=24663619&amp;postID=7104460706049962897" title="4 Comments" /><link rel="replies" type="application/atom+xml" href="http://agileanalysis.blogspot.com/feeds/7104460706049962897/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/7104460706049962897" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/7104460706049962897" /><author><name>Akshay Dhavle</name><uri>http://www.blogger.com/profile/03105245771080772055</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://agileanalysis.blogspot.com/2007/02/stubbornsoft-mammothsoft.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-24663619.post-1346541247935579300</id><published>2006-12-03T21:44:00.000-08:00</published><updated>2008-01-24T07:48:16.283-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="patterns" /><category scheme="http://www.blogger.com/atom/ns#" term="user stories" /><title type="text">Mountains to climb</title><content type="html">&lt;span style="text-align:justify;"&gt;&lt;p&gt;Business Analysts work closely with the customer. Each new area is a challenge. There are discussions and problems and solutions. Both the analyst and the customer get comfortable with the idea of finding better, simpler solutions. This is especially true for fixed bid projects, as the project is at stake if the analyst fails to find a simpler solution and convince the customer too.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Solving problems is always exciting. For an analyst, this is the juicy part of the job, because no human being can survive for long just writing word documents one after the other. One incentive is customer delight, second is developer delight (scope reduction, etc). Of course the kick that an analyst gets out of solving a problem and offering a relatively simple solution is inexplicable.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;However, sometimes it happens so that the analyst gets stuck. There is a complex requirement that he/she gets from the customer and as usual the problem solving starts. The solution however seems complex. The situation is there right in front of him, all the scenarios are known and the functionality required to cover all these scenarios is just simply hugh. So the story is left half way through. More thought is put into the problem in wake of a simpler solution. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;What the analyst fails to realize is that there is no simpler solution. Sometimes there's a given amount of work and it just has to be done. The sooner this realization comes, the better.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The time spent on a given story is I think, the best indicator of such a situation. Just measure the average time you take for a story. Probably coupling it up with the dev (complexity) estimate would be even better. So if you are taking much more than this average time, there's somthing wrong. &lt;br/&gt;&lt;br/&gt;For Example: You take 6 days to analyze and write a (roughly) 3 point story. If you realize that this one story has gone on for 15 days, it's time to stop and think.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In case of such a situation,&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Firstly, raise the fact and see that the whole team knows about this hugh chunk of work coming. Have a domain session and share your knowledge.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Secondly, prioritize this area. Change the release plan if required. This will most probably turn out to be a risky area.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;And most importantly, start work as soon as possible. Just write a small, testable story and get the area kicked off. IMHO it is acceptable even if the story doesn't provide much value to the customer. It will provide value to the team by introducing an area.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;p&gt;It's like looking up at a mountain and thinking about a simpler way to reach to the top. Most of the times it's smart to start climbing.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;As someone has rightly said, &lt;i&gt;"Thought is supposed to be a guide for action. Not a substitute for it."&lt;/i&gt; &lt;/span&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/agilebusinessanalysis/~3/225874756/mountains-to-climb.html" title="Mountains to climb" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=24663619&amp;postID=1346541247935579300" title="2 Comments" /><link rel="replies" type="application/atom+xml" href="http://agileanalysis.blogspot.com/feeds/1346541247935579300/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/1346541247935579300" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/1346541247935579300" /><author><name>Akshay Dhavle</name><uri>http://www.blogger.com/profile/03105245771080772055</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://agileanalysis.blogspot.com/2006/12/mountains-to-climb.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-24663619.post-7204953949079316765</id><published>2006-12-02T19:41:00.000-08:00</published><updated>2008-01-24T07:48:26.613-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="user stories" /><title type="text">How to eat an elephant?</title><content type="html">&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:100%;"&gt;The only way to do that is to cut the elephant into slices. Slices which are small enough to be eaten because the sole purpose of cutting the elephant is to make it possible for humans to eat it.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;You'll need a certain number of people to eat a whole elephant anyway. If you make slices small enough, at least they won't feel sick at the end of it.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;There is no overhead in the activities of choosing the piece that looks most delicious, putting it in your mouth, chewing it and swallowing it. There is some, but it definitly beats having to swallow the elephant whole.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;So don't try to be subjective or pragmatic or take a case by case approach. Don't fool yourself.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="color: rgb(255, 0, 0);font-size:180%;font-weight: bold;" &gt;Write&lt;/span&gt; &lt;span style="font-size:100%;color: rgb(255, 0, 0);"&gt;small&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);font-size:180%;font-weight: bold;" &gt;stories.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:180%;" &gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/agilebusinessanalysis/~3/225874757/how-to-eat-elephant.html" title="How to eat an elephant?" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=24663619&amp;postID=7204953949079316765" title="1 Comments" /><link rel="replies" type="application/atom+xml" href="http://agileanalysis.blogspot.com/feeds/7204953949079316765/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/7204953949079316765" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/7204953949079316765" /><author><name>Akshay Dhavle</name><uri>http://www.blogger.com/profile/03105245771080772055</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://agileanalysis.blogspot.com/2006/12/how-to-eat-elephant.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-24663619.post-116102951518074181</id><published>2006-10-16T12:36:00.000-07:00</published><updated>2006-10-16T13:11:55.260-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="integration" /><title type="text">Applied Integration</title><content type="html">&lt;div style="text-align: justify;"&gt;&lt;span style="font-family:arial;"&gt;For a while, I have had a question on my mind that I couldn't really find an answer to. I had almost forgotten about it but a friend brought up the same question and before I knew it I was giving him my take on it. Before I get to the question though, I want to write a little about integration.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family:arial;"&gt;Last release I was involved in building some functionality to integrate with one of our client's systems. As I understand it, there are four prominent characteristics of integration that should be kept in mind when we decide to integrate systems.&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;  &lt;span style="font-weight: bold;"&gt;1.    Specialization&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;           Integration arises out of the need for specialized systems to come together to attain a common goal.&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;           Although each system can help in a unique way, none can achieve the goal by itself.&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;    &lt;span style="font-weight: bold;"&gt;2.    Communication&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;                &lt;span style="font-size:100%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;span style="text-decoration: underline;font-family:arial;" &gt;&lt;/span&gt;&lt;a style="font-family: arial;" href="http://jchyip.blogspot.com/2006/08/integration-is-communication.html"&gt;Integration is communication&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt; and all the rules of communication apply.&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;               - Common language&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;               - Interchange of information&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;            The goal of communication is to get to a win-win deal.   &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;            Communication is feedback, well, at least most of it and this feedback is the basis of integration&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;    &lt;span style="font-weight: bold;"&gt;3.    Functionality on both sides&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family:arial;"&gt;            There is functionality on the other side. You are integrating with a system because it has something to offer. The goal is to leverage the information / knowledge / functionality on both the sides in a lesser amount of time than is required for any of the systems to attain the goal by itself.&lt;br /&gt;&lt;br /&gt;If the Matrix is ever built (in a reasonable amount of time that is), it will be through integration of various specialized systems rather than all by itself.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;    &lt;span style="font-weight: bold;"&gt;4.    Compromise&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;            In order to communicate effectively, there is compromise required on both sides.&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;           These compromises are mostly in the form of language &amp; time.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;span style="font-family:arial;"&gt;I found myself using this understanding to explain my point of view to my friend. The question I was struggling with was,&lt;/span&gt;  &lt;span style="font-family:arial;"&gt;&lt;blockquote&gt;If I do my job right, will everything work itself out?&lt;/blockquote&gt;&lt;/span&gt; &lt;span style="font-family:arial;"&gt;    I readily realized that this was stupid. However right I did my job, I couldn't achieve anything in a reasonable amount of time. So I changed my question to,&lt;/span&gt;  &lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family:arial;"&gt;If we all do our jobs right, will everything work itself out?&lt;/span&gt;&lt;/blockquote&gt; &lt;div style="text-align: justify;"&gt;&lt;span style="font-family:arial;"&gt;    This seemed promising. But I realized that, my job is my specialization and that's true for all of us and when working together, feedback is important for us to know that we are doing our job right. Without this basic integration we are hopeless.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family:arial;"&gt;Any team brings in integration of many specialized systems. Developers, BAs, QAs, Project Managers &amp;amp; Clients, for example, in a software development team. To take part in this integration, communicate useful feedback and leverage each other's "special powers" by making necessary compromises is the only way to build the Matrix... Or for that matter a library management system. &lt;/span&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/agilebusinessanalysis/~3/225874758/applied-integration.html" title="Applied Integration" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=24663619&amp;postID=116102951518074181" title="2 Comments" /><link rel="replies" type="application/atom+xml" href="http://agileanalysis.blogspot.com/feeds/116102951518074181/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/116102951518074181" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/116102951518074181" /><author><name>Akshay Dhavle</name><uri>http://www.blogger.com/profile/03105245771080772055</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://agileanalysis.blogspot.com/2006/10/applied-integration.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-24663619.post-115601243648780352</id><published>2006-08-19T11:27:00.000-07:00</published><updated>2008-01-24T07:48:39.820-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="patterns" /><category scheme="http://www.blogger.com/atom/ns#" term="bunker busters" /><category scheme="http://www.blogger.com/atom/ns#" term="user stories" /><title type="text">Embracing Bunker Busters</title><content type="html">&lt;div style="text-align: justify;"&gt;For various reasons, there are situations when there is no running away from a Bunker Buster. An agile team should therefore be watchful. Once the analyst finds a potential bunker buster, he/she will have only one parameter to tweak... The timing. Embracing a bunker buster is a a brave step, I would say. But then isn't, bravery only relative to the preparation??&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Symptoms&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Here are some tips out of my experience for identifying bunker busters. Note that these symptoms do not decide a bunker buster individually. Like gesture-clusters in body language, they work in combinations.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Vagueness&lt;/span&gt;&lt;br /&gt;The first and most probable characteristic that you'll notice about a bunker buster is vagueness. This is not the same vagueness that you experience when you don't know the screen where particular information is captured. This is vagueness which has potential to change the way you have been thinking about the solution. Some fundamental assumptions about the way the user is going to use the application could be proven wrong at the and of your analysis. This brings us to the next characteristic, The Paradigm Shift...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Paradigm Shift&lt;/span&gt;&lt;br /&gt;Over a period of time in a project, the team develops an idea of how a user is going to use the application. A bunker buster has the potential of changing this basic usage paradigm. Let's take an example here.&lt;br /&gt;&lt;br /&gt;Imagine a phone book application. This application allows Adding, Editing, Viewing and Deleting phonebook entries. The team envisaged this application thus:&lt;br /&gt;- The user will search or browse the phone book to find a particular entry.&lt;br /&gt;- The user will then view the details of the selected entry.&lt;br /&gt;- The user then has the option to Edit or Delete an entry&lt;br /&gt;- The function for adding a new entry is available throughout.&lt;br /&gt;&lt;br /&gt;Now after some time into the project, the business and the analysts realized that the users that search, browse or view entries are different from the users that add, edit or delete entries. The solution was to select a mode while entering the application. The user would be able to only add entries in the "Add" mode. While the "View" mode would let users only view an entry.&lt;br /&gt;&lt;br /&gt;This is a paradigm shift. While most bunker busters we see in reality are not of this magnitude, I hope you get the idea.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Extra Long Analysis Phase&lt;/span&gt;&lt;br /&gt;Both the above lead to an unusually long analysis phase for this particular story. Another fact that contributes to this is the fear that there might be exceptions. While the new usage paradigm makes sense from the usability point of view, there might be functionality which will make less / no sense if the user is going to use the application in a different way!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Approach&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;To get consensus of all the stakeholders on this new paradigm, to clear up confusions, to find and take care of exceptions (if any) and to present all this in the form of a small, independent, testable and valuable story is a mammoth task. To make this a tad easier, here's a list of things to take care of when dealing with a bunker buster. I have divided this by stake holder because the underlying gist is to communicate constantly with everybody.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Client&lt;/span&gt;&lt;br /&gt;Communication with the client is always crucial. After sometime into a project analysts generally split into areas and so do the members of the client team. While handling a bunker buster however, constant communication with the complete client team is essential. I would include all business as well as technical users in this. End users, sponsors, client's system administrators, deployment team (in case you are building a product) and of course the complete client team that defines requirements. The shift in usage paradigm is a key decision on which you would need all kinds of input and a consensus from all the mentioned parties.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;BAs&lt;/span&gt;&lt;br /&gt;Other business analysts are the best people to talk to when it comes to finding exceptions. They will have complete knowledge of the respective areas that they are working on. Also, early communication of this kind will help them analyse the future functionality keeping the bunker buster in mind.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;QAs&lt;/span&gt;&lt;br /&gt;One thing that closely matches the way an application is going to be used is the functional test suite. Functional tests are the most valuable and the most fragile tests on a project. A bunker buster can render loads of them useless if they are not refactored to accommodate the new usage paradigm in time. Depending on the size of the functional test suite, the QAs will have to decide whether to refactor them or throw them away or leave them untouched. The QAs can leave the tests untouched if the application can provide useful hacks, like switching security off. Of course there are other functional tests that test security. Personally, I think this is the last resort. Functional tests should always be in sync with the way the application will be used.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Developers&lt;/span&gt;&lt;br /&gt;Communication with developers is of vital importance because a bunker buster has potential to change the domain model in unexpected ways. Validating the feasibility of the change and it's estimation is absolutely crucial. While the bunker buster is in play, I would suggest even pairing with the developers. One area where it will most hurt is the amount of detail in the story itself. Due to the long phase of analysis, accommodating all the detail in the final story is all the more difficult. Remember that while you are busy preparing this story for play, there is functionality being added to the application. I think this is one more place where it would be much better to leave the story at a high-level, do a careful kickoff and if possible pair up with the developers.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Timing&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;As mentioned before, timing is possibly the only parameter that we can tweak as a team and taking full advantage of this fact is very important. Due to the consequences mentioned above, I think it is best to play a bunker buster at the very beginning of a release. That way the UAT for the previous release can go smoothly. The team also gets a logical break point to adopt this new way of thinking about the solution... Mentally(analysis) as well as physically (code and tests).&lt;br /&gt;&lt;br /&gt;Scary as all this may sound, I guess successfully embracing changes like these is the ultimate value that an agile team delivers.&lt;br /&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/agilebusinessanalysis/~3/225874759/embracing-bunker-busters.html" title="Embracing Bunker Busters" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=24663619&amp;postID=115601243648780352" title="1 Comments" /><link rel="replies" type="application/atom+xml" href="http://agileanalysis.blogspot.com/feeds/115601243648780352/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/115601243648780352" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/115601243648780352" /><author><name>Akshay Dhavle</name><uri>http://www.blogger.com/profile/03105245771080772055</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://agileanalysis.blogspot.com/2006/08/embracing-bunker-busters.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-24663619.post-115549816310115464</id><published>2006-08-13T12:20:00.000-07:00</published><updated>2008-01-24T07:49:05.797-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="patterns" /><category scheme="http://www.blogger.com/atom/ns#" term="bunker busters" /><category scheme="http://www.blogger.com/atom/ns#" term="user stories" /><title type="text">Avoiding Bunker Busters</title><content type="html">&lt;div style="text-align: justify;"&gt;"Prevention is better than cure" and one good way of handling &lt;a href="http://agileanalysis.blogspot.com/2006/08/grenades-shells-bunker-busters.html"&gt;Bunker Busters&lt;/a&gt; is to avoid them. Agile teams seem to be wary of handling anything by prevention, as it requires thinking ahead and taking care of things to come rather than things that are. While this makes perfect sense for Grenades and Shells, Bunker Busters have much more potential for damage and it is worthwhile trying to prevent them rather than handling them when they come.&lt;br /&gt;&lt;br /&gt;There are areas in every application which can prove to be huge bunker busters if not handled in advance. Teams are even aware of there existence but still choose to handle them "when they come". One such area is "Application Security" and I have heard about (and experienced) this quite a lot so I think it makes a good, simple example.&lt;br /&gt;&lt;br /&gt;Let's go back to the way we write stories. The story aims at stating a particular requirement in the form of an &lt;span style="font-weight: bold;"&gt;action&lt;/span&gt;, which a particular &lt;span style="font-weight: bold;"&gt;role&lt;/span&gt; wants to perform to achieve a specific, measurable, achievable, realistic and time-bound &lt;span style="font-weight: bold;"&gt;goal&lt;/span&gt;. The generally accepted form of such a story is a single sentence as follows:&lt;br /&gt;As a &amp;lt;role&amp;gt;&lt;br /&gt;I would like to &amp;lt;action&amp;gt;&lt;br /&gt;So that &amp;lt;immediate goal&amp;gt;&lt;br /&gt;&lt;br /&gt;A Grenade in this form would look like:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;As an&lt;/span&gt; administrator,&lt;br /&gt;&lt;span style="font-style: italic;"&gt;I would like to&lt;/span&gt; add a new book to the library,&lt;br /&gt;&lt;span style="font-style: italic;"&gt;So that&lt;/span&gt; the book can be borrowed by the borrowers.&lt;/blockquote&gt;&lt;br /&gt;Now this is a good story because it can be easily implemented to achieve the following:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;A form which only the administrator can access [role]&lt;/li&gt;&lt;li&gt;Logic to validate &amp; persist the information entered into the form [action]&lt;/li&gt;&lt;li&gt;tests to check if the book can be borrowed by the borrowers (which is another role BTW). [goal]&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;The "So that" clause here does two things. It sets the testability of the story as well as clearly mentions the dependancy.&lt;br /&gt;&lt;br /&gt;Leveraging all clauses of the story in this way (and firstly writing stories in this way) can go a long way in favour of the project.&lt;br /&gt;&lt;br /&gt;The same story would become a Shell, like this:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;As an&lt;/span&gt; administrator,&lt;br /&gt;&lt;span style="font-style: italic;"&gt;I would like to&lt;/span&gt; restrict other borrowers from adding a new book to the library,&lt;br /&gt;&lt;span style="font-style: italic;"&gt;So that&lt;/span&gt; I can control the books added the library.&lt;/blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;(this will be played in addition to the first story, because we decided to do security later)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Sounds worse, does it?? But it can get even worse like this:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;As an&lt;/span&gt; administrator,&lt;br /&gt;&lt;span style="font-style: italic;"&gt;I would like to&lt;/span&gt; restrict borrowers from adding new books to the library, editing book information, deleting books from the library, viewing x,y and z reports and configuring x, y and z,&lt;br /&gt;&lt;span style="font-style: italic;"&gt;So that&lt;/span&gt; I have full control of the admin functionality of the application.&lt;/blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;(this story will be played after the stories for all the above functionality have been played...)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;This is a bunker buster; and the worse part is that this could be avoided.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;(Note: the second and third stories aim at delivering the same functionality, although the reader might think that these are stories will let the administrator "configure" access restriction to the mentioned parts of the application.)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/agilebusinessanalysis/~3/225874760/avoiding-bunker-busters.html" title="Avoiding Bunker Busters" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=24663619&amp;postID=115549816310115464" title="4 Comments" /><link rel="replies" type="application/atom+xml" href="http://agileanalysis.blogspot.com/feeds/115549816310115464/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/115549816310115464" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/115549816310115464" /><author><name>Akshay Dhavle</name><uri>http://www.blogger.com/profile/03105245771080772055</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://agileanalysis.blogspot.com/2006/08/avoiding-bunker-busters.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-24663619.post-115515187251116362</id><published>2006-08-09T11:55:00.000-07:00</published><updated>2008-01-24T07:49:24.295-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="patterns" /><category scheme="http://www.blogger.com/atom/ns#" term="bunker busters" /><category scheme="http://www.blogger.com/atom/ns#" term="user stories" /><title type="text">Grenades, Shells &amp; Bunker Busters</title><content type="html">&lt;div style="text-align: justify;"&gt;As agile business analysts, we try to keep our stories small, independent, testable and valueable. Once in a while, though, we come face to face with a Bunker Buster and everything starts looking scary.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Impact&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Every story is likely to impact a certain portion of the developed application. Measuring this impact and using it to "time" a story well, is something commonly ignored by business analysts. This doesn't mean that the analyst or the team doesn't know the impact of a story but this measure is not used in planning exercises effectively.&lt;br /&gt;&lt;br /&gt;We can almost categorize stories to get a quick idea of the impact that they have on an application. In my experience, there are three such categories&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Hand Grenades - &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Stories that add functionality&lt;/span&gt;&lt;br /&gt;This means these stories add completely new functionality. These stories impact a very small part of the application that has already been developed.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Shells - &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Stories that enhance functionality&lt;/span&gt;&lt;br /&gt;There are stories that form latter parts of a series which enhance already developed functionality. These stories bring in minor refactorings and hence their impact is rarely beyond the code written to deliver that particular functionality.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Bunker Busters - &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Stories that enhance the application&lt;/span&gt;&lt;br /&gt;These are the stories that aim at enhancing the "complete" application. A common example of this species is application security. Inevitably, there are areas of the application that only privileged users can access. These kind of stories bring in major refactorings and hence have an impact on a considerably larger proportion of the code already written.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Handling Bunker Busters&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;In a ideal world, a business analyst will deal with Hand Grenades and Shells. But things are not that simple all the time and we need to handle a Bunker Buster once in a while. There are 2 approaches towards handling these stories.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Avoiding&lt;/span&gt;&lt;br /&gt;The first approach is to simply avoid a Bunker Buster by reducing it into several Hand Grenades or Shell stories. Carrying the example of security forward, we will think about the security involved, everytime we add or enhance functionality and thus split security across several Hand Grenade and Shell stories&lt;br /&gt;&lt;br /&gt;Advantages:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;    Less / No impact on existing code&lt;/li&gt;&lt;li&gt;    Tests (especially functional ones) remain healthy and effective&lt;/li&gt;&lt;li&gt;    Stories become really independent and valuable&lt;/li&gt;&lt;li&gt;    Planning becomes simple&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Disadvantages:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;    Requires upfront thinking and design&lt;/li&gt;&lt;li&gt;    Inclusion in all stories&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;There are areas like security, common to most projects we do, which can be handled using this approach looking at the trade off between upfront design and ease of implementation.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Embracing&lt;/span&gt;&lt;br /&gt;The second approach is to play a single (generally huge) story which impacts a whole lot of developed functionality. In many cases this option is inevitable because the required functionality was never thought of.&lt;br /&gt;&lt;br /&gt;Splitting this story doesn't make too much sense because the result tends to be half-baked functionality which poses even more problems. Timing this kind of a story is something that the team needs to be careful about. This story is likely to impact a large proportion of code as well as tests besides bringing in all the disadvantages of large stories with it.&lt;br /&gt;&lt;br /&gt;Considering these impacts, the team may decide to :&lt;br /&gt;&lt;br /&gt;play these stories as soon as discovered and refactor code and tests as required&lt;br /&gt;OR&lt;br /&gt;play these stories at the fag end of the project by leaving existing test untouched and testing this functionality seperately.&lt;br /&gt;&lt;br /&gt;For more on Bunker Busters, stay tuned...&lt;br /&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/agilebusinessanalysis/~3/225874761/grenades-shells-bunker-busters.html" title="Grenades, Shells &amp; Bunker Busters" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=24663619&amp;postID=115515187251116362" title="1 Comments" /><link rel="replies" type="application/atom+xml" href="http://agileanalysis.blogspot.com/feeds/115515187251116362/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/115515187251116362" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/115515187251116362" /><author><name>Akshay Dhavle</name><uri>http://www.blogger.com/profile/03105245771080772055</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://agileanalysis.blogspot.com/2006/08/grenades-shells-bunker-busters.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-24663619.post-115402250238144073</id><published>2006-07-27T10:45:00.000-07:00</published><updated>2008-01-24T07:49:24.295-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="patterns" /><category scheme="http://www.blogger.com/atom/ns#" term="user stories" /><title type="text">Deceptively small stories??</title><content type="html">&lt;div style="text-align: justify;"&gt;For sometime now I have got the feedback from developers, that the stories I write look small but have loads of work to be actually done and they get under estimated during the Iteration Planning Meeting. Now when I asked for a way in which I could make the story look as big as it is, I was given the idea of putting tasks in the story.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;I have used this method for sometime now and I find myself writing things like:&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;blockquote&gt;TASK 1: When the user clicks "OK" an empty Word template should be uploaded to the server and then the same file should be opened for editing&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/span&gt;whereas I would have generally written:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;blockquote&gt;Clicking "OK" should open MS Word with an empty template so that the user can edit the contents.&lt;/blockquote&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;br /&gt;While this puts implementation into the story and makes the story really bulky, it seems to really help the devs and may even be of help to a technically inclined client or the client's IT department which is going to take over the maintenance&lt;span style="font-style: italic;"&gt;.&lt;/span&gt;&lt;font&gt;&lt;br /&gt;&lt;br /&gt;I think distributed agile makes us take many such deviations from the pure form of agile ideas we have read about.  Most of these are justifiable in terms of the trade-off between concepts like "minimum documentation" and "transparency / knowledge sharing". After all isn't agile about doing whatever it takes to quickly deliver value to the customer??&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/agilebusinessanalysis/~3/225874762/deceptively-small-stories_27.html" title="Deceptively small stories??" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=24663619&amp;postID=115402250238144073" title="2 Comments" /><link rel="replies" type="application/atom+xml" href="http://agileanalysis.blogspot.com/feeds/115402250238144073/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/115402250238144073" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/115402250238144073" /><author><name>Akshay Dhavle</name><uri>http://www.blogger.com/profile/03105245771080772055</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://agileanalysis.blogspot.com/2006/07/deceptively-small-stories_27.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-24663619.post-115365932582734355</id><published>2006-07-23T02:05:00.000-07:00</published><updated>2008-01-24T07:49:34.865-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="distributed agile" /><category scheme="http://www.blogger.com/atom/ns#" term="patterns" /><title type="text">Communication Patterns</title><content type="html">Incidentally my earlier post was about how Distributed Agile works. My unexpectedly long web silence was infact due to the current DA project that I am working on.&lt;br /&gt;&lt;br /&gt;One interesting thing that we get to observe is how the communication patterns change over time, amongst the local team and also with the distributed team.&lt;br /&gt;&lt;br /&gt;There are few specific things that I have observed during the last 5 months on this project, which I would like to bring up here. All of these relate to the communication that happens across oceans.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Overview&lt;/span&gt;&lt;br /&gt;Last few months I have been busy on a Distributed Agile project. I feel obliged to put down my observations of the changes in the way communication takes place between distributed teams.&lt;br /&gt;&lt;br /&gt;The typical setting renders the following arrangement:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Client (since this is about communication we restrict clients to be the people who give requirements. NOT sponsors or end-users)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;On-site BAs&lt;/li&gt;&lt;li&gt;Delivery Team. This is the larger team that does the development and consists of BAs, QAs, Devs and an IM/PM&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Note that the patterns of communication enlisted here use the above setting as a base. They may not be similar to the way distributed teams work when actual delivery is distributed.(That'll be covered in part 2, if there is one)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Communication&lt;/span&gt;&lt;br /&gt;Communication is arguably the most emphasized practice in Agile methodologies. A perfect agile team will communicate in these ways (in order of preference)&lt;br /&gt;-    face to face&lt;br /&gt;-    video conferences&lt;br /&gt;-    voice conferences&lt;br /&gt;-    email or other documentation.&lt;br /&gt;&lt;br /&gt;Small co-located teams will easily handle communication amongst themselves and with the client. It is the larger teams that find it difficult to manage without emails / documents and it gets worse when the teams are distributed and have to work with each other across seas.&lt;br /&gt;&lt;br /&gt;This is a collation of my experiences about how the communication patterns evolve and affect the project.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Context blues&lt;/span&gt;&lt;br /&gt;When the project begins, a very small number of people have had a chance to meet the client face to face. To make things worse, the team that ramps up, and starts to increasingly communicate with the client, is the team which is going to deliver the software. This is the 3rd entity listed in the overview.&lt;br /&gt;&lt;br /&gt;The BAs in the ramping team lack 3 things that makes communication effective. These are listed below in order of importance.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Business Context&lt;/span&gt;&lt;br /&gt;The first thing that the delivery team lacks is the business context in which the solution     is         to be provided. The Business Objective behind this project and the criticality of the         project         success are the fundamental things that let the team organize it's thoughts and         actions         towards a common goal which is more or less inline with the client's expectations.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Client Context&lt;/span&gt;&lt;br /&gt;The second thing that hampers effective communication is the lack of knowledge of who         the     client is. It is of high importance that the delivery team is aware of the client's position             and the stake that he has in success of the project.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Client&lt;/span&gt;&lt;br /&gt;Knowing what the client is like, is also very important to be able to communicate             effectively.         Having met the client personally impacts the effectiveness of communication a     lot.&lt;br /&gt;&lt;br /&gt;This is the first phase of the communication with the on-site team. Another interesting feature of this phase is the importance of the on-site BAs. The on-site BAs do not lack any of the things listed above, which makes them many folds more productive and hence important to the project.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Infrastructure blues&lt;/span&gt;&lt;br /&gt;This is the second phase of the communication evolution in a distributed agile project. This is the phase where the delivery team reacts to the earlier phase of lack of context. The immediate solution which is put forth is to strengthen the communication infrastructure so as to get as "close" to the client as possible. By the order of preference given above, the team rules out the face to face communication and promptly moves towards video and voice conferencing solutions.&lt;br /&gt;&lt;br /&gt;This phase features infrastructure failures which are acted upon with varying degrees of success and in the end, stabilize.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Delivery team amnesia&lt;/span&gt;&lt;br /&gt;This phase is a result of the rising ease in communication with the client. The delivery team now has ease access to the client. It also has most of the necessary context of the project. The development also starts showing real progress by this time and hence the delivery team now gains importance. It has to get critical questions answered, give development support and show progress via showcases.&lt;br /&gt;&lt;br /&gt;All this action tends to give the delivery team intermittent amnesia about the existence of the on-site BAs. This is a pattern that continues in varying degrees throughout the project. For countering this particular problem the team comes up with a schedule to communicate with the on-site BAs. This turns out to be a decent solution but it fails every time there is a change in the schedule. Every change then takes time to stabilize.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Guests and parties&lt;/span&gt;&lt;br /&gt;By this time the delivery team is using the communication infrastructure to the full extent. But there is still some context that's missing and the delivery team starts becoming more and more aware of this fact. There is a strong strong need to talk to the client face to face.&lt;br /&gt;&lt;br /&gt;The project has more or less stabilized by this time and so the cross-pollination as well as client visits to the delivery location take place. Many important decisions, sessions, context &amp; knowledge sharing happens during these visits. There are invariably some tricky areas/issues to be discussed during these sessions. Making the most of these sessions is one responsibility that the BAs should really handle well.&lt;br /&gt;&lt;br /&gt;Another amazing effect of the visits is the trust that builds between the client and the delivery team because now the client actually sees the work going on and progress being made. This is a good opportunity for the delivery team to bring to the clients' notice, the implications of their actions (or inaction). Signing off / giving feedback on functionality that has been developed is a major participation required from the client. Demonstrating how this feedback is taken and worked upon helps the delivery team to considerable extents.&lt;br /&gt;&lt;br /&gt;These visits also enable teams members to spend more informal time with the client. Team outings and sight-seeing are important parts of these visits.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Stabilization&lt;/span&gt;&lt;br /&gt;This is the phase after the client visits are over. Whatever major issues were to be discussed have been discussed and decisions reached (well, almost). This is the golden phase in the project where everyone is much more clear about what they need to do and when to do it and that includes the client.&lt;br /&gt;&lt;br /&gt;This is the phase to be reached by a distributed agile project as soon as possible. It is generally not possible to jump these phases and get to the stabilization phase early. It is however, quite helpful to understand that these phases will come and will need to be handled.</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/agilebusinessanalysis/~3/225874763/communication-patterns.html" title="Communication Patterns" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=24663619&amp;postID=115365932582734355" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://agileanalysis.blogspot.com/feeds/115365932582734355/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/115365932582734355" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/115365932582734355" /><author><name>Akshay Dhavle</name><uri>http://www.blogger.com/profile/03105245771080772055</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://agileanalysis.blogspot.com/2006/07/communication-patterns.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-24663619.post-114545267903207728</id><published>2006-04-19T03:39:00.000-07:00</published><updated>2008-01-24T07:49:42.965-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="distributed agile" /><title type="text">Overseas...</title><content type="html">So what happens to the agility when the project is distributed? Well, it suffers...&lt;br /&gt;&lt;br /&gt;It's not that it doesn't work in a distributed context. In fact ThoughtWorks has been doing distributed agile for quite sometime now. We talked about some of the best practices of agile earlier. Let us see what problems distributed agile poses to these principles.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Time difference&lt;/span&gt;&lt;br /&gt;When working across oceans, the first thing that hits the team is the time difference. The typical arrangement renders the team to be in a low cost country like India and the client in the US of A or Europe.&lt;br /&gt;&lt;br /&gt;The time difference is the first major barrier to communication. Because even if we assume that the other barriers like &lt;span style="font-weight: bold;"&gt;distance&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;language&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;culture&lt;/span&gt;, etc can be handled, we just wake up and live at different times.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Communication&lt;br /&gt;&lt;/span&gt;As much as agile believes in face-to-face communication, it suffers badly in a distributed context. Mitigation consists of:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Cross pollination&lt;/li&gt;&lt;li&gt;Using Voice communication rather than mails&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Video Conferencing&lt;/li&gt;&lt;li&gt;Adjusting working schedules on both sides&lt;/li&gt;&lt;/ol&gt;These techniques are most effective with mirrored teams. Of course, that's the essence of a distributed project, but it gets missed quite often in that the client site is left with a couple of analysts and the development goes on offshore. The mirrored team aims at having all roles replicated on both the shores which encourages more communication amongst the team members.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Documentation&lt;br /&gt;&lt;/span&gt;One more thing hampered is the amount of documentation, which increases almost exponentially...&lt;br /&gt;&lt;br /&gt;As the customer is sitting elsewhere all the analysts can't talk to the customer face-to-face which adds to the documents and artifacts created. Also for transparency and quicker feedback sake, tools like online bugtracking systems are used.&lt;br /&gt;&lt;br /&gt;The whole effort towards reducing the feedback time and working closely with the customer comes with major overheads in distributed contexts.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Cost and Benefits&lt;br /&gt;&lt;/span&gt;From a customer perspective, distributed development reduces cost significantly. The organization seemingly doesn't reap the benefits of distributed development in terms of profit margin due to the increased cost of travel, communication, etc.&lt;br /&gt;&lt;br /&gt;But the benefit of having a distributed team like:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Better team skillset (as compared to on-site)&lt;/li&gt;&lt;li&gt;Reduced costs (as compared to on-site)&lt;/li&gt;&lt;li&gt;Reduced culture shocks to customer (as compared to offshore)&lt;/li&gt;&lt;li&gt;Improved business context (as compared to offshore) because people living in the same country have definite advantage in understanding the business&lt;/li&gt;&lt;li&gt;General cross-pollination leading to better diversity and a more cohesive work force overall in the organization.&lt;/li&gt;&lt;/ol&gt;&lt;a href="http://www.martinfowler.com/articles/agileOffshore.html"&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;Selling Distributed Agile&lt;br /&gt;&lt;/span&gt;There are some important points that we need to keep in mind when selling distributed agile (even agile) to clients. Setting these customer expectations goes a long way in favour of project success. Other than the cost / benefits decribed above:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Expect lots of communication. Mostly in the form of voice communication rather than email&lt;/li&gt;&lt;li&gt;Expect much more participation than any waterfall project your organization has been a part of&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Expect having to give feedback right from the beginning of the project.&lt;/li&gt;&lt;li&gt;Expect software to grow (an agile team will rarely go for place holders)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;A related and more detailed article by Martin Fowler can be found &lt;a href="http://www.martinfowler.com/articles/agileOffshore.html"&gt;here&lt;/a&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/agilebusinessanalysis/~3/225874764/overseas.html" title="Overseas..." /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=24663619&amp;postID=114545267903207728" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://agileanalysis.blogspot.com/feeds/114545267903207728/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/114545267903207728" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/114545267903207728" /><author><name>Akshay Dhavle</name><uri>http://www.blogger.com/profile/03105245771080772055</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://agileanalysis.blogspot.com/2006/04/overseas.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-24663619.post-114442762243025244</id><published>2006-04-07T03:53:00.000-07:00</published><updated>2006-07-25T21:38:17.693-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><title type="text">Agility...</title><content type="html">The key practices of agile software development, known and followed are:&lt;br /&gt;1.    Face-to-face communication &lt;span style="font-weight: bold;"&gt;over&lt;/span&gt; documentation&lt;br /&gt;2.    Quick feedback from end users &lt;span style="font-weight: bold;"&gt;over &lt;/span&gt;project phases (as in waterfall)&lt;br /&gt;&lt;br /&gt;Collective ownership, Pair Programming, use of whiteboard, paper, and most importantly the terrific visual representation of the project health and progress... &lt;span style="font-weight: bold;"&gt;the wall&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For an agile team the wall is everything. The action of moving stories &amp; bugs along the columns and the instant snapshot of the project health is fantastic. Here's how it works...&lt;br /&gt;&lt;br /&gt;The process :&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The Business Analyst analyzes the requirement and writes a story and acceptance criteria&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The developers estimate a bunch of such stories in a planning game&lt;/li&gt;&lt;li&gt;The developers (in pairs) then sign-up for a story each morning&lt;/li&gt;&lt;li&gt;When the development is done, the story is tested for desired functionality by the analyst&lt;br /&gt;&lt;/li&gt;&lt;li&gt;After the analyst has signed the story off, the tester picks it up&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The testers and devs play ping-pong for a while with the issues (bugs) raised by the former&lt;/li&gt;&lt;li&gt;When the tester signs off the story, it's ready for the client to have a look at.&lt;/li&gt;&lt;/ol&gt;This procedure takes ideally about  3 days per story. The client can then look at the story and sign it off or (ask for some changes) !!!&lt;br /&gt;&lt;br /&gt;The documentation per say in this complete procedure is an index card for writing the story, some more for the acceptance criteria and a few more for the bugs.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The client and the analyst discuss the requirements face to face probably using some paper to make rough screen sketches sometimes.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The analyst talks to the dev pair that signed for the card and describes the functionality.&lt;/li&gt;&lt;li&gt;The devs use whiteboards &amp;amp; pair rotation for design discussions, issues and knowledge sharing&lt;/li&gt;&lt;li&gt;The devs keep bugging the analyst all the time for clarifications&lt;/li&gt;&lt;li&gt;The tester talks to the devs about issues and only writes a bug on a card if it can't be resolved then and there.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;For anyone roaming around, the color coded, columned wall with the stories and bugs gives a clear picture of the iteration health. And a team can easily setup the wall to show the project health coz it's the team that decides the color codes, the statuses (columns), etc on the wall.&lt;br /&gt;&lt;br /&gt;It's the team that decides when to start the day, what coding conventions to follow, the core hours of work and it all works out so smoothly because the client is part of the team!!&lt;br /&gt;&lt;br /&gt;Now how much better can it get?</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/agilebusinessanalysis/~3/225874765/agility.html" title="Agility..." /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=24663619&amp;postID=114442762243025244" title="2 Comments" /><link rel="replies" type="application/atom+xml" href="http://agileanalysis.blogspot.com/feeds/114442762243025244/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/114442762243025244" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/114442762243025244" /><author><name>Akshay Dhavle</name><uri>http://www.blogger.com/profile/03105245771080772055</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://agileanalysis.blogspot.com/2006/04/agility.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-24663619.post-114407543528657235</id><published>2006-04-03T07:20:00.000-07:00</published><updated>2006-07-25T21:31:45.363-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="user stories" /><title type="text">Value..</title><content type="html">Stories being testable and valuable is as important as them being small and independent. Perhaps more... because these are the two important characteristics which in fact drive the size of the the story.&lt;br /&gt;&lt;br /&gt;Like we saw that an agile analyst can sometime fool himself by &lt;span style="color: rgb(255, 0, 0);"&gt;creating&lt;/span&gt; independent stories, one can also blunder quite easily when it comes to testability and value of stories. Let's look at an easy example:&lt;br /&gt;&lt;br /&gt;Imagine a customer entity in a system with about 50 odd attributes. Creating one story capturing all these attributes will be a real mess. An analyst would (and should) readily want to break the story. What he/she might end up doing, however, is breaking the story thus...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;First story for creating the customer domain object, giving values for all the attributes (in code) and saving it to the database.&lt;/li&gt;&lt;li&gt;Second story for creating the screen&lt;/li&gt;&lt;li&gt;Third story for adding validations.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Task &amp; sizewise, this will work fine. But where is the value? What are we actually delivering to the user that he/she can use?&lt;br /&gt;&lt;br /&gt;Another problem is the testability. What an analyst should remember is that a story should be testable &lt;span style="font-weight: bold;"&gt;by the end user... &lt;/span&gt;not through code.&lt;br /&gt;&lt;br /&gt;So what does one do in these kind of situations? Well, maybe (and I am quite sure) that there are different types of the customer. Breaking the stories so as to capture details for each type can be a great start. This is called a &lt;span style="color: rgb(51, 51, 255);"&gt;vertical split&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;In situations where this is not possible the team might have to resort to internal breaking of stories. The catch is it can be shown to the customer only as a complete functionality, which lengthens the feedback cycle which defeats the whole purpose of breaking the story!!!&lt;br /&gt;&lt;br /&gt;These are the situations to beware of... But then that's what we get paid for right??&lt;br /&gt;&lt;br /&gt;The perfect split is somewhere out there and finding it gives an analyst immense happiness... and who could help you better at that than the client?&lt;br /&gt;&lt;br /&gt;;-)</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/agilebusinessanalysis/~3/225874766/value.html" title="Value.." /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=24663619&amp;postID=114407543528657235" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://agileanalysis.blogspot.com/feeds/114407543528657235/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/114407543528657235" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/114407543528657235" /><author><name>Akshay Dhavle</name><uri>http://www.blogger.com/profile/03105245771080772055</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://agileanalysis.blogspot.com/2006/04/value.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-24663619.post-114379020921793965</id><published>2006-03-30T22:44:00.000-08:00</published><updated>2006-07-25T21:32:14.930-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="user stories" /><title type="text">Chicken and Egg</title><content type="html">Managing dependencies is another tricky issue that plagues agile business analysts. Fortunately it's not as bad as the chicken and egg problem. The secret to successfully solving dependency problems is to start at the beginning... Well maybe an example will help.&lt;br /&gt;&lt;br /&gt;Let's consider a system that sells books online. The roles which will interact with this system, will be&lt;br /&gt;- the buyer&lt;br /&gt;- user registration&lt;br /&gt;- the administrator&lt;br /&gt;- the sales team and&lt;br /&gt;- the warehouse manager.&lt;br /&gt;&lt;br /&gt;The most important entity in this system in undoubtedly the book.&lt;br /&gt;&lt;br /&gt;Starting to write stories for creating a book is an obvious start for anyone. Now this is where the situation gets tricky. If all your initial stories are going to be related to books, they are inevitably going to be dependent on each other. For example :&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;View book detail&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;s&lt;/span&gt; &lt;span style="font-style: italic; color: rgb(51, 51, 255);"&gt;depends on&lt;/span&gt; &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Listing books which&lt;/span&gt; &lt;span style="font-style: italic; color: rgb(51, 51, 255);"&gt;depends on&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;Create book&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Writing such stories doesn't make sense from a tactical perspective when we are doing iterative development because we can't develop such stories in parallel.&lt;br /&gt;&lt;br /&gt;Instead if we decide to write a &lt;span style="font-weight: bold;"&gt;Create Book&lt;/span&gt; and a &lt;span style="font-weight: bold;"&gt;Register User &lt;/span&gt;story, we are suddenly in business. What this means is that we can start separate areas in the application simultaneously.&lt;br /&gt;&lt;br /&gt;Sometimes however things are not as simple as that. There are various restrictions which can lead an analyst to write stories in the same area. What will typically happen is the analyst will write &lt;span style="font-weight: bold;"&gt;Create Book&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;List Book&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;View Book Details&lt;/span&gt; stories and get them played with valid assumptions and dummy data. The analyst has thus &lt;span style="color: rgb(255, 0, 0); font-style: italic;"&gt;created&lt;/span&gt; independent stories... The consequence is the cost of integrating these pieces together.&lt;br /&gt;&lt;br /&gt;There are several points in the application where everything comes together to form a complete picture. Integration of separate stories into a logical area and separate areas into a seamless solution is inevitable. What we need to understand is that reducing these integration points is optimal in terms of overheads.&lt;br /&gt;&lt;br /&gt;Thus an analyst needs to take a call in consultation with the developers about &lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;finding&lt;/span&gt; v/s &lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;creating&lt;/span&gt; independent stories. Finding them is however definitly advisable.&lt;br /&gt;&lt;br /&gt;If I were write user stories for evolution I think I would have developed the Chicken and the Egg seperately and integrated them in the end. Probably that's how it was done anyways!!!</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/agilebusinessanalysis/~3/225874767/chicken-and-egg.html" title="Chicken and Egg" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=24663619&amp;postID=114379020921793965" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://agileanalysis.blogspot.com/feeds/114379020921793965/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/114379020921793965" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/114379020921793965" /><author><name>Akshay Dhavle</name><uri>http://www.blogger.com/profile/03105245771080772055</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://agileanalysis.blogspot.com/2006/03/chicken-and-egg.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-24663619.post-114346853055715961</id><published>2006-03-27T05:30:00.000-08:00</published><updated>2006-07-25T21:32:46.766-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="user stories" /><title type="text">Small Stories, Large Stories</title><content type="html">One question that keeps analysts busy for a most of the time is whether or not to split a story. Here's my philosophy behind my unending support for small stories.&lt;br /&gt;&lt;br /&gt;Let's start with one huge story that covers everything that is required to be done in a project. It is estimated by the developers at say 120 complexity points which converts to about 300 days. Following are the consequences.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A requirements document (the story) - coupled with the time taken to prepare such a document&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The techinical discussions and decisions for implementing these and of course the time required&lt;/li&gt;&lt;li&gt;The implementation of this story&lt;/li&gt;&lt;li&gt;The testing and&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The user acceptance (well usually non-acceptance and it takes very less time too :p )&lt;/li&gt;&lt;/ul&gt;This is what we do in a waterfall approach towards software development. We are looking a 300 days feedback loop because that's when the customer will actually see the application.&lt;br /&gt;&lt;br /&gt;Agile works towards shortening each of these phases and doing them over and over again until all the requirements are fulfilled. Thus everything boils down to the feedback cycle you are looking at. Let's look at a shorter feedback cycle, say 100 days. Thus you end up with 3 stories with an estimate of 40 complexity points converting to 100 days. Which means you get feedback thrice during the project because the customer reviews the functionality delivered by each 100 day story as soon as it is completed. That's somewhat better.&lt;br /&gt;&lt;br /&gt;Let's just try and make this a 10 day feedback cycle. We thus have 30 storys with an estimate of 4 complexity points converting to 10 days. What we are looking at is basically a 2 week iteration. Now that's really good. I'd however go for one more split so my stories have a complexity point estimate of not more than 2.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The upside&lt;br /&gt;&lt;/span&gt;The upside other than what we established above is that developer estimates are generally exponential (although they are supposed to be linear). Which means that one 4-point is not equal to four 1-point stories. It is exponentially bigger. Thus the smaller stories you have the lesser will be the actual time taken to implement, test, get feedback, make necessary changes and deliver.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The downside&lt;br /&gt;&lt;/span&gt;Well, there is no downside. The only thing required is constant interaction with the customer for analysis of new stories and review of completed stories.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Todo&lt;/span&gt;&lt;br /&gt;An agile team should set customer expectations appropriately before starting the project. The customer participation is the heart of the project. Successfully establishing a short, reponsive feedback loop is the first and foremost thing to do when doing an agile project... and the stories, keep them short.&lt;br /&gt;&lt;br /&gt;Small is beautiful...&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/agilebusinessanalysis/~3/225874768/small-stories-large-stories.html" title="Small Stories, Large Stories" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=24663619&amp;postID=114346853055715961" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://agileanalysis.blogspot.com/feeds/114346853055715961/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/114346853055715961" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/114346853055715961" /><author><name>Akshay Dhavle</name><uri>http://www.blogger.com/profile/03105245771080772055</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://agileanalysis.blogspot.com/2006/03/small-stories-large-stories.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-24663619.post-114321323654826392</id><published>2006-03-24T05:54:00.000-08:00</published><updated>2006-07-25T21:33:08.880-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="user stories" /><title type="text">Once upon a time...</title><content type="html">User stories are the basis of business analysis in an agile project. A user story is an artifact which captures a small but valuable piece of business functionality which can be implemented and tested independently.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;The philosophy behind agile methodologies is basically iterative development with short &amp; fast feedback cycle which is used in improving the solution and accomodating changes (subject to priority) so that the end result is really what the customer wants. Inevitably this creates a unique position of a business analyst as a broker between the customer and the developer. Writing user stories is what this broker spends most of his time doing.&lt;br /&gt;&lt;br /&gt;There are numerous ways of writing user stories but the goal is to capture a "role", an "action" and an immediate "goal".&lt;br /&gt;&lt;br /&gt;Like:&lt;br /&gt;As a &lt;span style="font-weight: bold;"&gt;Business Analyst&lt;br /&gt;&lt;/span&gt;I would like to &lt;span style="font-weight: bold;"&gt;write my stories in "As a, I'd like to, so that" format&lt;br /&gt;&lt;/span&gt;So that &lt;span style="font-weight: bold;"&gt;I can capture the role, action and goal easily&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;Ok, that's not an awfully great example... but the general idea goes thus.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;User stories should be&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Small&lt;/li&gt;&lt;li&gt;Independent&lt;/li&gt;&lt;li&gt;Testable and most of all&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Valuable to business&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;and of course the next question is why.&lt;br /&gt;&lt;br /&gt;This leads us to look at the meaning, purpose &amp; priority of each of the above.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Valuable&lt;br /&gt;&lt;/span&gt;The user story should deliver a valuable piece of business functionality. This is important so that the story can be released and used by the real users as soon as it is developed, thus giving the team a faster feedback.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Independent&lt;br /&gt;&lt;/span&gt;Independence is a very important characteristic of a user story. When a story is independent, it can be picked up for development anytime during the iteration. It can deliver a valueable business functionality independent of the rest of the feature.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Testable&lt;br /&gt;&lt;/span&gt;A story needs to be testable. Which means that the desired functionality that a story aims to deliver should be capable of being demonstrated, for all related business scenarios.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Small&lt;br /&gt;&lt;/span&gt;A user story should be as small as possible... possible keeping all the above characteristics in mind. You can choose to split a functionality into shorter stories as long as it remains Valuable, Testable and Independant.&lt;br /&gt;&lt;br /&gt;This is the primary job of the broker and what's challenging about it is what I'll be posting hereafter alongwith my version of the solution.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/agilebusinessanalysis/~3/225874769/once-upon-time.html" title="Once upon a time..." /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=24663619&amp;postID=114321323654826392" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://agileanalysis.blogspot.com/feeds/114321323654826392/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/114321323654826392" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/24663619/posts/default/114321323654826392" /><author><name>Akshay Dhavle</name><uri>http://www.blogger.com/profile/03105245771080772055</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://agileanalysis.blogspot.com/2006/03/once-upon-time.html</feedburner:origLink></entry></feed>
