<?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>Tools For Agile Blog &#187; Agile in small steps</title>
	<atom:link href="http://toolsforagile.com/blog/archives/category/agile-in-small-steps/feed" rel="self" type="application/rss+xml" />
	<link>http://toolsforagile.com/blog</link>
	<description></description>
	<lastBuildDate>Thu, 24 Nov 2011 18:41:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Agile in small steps #4: Continuous Integration</title>
		<link>http://toolsforagile.com/blog/archives/44/agile-in-small-steps-4-continuous-integration</link>
		<comments>http://toolsforagile.com/blog/archives/44/agile-in-small-steps-4-continuous-integration#comments</comments>
		<pubDate>Sat, 05 May 2007 10:43:11 +0000</pubDate>
		<dc:creator>siddharta</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Agile in small steps]]></category>

		<guid isPermaLink="false">http://www.silverstripesoftware.com/blog/archives/44</guid>
		<description><![CDATA[This post is part of the Agile in small steps series. For a complete list of posts in this series, click here. I&#8217;m sure you&#8217;ve been in some projects where integration happens in one big bang at the end of the project — and that&#8217;s when everyone discovers that the components don&#8217;t work together. The [...]]]></description>
			<content:encoded><![CDATA[<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Ftoolsforagile.com%2Fblog%2Farchives%2F44%2Fagile-in-small-steps-4-continuous-integration&amp;layout=standard&amp;show_faces=no&amp;width=250&amp;action=like&amp;font=arial&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:250px; height:25px"></iframe><p>This post is part of the <a title="Agile in small steps" href="http://www.silverstripesoftware.com/blog/archives/37">Agile in small steps</a> series. For a complete list of posts in this series, <a title="Agile in small steps category" href="http://www.silverstripesoftware.com/blog/archives/category/agile-in-small-steps/">click here</a>.</p>
<p>I&#8217;m sure you&#8217;ve been in some projects where integration happens in one big bang at the end of the project — and that&#8217;s when everyone discovers that the components don&#8217;t work together.</p>
<p>The idea with continuous integration is to learn about potential problems earlier in development, and what better way to catch integration problems than to integrate frequently and look out for errors?</p>
<p><span id="more-44"></span></p>
<p>Continuous integration is the culmination of the three steps we saw previously — Unit testing, Version control and One step release build. With continuous integration, you integrate all the components of your product as frequently as possible. In some cases this might be once a day. In other cases this might be once an hour.</p>
<p>Here is how it works: A script or tool checks out the workspace once an hour, runs the one step release build script, then verifies everything by running automated tests. Naturally version control, one step builds and unit testing are prerequisites.</p>
<p>Smarter scripts and tools can perform an integration after every checkin, at a prescribed schedule, and a whole lot more, but those are extras. As long as a build and test of the code in the repository happens at a regular interval, its continuous integration.</p>
<p>Continuous integration can also be done manually. How? After every checkin, a developer goes to the build machine, checks out the latest code, runs the build script and runs the tests. Thats continuous integration too, only a bit more painful.</p>
<p>The good news is that there are a whole bunch of continuous integration tools, some with a bunch of extra features and integration with various tools. Most of them save the built artifacts so that you can always get hold of a working copy of the binary at any particular time. Some have web interfaces which show you the past builds and their status, plus metrics and so on. Like I said before, these are all just extras. Useful extras, but extras nonetheless.</p>
<p>The main purpose of continuous integration is to build often and find problems early. Just as how unit tests provide rapid feedback at the code level, continuous integration provides rapid feedback at the integration level.</p>
<p><strong>Further Reading</strong></p>
<ol>
<li><a title="Martin Fowler on Continuous Integration" href="http://www.martinfowler.com/articles/continuousIntegration.html">Martin Fowler on Continuous Integration</a></li>
<li><a title="A comparision of continuous integration tools" href="http://damagecontrol.codehaus.org/Continuous+Integration+Server+Feature+Matrix">A comparision of continuous integration tools</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://toolsforagile.com/blog/archives/44/agile-in-small-steps-4-continuous-integration/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile in small steps #3: The one step release build</title>
		<link>http://toolsforagile.com/blog/archives/40/agile-in-small-steps-3-the-one-step-release-build</link>
		<comments>http://toolsforagile.com/blog/archives/40/agile-in-small-steps-3-the-one-step-release-build#comments</comments>
		<pubDate>Thu, 19 Apr 2007 05:40:29 +0000</pubDate>
		<dc:creator>siddharta</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Agile in small steps]]></category>

		<guid isPermaLink="false">http://www.silverstripesoftware.com/blog/archives/40</guid>
		<description><![CDATA[This post is part of the Agile in small steps series. For a complete list of posts in this series, click here. Is this how you currently make a release? Check out code from version control Execute the build script for each module Execute a script to integrate all the modules Execute a program to [...]]]></description>
			<content:encoded><![CDATA[<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Ftoolsforagile.com%2Fblog%2Farchives%2F40%2Fagile-in-small-steps-3-the-one-step-release-build&amp;layout=standard&amp;show_faces=no&amp;width=250&amp;action=like&amp;font=arial&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:250px; height:25px"></iframe><p>This post is part of the <a title="Agile in small steps" href="http://www.silverstripesoftware.com/blog/archives/37">Agile in small steps</a> series. For a complete list of posts in this series, <a title="Agile in small steps category" href="http://www.silverstripesoftware.com/blog/archives/category/agile-in-small-steps/">click here</a>.</p>
<p>Is this how you currently make a release?</p>
<ol>
<li>Check out code from version control</li>
<li>Execute the build script for each module</li>
<li>Execute a script to integrate all the modules</li>
<li>Execute a program to create an installer</li>
<li>Execute a script to create a CD image/Package the files into an exe/jar/war/&#8230;</li>
<li>Copy the built code to another machine/Hand over the built code to QA</li>
<li>Install/Deploy the application</li>
<li>Test the application</li>
<li>Release the application</li>
</ol>
<p>Wouldn&#8217;t it be better if you could do something like this instead:</p>
<ol>
<li>Execute release script</li>
</ol>
<p>Impossible? Not so. The technique is to take it one step at a time.</p>
<p><span id="more-40"></span></p>
<p>Start out with a script that just checks out code from version control. Most build tool like ant have support for a variety of version control systems. Most version control systems have a command line interface, so even if your build tool does not have version control integration, you can write a script to execute the appropriate command. For instance, I use a python script to perform my builds.</p>
<p>Once that is done, add each step one by one. So the next step would be to create a script that will build your code base. Then add a line in your main build script to call this build script.</p>
<p>Next, make your unit tests execute from the command line. Then add that into your main build.</p>
<p>Keep going like this one step at a time and pretty soon you will have a one step release build.</p>
<p>If you are working on a standard platform, like Java for instance, you can use tools like ant which will integrate with a whole lot of standard build components like JUnit, other ant scripts and the like. Sometimes you are not working on such a system in which case you will need to do a bit more work to integrate everything.</p>
<p>Here is what my build system for Silver Catalyst does:</p>
<ol>
<li>Copies the python application data, template files, javascript files to the appropriate locations</li>
<li>Compresses the javascript files to be smaller</li>
<li>Compiles the plugin code and copies the compiled plugin code to the plugin folder</li>
<li>Copies the default database and license keys</li>
<li>Runs the python unit tests and generates a coverage report</li>
<li>Runs the javascript unit tests</li>
<li>Combines the application module, framework module, embedded server and database into a single executable</li>
<li>Runs the install program to package everything into a single installer</li>
</ol>
<p>It is still not complete. On the To do list:</p>
<ol>
<li>Check out fresh code from the repository at the start</li>
<li>Accept the version number as a parameter and replace it in all the documents, code and installer</li>
<li>After the build is done, tag the repository</li>
</ol>
<p>The advantages of a one step release build are</p>
<ol>
<li><strong>Easy to make releases</strong>: If you are going to be making frequent releases, then this is very important. You do not want to be spending two days on a release when you are on a two week (10 day) release cycle.</li>
<li><strong>Less chance of human error</strong>: This is again very common. Before automating the release, there were always situations where you forgot to put in the documentation or missed a configuration file. An automated release eliminates this error.</li>
<li><strong>You can make a release from the command line</strong>: I&#8217;ll talk about continuous integration in a future post where this point will play an important role</li>
</ol>
<p><strong>Further reading</strong></p>
<ol>
<li><a title="Daily builds are your friend" href="http://www.joelonsoftware.com/articles/fog0000000023.html">The daily build</a></li>
<li><a title="The ten minute build" href="http://www.jamesshore.com/Agile-Book/ten_minute_build.html">The ten minute build</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://toolsforagile.com/blog/archives/40/agile-in-small-steps-3-the-one-step-release-build/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile in small steps #2: Does your project use a version control system?</title>
		<link>http://toolsforagile.com/blog/archives/39/agile-in-small-steps-2-does-your-project-use-a-version-control-system</link>
		<comments>http://toolsforagile.com/blog/archives/39/agile-in-small-steps-2-does-your-project-use-a-version-control-system#comments</comments>
		<pubDate>Fri, 13 Apr 2007 05:47:54 +0000</pubDate>
		<dc:creator>siddharta</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Agile in small steps]]></category>

		<guid isPermaLink="false">http://www.silverstripesoftware.com/blog/archives/39</guid>
		<description><![CDATA[This post is part of the Agile in small steps series. For a complete list of posts in this series, click here. Okay, this is not an agile specific practice, but I had to put it in only because I&#8217;m often baffled by the answer. At first I thought this was a dumb question. Every [...]]]></description>
			<content:encoded><![CDATA[<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Ftoolsforagile.com%2Fblog%2Farchives%2F39%2Fagile-in-small-steps-2-does-your-project-use-a-version-control-system&amp;layout=standard&amp;show_faces=no&amp;width=250&amp;action=like&amp;font=arial&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:250px; height:25px"></iframe><p>This post is part of the <a title="Agile in small steps" href="http://www.silverstripesoftware.com/blog/archives/37">Agile in small steps</a> series. For a complete list of posts in this series, <a title="Agile in small steps category" href="http://www.silverstripesoftware.com/blog/archives/category/agile-in-small-steps/">click here</a>.</p>
<p>Okay, this is not an agile specific practice, but I had to put it in only because I&#8217;m often baffled by the answer. At first I thought this was a dumb question. Every project uses a version control system right? <em>Right</em>? Well, no.</p>
<p>This never fails to surprise me.</p>
<p><span id="more-39"></span></p>
<p>One of my friends who used to work in a large, well known, consulting organisation (>100,000 employees, offices in >40 countries) told me that his project didn&#8217;t use version control. All files were placed in a shared folder. To &#8220;check out&#8221;, you would copy the files to your desktop and make changes. To &#8220;check in,&#8221; you merge your changes back into the shared folder. Merging was often too much of a hassle, so they just copied the files over. If someone else had made a change&#8230; well, they can change it again right? To &#8220;update&#8221;.. well no one ever did an update anyway. What if you mess up? Simple! Everyday, a dated copy of the folder was made as a &#8220;backup&#8221;.</p>
<p>At first I was surprised and thought that this was an exception, until I found many people who had a habit of backing up their workspace regularly. When I enquired, I found that the companies that they had previously worked in didnt use version control, and they got into the habit of backing up their workspace.</p>
<p>If there is one simple thing that you can do to ease your development work, it has got to be version control. <a title="Subversion" href="http://subversion.tigris.org/">Subversion</a> is pretty good and its free, so there is absolutely no reason not to have version control on your project. If you have multiple developers working on a project, you just have to have some sort of source control. Heck, I often use it even when I&#8217;m working alone.</p>
<p>Here is what version control gives you</p>
<ul>
<li>Store multiple versions of a file (Not much of a version control system without this&#8230;)</li>
<li>Allow multiple developers to work on the same codebase concurrently</li>
<li>See who wrote which part of the code</li>
<li>Branch and merge codelines</li>
<li>Tag versions so that you can always get back a particular set of files</li>
<li>Coordinate all the developers</li>
<li>See changes made between any two revisions and who made the change</li>
</ul>
<p>Apart from storing your source code, you can also use version control to store a whole lot of other stuff like scripts, configuration files, test plans, test cases, requirements and other documents, third party libraries and so on.<br />
With so many benefits, version control is a must have.</p>
]]></content:encoded>
			<wfw:commentRss>http://toolsforagile.com/blog/archives/39/agile-in-small-steps-2-does-your-project-use-a-version-control-system/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile in small steps #1: Unit testing</title>
		<link>http://toolsforagile.com/blog/archives/38/agile-in-small-steps-1-unit-testing</link>
		<comments>http://toolsforagile.com/blog/archives/38/agile-in-small-steps-1-unit-testing#comments</comments>
		<pubDate>Tue, 10 Apr 2007 07:45:12 +0000</pubDate>
		<dc:creator>siddharta</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Agile in small steps]]></category>

		<guid isPermaLink="false">http://www.silverstripesoftware.com/blog/archives/38</guid>
		<description><![CDATA[This post is part of the Agile in small steps series. For a complete list of posts in this series, click here. One of the core principles of agile software development is to get rapid feedback and adjust accordingly. It goes without saying then, that the quicker you can get feedback the faster you can [...]]]></description>
			<content:encoded><![CDATA[<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Ftoolsforagile.com%2Fblog%2Farchives%2F38%2Fagile-in-small-steps-1-unit-testing&amp;layout=standard&amp;show_faces=no&amp;width=250&amp;action=like&amp;font=arial&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:250px; height:25px"></iframe><p>This post is part of the <a title="Agile in small steps" href="http://www.silverstripesoftware.com/blog/archives/37">Agile in small steps</a> series. For a complete list of posts in this series, <a title="Agile in small steps category" href="http://www.silverstripesoftware.com/blog/archives/category/agile-in-small-steps/">click here</a>.</p>
<p>One of the core principles of agile software development is to get rapid feedback and adjust accordingly. It goes without saying then, that the quicker you can get feedback the faster you can adapt. One of the simplest ways of reducing this time is by unit testing your own code.</p>
<p><span id="more-38"></span></p>
<p>Imagine this: You write some code for a few days, then check it into version control. A month later a build goes to QA. A few weeks after that a bug report is filed. Then the bug is triaged and assigned. By the time the bug comes back to you for fixing you&#8217;ve forgotten the code you were working on. Familiar?</p>
<p>Had you written unit tests, you would have caught the bug right when you were working on the code.</p>
<p>Writing unit tests have a number of advantages</p>
<ol>
<li>It clarifies the requirements in your mind. You understand the expected outcome better.</li>
<li>It reduces the feedback cycle from coding to bug detection</li>
<li>It allows you to run through all the tests quickly</li>
</ol>
<p>The nice thing about unit testing is that you are not dependent on anyone else to adopt this practice. If you are a developer, you can unit test your own code even if no one else in the company is doing it. If you are a project manager, you can adopt unit testing for your team even if none of the other teams are doing it. Most languages have a simple and standard unit testing framework that is easy to use. Learn it and use it.</p>
<p>If you take unit testing a step further and introduce it to the whole team, a few more advantages come up</p>
<ol>
<li>Unit tests act as regression tests and can be run on a regular schedule</li>
<li>Because unit tests are automated, you can run it at a much higher frequency than manual tests</li>
<li>Unit tests help with refactoring messy code</li>
<li>Unit testing can be integrated into a continuous integration system</li>
<li>Making code testable improves the design of the code by reducing external dependencies.</li>
</ol>
<p>So thats agile in small steps #1: Unit testing</p>
]]></content:encoded>
			<wfw:commentRss>http://toolsforagile.com/blog/archives/38/agile-in-small-steps-1-unit-testing/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile in small steps</title>
		<link>http://toolsforagile.com/blog/archives/37/agile-in-small-steps</link>
		<comments>http://toolsforagile.com/blog/archives/37/agile-in-small-steps#comments</comments>
		<pubDate>Mon, 09 Apr 2007 03:58:52 +0000</pubDate>
		<dc:creator>siddharta</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Agile in small steps]]></category>

		<guid isPermaLink="false">http://www.silverstripesoftware.com/blog/archives/37</guid>
		<description><![CDATA[There is a lot of literature on the Internet about adopting agile processes for software development. Most of it involves big change like changing the culture of your organisation or reconfiguring the team structure. In order for these changes to be successful, they require solid support from every stakeholder. Executives, team members, even customers have [...]]]></description>
			<content:encoded><![CDATA[<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Ftoolsforagile.com%2Fblog%2Farchives%2F37%2Fagile-in-small-steps&amp;layout=standard&amp;show_faces=no&amp;width=250&amp;action=like&amp;font=arial&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:250px; height:25px"></iframe><p>There is a lot of literature on the Internet about adopting agile processes for software development. <a title="5 dangers when adopting agile processes - and what to do about them" href="http://www.silverstripesoftware.com/blog/archives/6">Most of it</a> involves big change like changing the culture of your organisation or reconfiguring the team structure. In order for these changes to be successful, they require solid support from every stakeholder. Executives, team members, even customers have to back the changes.</p>
<p>To get the maximum benefits, it helps when everyone has the agile culture and mindset. But what do you do if you don&#8217;t have this support? Are there any steps that you can take to get better?</p>
<p>In this series, I&#8217;ll take a look at some ideas and practices that can help you start getting agile without the need for complete organisational support.</p>
]]></content:encoded>
			<wfw:commentRss>http://toolsforagile.com/blog/archives/37/agile-in-small-steps/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

