<?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>BigVisible Solutions &#187; Adam Sroka</title>
	<atom:link href="http://www.bigvisible.com/author/asroka/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bigvisible.com</link>
	<description></description>
	<lastBuildDate>Thu, 02 Feb 2012 15:25:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Automate Everything!</title>
		<link>http://www.bigvisible.com/2010/11/automate-everything/</link>
		<comments>http://www.bigvisible.com/2010/11/automate-everything/#comments</comments>
		<pubDate>Fri, 19 Nov 2010 03:33:30 +0000</pubDate>
		<dc:creator>Adam Sroka</dc:creator>
				<category><![CDATA[No Tags]]></category>

		<guid isPermaLink="false">http://www.bigvisible.com/?p=1060</guid>
		<description><![CDATA[This is something I talk about a lot in my technical training, and I really mean it. There are a couple of things I would like everyone to think about: First, programming is automating. If you are a programmer what you do is tell computers how to do things for people. That is automation. If [...]]]></description>
			<content:encoded><![CDATA[<p>This is something I talk about a lot in my technical training, and I really mean it. There are a couple of things I would like everyone to think about:</p>
<p>First, programming is automating. If you are a programmer what you do is tell computers how to do things for people. That is automation. If you need to do things you should take advantage of the talent you have for automating and automate the things you need to do.</p>
<p>Second, as a programmer your time is expensive. Also, the things you program are complex and the opportunity to make mistakes is ever present. For both of these reasons you don&#8217;t want to be doing the same things over and over again. Any time you are going to do the same thing again you should automate it.</p>
<p>I want all the programmers out there to be very suspicious of doing things that are similar to things they have done before. When you write some code that is similar to code you have written before you are creating duplication. You should find that duplication and refactor to eliminate it.</p>
<p>Similarly, when you have to do some activity that you have done before, such as testing for regressions, deploying an application onto a server, uploading data to a database, creating some report, or any of the many administrative tasks you do every day, you should automate it. That way you will spend less time doing it over and over and you will have fewer opportunities to make mistakes.</p>
<p>Faster and higher quality for the small cost of a little programming (Ostensibly what you want to be doing anyway.) How does that sound?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bigvisible.com/2010/11/automate-everything/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>To Direct or to Self-Organize</title>
		<link>http://www.bigvisible.com/2010/09/to-direct-or-to-self-organize/</link>
		<comments>http://www.bigvisible.com/2010/09/to-direct-or-to-self-organize/#comments</comments>
		<pubDate>Tue, 28 Sep 2010 05:59:21 +0000</pubDate>
		<dc:creator>Adam Sroka</dc:creator>
				<category><![CDATA[No Tags]]></category>

		<guid isPermaLink="false">http://www.bigvisible.com/?p=933</guid>
		<description><![CDATA[It is sometimes attractive to impose processes. The reasons that it is attractive make sense: We know what works based on our experience. Those of us who study process have a lot of anecdotal evidence that some things are better than other things, and why not share our wisdom with those who lack our wear? [...]]]></description>
			<content:encoded><![CDATA[<p>It is sometimes attractive to impose processes. The reasons that it is attractive make sense: We know what works based on our experience. Those of us who study process have a lot of anecdotal evidence that some things are better than other things, and why not share our wisdom with those who lack our wear?</p>
<p>However, this only makes sense if we don&#8217;t value learning. If we don&#8217;t value learning then we can assert that we who know, know. We know because we have learned, and we can share what we know with those less fortunate than us. They should be grateful to have benefited from our wisdom and to have been spared the many trials that we have endured.</p>
<p>If we value learning then we value systems that can learn, but that implies that we must let go. We must let go of the idea that what we have learned is what others should learn. Their experiences are necessarily different than ours. If they succeed it is their success. If they fail it is not our failure.</p>
<p>The quality of a good coach/teacher/parent, is to provide everything that is needed to succeed, to motivate, to encourage, to endure, and to get the hell out of the way.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bigvisible.com/2010/09/to-direct-or-to-self-organize/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Your Opinion of Agile Doesn&#8217;t Matter</title>
		<link>http://www.bigvisible.com/2010/09/your-opinion-of-agile-doesnt-matter/</link>
		<comments>http://www.bigvisible.com/2010/09/your-opinion-of-agile-doesnt-matter/#comments</comments>
		<pubDate>Sat, 11 Sep 2010 02:01:52 +0000</pubDate>
		<dc:creator>Adam Sroka</dc:creator>
				<category><![CDATA[No Tags]]></category>

		<guid isPermaLink="false">http://www.bigvisible.com/?p=924</guid>
		<description><![CDATA[There has been a storm of blog posts, tweets, and other noises lately about why Agile is this or that, why it is good or bad, why it works or doesn&#8217;t work, etc. None of it actually matters. There are two things we ought to be talking about: 1) How do we change our organizations [...]]]></description>
			<content:encoded><![CDATA[<p>There has been a storm of blog posts, tweets, and other noises lately about why Agile is this or that, why it is good or bad, why it works or doesn&#8217;t work, etc. None of it actually matters.</p>
<p>There are two things we ought to be talking about: 1) How do we change our organizations to optimize the delivery of value? 2) How do we make the lives of people involved in software development better?</p>
<p>XP, Scrum, Lean, Kanban, Agile, and whatever else are collections of ideas and practices each united by strong principles and all designed to help us figure out how to solve some of these problems. Each is limited by its point of view. None is a panacea. None will fit your situation &#8220;out-of-the-box&#8221; without considerable thought and adaptation.</p>
<p>So, use these ideas and these practices. Do so thoroughly and unapologetically. But, I don&#8217;t care what you think Agile is or is not, whether you think it is good or bad, whether you think it works or doesn&#8217;t work, whether you think I am doing it right or doing it wrong. It doesn&#8217;t matter.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bigvisible.com/2010/09/your-opinion-of-agile-doesnt-matter/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>An Agile Team is an Engine</title>
		<link>http://www.bigvisible.com/2010/08/an-agile-team-is-an-engine/</link>
		<comments>http://www.bigvisible.com/2010/08/an-agile-team-is-an-engine/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 05:13:04 +0000</pubDate>
		<dc:creator>Adam Sroka</dc:creator>
				<category><![CDATA[No Tags]]></category>

		<guid isPermaLink="false">http://www.bigvisible.com/?p=902</guid>
		<description><![CDATA[[In a private email discussion with the other BigVisible coaches I came up with the following metaphor. I thought it might be of general interest, so I'm reproducing it here with a few small edits.] An Agile team is like an engine. An engine needs four basic things to work well: Feed it lots of [...]]]></description>
			<content:encoded><![CDATA[<p><em>[In a private email discussion with the other BigVisible coaches I came up with the following metaphor. I thought it might be of general interest, so I'm reproducing it here with a few small edits.] </em></p>
<p>An Agile team is like an engine. An engine needs four basic things to work well:</p>
<ol>
<li> Feed it lots of fuel and air at the right moment.</li>
<li> Ignite the fuel and air at the right moment to generate power.</li>
<li> Transfer power to the drive line to do some useful work.</li>
<li> Remove waste gasses at the right moment to maintain volumetric efficiency on the next stroke.</li>
</ol>
<p>Agile teams need similar things:</p>
<ol>
<li> Feed them valuable ideas to implement <em>at the right moment.</em></li>
<li> Implement high-quality software at the right moment to realize value.</li>
<li> Transfer that value out to the customer so that they can do their work.</li>
<li> Receive feedback at the right moment to maintain the delivery of value on the next iteration.</li>
</ol>
<p>Extending the metaphor:</p>
<ul>
<li> Scrum is a bigger engine. It is theoretically capable of generating higher output, <em>if</em> you give it all of the things above.</li>
<li>XP (or &#8220;technical practices&#8221; if you prefer) is a well tuned ignition system. You need it to maximize efficiency and clean power output.</li>
<li> Kanban says, &#8220;Find the bottleneck and eliminate it.&#8221; That is great advice (For engines too) but maybe not specific enough to tell us how to make a Civic beat a Ferrari. <em>[Note: I deliberately diminished the importance of finding and eliminating bottlenecks here. To be clear, I think it is one of the most important skills a coach (or engine builder) can have.]</em></li>
<li> Effective product ownership and related business practices are your intake plenum. The fastest way to sap an engine&#8217;s power is to starve it here (That&#8217;s why they call it the &#8220;throttle.&#8221;)</li>
<li> Your direct line to your customer is like your exhaust system. The tighter and twistier and more packed with crap it is the less power you will get.</li>
</ul>
<p>To go fast you need all of these parts to work together. So, start with a bigger engine. Sure, why not? Start with more efficient spark. Sure, why not? If you want to get faster you&#8217;ve got to understand the whole system, and it more or less doesn&#8217;t matter where you start.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bigvisible.com/2010/08/an-agile-team-is-an-engine/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Agile Learning</title>
		<link>http://www.bigvisible.com/2010/08/agile-learning/</link>
		<comments>http://www.bigvisible.com/2010/08/agile-learning/#comments</comments>
		<pubDate>Sat, 14 Aug 2010 01:53:34 +0000</pubDate>
		<dc:creator>Adam Sroka</dc:creator>
				<category><![CDATA[No Tags]]></category>

		<guid isPermaLink="false">http://www.bigvisible.com/?p=888</guid>
		<description><![CDATA[Jerry Weinberg commented on my last post regarding the Definition of Done saying that we aren&#8217;t really done until we have stopped. When pressed further he said that even delivering to production was insufficient, because we might get it wrong, and if we get it wrong we aren&#8217;t really &#8220;done.&#8221; Of course, he&#8217;s absolutely right, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.geraldmweinberg.com/Site/Home.html">Jerry Weinberg</a> commented on my last post regarding the <a href="http://www.bigvisible.com/asroka/definition-of-done/">Definition of Done</a> saying that we aren&#8217;t really done until we have stopped. When pressed further he said that even delivering to production was insufficient, because we might get it wrong, and if we get it wrong we aren&#8217;t really &#8220;done.&#8221;</p>
<p>Of course, he&#8217;s absolutely right, and it leads nicely to one of my favorite topics that I&#8217;ve been wanting to blog about:</p>
<p>Agile software development is about learning. We work from a premise that the final solution is not known (or knowable) until we have delivered it, and that, therefore, we must collaborate with customers to build and define a working solution incrementally. Along the way we learn about the problem space that we are exploring and we incorporate that knowledge and our own expertise to drive towards a <a href="http://en.wikipedia.org/wiki/Heuristic">heuristic</a> solution.</p>
<p>That may seem obvious, but it has an interesting implication. All software development processes/methodologies tend to obsess over the question of how much we can get done per unit time. However, if we know that we are engaged in learning, and we understand that learning means sometimes getting it wrong in order to adjust and get it right, then how much we can do is the wrong question. The right question is how long does it take before we can find out that we are wrong. In other words, what is the delay before our next opportunity to learn?</p>
<p>Scrum&#8217;s notion of &#8220;Done&#8221; is not really about being done, but about getting to the point where we can get real feedback to learn from. The same is true for the Lean notion of &#8220;Cycle Time.&#8221; Each cycle is an opportunity to learn. If there is any chance that we will get it wrong then we need at least two cycles. In fact, the likelihood that we will ever get it right is directly related to the number of opportunities we have to learn before we stop. I&#8217;ll let you chew on that for a while.</p>
<p>[<em>Note: the assertion in the last paragraph originally said that the likelihood of getting it right within some period of time was inversely related to the length of our learning cycles. Hopefully, the way I wrote it above is somewhat clearer. The notion of keeping learning cycles small is a natural and important consequence of the above. You will hear more from me about that at some point.</em>]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bigvisible.com/2010/08/agile-learning/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Definition of Done</title>
		<link>http://www.bigvisible.com/2010/08/definition-of-done/</link>
		<comments>http://www.bigvisible.com/2010/08/definition-of-done/#comments</comments>
		<pubDate>Fri, 13 Aug 2010 04:29:12 +0000</pubDate>
		<dc:creator>Adam Sroka</dc:creator>
				<category><![CDATA[No Tags]]></category>

		<guid isPermaLink="false">http://www.bigvisible.com/?p=882</guid>
		<description><![CDATA[One slightly peculiar question that comes up over and over again with new Scrum teams is: what is the definition of done? And, how do we determine what our team definition of done is? It is a peculiar question, because if we weren&#8217;t practicing Scrum the answer would be obvious. In fact, the Lean and [...]]]></description>
			<content:encoded><![CDATA[<p>One slightly peculiar question that comes up over and over again with new Scrum teams is: what is the definition of done? And, how do we determine what our team definition of done is?</p>
<p>It is a peculiar question, because if we weren&#8217;t practicing Scrum the answer would be obvious. In fact, the Lean and Extreme Programming communities more or less agree on what &#8220;done&#8221; means without any real discussion: Done == deployed in production, in the hands of real customers.</p>
<p>When Scrum folks talk about the &#8220;Definition of Done,&#8221; however, they mean something slightly different. There is an important assumption here: software can reach an intermediate state called &#8220;done&#8221; where it is not yet &#8220;released,&#8221; but is &#8220;potentially shippable.&#8221;</p>
<p>Potentially shippable is an equally peculiar idea. In theory it ought to mean that to release or not to release is purely a business decision at this point. The software is complete, accepted, and tested, but it is not released. In practice it often means that the main development activities have been completed but there is some amount of intangible work to be done that may or may not fit inside of a Sprint (e.g. QA testing, deployment to various environments, formal release process, etc.) This is a poor, but common, way to address the &#8220;Definition of Done.&#8221;</p>
<p>Potentially shippable software is actually a useful idea. From a technical excellence point of view the goal should be continuous delivery, but from a business perspective continuous delivery might not be feasible. In fact, in some domains big-bang delivery actually has inherent value (e.g. any COTS, especially commercial games, and various forms of online media.) [actually, even in those environments continuous delivery is useful, but only after the initial release hits its date...] What we want is for continuous delivery to be attainable, so that it becomes a business decision not to do it. Thus, XP has long had the concept of always releasable software.</p>
<p>So, how do Scrum teams define done? I suppose the real answer is, however they want to, but I suggest the following: Start with everything that it would take to release the software to production. Then, to the extent that it is infeasible to do all that stuff, scale back to something that can be accomplished within a Sprint. Then, continuously improve (i.e. inspect and adapt) until the definition is once again everything that it would take to release the software to production.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bigvisible.com/2010/08/definition-of-done/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>What is Test-Driven Development?</title>
		<link>http://www.bigvisible.com/2010/08/what-is-test-driven-development/</link>
		<comments>http://www.bigvisible.com/2010/08/what-is-test-driven-development/#comments</comments>
		<pubDate>Sat, 07 Aug 2010 00:05:18 +0000</pubDate>
		<dc:creator>Adam Sroka</dc:creator>
				<category><![CDATA[No Tags]]></category>

		<guid isPermaLink="false">http://www.bigvisible.com/?p=871</guid>
		<description><![CDATA[This question has been at the forefront of several conversation I have had lately both with highly experienced Agile coaches and with new, interested parties at the client. The question has been answered many times from many different points of view, and most of us who have been around Agile for a while think we [...]]]></description>
			<content:encoded><![CDATA[<p>This question has been at the forefront of several conversation I have had lately both with highly experienced Agile coaches and with new, interested parties at the client. The question has been answered many times from many different points of view, and most of us who have been around Agile for a while think we know what it is. There are a few misconceptions out there, though, and I want to clear the air. So, what is TDD, really?</p>
<p>Test-Driven Development is a disciplined approach to software design that provides a mechanism for programmers to create working software in tiny increments of no more than a few lines at a time. The reason that this is important is that Agile approaches to software development more or less require us to deliver working software in small increments that fit inside a two-week iteration (give or take.) In order to have working software that meets some customer need in such a short time frame we need a way to create even smaller increments of software, see them work, build a little more, see that work, etc., and improve the design as we go so that we don&#8217;t create a mess.</p>
<p>The way that Test-Driven Development accomplishes this is by leaning on unit testing frameworks to build a tiny test that specifies a tiny increment of behavior. We write that test before we have written the production code that will make that test pass. Then we write the code, taking care to do no more than is absolutely necessary to make our test pass. Finally, we take a step back and look for indications that our design could be improved, the main one being duplication that is created by bits of code that do or say much the same thing. When we see such duplication we refactor it using techniques and tools that allow us to change the code safely without breaking the test.</p>
<p><a title="TDD Cycle" rel="lightbox[pics871]" href="http://www.bigvisible.com/wp-content/uploads/2010/08/TDD.png"><img class="attachment wp-att-874 alignleft" src="http://www.bigvisible.com/wp-content/uploads/2010/08/TDD.png" alt="TDD Cycle" width="150" height="125" /></a></p>
<p>We repeat this process over and over. Each cycle takes no more than a minute or two, and each cycle builds incrementally on top of the prior ones until we have created some working feature that the customer has asked for. All the while we are seeing all of the small increments we have built work, via the tests. All the while we are seeking and exploiting small opportunities to improve and simplify the design of the code. And, in the end we have demonstrable, working software that is capable of filling some customer need. All we have to do is integrate and deploy it and we can safely move on to the next thing on our list.</p>
<p>That is more or less it. So, now that we have talked about what Test-Driven Development is, let&#8217;s take a moment to discuss what it is not:</p>
<p>Test-Driven Development is not about testing, not really. The purpose of tests is to verify the quality and functionality of software. The purpose of what we are doing is to set an expectation of what we need to do next and have a way to quantify when that expectation has been met. We get verification as a result. That is: later we can run the tests and see them pass and be assured that no regression has happened (At least in the behavior that we specified.) But, that is not the goal that we set out with. We set out with the goal of driving small increments of code that actually work. We needed a way to define what those small increments were, and the test framework gave us a harness in which to run tiny increments of code, set expectations about how the code would work, and see those expectations satisfied.</p>
<p>It is important to realize that Test-Driven Development is not about testing, or quality, because it is important to realize that quality is not achieved through TDD alone. Several studies have shown that software produced with TDD tends to have less bugs, but that is a side-effect of TDD and not the goal per se. In order to have quality we need to be able to verify that the software works the way the customer intends. We need a way to verify that it looks good, is usable, accomplishes work that the customer needs it to do, performs adequately, is free from obvious defects, etc. Test-Driven Development is not about these things.</p>
<p>Quality, in Agile, is achieved by working in small increments, by collaborating to set clear expectations up front, by using Test-Driven Development to build the software, and by performing various kinds of testing to assure that the product meets the goals we set early and continuously throughout the process. Test-Driven Development is only about how we build the software. We need other techniques to assure that the software meets our customers&#8217; needs.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bigvisible.com/2010/08/what-is-test-driven-development/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Should We Build It Again?</title>
		<link>http://www.bigvisible.com/2010/07/should-we-build-it-again/</link>
		<comments>http://www.bigvisible.com/2010/07/should-we-build-it-again/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 22:15:31 +0000</pubDate>
		<dc:creator>Adam Sroka</dc:creator>
				<category><![CDATA[No Tags]]></category>

		<guid isPermaLink="false">http://www.bigvisible.com/?p=851</guid>
		<description><![CDATA[George pointed out that sometimes we have to rebuild systems. Sometimes they just aren&#8217;t that good. Sometimes the technology we are using is out-of-date and no longer supported. Sometimes we need to add functionality, and the design is just so bad that we can&#8217;t figure out how to add it. My previous post about re-engineering [...]]]></description>
			<content:encoded><![CDATA[<p><a title="George Schlitz" href="http://www.bigvisible.com/author/gschlitz/">George</a> pointed out that sometimes we have to rebuild systems. Sometimes they just aren&#8217;t that good. Sometimes the technology we are using is out-of-date and no longer supported. Sometimes we need to add functionality, and the design is just so bad that we can&#8217;t figure out how to add it.</p>
<p>My previous post about <a title="Agile and Re-engineering" href="http://www.bigvisible.com/asroka/agile-and-re-engineering/">re-engineering</a> did not discuss what to do in these circumstances. I would recommend the following:</p>
<ol>
<li>Think really hard about it: is there a value proposition here? Or does the existing product do what we need it&#8217;s just not that great? Think about it again.</li>
<li>If you are certain that there is value then start a new project to replace the existing product.</li>
<li>This is the most important step. Forget everything about the existing product. Eliminate it from your brain.</li>
<li>Develop the new product in the Agile way. Find out what the customer wants to do and build software that enables them to do it. Do it incrementally and get as much feedback as you can.</li>
<li>Always, always challenge your assumptions. It is tempting to assume that the product has to work like the old one, or that you should do something that you wanted to do in the old one but never did. Forget it. Build what the customer needs.</li>
</ol>
<p>It is worth repeating (again) that this is not a situation to enter lightly. You already have a product that is designed to meet this need. There is a real good chance you are throwing good money after bad. However, if you are going to do it, do it right &#8212; forget what you think you know. Start from the beginning. Learn at every turn.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bigvisible.com/2010/07/should-we-build-it-again/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile and Re-Engineering</title>
		<link>http://www.bigvisible.com/2010/07/agile-and-re-engineering/</link>
		<comments>http://www.bigvisible.com/2010/07/agile-and-re-engineering/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 21:38:35 +0000</pubDate>
		<dc:creator>Adam Sroka</dc:creator>
				<category><![CDATA[No Tags]]></category>

		<guid isPermaLink="false">http://www.bigvisible.com/?p=842</guid>
		<description><![CDATA[Agile software development is really a product development strategy. Scrum has its origins in product development.  If you read the Agile Manifesto there are all sorts of hints that we are talking about developing software as a product that is valuable to some known customer.  That is product development. Re-engineering is the activity of changing [...]]]></description>
			<content:encoded><![CDATA[<p>Agile software development is really a product development strategy. Scrum has its <a title="history of Scrum" href="http://en.wikipedia.org/wiki/Scrum_(development)#History">origins </a>in product development.  If you read the <a title="priciples behind the Agile Manifesto" href="http://agilemanifesto.org/principles.html">Agile Manifesto</a> there are all sorts of hints that we are talking about developing software as a product that is valuable to some known customer.  That is product development.</p>
<p>Re-engineering is the activity of changing (hopefully to improve) the structure and design of software. It is distinct from refactoring which is a <a title="refactoring" href="http://www.refactoring.com/">specific technique</a>. Refactoring can be used to re-engineer, but it can also be used to incrementally improve the design as we add new capabilities. Re-engineering does not have to follow the contract of refactoring (small incremental design changes that preserve observable behavior.) In fact, re-engineering is often done to improve a system by changing its behavior, but not necessarily its user functionality.</p>
<p>If the last sentence in the preceding paragraph doesn&#8217;t scare you then I have not yet done the job I intend to do.</p>
<p>Re-engineering is not product development, because it is not primarily concerned with creating useful functionality for customers. Re-engineering can be customer driven, but it tends to be somewhat indirectly customer driven. It tends to be concerned with things that are traditionally considered architectural properties: performance, scalability, security, quality, usability, consistency, etc.  The customer might be saying, &#8220;This app does what I need, but it is too slow.&#8221; Something like that may drive us to re-engineer.</p>
<p>Re-engineering is highly problematic from an Agile point of view. We are not producing functionality. We are not working from user facing stories. There may be business value to what we are doing (such as improving the performance of our application) but it is not directly measurable business value in most cases.</p>
<p>Re-engineering is also too often driven by technical concerns within the team (or its management). We didn&#8217;t build it as well as we wish we had. We have learned new things now, and we want to incorporate them.</p>
<p>Learning is the key. Agile is all about learning. The feedback mechanisms in Agile processes are designed to help us learn as we go. The intent is that we will apply this learning immediately rather than waiting until some future (&#8220;post mortem&#8221;) time to re-evaluate.</p>
<p>For a functional Agile team these learning mechanisms exist at multiple (somewhat redundant) levels: TDD has tiny learning cycles that are as small as a few seconds to a few minutes. Each time a test passes or fails we have learned something. Continuous Integration is a learning cycle (Especially if we have an <a title="Informative Build" href="http://www.bigvisible.com/asroka/informative-build/">Informative Build</a>.) When the build passes or fails we are meant to learn something. Stories, in the form of <a title="Card-Conversation-Confirmation" href="http://xprogramming.com/articles/expcardconversationconfirmation/">Card-Conversation-Confirmation</a> are learning cycles. Releases, and the consequent customer feedback, are learning cycles. Each time we do these things we learn, and each time we learn we are meant to <strong>immediately </strong>attempt to improve.</p>
<p>Re-engineering is a poor business proposition. We are spending additional money on a product that is already functional. The return on that investment is hard to anticipate. We can tell the customers that we have improved the product in some ways that they may or may not be able to appreciate (or even notice.) Therefore, the risk is very high, and the best case outcome is the the product does a slightly better job doing what it already does.</p>
<p>Agile is not compatible with re-engineering. Agile is an <em>alternative </em>to re-engineering. Agile expects us to refactor our design and to incorporate our changing understanding (i.e. learning) as we develop our product, not after the fact.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bigvisible.com/2010/07/agile-and-re-engineering/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The C Word</title>
		<link>http://www.bigvisible.com/2010/05/the-c-word/</link>
		<comments>http://www.bigvisible.com/2010/05/the-c-word/#comments</comments>
		<pubDate>Sun, 30 May 2010 03:24:56 +0000</pubDate>
		<dc:creator>Adam Sroka</dc:creator>
				<category><![CDATA[No Tags]]></category>

		<guid isPermaLink="false">http://www.bigvisible.com/?p=829</guid>
		<description><![CDATA[Uncle Bob Martin says programmer certification is bad. He supposes that if you start giving out certifications to people that someone will assume those certifications mean something. They will start hiring certified people preferentially, or stop hiring non-certified people entirely. This would be bad, because certification is almost certainly a poor measure of whether you [...]]]></description>
			<content:encoded><![CDATA[<p>Uncle Bob Martin says programmer certification is bad. He supposes that if you start giving out certifications to people that someone will assume those certifications mean something. They will start hiring certified people preferentially, or stop hiring non-certified people entirely. This would be bad, because certification is almost certainly a poor measure of whether you should hire someone. Uncle Bob is right.</p>
<p>Ron Jeffries suggests that the Scrum Alliance ought to just drop the word certification. He asserts that sending people to classes is useful because they get exposed to ideas that they may not be adequately exposed to otherwise. However, going to a class should not be called &#8220;certification,&#8221; because it is imprecise and alienates parts of the community it means to serve. Ron is right.</p>
<p>Tobias Mayer has complained that the new Certified Scrum Developer course is no better than the Certified Scrum Master course since both are merely a couple days of training during which a human being can only retain so much. Tobias is wrong for a number of reasons. First of all, he&#8217;s not really in a position to judge something he&#8217;s never seen or done. He is also wrong because the CSD class has the one thing that all of the official Scrum Alliance classes have lacked to date &#8211; relevance to software development.</p>
<p>Attendees of a CSD class have to write software. This is supposed to have something to do with Agile, and the Manifesto says we value working software. So, maybe we should write some? Tobias is right to say that this isn&#8217;t enough, but it is the very first step in the right direction&#8230; ever.</p>
<p>I believe that it is absolutely valuable to attend a CSM or CSD course. The CSM course ought to be called, &#8220;Intro to Scrum: Do Not Try This At Home.&#8221; The CSD course ought to be called, &#8220;Intro to Extreme Programming: No Really, Someone Might Get Hurt.&#8221; The two of them together are barely a starting point. They are a little bit better than reading a book and trying to get someone to pay you to attempt what it says (The way many of us learned, including myself.) They still aren&#8217;t enough by themselves.</p>
<p>To be able to do this stuff well, I think you need at least the following things:</p>
<ol>
<li>A commitment to do your very best and always strive to do a bit better each time.</li>
<li>Some experience attempting these practices in a setting where mistakes don&#8217;t matter: a user group, a class, doing katas on your own or with friends or coworkers.</li>
<li>Access to people who have gone before you so that you can listen and learn from their experiences, and a willingness to do so.</li>
<li>Plenty of time for these ideas to ferment and turn into something useful.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.bigvisible.com/2010/05/the-c-word/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

