<?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>foomonger&#039;s blog &#187; agile</title>
	<atom:link href="http://blog.foomonger.com/tag/agile/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.foomonger.com</link>
	<description>Tips and Musings on Software Development, Flash, and Flex</description>
	<lastBuildDate>Wed, 05 Jan 2011 18:08:59 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Lessons Learned in Agile</title>
		<link>http://blog.foomonger.com/2010/09/17/lessons-learned-in-agile/</link>
		<comments>http://blog.foomonger.com/2010/09/17/lessons-learned-in-agile/#comments</comments>
		<pubDate>Fri, 17 Sep 2010 17:46:30 +0000</pubDate>
		<dc:creator>Sam Ahn</dc:creator>
				<category><![CDATA[software development]]></category>
		<category><![CDATA[agile]]></category>

		<guid isPermaLink="false">http://blog.foomonger.com/?p=168</guid>
		<description><![CDATA[I've been using Agile software development methodologies on a variety of teams over the past few years, often playing the ScrumMaster in addition to a full-time developer. In this post I'll describe notable lessons I've learned.
Planning Meetings
I don't know anyone that enjoys 8 hour planning meetings. I used to find them useful for getting the [...]]]></description>
			<content:encoded><![CDATA[<p>I've been using Agile software development methodologies on a variety of teams over the past few years, often playing the ScrumMaster in addition to a full-time developer. In this post I'll describe notable lessons I've learned.</p>
<p><strong>Planning Meetings</strong></p>
<p>I don't know anyone that enjoys 8 hour planning meetings. I used to find them useful for getting the entire team on the same page but it's painful. Now I prefer something more <a href="http://leansoftwareengineering.com/ksse/scrum-ban/" target="_blank">scrum-ban</a> style and hold weekly 30-45 minute planning sessions. Just enough to fill out the backlog for a week or so.</p>
<p><strong>Reality Check</strong></p>
<p>Agile doesn't alter reality. I think it just helps expose it. In the end some of the variables you have to work with are still the same: people, time, and scope. If your product owner sends out an email telling the team to work harder to hit a deadline because scope is no longer negotiable ... reality check. If you uncover some technical debt that makes what you thought would take about a day to take more than a week ... reality check. At each hurdle I've encountered I make sure to take a step back, unemotionally embrace reality, looks at my choices, and then more forward.</p>
<p><strong>Fine-grained or Coarse-grained User Stories</strong></p>
<p>Having gone both extremes when fleshing out a backlog I now lean towards coarser-grained user stories. I found that while finer-grained stories help expose what's exactly being worked on, it's at the cost of a cluttered backlog which makes it more difficult to determine the progress of overall business value. The downside of coarser-grained stories is that tickets may hang around longer than you'd like and look stagnant. I think it's an art and I find that regular communication through daily scrums and team chat rooms helps keep an eye on detailed progress.</p>
<p><strong>Defining "Done"</strong></p>
<p>I used to think I was cool wanting a firm and awesome definition of "Done" for a user-story. Code complete, design reviewed, unit-tested, QA'd, etc. Don't get me wrong, I still like the idea of Done. In a recent project we didn't have UI designs for a while. I defined Done to include design of course. But after a while the design bottleneck caused the list of in-progress tickets to grew unbearably. Tickets were code-complete and QA'd, but the designs just weren't applied yet. It was difficult to quickly see how the team was doing. I later decided to remove the design requirement for Done and created separate chore tickets (in <a href="http://www.pivotaltracker.com/" target="_blank">Pivotal Tracker</a>) to address designs later. When design was no longer a bottleneck, it was added back as a Done requirement. It wasn't perfect but in that situation my desire to improve flow and process trumped my desire to have concise and perfectly Done tickets.</p>
<p>I can't claim these lessons as absolute fact, but I hope someone fines them helpful. Happy Agiling.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://blog.foomonger.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.foomonger.com/2010/09/17/lessons-learned-in-agile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile Refactoring</title>
		<link>http://blog.foomonger.com/2009/11/10/agile-refactoring/</link>
		<comments>http://blog.foomonger.com/2009/11/10/agile-refactoring/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 01:39:31 +0000</pubDate>
		<dc:creator>Sam Ahn</dc:creator>
				<category><![CDATA[software development]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[refactoring]]></category>

		<guid isPermaLink="false">http://blog.foomonger.com/?p=33</guid>
		<description><![CDATA[There's always something to refactor. Requirements evolve, short-cuts are taken, code doesn't get reviewed, and anti-patterns emerge.   How does refactoring fit into agile development? How do you have to convince the product owner to make a refactoring system story a high priority for the next sprint? How do you address that crumbing design pattern [...]]]></description>
			<content:encoded><![CDATA[<p>There's always something to refactor. Requirements evolve, short-cuts are taken, code doesn't get reviewed, and anti-patterns emerge.   How does refactoring fit into agile development? How do you have to convince the product owner to make a refactoring system story a high priority for the next sprint? How do you address that crumbing design pattern a random contractor setup years ago?  Here are some practices to help address these issues:</p>
<p><strong>Document areas to refactor.</strong> When you have to take a short-cut to hit a deadline, first of all comment the code and then create a ticket to address the short-cut in another sprint. I also suggest tagging the ticket as "technical debt." This will give your team visibility into the amount of <a title="Technical Debt: When Agile Software Development Fails" href="http://cdan.posterous.com/technical-debt-when-agile-software-developmen" target="_blank">technical debt</a> that is accrued.</p>
<p><strong>Include refactoring into story estimations.</strong> If you know that a story would be best implemented if you refactored some code, don't start off by giving an estimate that assumes you'll use a short-cut. It can be natural to people-please and say things can be done sooner but try to avoid that and keep in the mind the goal of writing high quality software which includes refactoring.</p>
<p><strong>Clean up the small things when you see them.</strong> Refactoring doesn't have to be a clean sweep of the whole house, it can be just a good habit of picking up things along the way. I wouldn't recommend rewriting significant logic for fun, but if you're in some code and find that a minor change would significantly improve readability then it might be worth the few minutes to do the cleanup.</p>
<p><strong>Break down large refactoring changes into manageable tasks.</strong> You'll never have the time to do that gigantic overhaul of that terrible reporting system (or what-have-you) all at once. What you can do is break it down so that the work can be spread out across many sprints. This effort can be complex so I suggest starting by creating a task to outline all the changes that should be made.</p>
<p><strong>Evaluate and convey the business value of the refactoring need.</strong> It's likely difficult to find a product owner who will add a refactoring system story into a sprint just because you tell them it'll make the code better. There's no apparent business value in that reason.  Think of the issue from the product owner's perspective and consider the "so that" part of the system story. Ask yourself, "Would it improve system performance? lower technical debt? improve throughput? address the root causes of the growing list of bugs?" You may even find that the refactoring you wanted to do doesn't have significant business value and is <em>just</em> clean and maintainable enough the way it is.</p>
<p>One of the great things about agile development is the exposure and mitigation of risk. If a system needs significant refactoring then that's risk that the entire team should be mindful of. Refactoring can then be something that happens, not just something you want to do.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://blog.foomonger.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.foomonger.com/2009/11/10/agile-refactoring/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Courage</title>
		<link>http://blog.foomonger.com/2009/09/23/courage/</link>
		<comments>http://blog.foomonger.com/2009/09/23/courage/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 17:53:32 +0000</pubDate>
		<dc:creator>Sam Ahn</dc:creator>
				<category><![CDATA[software development]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[courage]]></category>

		<guid isPermaLink="false">http://blog.foomonger.com/?p=3</guid>
		<description><![CDATA[Practicing agile development for the past year or 2, I've been thinking about the concept of courage more and more. Courage seems to be a common value of many frameworks (e.g. Extreme Programming), and I think it makes a lot of sense especially when taking into consideration test-driven development and domain-driven design. I've personally found [...]]]></description>
			<content:encoded><![CDATA[<p>Practicing agile development for the past year or 2, I've been thinking about the concept of courage more and more. Courage seems to be a common value of many frameworks (e.g. <a href="http://en.wikipedia.org/wiki/Extreme_Programming" target="_blank">Extreme Programming</a>), and I think it makes a lot of sense especially when taking into consideration <a href="http://en.wikipedia.org/wiki/Test-driven_development" target="_blank">test-driven development</a> and <a href="http://en.wikipedia.org/wiki/Domain-driven_design" target="_blank">domain-driven design</a>. I've personally found that embracing courage makes me more productive in writing code by helping me make decisions more quickly and empowering me in general.</p>
<p>I think the same type of courage goes beyond the code and should be consciously applied to development overall. The goal of software development in business isn't excellent code quality after all but instead to meet some sort of business objective. For example, I think it takes courage to realize you've underestimated the complexity of a task and to come back to the product owner/client/manager and say "We screwed up and totally overlooked this when we implemented that. The consequences are this and that." I think it takes courage to say half-way through an iteration, "We just realized that we can't do all of this in time, but we can do this small part." This isn't anything new, and from my understanding good agile teams do this well naturally. I like to think of these things within the concept of courage because of the empowerment angle.</p>
<p>So while embracing courage within a programming context makes me more productive in writing code, I've found that embracing courage within an overall development context makes me more productive in creating business value. I can't say I do this all the time, but it comes to mind, at least subconsciously, with every hurdle I encounter. I think that in the face of imperfection, unexpected complexity,  and evolving requirements, software development needs more engagement and with more engagement, more courage.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://blog.foomonger.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.foomonger.com/2009/09/23/courage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

