<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Practical Success with Agile!</title>
	<atom:link href="http://bradasphere.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://bradasphere.com</link>
	<description>Agile Development and Scrum in the real world</description>
	<lastBuildDate>Sat, 06 Apr 2013 15:27:16 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Functional Sprints, Boooo</title>
		<link>http://bradasphere.com/2013/04/03/functional-sprints-boooo/</link>
		<comments>http://bradasphere.com/2013/04/03/functional-sprints-boooo/#comments</comments>
		<pubDate>Wed, 03 Apr 2013 14:23:11 +0000</pubDate>
		<dc:creator>Marty Bradley</dc:creator>
				<category><![CDATA[Lean]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://bradasphere.com/?p=216</guid>
		<description><![CDATA[A common problem I see in my coaching gigs is the creation of functional sprints. You know who you are, Mr. QA sprint. In this entry I’ll help you identify this process smell and provide techniques to bring the team back together within a single sprint. So let’s get rid of the dreaded “QA Sprint”, [...]]]></description>
				<content:encoded><![CDATA[<p>A common problem I see in my coaching gigs is the creation of functional sprints. You know who you are, Mr. QA sprint. In this entry I’ll help you identify this process smell and provide techniques to bring the team back together within a single sprint. So let’s get rid of the dreaded “QA Sprint”, “BA Sprint”, or whatever other cool task related sprint your team has created.</p>
<p><span id="more-216"></span></p>
<h4>Inspect and Adapt</h4>
<p>Inspect and adapt is one of the many tenents of an agile process. Why is this tenent the main one a new team is drawn toward?</p>
<p>Let me draw an analogy. I just started training to run half marathons. I hired an online coach. He sent me an email asking for my goals. Well, I wanted to be in shape and I wanted to run reasonably fast for a half marathon race in 3 months. I did some research and discovered that I could qualify for the Olympic trials in marathon if I ran a 1 hour and 9 minute half marathon. That’s correct; I would qualify for the Olympic marathon without ever actually running a marathon! “Perfect,” I thought. That’s my goal.</p>
<p>So I planned it out. If I wanted to run 13.1 miles in 1 hour and 9 minutes I would have to run each mile at 5 minutes and 16 seconds.</p>
<p>I started running. I noticed that my times were a 8-minute mile for the first mile, then an 9-minute mile for the second and it was getting worse. I was nowhere near my goal. I ran for another few weeks and was still behind schedule in meeting my goal. I had to do something or I wouldn’t reach my goal by race day.</p>
<p>It must be the way I was running. So I bought a book on running. I’m sure many of you have purchased a book on how to manage a scrum team. I read the book cover to cover and then read it again. Stay over your feet in an athletic stance. Arms bent at 90 degree angle. Chin out. Chest out, but not too far out. Don’t land on your heels. I looked like a chicken on an energy drink when I ran. But I read a book, this has to work.</p>
<p>I ended up hurting myself.</p>
<p>What should have I done? It probably would have been a good idea for me to run a little longer and build a base of knowledge, or better yet, have an experienced runner or a running coach watch me run to help isolate my problem.</p>
<p>What’s my point? Before the team inspects and adapts they need to have an understanding of why certain rules and practices are in place and what are the benefits and trade-offs of those rules.</p>
<h4>The Problem with Functional Sprints</h4>
<p>The team had been to Scrum training and understood the practices and products. They went through release planning and created the following release with three 30 day sprints.</p>
<p><a href="http://bradasphere.com/wp-content/uploads/2013/04/Release.jpg"><img class="aligncenter size-medium wp-image-222" alt="Release" src="http://bradasphere.com/wp-content/uploads/2013/04/Release-300x134.jpg" width="300" height="134" /></a></p>
<p>Each sprint started on Monday and ended the last Friday of the month with no gaps other than weekends. The team was set up as follows:</p>
<ul>
<li>2 developers, 1 QA Analyst, 1 PO, 1 ScrumMaster (fresh from scrum training)</li>
<li>Automated builds from source control</li>
<li>Manual testing</li>
<li>Manual deployment</li>
<li>Automated unit tests did not exist</li>
<li>Definition of “done” was a feature coded and signed off by QA and the PO</li>
</ul>
<p>At the end of the first sprint, 10 user stories were done and 4 user stories were code complete; however, QA didn’t have enough time to complete testing.</p>
<p>The team had a retrospective prior to sprint 2 planning with long discussion on what to do about code that was complete but not yet tested. The team discussed automated testing but didn’t feel they could get adequate automated test coverage during sprint 2 to solve the testing dilemma. After further discussion, the product owner offered to help. But he didn’t have time to constantly retest or run regression testing every time he received a new iteration of code inside the sprint. So the team decided that sprint 2 would be a development sprint for new features and the tester and product owner would test what was left over from sprint 1. If the tester or product owner ran out of code to test then they would prepare acceptance tests for development items currently in sprint 2 or look ahead to sprint 3.</p>
<p>The team added an additional “Done” state of code complete so they developers could identify which stories could be “moved to QA.”</p>
<p>Here’s what the new release plan looked like.</p>
<p><a href="http://bradasphere.com/wp-content/uploads/2013/04/ReleasePlanwQaSprints.png"><img class="aligncenter size-medium wp-image-223" alt="ReleasePlanwQaSprints" src="http://bradasphere.com/wp-content/uploads/2013/04/ReleasePlanwQaSprints-300x148.png" width="300" height="148" /></a></p>
<p>The product owner moved the release date out by 30 days to handle the new approach. He wasn’t concerned as he felt involved and could learn about delays early in the process. All is well, right?</p>
<p>Well, not really. The developers were having a hard time determining if they should work on the committed features in the current sprint, or fix bugs that were found from the last development sprint during the QA Sprint. In many instances, the product owner was confused as to what state the feature was supposed to be in. That is, he kept expecting what development was working on would be in the code he was testing when, in fact, it was a month behind. Many bugs were entered that were really part of the feature request currently in development. This frustrated the PO and the development team.</p>
<p>The team was falling further behind schedule and each group was pointing the finger at the other. We need more QA resources. We need more development resources. The PO wanted a new team.</p>
<h4>Build the Team</h4>
<p>I was asked to work with this team to figure out why they were over 2 months behind schedule.</p>
<p>At the beginning of this paper I posed a question, “Why is the tenent, inspect and adapt, the one teams focus on the most?” The answer is because as we move forward in life we are always analyzing and modifying our actions to obtain the best results. The team was heading in the right direction but didn’t understand how to work together. Instead they decided to continue to do what was comfortable which was to split the team apart like they had worked in the past.</p>
<p>We came up with the following rules to help keep aligned with an agile process:</p>
<ul>
<li>Inspect and adapt is good let’s do more of it</li>
<li>Train team members to be generalized specialists</li>
<li>Build an actionable artifact when replacing a manual task</li>
<li>Develop a “we” mentality</li>
</ul>
<h6>Inspect and adapt more</h6>
<p>Inspect and adapt is a great principle and should be used often. So we changed the sprint length from one month to two weeks. The team was worried at first as they were convinced they couldn’t get anything done in 2 weeks. The fact was they weren’t completing anything in the month long sprint either. So, really, what was the harm in shortening the sprint?</p>
<p>As a team we planned the first sprint and the only rule the team had to comply with was that a user story couldn’t be considered done until it has been fully tested. The first sprint was rocky as the team planned on completing 4 user stories and only completed 1. That one story was fully tested and passed user acceptance testing by the PO. This was a huge success as now the team and the PO know what it takes to complete a user story. Additionally, it didn’t take them a month to figure this out.</p>
<h6>Generalized specialists</h6>
<p>Train the individual team members to be generalized specialists. I’m not suggesting that skill sets are completely interchangeable. We all know that you can’t take a person that is good at writing a technical manual and expect they can write software applications. But a technical writer needs to understand the application in order to write the user documentation. They are perfectly capable of helping do some manual testing. If a developer frees up from a user story and the next highest story needs to be tested she can certainly help test the user story. The only caveat would be that it’s general practice to not let a developer test their own code.</p>
<p>The team refocused on the next highest priority user story understanding the new definition of done. By keeping the focus on the next highest priority team members were more likely to ask, “How can I help with this user story so we can get it to ‘done’”?</p>
<p>Some of the developers would even take screenshots and draft up a tutorial that the technical writer would then edit for final draft.</p>
<h6>Actionable artifacts</h6>
<p>Build an actionable artifact whenever we pulled someone away from a manual task. An example of this was building Given…When…Then (GWT) scripts in Gherkin that were converted to test code using a Behavior Driven Development framework. We used <a href="http://www.specflow.org">Specflow</a> for .NET.</p>
<p>The team started having a 3 Amigos meeting twice a week where 3 people from the team, a PO, a tester and a developer would analyze upcoming user stories to write the acceptance criteria in the domain language of the business. The acceptance criteria followed the GWT framework used in <a href="https://github.com/cucumber/cucumber/wiki/Gherkin">Gherkin</a> scripts which also helped identify test data that needed to be gathered.</p>
<p>The GWT scripts where built into the nightly build enabling nightly integration testing. All failed tests where investigated and fixed if necessary each morning.</p>
<h6>We are the team</h6>
<p>The team began to realize it wasn’t necessary to get more resources, the estimates and commitments where under their control. Once the team understood everything that was involved to bring a feature to done they began to form around the features and not the tasks oriented around the features.</p>
<p>The developers pair programmed but the interesting discovery was that a developer and tester where more likely to pair than 2 developers.</p>
<p>One of the highlights for me was during one retrospective when one of the developers said that everyone should avoid phrases, such as, “I handed it off to QA.” Instead the team would respond, “We’re still testing that user story.”</p>
<h4>Summary</h4>
<p>Our team found that we couldn’t deliver stories at the end of a sprint as we had to wait for the QA Sprint to finish. We chose to ignore the Scrum rule of having releasable stories at the end of the sprint. That was a misguided decision.</p>
<p>Sprints are time-boxed. The time-box fixes the resources and schedule for a story to be developed. The only negotiable part of the project triangle is the number of user stories being developed. The team destroyed the purpose of the time box by creating functional sprints. Additionally, when a team doesn’t take responsibility for the whole user story it’s easy to develop a “throw it over the wall” mentality. If the team confuses what it means to complete a story by partially completing stories in a sprint then we lose the benefits of the time box. The time box keeps the PO and the team focused on the most important requirements in the system while maintaining the project schedule.</p>
<p>The team and the PO now have an understanding of how the functional sprints made communication confusing. The team and the PO are now working with a clear definition of done within the sprint.</p>
<p>The team and the PO now have a very good working relationship and delivered the latest release in time for a major user conference. The PO was extremely happy with the way the product demo went at the conference.</p>
<p>The team is still struggling with BDD and getting their percentage of code coverage to the level they want but they are working together to consistently deliver quality product. Defects found during user acceptance where down from an average of 30 per sprint to 2.</p>
<h4>Some useful links and books</h4>
<p><a href="http://aslakhellesoy.com/" target="_blank">Cucumber</a></p>
<p><a href="http://cuke4ninja.com/">The Secret Ninja Cucumber Scrolls</a></p>
<p>Beck, Kent – Extreme Programming Explained, Second Edition</p>
<p>Cohn, Mike – Agile Estimating and Planning</p>
]]></content:encoded>
			<wfw:commentRss>http://bradasphere.com/2013/04/03/functional-sprints-boooo/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SpecFlow Installation using NUnit</title>
		<link>http://bradasphere.com/2013/03/27/specflow-installation-using-nunit/</link>
		<comments>http://bradasphere.com/2013/03/27/specflow-installation-using-nunit/#comments</comments>
		<pubDate>Wed, 27 Mar 2013 23:12:57 +0000</pubDate>
		<dc:creator>Marty Bradley</dc:creator>
				<category><![CDATA[Behavior Driven Development]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Lean]]></category>
		<category><![CDATA[Unit Testing]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://bradasphere.com/?p=201</guid>
		<description><![CDATA[SpecFlow is open source and provided under the BSD license.  As part of the Cucumber family, SpecFlow uses the official Gherkin parser and provides integration to the .NET framework. This entry describes how to install SpecFlow to run with NUnit. In a future post I’ll add instructions on setting up MSTest. Install SpecFlow using NuGet [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.specflow.org/specflownew" target="_blank">SpecFlow</a> is open source and provided under the BSD license.  As part of the Cucumber family, SpecFlow uses the official Gherkin parser and provides integration to the .NET framework.</p>
<p>This entry describes how to install SpecFlow to run with NUnit. In a future post I’ll add instructions on setting up MSTest.</p>
<p><span id="more-201"></span></p>
<ol>
<li>Install SpecFlow using NuGet or from the <a href="http://http://visualstudiogallery.msdn.microsoft.com/9915524d-7fb0-43c3-bb3c-a8a14fbd40ee" target="_blank">Visual Studio Gallery – SpecFflow</a></li>
<li>Install SpecFlow.Assist.Dynamic from NuGet so that you get the <a href="https://github.com/techtalk/SpecFlow/wiki/SpecFlow-Assist-Helpers" target="_blank">SpecFlow Assist Helpers</a> assembly – this is a godsend when working with tables</li>
<li>Create a .NET C# class library project, I like to name it “Specs” or “Features”</li>
<li>If you are going to drive the UI with some of your Gherkin I highly suggest using <a href="http://docs.seleniumhq.org/docs/03_webdriver.jsp" target="_blank">Selenium WebDriver</a> install it using NuGet.  This will allow you to do BDD against the UI.  I still think MS Coded UI Test is clunky.  Me no likey.</li>
<li>Definitely work through this great <a href="http://www.youtube.com/watch?v=SVwBz-ZTliw" target="_blank">SpecFlow video tutorial</a></li>
</ol>
<p>Some good links:</p>
<p><a href="https://github.com/techtalk/SpecFlow/wiki/Visual-Studio-2010-Integration" target="_blank">VS 2010 IDE useful features</a></p>
<p><a href="https://github.com/techtalk/SpecFlow/wiki/Setup-SpecFlow-Projects" target="_blank">Setup SpecFlow - Official Site</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bradasphere.com/2013/03/27/specflow-installation-using-nunit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cucumber-JVM Installation using Maven</title>
		<link>http://bradasphere.com/2013/03/27/cucumber-jvm-installation-using-maven/</link>
		<comments>http://bradasphere.com/2013/03/27/cucumber-jvm-installation-using-maven/#comments</comments>
		<pubDate>Wed, 27 Mar 2013 21:35:22 +0000</pubDate>
		<dc:creator>Marty Bradley</dc:creator>
				<category><![CDATA[Lean]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://bradasphere.com/?p=192</guid>
		<description><![CDATA[Cucumber-JVM is a pure Java implementation of the Cucumber.  This post is just a quick-start to get Cucumber-JVM up and running in Eclipse.  You must be running at least JRE 1.5. sample pom.xml file with cucumber-JVM, JUnit, and Hamcrest Install the M2 eclipse plugin Create a new maven project using the maven-archetype-quickstart Add the cucumber-jvm [...]]]></description>
				<content:encoded><![CDATA[<p>Cucumber-JVM is a pure Java implementation of the <a href="http://aslakhellesoy.com/post/20006051268/cucumber-jvm-1-0-0" target="_blank">Cucumber</a>.  This post is just a quick-start to get Cucumber-JVM up and running in Eclipse.  You must be running at least JRE 1.5.</p>
<p><span id="more-192"></span></p>
<div class="wlWriterEditableSmartContent" id="scid:fb3a1972-4489-4e52-abe7-25a00bb07fdf:f76d96f3-61fb-4c68-b5cb-b73e6fac8d20" style="margin: 0px; display: inline; float: none; padding: 0px;">
<p><a href="http://bradasphere.com/marty/blogfiles/CucumberJVMwithMaven_E109/pom.xml" target="_blank">sample pom.xml file with cucumber-JVM, JUnit, and Hamcrest </a></p>
</div>
<ol>
<li>Install the M2 eclipse plugin</li>
<li>Create a new maven project using the maven-archetype-quickstart</li>
<li>Add the cucumber-jvm dependencies to the pom.xml file</li>
<li>Add the JUnit dependencies to the pom.xml file</li>
<li>Add build plugin to the pom.xml file if not using the default jvm</li>
<li>Delete src/main/java/App.java</li>
<li>Delete src/test/java/AppTest.java</li>
<li>Run a build to automatically install the project dependencies</li>
<li>Add a source folder src/test/resources for the .feature files</li>
<li>Add the cucumber-jvm runner class to src/test/java folder</li>
<li>Run a build to generate step code</li>
</ol>
<h4>Cucumber-JVM runner class</h4>
<pre class="csharpcode">package com.your.package;

import cucumber.api.junit.*;
import org.junit.runner.RunWith;

@RunWith(Cucumber.<span class="kwrd">class</span>)
@Cucumber.Options(
        format={<span class="str">"pretty"</span>, <span class="str">"html:target/cucumber"</span>},
        features=<span class="str">"src/test/resources/"</span>
        )

<span class="kwrd">public</span> <span class="kwrd">class</span> CukesTest {

}</pre>
]]></content:encoded>
			<wfw:commentRss>http://bradasphere.com/2013/03/27/cucumber-jvm-installation-using-maven/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scrum vs. Kanban: Sustained Engineering</title>
		<link>http://bradasphere.com/2013/03/27/scrum-vs-kanban-sustained-engineering/</link>
		<comments>http://bradasphere.com/2013/03/27/scrum-vs-kanban-sustained-engineering/#comments</comments>
		<pubDate>Wed, 27 Mar 2013 16:33:49 +0000</pubDate>
		<dc:creator>Marty Bradley</dc:creator>
				<category><![CDATA[Sustained Engineering]]></category>
		<category><![CDATA[kanban]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://bradasphere.com/?p=105</guid>
		<description><![CDATA[I’m a big fan of integrating all product work into the current sprint.  A clearer picture of the work to be done and how to prioritize it evolves when bugs, enhancements, risk items, and non-functional requirements are all prioritized in the same backlog.  But, there are times when an organization will split off bug fixes [...]]]></description>
				<content:encoded><![CDATA[<p>I’m a big fan of integrating all product work into the current sprint.  A clearer picture of the work to be done and how to prioritize it evolves when bugs, enhancements, risk items, and non-functional requirements are all prioritized in the same backlog.  But, there are times when an organization will split off bug fixes or quick patches and even quick turnaround features, like reports, into a separate team.  </p>
<p><span id="more-105"></span></p>
<p>Sometimes this team reports into the Customer Support organization and acts as tier 3 support.  Other times this team will be an additional group in development that takes on products that are being sunset or that are undergoing a rewrite.  I’ll refer to all of these models as Sustained Engineering (SE).</p>
<p>Sustained engineering teams are all about alleviating an immediate need.  The SE team should be the organization’s model for continuous delivery.  I’ll discuss the development side of this in a future post.  This post is aimed at how to appropriately manage the SE backlog.  I’ll touch on a workflow that I’ve seen and used for Sustained Engineering and then provide a brief overview of Scrum and Kanban.  If you need more information on Scrum or Kanban drop me a note or refer to the references at the bottom of this post.</p>
<p>The Sustained Engineering Backlog my have many interested parties across the organization and in some cases they are Product Owners of different components of the application.  In any case, the SE Backlog still needs one product owner from the business side.  I’ve seen models where the head of support or some one in development managed this backlog and it’s a really bad idea.  Like any Product Backlog prioritization this should ideally be handled by someone from the business.</p>
<p>One model that an organization that I worked for used was a many to one PO delegate.  The PO delegate would run a weekly prioritization call with the PO team and have the team work through the priorities based on business needs across the organization. This works well as it provides the ability of the business to negotiate on behalf of important customers and overall business needs or risks.  The PO Delegate had the final say or the ability to escalate to the executive leadership to break any ties.</p>
<h4>Scrum</h4>
<p><a href="http://www.scrumalliance.org/learn_about_scrum" target="_blank">Scrum</a> prescribes time boxed iterations.  The iterations are typically between 2-4 weeks.  The iterations should be the same length for each sprint so that the team can develop a cadence.  Scrum limits work in process (WIP) by limiting the amount of work in the time-box.  In Scrum this is called a Sprint.  Other methodologies refer to this as an Iteration.  The team's velocity is determined by the number of story points that the team can complete inside of a Sprint.  Therefore, the WIP Limit is the Sprint team’s velocity.  During the Sprint Planning Meeting the Scrum team pulls items from  the Product Backlog based on priority until they reach their WIP limit for the upcoming sprint.  This becomes the Sprint Backlog.</p>
<p>One of the main tenants of Scrum is that once the Sprint begins no new items should be added to the Sprint Backlog.  I’ve seen this also written as Scrum resists change inside the sprint.  In very short sprints, often used by Sustained Engineering, injecting unplanned work items usually causes a number of ill desired side affects.  When adding unplanned items into a sprint the new work item must be estimated and then lower priority items may no longer fit inside the sprint.  In Scrum the way to handle this is to then move the lower priority item to the next sprint or back on to the Product Backlog to be re-prioritized.</p>
<p>Due to the speed of delivery of the SE work items this can get confusing to the number of stakeholders interested in seeing a bug fixed or a new report added.  This becomes even more frustrating for Product Owners that have communicated delivery to a customer.</p>
<p>Let’s say that we are running 2 week Sprints and we define “Done” as all items in the Sprint Backlog are developed, tested, passed user acceptance, and approved by Change Control or any auditing process you have in place and are waiting for a production deployment engineer to push the “deploy” button.</p>
<p>Our average cycle time was 34 days not 2 weeks. Yes, sometimes it took 34 days to deliver a one line change to the code. Why is that?  Work items would fail UAT and be forced to the next 2 week sprint. This all lead to a very frustrated development team and users upset with the length of time a seemingly simple change took to get into production.   This caused additional issues such as causing us to deploy items in a middle of a sprint. This breaks the rules of Scrum, all around ugly and really uncomfortable.</p>
<p>Mary Poppendieck asks in her writings, “How long does it take you to deploy one line of code?”</p>
<p>In our example it will take at least 2 weeks to deploy one line of code and in some cases 34 days.  We physically can’t or shouldn’t push code to production in the middle of a Sprint if we are following the time-boxed rules of Scrum.  So what do we do?  Shorten the sprints?  Maybe 1 week sprints are good.  What if you have production deployment windows of twice a week or heaven forbid your deployments are automated and you can deploy daily.  1 day sprints?  Say it ain't so!</p>
<h4>Kanban</h4>
<p><a href="http://www.kanban101.com/" target="_blank">Kanban</a> is less prescriptive than Scrum. The basic element of Kanban is to visualize the workflow by creating a visual board with columns detailing where each item is in the workflow.  Work is broken into small equally sized chunks.  You limit the WIP for each state in the workflow.  The WIP limits aren’t always necessarily the same for each workflow state.  For example, during requirements elicitation there may be multiple items in progress per team member as they may have to coordinate communication with stakeholders to determine the breadth of the requirement.  On the other hand a developer can really only work on one work item at a time.</p>
<p>You manage and report work items in Kanban based on cycle time.</p>
<p>As we move to shorter and shorter sprints we are essentially heading towards Kanban.  While Scrum limits the team’s WIP using sprints, Kanban limits WIP per workflow state. The team then works each work item in each workflow state without regard to a time limit.  As the team focuses on reducing cycle time they swarm to assist with an item that is stuck in a particular workflow state that is causing a bottleneck.</p>
<p>Here’s an example of a Kanban board in it’s infancy.  Given the board below we set WIP limits for Requirements Elicitation, Acceptance Criteria, Test Data Available, Development, etc all the way through to Production Deployment. As you can see from the board below we are already over all of our WIP limits. We created the second horizontal line to help us bring us back withing our WIP limits.</p>
<p><a href="http://bradasphere.com/wp-content/uploads/2012/05/20120503_115423_860.jpg"><img style="display: inline; border-width: 0px;" title="2012-05-03_11-54-23_860" alt="2012-05-03_11-54-23_860" src="http://bradasphere.com/wp-content/uploads/2012/05/20120503_115423_860_thumb.jpg" width="514" height="291" border="0" /></a></p>
<p>Additionally, our original workflow did not include "Acceptance Criteria" and "Gather test Data" these workflow items where added to make it clearer to the PO, Development and QA that the definition of "Ready for Development" included valid acceptance criteria and examples in the form of test data.</p>
<p>This problem wasn’t caused by Scrum, but it was hidden from view.  Once we put up the Kanban board and placed all the active items on the board it was clearer where the bottleneck existed.  The product owners didn't understand that they were necessary in the process of determining acceptance criteria.</p>
<p>The board shows that there are too many items in “Acceptance Criteria." Development didn’t have time to go through them to make sure the acceptance criteria was adequate.</p>
<p>This bottleneck led to a number of bad practices such as estimating on weak requirements.  Items would come into development and stall as the team tried to solidify acceptance criteria. This then led to a number of items “slipping” out of the sprint or failing in user acceptance testing.</p>
<p>Now the fun part, I took a this picture of the board and displayed it during the next prioritization call. All of this information was reported weekly to the POs in  a spreadsheet but seeing it like this started a barrage of comments. The most important of which was when one PO noticed that the column for “Acceptance Criteria” was way over the WIP limit.  After explaining that we were having a hard time getting a hold of the users to help us understand and validate the acceptance criteria, the team of POs came up with a policy that they would push down to their teams. The new policy or better defined as commitment was that any item that development called about would be handled immediately by the business team or moved to a parked queue.</p>
<p>This company runs change control meetings every Monday and Thursday with deployments on the same nights for approved work items.  The team now packages anything “Done” by close of business Wednesday and close of business Friday and has the paperwork submitted and ready for change control.</p>
<p>Cycle time greatly improved down to 17 days after 2 weeks as they were still cleaning up backlogged items.  Their goal is to decrease cycle times to between 4 hours and 3 days.</p>
]]></content:encoded>
			<wfw:commentRss>http://bradasphere.com/2013/03/27/scrum-vs-kanban-sustained-engineering/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scrum Role, Please</title>
		<link>http://bradasphere.com/2013/02/28/scrum-role-please/</link>
		<comments>http://bradasphere.com/2013/02/28/scrum-role-please/#comments</comments>
		<pubDate>Thu, 28 Feb 2013 21:23:10 +0000</pubDate>
		<dc:creator>Marty Bradley</dc:creator>
				<category><![CDATA[Lean]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://bradasphere.com/?p=160</guid>
		<description><![CDATA[“Hey, I’m a development manager and with this new Scrum thing what am I supposed to do?!”  said the manager beleaguered by loss of control. This question comes from many people as they struggle to understand their role in a newly formed Agile environment. Let's map the traditional software development roles to the Scrum roles [...]]]></description>
				<content:encoded><![CDATA[<p>“Hey, I’m a development manager and with this new Scrum thing what am I supposed to do?!”  said the manager beleaguered by loss of control.</p>
<p><span id="more-160"></span></p>
<p>This question comes from many people as they struggle to understand their role in a newly formed Agile environment. Let's map the traditional software development roles to the Scrum roles and see where if any differences arise.</p>
<p><strong>Product Manager:</strong> Scrum role please (jeez I kill me) - <strong><em>Product Owner</em></strong>.</p>
<p>The Product Owner owns the release. He owns the product backlog and the prioritization of each requirement. As Product Owner this individual acts as the customer. They are accountable for managing the projects sprint by sprint. Huh?  Isn’t that the ScrumMaster?  Nope. You, Mr. Product Owner are the man!  They are accountable to senior management for the success or failure of the project. If someone wants to know the status of the project they should now go to the Product Owner not to engineering or the ScrumMaster. Engineering is responsible for the quality of the project.</p>
<p><strong>Project Manager: </strong>Scrum role – <strong><em>ScrumMaster</em></strong>.<br />
The ScrumMaster is responsible for the adherence to Scrum and to remove impediments from the Scrum team. The ScrumMaster may produce the information for the information radiator but the ScrumMaster is not in charge of the project as a whole, that is the responsibility of the Product Owner. The ScrumMaster does not assign tasks to the team, the team pulls the next available task off of the Sprint Backlog. I have moved Project Managers to work with Product Owners to be a "Release Manager" to help coordinate all the additional tasks that must occur in large software organizations to deliver a product from inception to product launch. Once a team is running smoothly a ScrumMaster may spend only a small percentage of their time doing their ScrumMaster duties.</p>
<p><strong>Developers, QA, Tech Writers:</strong> Scrum Role - <strong><em>Scrum Team</em></strong><br />
All others are members of the Scrum team. A Scrum team can vary from 2-7 people. The team is responsible for building demonstrable high-quality deliverable product at the end of every sprint. If the team does not have the appropriate resources, human or technical, then they should not begin the sprint.</p>
<p><strong>Development Manager:</strong> Scrum role - <strong><em>None</em></strong>.</p>
<p>I saved the Development Manager for last as this role can be the most confusing to place as the organization changes.  Development mangers are used to directing their team to greatness, poking their head into design meetings, and at times acting as the architect for the project.  While their isn’t an explicit role in Scrum, the development manager is key to building teams.</p>
<p>The manager's role is to use one of many management techniques to build high-performing teams. Depending on the manager’s background this includes morale as well as coaching the technical staff to hone their skills.  I’m a big fan of One Minute Manager's<sup>1</sup> Situational Leadership techniques. So let’s look at the One Minute Manager’s PRICE System and provide our newly displaced manager with some skills that he may have lost touch with.</p>
<p>PRICE stands for Pinpoint, Record, Involve, Coach, and Evaluate.</p>
<p><em>Pinpoint</em>. Define key performance areas for people in observable, measurable terms. By pinpointing the manager doesn’t say something or someone is good or bad but instead finds performance areas that can be measured. You always want to focus on areas to improve. In software development these areas may be around quality, team commitment, or quantity.</p>
<p><em>Record</em>. Gather data to measure the baseline and then show progress towards the goal.  If a Scrum team has lower than average quality metrics at the end of a Sprint and it’s due to one team member, hey the team probably already knows who it is, so let’s not hide it. The development manager should run bug reports or defects over the number of automated tests for this developer.</p>
<p><em>Involve</em>.  At this point the development manager shares the information with the team member.  It’s important to involve him in the realization that he needs improvement and then work together to build a plan that he and the team can implement.  Data makes this a meeting of sharing facts without judgment. This isn’t a time to reprimand but an opportunity to let him know that he is important to the team and that continuously improving is a key part of the agile manifesto.</p>
<p><em>Coach</em>. This is the fun part.  Pair with the developer or have them pair with other team members that are strong in this area.  Coaching or teaching someone else is a very rewarding experience and in itself builds relationships and brings the team closer together.  During the sprint review show the overall quality numbers and if the individual’s improvement is the main reason the numbers went up use this time to praise the individual and the team on this major accomplishment.</p>
<p><em>Evaluate</em>. Well didn’t we actually already do that?  While we were working with the developer, he grew, the team grew, and everyone celebrated the quick win.  Agile is about succeeding quickly, failing quickly, and learning quickly.  So don’t wait.  Be there for your team.</p>
<p>As the Development Manager you’ll be PRICEless (oh, stop it, you knew that was coming.)</p>
<p><span style="font-weight: bold; text-decoration: underline;">Notes</span><br />
1. <a href="http://www.kenblanchard.com/Store/Books_Audios/The_One_Minute_Manager_Essentials/Putting_the_One_Minute_Manager_to_Work/" target="_blank">Blanchard, Ken, Putting the One Minute Manager to Work</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bradasphere.com/2013/02/28/scrum-role-please/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UI Testing with CUITe</title>
		<link>http://bradasphere.com/2011/10/21/ui-unit-testing-with-cuite/</link>
		<comments>http://bradasphere.com/2011/10/21/ui-unit-testing-with-cuite/#comments</comments>
		<pubDate>Fri, 21 Oct 2011 19:35:00 +0000</pubDate>
		<dc:creator>Marty Bradley</dc:creator>
				<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Unit Testing]]></category>
		<category><![CDATA[CUIT]]></category>
		<category><![CDATA[CUITe]]></category>

		<guid isPermaLink="false">http://bradasphere.com/?p=13</guid>
		<description><![CDATA[This blog entry is part of a multi-part series to incorporate Visual Studio Coded UI tests (CUIT) into a sophisticated data driven web application. CUITe is a thin layer developed on top of the Microsoft Visual Studio Coded UI Test engine. This blog entry walks through the creation of creating a CUITe test. I switched to [...]]]></description>
				<content:encoded><![CDATA[<p>This blog entry is part of a multi-part series to incorporate Visual Studio Coded UI tests (CUIT) into a sophisticated data driven web application.</p>
<p><span id="more-13"></span></p>
<p><a href="http://cuite.codeplex.com/" target="_blank">CUITe</a> is a thin layer developed on top of the Microsoft Visual Studio Coded UI Test engine. This blog entry walks through the creation of creating a CUITe test.</p>
<p>I switched to CUITe framework due to the separation of the Object Repository from the automation code.  This approach moves away from the UIMaps in the base CUIT framework.  Make your own determination but I feel that CUITe makes the coding of these unit tests more like MSTest or Nunit and in that sense more developer friendly than QA Engineer friendly.  Again, make your own judgment on that aspect.</p>
<p>Future blogs will address scaling the framework to make CUITe usable for large applications.</p>
<p>All of the blog entries will use a basic website created in VS 2010. Use the steps in the walkthrough provided by Microsoft to create a website with membership and login.</p>
<h2>Create the sample Web Site</h2>
<p>For this installment of the blog you can stop once you reach the "Adding New Users" section of the Walkthrough.</p>
<p><a href="http://msdn.microsoft.com/en-us/library/879kf95c.aspx" target="_blank">Walkthrough: Creating a Web Site with Membership and User Login</a></p>
<h2>Download CUITe from codeplex</h2>
<p><a href="http://cuite.codeplex.com/" target="_blank">CUITe</a></p>
<h2>Create the test project</h2>
<ol>
<li>Open the solution created under "Create the sample Web Site"</li>
<li>Right click the Solution and select Add | New Project</li>
<li>Select Visual C# | Test project</li>
<li>Name it something appropriate. I usually append the word "Tests" to the project name I am putting under test. So in my case the web site is named WebSiteCuit so my test project is named WebSiteCuitTests</li>
<li>
<div>Your solution should look something like this in VS 2010</div>
<p><img src="http://bradasphere.com/wp-content/uploads/2011/10/101811_2000_UsingMSCode15.png" alt="" /></li>
<li>Delete the UnitTest1.cs file</li>
<li>Right click the test project. In this example, WebSiteCuitTests and select Add | Coded UI Test…</li>
<li>Click Cancel when the Dialog box pops asking to record or select existing. At this point we just wanted to make sure all of the Coded UI Test references are created for us.</li>
<li>Add a reference to the CUITe.dll from c:\Program Files(x86)\Microsoft\CUITe folder.</li>
<li>Create a folder "Object Repository" under the test project.</li>
<li>Your test project should look similar to this:</li>
</ol>
<p><img src="http://bradasphere.com/wp-content/uploads/2011/10/101811_2000_UsingMSCode25.png" alt="" /></p>
<h2>Let's create our first test</h2>
<ol>
<li>In the next step CUITe needs us to navigate to our application. In our case a web site but I've created this using the built in web server for Visual Studio so we need to launch the application once to get the local url. Right click the Default.aspx page and select View in Browser…</li>
<li>Copy the url of the homepage and close the browser window</li>
<li>Open CUITe Object Recorder (Start | All Programs | CUITe | CUITe Object Recorder)</li>
<li>
<div>Paste the url of your application in the Address Bar at the top of the CUITe Object Recorder</div>
<p><img src="http://bradasphere.com/wp-content/uploads/2011/10/101811_2000_UsingMSCode34.png" alt="" width="583" height="202" /></li>
<li>Verify that the language drop down is set to the programming language that you want the tests recorded in. I'm using C#</li>
<li>Click the Record button at the top left corner</li>
<li>Place your mouse pointer in the "User Name" text box and then left click. (You should see the text window at the bottom start to fill with code.</li>
<li>Place your mouse pointer in the "Password" text box and then left click.</li>
<li>Click the "Log In" button</li>
<li>
<div>Since you didn't key in your User Name and Password you will see the "Your login attempt was not successful. Please try again." Message. Place your mouse over the message and when you receive a red box around it left click it. We'll use this message in an assert.</div>
<p><img src="http://bradasphere.com/wp-content/uploads/2011/10/101811_2000_UsingMSCode44.png" alt="" width="596" height="66" /></li>
<li>
<div>You'll have a series of public members that look similar to this:</div>
<p><img src="http://bradasphere.com/wp-content/uploads/2011/10/101811_2000_UsingMSCode54.png" alt="" /></li>
<li>Click the "Code" button at the top of the Object Recorder. The page definition code will appear in a notepad instance.</li>
<li>Go back to Visual Studio and right click the "Object Repository" Folder</li>
<li>Select Add | Class. Name your class PALogin (I'm using PA to indicate Page)</li>
<li>Click Add</li>
<li>Copy and Paste the code from the notepad instance keeping the namespace of your project.</li>
<li>
<div>
<p>Your code should look something like this:</p>
<pre class="csharpcode"><span class="kwrd">using</span> System;
<span class="kwrd">using</span> System.Collections.Generic;
<span class="kwrd">using</span> System.Linq;
<span class="kwrd">using</span> System.Text;
<span class="kwrd">using</span> Microsoft.VisualStudio.TestTools.UITesting;
<span class="kwrd">using</span> CUITe.Controls.HtmlControls;

<span class="kwrd">namespace</span> WebSiteCuitTests.Object_Repository
{
    <span class="kwrd">class</span> PALogin : CUITe_BrowserWindow
    {
        <span class="kwrd">public</span> <span class="kwrd">new</span> <span class="kwrd">string</span> sWindowTitle = <span class="str">""</span>;
        <span class="kwrd">public</span> CUITe_HtmlEdit txtLogin1UserName = <span class="kwrd">new</span> CUITe_HtmlEdit(<span class="str">"Id=Login1_UserName"</span>);
        <span class="kwrd">public</span> CUITe_HtmlPassword txtLogin1Password = <span class="kwrd">new</span> CUITe_HtmlPassword(<span class="str">"Id=Login1_Password"</span>);
        <span class="kwrd">public</span> CUITe_HtmlInputButton btnLogIn = <span class="kwrd">new</span> CUITe_HtmlInputButton(<span class="str">"Id=Login1_LoginButton"</span>);
        <span class="kwrd">public</span> CUITe_HtmlCell celTemp1 = <span class="kwrd">new</span> CUITe_HtmlCell(
               <span class="str">"InnerText=Your login attempt was not successful. Please try again."</span>);
    }
}</pre>
</div>
</li>
<li>
<div>Open the CodedUITest.cs file in the test project</div>
</li>
<li>
<div>Right click on the class name and select Refactor | Rename.  Name the class LoginCodedUITest</div>
</li>
<li>Right click the CodedUITest1.cs file in Solution Explorer and select Rename.  Name the class LoginCodedUITest.cs to match the class name</li>
<li>Add a using statement for CUITe
<pre class="csharpcode"><span class="kwrd">using</span> CUITe.Controls.HtmlControls;</pre>
</li>
<li>Open up the “Additional test attributes” code region and uncomment the MyTestInitialization method and add the following line of code:
<pre class="csharpcode">CUITe_BrowserWindow.CloseAllBrowsers();</pre>
</li>
<li>Add the following code to CodedUITestMethod1():
<pre class="csharpcode">CUITe_BrowserWindow.Launch(<span class="str">"http://localhost:41901/WebSiteCuit/Login.aspx"</span>);
PALogin pgPALogin = CUITe_BrowserWindow.GetBrowserWindow&lt;PALogin&gt;();
pgPALogin.txtLogin1UserName.SetText(<span class="str">"Jimmy"</span>);
pgPALogin.txtLogin1Password.SetText(<span class="str">"Jimmypwd"</span>);
pgPALogin.btnLogIn.Click();
StringAssert.Contains(pgPALogin.celTemp1.UnWrap().InnerText, <span class="str">"attempt was not successful"</span>);</pre>
</li>
<li>Right click inside of the CodedUITestMethod1() and select Run Tests</li>
<li>Green Check!  Success!!  Congratulations on your first CUITe test run.</li>
</ol>
<h2>Useful Links</h2>
<p><a href="http://msdn.microsoft.com/en-us/library/dd286726.aspx" target="_blank">Testing the User Interface with Automated UI Tests</a></p>
<p><a href="http://msdn.microsoft.com/en-us/library/gg269474.aspx" target="_blank">Microsoft Visual Studio 2010 Feature Pack 2</a></p>
<p><a href="http://blogs.msdn.com/b/vstsqualitytools/archive/2010/04/13/uitest-framework-ie-plugin-part-2.aspx" target="_blank">Record and Playback in IE</a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://bradasphere.com/2011/10/21/ui-unit-testing-with-cuite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
