<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>The AGiLE ANiMAL INC blog.</description><title>anml</title><generator>Tumblr (3.0; @agileanimal)</generator><link>http://blog.agileanimal.com/</link><item><title>Iterate 1.1.2 an iPhone App for Pivotal Tracker</title><description>&lt;h2&gt;&lt;a href="http://itunes.apple.com/app/iterate/id393908267" target="_blank"&gt;Iterate 1.1.2&lt;/a&gt; is Available in the App Store&lt;/h2&gt;

&lt;p&gt;Today we released an update to &lt;a href="http://itunes.apple.com/app/iterate/id393908267" target="_blank"&gt;Iterate&lt;/a&gt;, our iPhone client for &lt;a href="http://www.pivotaltracker.com" target="_blank"&gt;Pivotal Tracker&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This small bug fix to Iterate extends our timeout (or the amount of time that we wait for a server to respond to a request for information).&lt;/p&gt;

&lt;p&gt;Iterate is great because right from your iPhone you can:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Access your projects on the go including your Current Iteration, Backlog and Icebox. (To access everything you need to turn on some goodies in settings)&lt;/li&gt;
&lt;li&gt;Update the status, estimate or owner of a story.&lt;/li&gt;
&lt;li&gt;Add a label, note, task or attachment to a story.&lt;/li&gt;
&lt;li&gt;Mark tasks as being complete.&lt;/li&gt;
&lt;li&gt;Add a new story to your Icebox.&lt;/li&gt;
&lt;li&gt;Start a story in your Backlog or Icebox.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;If you are using Iterate please check out the settings. We have turned off a lot of features that consume data to ensure that people with large projects don&amp;#8217;t have trouble - but if your projects are smaller there are some goodies you can turn back on.&lt;/p&gt;

&lt;h2&gt;What&amp;#8217;s Next?&lt;/h2&gt;

&lt;p&gt;At this point we&amp;#8217;d really like to hear from people using Iterate to know what direction we need to take next.&lt;/p&gt;

&lt;p&gt;We think we have the best app out there for accessing Pivotal Tracker on the go. But that&amp;#8217;s just us. What do you think?&lt;/p&gt;

&lt;p&gt;How can we make Iterate better?&lt;/p&gt;</description><link>http://blog.agileanimal.com/post/1984447251</link><guid>http://blog.agileanimal.com/post/1984447251</guid><pubDate>Tue, 30 Nov 2010 03:03:00 -0500</pubDate><category>iterate</category><category>pivotal tracker</category><category>iphone</category><category>ios</category><category>ios4</category><dc:creator>markcm</dc:creator></item><item><title>Network Compatibility for Rogers</title><description>&lt;h2&gt;Rogers 3G/3.5G runs on 850/1900&lt;/h2&gt;

&lt;p&gt;No matter what people tell you about phone compatibility, you need both bands to be sure you will get full coverage. &lt;a href="http://www.gsmworld.com/roaming/gsminfo/net_car3.shtml" target="_blank"&gt;Full details on the GSMA website&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you poke around you&amp;#8217;ll see that Rogers also owns some 1700 spectrum. It is not in use at this point in time.&lt;/p&gt;

&lt;p&gt;Also, the GSMA seems to think that Fido operates their 3G on 2100 but I am under the impression that this is not the case - they use 850/1900 just like Rogers.&lt;/p&gt;

&lt;h2&gt;The Punchline&lt;/h2&gt;

&lt;p&gt;If someone is trying to sell you an unlocked phone and you want to use it in Canada it needs to have the 850 and 1900 bands.&lt;/p&gt;</description><link>http://blog.agileanimal.com/post/1030035449</link><guid>http://blog.agileanimal.com/post/1030035449</guid><pubDate>Fri, 16 Jul 2010 07:23:00 -0400</pubDate><category>rogers</category><category>hspa</category><category>gsma</category><category>gsm</category><dc:creator>markcm</dc:creator></item><item><title>Nexus One WiFi Issues on Android 2.1 and 2.2</title><description>&lt;h2&gt;The Nexus One WiFi Issue&lt;/h2&gt;

&lt;p&gt;I read an article on &lt;a href="http://www.boygeniusreport.com/2010/07/14/some-nexus-one-users-experiencing-wi-fi-connectivity-issues/" target="_blank"&gt;BGR on users reporting WiFi issues with the Nexus One&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I actually am experiencing the issue - so let me provide some insight.&lt;/p&gt;

&lt;h2&gt;The Problem: Reconnecting to WiFi&lt;/h2&gt;

&lt;p&gt;When the Nexus One goes to sleep (turns off it&amp;#8217;s display) the default behavior is to disconnect from WiFi - I assume to save power.  When you wake the device back up it is supposed to connect to your WiFi network automatically. The problem is that this never happens.&lt;/p&gt;

&lt;p&gt;The Nexus One gets itself into a state where is disables reconnections to the WiFi network and won&amp;#8217;t try to connect again unless prompted: this can include rebooting, turning WiFi off then on again, or telling it to connect to the network.&lt;/p&gt;

&lt;p&gt;Part of the issue seems to involve leaving the home-screen before WiFi connects. Could be coincidence - not sure.&lt;/p&gt;

&lt;p&gt;Another potential coincidence is that I don&amp;#8217;t seem to experience the issue at my office. Pretty much the same WiFi both places though, Apple AirPort Extremes. The only difference might be Airport versions.&lt;/p&gt;

&lt;h2&gt;This is Actually a &amp;#8220;New&amp;#8221; Issue&lt;/h2&gt;

&lt;p&gt;What do I mean by that? The Nexus One in question is actually my second and my original Nexus One did not exhibit this behavior. It would connect to WiFi without prompting.&lt;/p&gt;

&lt;p&gt;This doesn&amp;#8217;t mean it is hardware related. But it could very well be. Equally likely that a firmware issue can fix it.&lt;/p&gt;

&lt;h2&gt;The Solution&lt;/h2&gt;

&lt;p&gt;There isn&amp;#8217;t one at this point short of installing a 3rd party app that reconnects you once your WiFi drops out.&lt;/p&gt;

&lt;p&gt;Hope Google gets to the bottom of this one soon.&lt;/p&gt;

&lt;h4&gt;UPDATE&lt;/h4&gt;

&lt;p&gt;It appears to be a chipset issue after all involving the WiFi sleep mode and certain routers. It is also the case that it should be fixable in software.&lt;/p&gt;</description><link>http://blog.agileanimal.com/post/1030032124</link><guid>http://blog.agileanimal.com/post/1030032124</guid><pubDate>Fri, 16 Jul 2010 03:15:00 -0400</pubDate><category>Google</category><category>Nexus One</category><dc:creator>markcm</dc:creator></item><item><title>Froyo on the Nexus One - this is the Droid you are looking for.</title><description>&lt;h2&gt;Android 2.2 Previewed at Google IO&lt;/h2&gt;

&lt;p&gt;Well, it was more than previewed - Google actually let it out into the wild for a bit where Nexus One users with the AWS version of the phone (think T-Mobile or WIND) were able to update.&lt;/p&gt;

&lt;p&gt;The update has since been pulled (search and ye shall find, though) but I tossed it on my Nexus One and gave it a once over.&lt;/p&gt;

&lt;h2&gt;Tethering FTW&lt;/h2&gt;

&lt;p&gt;Android 2.2 adds WiFi tethering. This really is &lt;em&gt;the&lt;/em&gt; killer feature, especially if you are packing a WiFi only iPad.&lt;/p&gt;

&lt;p&gt;It is super simple to setup and works like a charm.&lt;/p&gt;

&lt;h2&gt;Flash Support (Not that I want it.)&lt;/h2&gt;

&lt;p&gt;Android 2.2 also adds support for Flash - not that I&amp;#8217;d suggest installing it or turing it on.&lt;/p&gt;

&lt;p&gt;Of the three people that cheered when this was announced, two work for Adobe and one makes CPU hogging Flash ads for websites.&lt;/p&gt;

&lt;h2&gt;GUI Updates&lt;/h2&gt;

&lt;p&gt;Google is starting to add a bit more polish to the Vanilla Android GUI. For example, quick access to your phone or browser is now available from the home screen.&lt;/p&gt;

&lt;p&gt;I would expect this to be kicked into overdrive with Android 3.0 whenever we see it. Google has hired a key player from Palm&amp;#8217;s WebOS team and I would expect that to significantly improve the look of the stock Android OS.&lt;/p&gt;

&lt;h2&gt;Nexus One and Android&lt;/h2&gt;

&lt;p&gt;The killer combo really comes from two things, hardware and software.&lt;/p&gt;

&lt;h4&gt;Hardware&lt;/h4&gt;

&lt;p&gt;If you have ever held a Nexus One you know the hardware is amazing. HTC really knows how to make a great phone that is sleek and sexy. The OLED display is the best I have seen on a phone.&lt;/p&gt;

&lt;h4&gt;Software&lt;/h4&gt;

&lt;p&gt;Android is the perfect OS if you are a GMail or Google Apps user. There simply isn&amp;#8217;t another platform besides Android that does justice to GMail in a mobile environment.&lt;/p&gt;

&lt;h2&gt;The Punchline&lt;/h2&gt;

&lt;p&gt;When you combine great hardware with great software you win. The experience would be perfect if it didn&amp;#8217;t &lt;em&gt;look&lt;/em&gt; like Google.&lt;/p&gt;</description><link>http://blog.agileanimal.com/post/1030029048</link><guid>http://blog.agileanimal.com/post/1030029048</guid><pubDate>Sat, 05 Jun 2010 06:08:00 -0400</pubDate><category>android</category><category>google</category><category>nexus one</category><dc:creator>markcm</dc:creator></item><item><title>Still No Flash on the iPhone. Why the Surprise?</title><description>&lt;h2&gt;Disclaimer&lt;/h2&gt;

&lt;p&gt;Look, I am totally making this all up. I have no idea what Adobe or Apple is thinking.&lt;/p&gt;

&lt;p&gt;However, in my twisted imagination, this is how this whole Flash/iPhone situation went down&amp;#8230;&lt;/p&gt;

&lt;h2&gt;I can imagine the conversation&amp;#8230;&lt;/h2&gt;

&lt;p&gt;This is how I imagine the conversation going a couple years ago when Adobe first tried to bring flash to the iPhone:&lt;/p&gt;

&lt;blockquote&gt;

&lt;i&gt;&lt;b&gt;ADOBE:&lt;/b&gt;&lt;/i&gt; So, how about adding flash support to the iPhone? &lt;br/&gt;&lt;i&gt;&lt;b&gt;APPLE:&lt;/b&gt;&lt;/i&gt; Yeah, no thanks. We&amp;#8217;re not really crazy about how it works on OSX.&lt;br/&gt;&lt;i&gt;&lt;b&gt;ADOBE:&lt;/b&gt;&lt;/i&gt; Um, pretty please.&lt;br/&gt;&lt;i&gt;&lt;b&gt;APPLE:&lt;/b&gt;&lt;/i&gt; Yeah, no.&lt;br/&gt;&lt;i&gt;&lt;b&gt;ADOBE:&lt;/b&gt;&lt;/i&gt; What if we build a Flash cross-compiler that creates native iPhone Apps. That will be much better, right?&lt;br/&gt;&lt;i&gt;&lt;b&gt;APPLE:&lt;/b&gt;&lt;/i&gt; Still no.&lt;br/&gt;&lt;i&gt;&lt;b&gt;ADOBE:&lt;/b&gt;&lt;/i&gt; Well, just in case you change your mind we&amp;#8217;ll build one anyways.&lt;br/&gt;&lt;i&gt;&lt;b&gt;APPLE:&lt;/b&gt;&lt;/i&gt; Don&amp;#8217;t call us. We&amp;#8217;ll call you&amp;#8230;&lt;br/&gt;&lt;/blockquote&gt;

&lt;h2&gt;Why the surprise?&lt;/h2&gt;

&lt;p&gt;I am not sure why anyone, including Adobe, is surprised about the announcement. I cannot image a world where Apple would let this happen. They said &amp;#8220;NO&amp;#8221; to Flash on the iPhone browser - why would this be different.&lt;/p&gt;

&lt;p&gt;This really is the main thing that gets me: I can&amp;#8217;t believe that Adobe had the expectation that Apple would just sign off on this. I am going to assume that they new this all along. So then the real question is:  why build and publicize a feature that Adobe &lt;i&gt;KNOWS&lt;/i&gt; is going to be rejected by Apple?&lt;/p&gt;

&lt;h2&gt;And, why build something you KNOW Apple will reject?&lt;/h2&gt;

&lt;p&gt;Let&amp;#8217;s pretend to be Adobe. Years of being on 99.9% of all browsers and then two things happen: Apple publicly denounces support for Flash on their Mobile platform (which is really starting to pick up steam) and people really start talking about Flash alternatives and HTML5.&lt;/p&gt;

&lt;p&gt;That is not going to make you happy. iPhone, arguably the most advanced mobile platform ever, thumbing it&amp;#8217;s nose at Flash. It is going to be hard to explain that one to the investors. Apple and Adobe have a difference of opinion on this but it is Apple&amp;#8217;s closed device.&lt;/p&gt;

&lt;p&gt;Well, if Adobe can&amp;#8217;t convince Apple to put Flash on the iPhone, maybe public opinion can. So Adobe starts making its concerns public in an attempt to get support. And while a lot of people agree with them, a lot of people who are tired of Flash crashing their browser start talking about that, and suggest it was simply time to upgrade to HTML5 anyways. Poor Adobe, if anything now HTML5 has more support.&lt;/p&gt;

&lt;p&gt;And this is the point where Adobe decides to build a tool that they KNOW is going to get rejected. If they show it off to developers and get them excited maybe this will be enough.&lt;/p&gt;

&lt;p&gt;So they build a Flash-to-iPhone compiler and make it the &lt;em&gt;tentpole&lt;/em&gt; feature of Flash CS5 in the hopes public opinion will sway Apple in ways that they cannot.&lt;/p&gt;

&lt;p&gt;Days before they can launch Apple explicitly forbids the use of Flash. And the public reacts.&lt;/p&gt;

&lt;h2&gt;How will a Flash/iPhone compiler help me?&lt;/h2&gt;

&lt;p&gt;It won&amp;#8217;t. The App Store is full already. It is bursting at the seams with Apps.&lt;/p&gt;

&lt;p&gt;There may be some developers or publishers that have been waiting for Flash but they have other options. And while those options likely increase the complexity and cost of development they also encourage developers to make apps that are specifically tailored to the iPhone or iPad.&lt;/p&gt;

&lt;p&gt;Most (if not ALL) of the time Apple&amp;#8217;s tools will make a better App.&lt;/p&gt;

&lt;h2&gt;Won&amp;#8217;t this help me as a developer?&lt;/h2&gt;

&lt;p&gt;Nope. It will just lower the bar. It will mean anyone that can use Flash can now publish an App. It will get more Apps in an already difficult to navigate store.&lt;/p&gt;

&lt;p&gt;Differentiation is what allows you to charge for your App.&lt;/p&gt;

&lt;p&gt;The harder it is to create an App the bigger the potential reward for those who do it.&lt;/p&gt;

&lt;h2&gt;Is this going to work?&lt;/h2&gt;

&lt;p&gt;Nope. And as far as I can tell it will likely backfire (if it was done for these reasons I imagine).&lt;/p&gt;

&lt;p&gt;Steve Jobs isn&amp;#8217;t the sort of guy that public pressure works on. He is driven by a purpose larger than public opinion.  Apple is driven by this same purpose.&lt;/p&gt;

&lt;p&gt;It is going to backfire because Adobe has inadvertently started a debate about the relevancy of Flash. And I don&amp;#8217;t think they will be happy with the results. If I was a betting man I would bet on HTML5.&lt;/p&gt;

&lt;h2&gt;The Punchline&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Why develop something that Apple will reject?&lt;/em&gt; Clearly this is a posturing attempt by Adobe to get more public support for their efforts to maintain the relevance of Flash.&lt;/p&gt;

&lt;p&gt;And I think it will be later known as a tactical error.&lt;/p&gt;</description><link>http://blog.agileanimal.com/post/1030025699</link><guid>http://blog.agileanimal.com/post/1030025699</guid><pubDate>Sat, 10 Apr 2010 02:50:00 -0400</pubDate><dc:creator>markcm</dc:creator></item><item><title>Palm webOS 1.3.1 Released: what is fixed, what is broken.</title><description>&lt;h2&gt;webOS 1.3.1 Released&lt;/h2&gt;

&lt;p&gt;Today Palm released webOS 1.3.1. If you hit their support pages you will see a list of the &lt;a href="http://kb.palm.com/wps/portal/kb/na/pre/p100eww/bell/solutions/article/22767_en.html#131" target="_blank"&gt;release notes&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;What was fixed.&lt;/h2&gt;

&lt;p&gt;I had personally reported several issues when if came to the sync of emails and calendars. With one exception (see the what is not list below) I think they have fixed it all. Not a moment too soon - I was ready to give up on the platform due to the email related issues.&lt;/p&gt;

&lt;p&gt;In summary:
 + Email messages still push even when your account hits 50 messages (FINALLY!)
 + Calendars now still sync even with special characters and notes.
 + Exchange related issues seem to be resolved.&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;

&lt;p&gt;I have noticed that the platform is a bit more responsive in certain situations, but generally speaking the speed increases are not as dramatic as previously suggested. Applications still take too long to launch.&lt;/p&gt;

&lt;h2&gt;What was not.&lt;/h2&gt;

&lt;p&gt;I hear that iTunes support is still broken. I don&amp;#8217;t use it myself so I can&amp;#8217;t confirm this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;More importantly Google Calendars (for Google Apps accounts) only sync over EvDO.&lt;/em&gt;&lt;/strong&gt; So if you want your calendar to update you will need to turn off WiFi and then sync. If forcing update doesn&amp;#8217;t work try editing your account settings and simply type in your password again - this got things syncing again for me.&lt;/p&gt;

&lt;h2&gt;The Punchline&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;If your calendar won&amp;#8217;t sync, turn off WiFi and try again.&lt;/em&gt;&lt;/strong&gt; And don&amp;#8217;t hold your breath for iTunes support.&lt;/p&gt;

&lt;p&gt;Everything else with the platform should be fixed.&lt;/p&gt;</description><link>http://blog.agileanimal.com/post/1030022599</link><guid>http://blog.agileanimal.com/post/1030022599</guid><pubDate>Sun, 15 Nov 2009 07:40:00 -0500</pubDate><dc:creator>markcm</dc:creator></item><item><title>The Rogers HSPA+ Rocket Stick &amp; Mac OS X 10.6 Snow Leopard</title><description>&lt;h2&gt;&lt;em&gt;Zero-Install Plug and Play Software&lt;/em&gt; Doesn&amp;#8217;t Mean What You Think&amp;#8230;&lt;/h2&gt;

&lt;p&gt;Okay so before I get to the punchline I am going to rant. Sorry.&lt;/p&gt;

&lt;p&gt;I am used to using Novatel Wireless devices and they have great Mac support. Many have drivers bundled with the OS so you just plug them in and type in the settings. Then you are on the web.&lt;/p&gt;

&lt;p&gt;Clearly a Microsoft Windows user wrote this statement because on a Mac this means that the driver is bundled with the OS (and not on a hidden read-only flash drive on the device). Really, doesn&amp;#8217;t Zero-Install mean you &lt;em&gt;don&amp;#8217;t have to install drivers&lt;/em&gt;. So when I plugged the Rocket Internet Stick into my MacBook and it didn&amp;#8217;t appear in my network settings I was disappointed to say the least.&lt;/p&gt;

&lt;p&gt;Making matters worse for some reason the Rocket Stick (ZTE MF668) didn&amp;#8217;t even work once I installed the drivers. I had the following symptoms on Mac OS X 10.6 (Snow Leopard):&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;The bundled Rogers App does pretty much nothing. It tries to connect but always fails.&lt;/li&gt;
&lt;li&gt;Once the devices is unplugged it is uninstalled along with any network settings preventing manual configuration.&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;The Game Plan&lt;/h2&gt;

&lt;p&gt;Having setup several different Rocket Sticks and similar devices I figured that the best option would be to manually configure the modem. That means we need to accomplish two things - first we need to disable whatever is removing the device from the network settings and then we need to create a manual profile.&lt;/p&gt;

&lt;p&gt;To do this we need to get everything installed first then clean it up. First we will install the package that comes on the Stick. Then we will delete the LaunchDaemon that clears the settings and remove the Rogers App. Finally we will add a Modem profile for the Rocket Stick (ZTE MF668) and enter the Rogers network settings.&lt;/p&gt;

&lt;h2&gt;Installation&lt;/h2&gt;

&lt;p&gt;The first step is to install the provided drivers. They will mount (showing up as a CD on the desktop) when you first plug the device in.&lt;/p&gt;

&lt;p&gt;Once this is done you need to remove the Rogers App (Connection Manager.app) and uninstall the LaunchDaemon that will keep trying to remove any created profiles.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd /Library/LaunchDaemons/
sudo launchctl unload cn.com.zte.PPPMonitor.plist
sudo rm -rf ./cn.com.zte.PPPMonitor.plist

cd /Applications/
sudo rm -rf ./Connection\ Manager.app
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Eventually you should see a popup where you can launch Network Preferences to configure the device.&lt;/p&gt;

&lt;h2&gt;Configuration&lt;/h2&gt;

&lt;p&gt;Now you are staring a the Network Preferences Panel. We need to do a couple things here to get things running. You need to setup the newly added &lt;strong&gt;&lt;em&gt;ZTEUSBModem&lt;/em&gt;&lt;/strong&gt; (you can safely delete the &lt;strong&gt;&lt;em&gt;ZTEUSBATPort&lt;/em&gt;&lt;/strong&gt; if you want - it is just needed for the Rogers Connection Manager).&lt;/p&gt;

&lt;p&gt;First we need to type in basic settings:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Telephone Number: *99#&lt;/li&gt;
&lt;li&gt;Account Name: wapuser1&lt;/li&gt;
&lt;li&gt;Password: wap&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;The click the &lt;em&gt;&amp;#8220;Show modem status in menu bar&amp;#8221;&lt;/em&gt; so you can easily connect.&lt;/p&gt;

&lt;p&gt;The you need to go to Advanced Settings (button in bottom left) and click Advanced. Make sure you are on the Modem tab. Select &lt;strong&gt;&lt;em&gt;Generic&lt;/em&gt;&lt;/strong&gt; as the vendor,  &lt;strong&gt;&lt;em&gt;GPRS (GSM/3G)&lt;/em&gt;&lt;/strong&gt; as the Model and type in  &lt;strong&gt;&lt;em&gt;internet.com&lt;/em&gt;&lt;/strong&gt; as the APN.&lt;/p&gt;

&lt;p&gt;If you want you can rename the USB Modem to something like &amp;#8220;Rocket Stick&amp;#8221; and you can reorder the service so that when plugged in this takes preference over other connections.&lt;/p&gt;

&lt;h2&gt;Using the Modem&lt;/h2&gt;

&lt;p&gt;At this point all you need to do is click connect from the Rocket Stick tab in the Network Preferences.&lt;/p&gt;

&lt;p&gt;If you have enabled it you can also do this from the menu bar by clicking connect directly form there.&lt;/p&gt;

&lt;h2&gt;Final Thoughts.&lt;/h2&gt;

&lt;p&gt;Well, that might have been a little tricky or hard but, trust me, it will be worth it in the end. Rogers has done a great job of expanding their existing 3G coverage and I am looking forward to HSPA+ in Edmonton.&lt;/p&gt;</description><link>http://blog.agileanimal.com/post/1030019351</link><guid>http://blog.agileanimal.com/post/1030019351</guid><pubDate>Sat, 10 Oct 2009 09:11:00 -0400</pubDate><dc:creator>markcm</dc:creator></item><item><title>Palm Pre Workarounds and Troubleshooting Tips</title><description>&lt;h2&gt;WebOS&lt;/h2&gt;

&lt;p&gt;Let&amp;#8217;s face it, as cool as it is, the WebOS is really a beta. It has been out for 6 months and has not been thoroughly tested. So things are breaking.&lt;/p&gt;

&lt;p&gt;For me there were two major issues that were killing me:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;My hosted Google Apps GMail would just stop working.&lt;/li&gt;
&lt;li&gt;Calendars would just stop syncing.   &lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;After searching and hacking and playing I found the following four things fixed just about everything.&lt;/p&gt;

&lt;h2&gt;Four (plus One) Tips to Keep Your Pre Happy&lt;/h2&gt;

&lt;p&gt;Until the WebOS is fixed here are four tips that will keep things going with as few issues as possible:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Setup your GMail account in Calendar, not Email.&lt;/li&gt;
&lt;li&gt;Don&amp;#8217;t use ActiveSync - Use IMAP - where possible.&lt;/li&gt;
&lt;li&gt;Archive messages out of your Inbox - keep the total count well below 50.&lt;/li&gt;
&lt;li&gt;Only use LETTERS and NUMBERS in your calendar appointments.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;em&gt;bonus:&lt;/em&gt;&lt;/em&gt; If sync is not working disable WiFi and reboot.  &lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Google suggests the first tip and they are right. The Pre will fill in the settings for Email when you add the account in Calendar.&lt;/p&gt;

&lt;p&gt;While you may be tempted to use Exchange support there are some email bugs with it. I&amp;#8217;d steer clear and use IMAP if you can. Hopefully this will be fixed soon - Palm knows about this.&lt;/p&gt;

&lt;p&gt;If you hit 50 messages in your Inbox you are dead. No more messages will come. Keep your Inbox clean.&lt;/p&gt;

&lt;p&gt;Calendar syncing WILL stop if you add things like a &lt;em&gt;comma&lt;/em&gt; or even a &lt;em&gt;question mark&lt;/em&gt;. Sad as it is only numbers and letters. This has been reported in Palm&amp;#8217;s forums and I know that a bug has been filed as well.&lt;/p&gt;

&lt;p&gt;I had trouble again with sync tonight and I found that in addition to all the other steps what really did the trick was a couple reboots with WiFi disabled. Not sure why this worked.&lt;/p&gt;

&lt;h2&gt;I Don&amp;#8217;t Like Magic Fixes&amp;#8230;&lt;/h2&gt;

&lt;p&gt;As annoying as these workarounds are I still like the Pre. It is the best iPhone alternative on the Market right now. I think the competition will be good for Apple.&lt;/p&gt;

&lt;p&gt;That is not to say I am ditching my iPhone. But I do like the Pre.&lt;/p&gt;</description><link>http://blog.agileanimal.com/post/1030016117</link><guid>http://blog.agileanimal.com/post/1030016117</guid><pubDate>Wed, 07 Oct 2009 08:30:00 -0400</pubDate><dc:creator>markcm</dc:creator></item><item><title>Continuous Integration in 2009</title><description>&lt;h3&gt;A Great Idea&lt;/h3&gt;

&lt;p&gt;Continuous Integration (CI) is a really great idea.&lt;/p&gt;

&lt;p&gt;For a guy like me it means that one week before a major product deadline I can leave early on Friday (as opposed to freaking out and working a 75 hour week.)&lt;/p&gt;

&lt;p&gt;But, it doesn&amp;#8217;t mean what it used to. Less that two years ago I remember talking about Continuous Integration as &amp;#8220;Making sure someone doesn&amp;#8217;t break the build.&amp;#8221; Reading that statement makes me laugh now. What a ridiculously low bar.&lt;/p&gt;

&lt;p&gt;Back then just having a server check out your code and compile it was something. Having it run unit tests the package your software for deployment was amazing.&lt;/p&gt;

&lt;h3&gt;Times have changed.&lt;/h3&gt;

&lt;p&gt;What I am now looking for in a Continuous Integration server it is completely different. I want it to grab the code and run Unit, Functional and Acceptance tests on it. Then I want a code coverage report for those tests. On top of that I want a report on standard code metrics that will tell me things like how &amp;#8220;DRY&amp;#8221; the code is.&lt;/p&gt;

&lt;p&gt;To be considered exceptional all of these features need to be tightly integrated and status notifications about updates should be done over Twitter and with a Growl notifier.&lt;/p&gt;

&lt;p&gt;Better yet the tests, coverage and metrics should be run pre-commit and anything less than 100% passing and 100% coverage should not be allowed in the repository.&lt;/p&gt;

&lt;h3&gt;Continuous Analysis &amp;amp; Integration&lt;/h3&gt;

&lt;p&gt;Really what we are talking about here is not Continuous Integration anymore, it is Continuous Analysis and Integration. Because it really doesn&amp;#8217;t matter if the code integrates &lt;strong&gt;&lt;em&gt;unless&lt;/em&gt;&lt;/strong&gt; the code is also DRY and thoroughly tested.&lt;/p&gt;

&lt;h3&gt;My Wishlist&lt;/h3&gt;

&lt;p&gt;So here is my wish-list for a CI server to use on upcoming projects:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Integration with GitHub including post commit hooks.&lt;/li&gt;
&lt;li&gt;The ability to run tests, coverage and metrics pre-commit via a gem (think like that Heroku magic for deploying).&lt;/li&gt;
&lt;li&gt;A project template that includes tabs for artifacts from test results, coverage reports and metrics&lt;/li&gt;
&lt;li&gt;Twitter integration.&lt;/li&gt;
&lt;li&gt;A growl notifier.&lt;/li&gt;
&lt;li&gt;Aware of Ruby/Rails for the collection of artifacts necessary for deployment.&lt;/li&gt;
&lt;li&gt;Integrated ability to run capistrano deployment scripts to stage a site if everything passes.&lt;/li&gt;
&lt;li&gt;Tasks run as worker process with customizable credentials and not as the Apache user! (I shouldn&amp;#8217;t need to mention this one.)&lt;/li&gt;
&lt;li&gt;All of this out of the box without hours of configuration. &lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;A Final Word or Two&lt;/h3&gt;

&lt;p&gt;The idea of convention over configuration is beautiful and should be applied to Continuous Integration.&lt;/p&gt;

&lt;p&gt;A lot of systems can do &lt;strong&gt;anything&lt;/strong&gt; but &lt;strong&gt;&lt;em&gt;everything&lt;/em&gt;&lt;/strong&gt; is hard.   That is just dumb.&lt;/p&gt;

&lt;p&gt;Good practices should be simple. Customization should be possible.&lt;/p&gt;

&lt;p&gt;Post a comment if you have something that you think fits the bill. I think a lot of people would be really interested in hearing about it.&lt;/p&gt;</description><link>http://blog.agileanimal.com/post/1030012662</link><guid>http://blog.agileanimal.com/post/1030012662</guid><pubDate>Tue, 30 Jun 2009 05:10:00 -0400</pubDate><dc:creator>markcm</dc:creator></item><item><title>Continuous Integration with Integrity.</title><description>&lt;p&gt;Nick Quaranto has posted a nice article talking about their &lt;a href="http://giantrobots.thoughtbot.com/2009/5/29/internbot-chronicles-4" target="_blank"&gt;Continuous Integration&lt;/a&gt; setup over at Thoughtbot.&lt;/p&gt;

&lt;p&gt;And while he did a great job of explaining what he did, the details of how exactly he did it were left as an exercise to the reader. Here are the details that you are going to need to actually get this thing running.&lt;/p&gt;

&lt;p&gt;There are two parts to this adventure, Integrity and Metric_fu.&lt;/p&gt;

&lt;h2&gt;Integrity&lt;/h2&gt;

&lt;p&gt;First we need to get &lt;a href="http://integrityapp.com/" target="_blank"&gt;Integrity&lt;/a&gt; up and running. Install the following gems first:
 * Rack (v 0.9.1) &lt;code&gt;sudo gem install rack -v0.9.1&lt;/code&gt; 
 * Sinatra (v 0.9.1) &lt;code&gt;gem install sinatra -v0.9.1&lt;/code&gt;
 * Thin (v 1.0.0) &lt;code&gt;gem install thin -v 1.0.0&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you are running on OSX then you will need to get
    require &amp;#8216;forwardable&amp;#8217;
into your &lt;code&gt;environment.rb&lt;/code&gt; because it is not there. This is needed for Thin 1.0.0.&lt;/p&gt;

&lt;p&gt;Turns out that Sinatra needs to be version 0.9.1 or the notifiers will explode.&lt;/p&gt;

&lt;p&gt;The you can then install integrity. Got to the &lt;a href="http://integrityapp.com/" target="_blank"&gt;Integrity Website&lt;/a&gt; for the details on this. &lt;em&gt;USE THIN&lt;/em&gt;. If you don&amp;#8217;t you are going to be compiling code as &lt;code&gt;www-data&lt;/code&gt;. Create a user account on your server that can access the console and start up thin with this account. Start and stop thin like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;thin -C thin.yml -R config.ru start
thin -C thin.yml -R config.ru stop
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You likely want to have this start with a LaunchDaemon on OSX or something else on Linux. And you likely want to toss this into your Apache config file with a little something like this&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;############ INTEGRITY PROXY ###########

&amp;lt;VirtualHost *:80&amp;gt;
        ServerName integrity.yourserver.xxx
        ProxyRequests Off
        ProxyPreserveHost On
        &amp;lt;Proxy *&amp;gt;
                Order deny,allow
                Allow from all
        &amp;lt;/Proxy&amp;gt;


        &amp;lt;Proxy balancer://mongrelcluster&amp;gt;
                BalancerMember &lt;a href="http://127.0.0.1:8910" target="_blank"&gt;http://127.0.0.1:8910&lt;/a&gt;
                BalancerMember &lt;a href="http://127.0.0.1:8911" target="_blank"&gt;http://127.0.0.1:8911&lt;/a&gt;
        &amp;lt;/Proxy&amp;gt;

        ProxyPass / balancer://mongrelcluster/
        ProxyPassReverse / balancer://mongrelcluster/
        ProxyPreserveHost on

        &amp;lt;Location /&amp;gt;
                Order allow,deny
                Allow from all
        &amp;lt;/Location&amp;gt;
&amp;lt;/VirtualHost&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That should get Integrity going. But, who cares unless it tells that things are breaking. Add a little Twitter notification with by adding the following to your &lt;code&gt;config.ru&lt;/code&gt; file:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;require "notifier/integrity_twitter"
Integrity::Notifier.register(Integrity::Notifier::IntegrityTwitter)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And then get an integrity-twitter notifier gem installed. I use this one:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git://github.com/hchoroomi/integrity-twitter.git
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Great. Now you can get your tests running.&lt;/p&gt;

&lt;p&gt;What I&amp;#8217;d suggest is to manually check your stuff out and try to have it run on the server. This will help you get all the gems you need for your project installed and let you debug issues.&lt;/p&gt;

&lt;p&gt;If things are just refusing to run, ask yourself this question &amp;#8220;Who is thin running as and can they run on the shell?&amp;#8221;&lt;/p&gt;

&lt;h2&gt;metric_fu&lt;/h2&gt;

&lt;p&gt;Nothing worth doing is simple.&lt;/p&gt;

&lt;p&gt;Okay with that out of the way we need to get the gem for metric_fu installed and working. First grab qrush&amp;#8217;s version:
    git clone git://github.com/qrush/metric_fu.git&lt;/p&gt;

&lt;p&gt;And this is where the fun starts again. Rcov have moved but no one knows yet. So grab it from here:
    git clone git://github.com/relevance/rcov.git&lt;/p&gt;

&lt;p&gt;And then install it by hand:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;gem build rcov.gemspec
sudo gem install rcov-0.8.3.4.gem 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Before this point you might want to delete the following lines from &lt;code&gt;tasks/metric_fu.rake&lt;/code&gt; to stop it from opening the tests once complete:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;if MetricFu.report.open_in_browser?
  MetricFu.report.show_in_browser(MetricFu.output_directory)
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Then you can install the qrush fork of metric_fu:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;gem build metric_fu.gemspec 
sudo gem install metric_fu-1.0.3.gem
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Bringing it Together&lt;/h2&gt;

&lt;p&gt;Once this is done you can do something like:
    rake test:all
    rake metrics:all&lt;/p&gt;

&lt;p&gt;And you should have some tests that run and metrics created. The question remains, how do I get this on the web?&lt;/p&gt;

&lt;p&gt;I don&amp;#8217;t have the answer to that yet. But I will let you know once I am operational.&lt;/p&gt;</description><link>http://blog.agileanimal.com/post/1030009808</link><guid>http://blog.agileanimal.com/post/1030009808</guid><pubDate>Wed, 03 Jun 2009 22:30:00 -0400</pubDate><dc:creator>markcm</dc:creator></item><item><title>Consuming SOAP Services on OSX</title><description>&lt;p&gt;SOAP is bloated and I hate dealing with it. I still have to do it. When dealing with consuming SOAP services from OS X I like to have a couple of items in my bag of tricks to get up and running: a &lt;a href="http://www.ditchnet.org/soapclient/" target="_blank"&gt;SOAP Client&lt;/a&gt; and a way to do base64 decoding. This way I am able to test the service without writing any code. Too often I beat my head against my keyboard over a piece of code only to realize the service itself is the problem.&lt;/p&gt;

&lt;p&gt;Here is the &lt;a href="http://www.ditchnet.org/soapclient/" target="_blank"&gt;SOAP Client&lt;/a&gt; that I use: &lt;a href="http://www.ditchnet.org/soapclient/" target="_blank"&gt;SOAP Client&lt;/a&gt; (what an original name!). It really does the trick, though. Point it at the SOAP service WSDL and you are off to the races. It allows you to pass in arguments and call different services. It does it all and returns the XML requested.&lt;/p&gt;

&lt;p&gt;Once you have the XML often you will then need to decode a base64 encoded string. Base64 decoding is a bit trickier. Most of the time you can use &lt;strong&gt;openssl &lt;/strong&gt;to decode on a Unix based platform but for some reason it doesn&amp;#8217;t seem to work for me. I have had to resort to the following perl script:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;   #!/bin/sh&lt;br/&gt;
  # decode a Base64 encoded file, as a side effect of&lt;br/&gt;
  # openssl base64 handling (but without encryption)&lt;br/&gt;
  /usr/bin/perl -MMIME::Base64 -e 'print decode_base64(join("", &amp;lt;&amp;gt;))'  &amp;lt; "$1" &amp;gt; "$2" &lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The script takes two arguments: and input file and an output file. I am not a &amp;#8220;perl&amp;#8221; kinda guy so the script is mostly stolen and probably can be hugely improved.&lt;/p&gt;

&lt;p&gt;If your data is a base64 encoded string of gzipped data the next step is to toss the old &lt;code&gt;".gz"&lt;/code&gt; extension on the file and extract the contents using the OS or using gunzip.&lt;/p&gt;

&lt;p&gt;Basic stuff really, but it is a pain to track down so I thought I would toss it all in one place.&lt;/p&gt;</description><link>http://blog.agileanimal.com/post/1030006151</link><guid>http://blog.agileanimal.com/post/1030006151</guid><pubDate>Thu, 30 Apr 2009 09:40:00 -0400</pubDate><dc:creator>markcm</dc:creator></item><item><title>Prioritize Work (Get Paid)</title><description>&lt;p&gt;&lt;b&gt;&lt;i&gt; I like getting paid.&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;I am not saying that I go to work for a paycheck - &lt;i&gt;I love what I do&lt;/i&gt; - but a person has to eat and to eat they need to get paid.&lt;/p&gt;

&lt;p&gt;For this reason I suspect you like getting paid too.&lt;/p&gt;

&lt;p&gt;This is not a bad thing. It simply creates the reality that someone is going to have to pay for all the work that you do in a day. We call that person the customer. Whether the customer is a larger company or 100,000 teenagers they are going to have to pay for each line of code that you develop.&lt;/p&gt;

&lt;p&gt;The truth is that this actually creates a simple answer to a complex problem. Often when developing software it is hard to know where to draw the line when it comes to features, documentation, etc. People often debate this for hours. It is actually pretty simple:&lt;/p&gt;

&lt;p style="margin-left: 40px; "&gt;&lt;b&gt;&lt;i&gt;Make sure the customer is willing to pay for everything that you do.&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;It turns out that this actually can be broken down into two categories of user stories:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Stories that have value so the customer is will to pay for them. (this might be that new feature you are working on.)&lt;/li&gt;
    &lt;li&gt;Stories that have no value but are required to get paid. (this might be the documentation needed to use the new feature.)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Think of this as working and filling out a time sheet: you need to work to get paid and you need to fill out your time sheet to get paid. Valuable stories and required stories. Pretty simple.&lt;/p&gt;

&lt;p&gt;In Scrum this simple concept forms the basis for a product backlog. The Product Owner (a representative of the customer) and the ScrumMaster make a list of stories and then assign a value to them. The team then estimates how hard a task will be to complete - lets call this the effort. Sort the list by dividing the value by the effort. Again, simple.&lt;/p&gt;

&lt;p&gt;&lt;span class="Apple-style-span" style="font-family: -webkit-monospace; "&gt;&lt;b&gt;Priority = Value / Effort&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;Things only get a little tricky when we talk about required stories (the ones without value that are still needed to get paid). These should be kept up to date with the progress of the project. For example, a required manual should be updated once a feature is demo&amp;#8217;d. This way the product can be released as needed with little notice.&lt;/p&gt;

&lt;p&gt;As you work through the list you will eventually realize that at some point the value returned by a stories does not pay for your development costs to produce it. This is when you wrap the project up and deliver it. Again, simple.&lt;/p&gt;

&lt;p&gt;So to recap here is the way to prioritize your work:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Only work on stories that get you paid:
    &lt;ul&gt;&lt;li&gt;this can mean stories with value or&lt;/li&gt;
        &lt;li&gt;this can mean stories that have no value but are required.&lt;/li&gt;
    &lt;/ul&gt;&lt;/li&gt;
    &lt;li&gt;Don&amp;#8217;t work on anything that is not required to get paid.&lt;/li&gt;
    &lt;li&gt;Priority = Value / Effort&lt;/li&gt;
    &lt;li&gt;Sort your list by priority.&lt;/li&gt;
    &lt;li&gt;Even thought the priority of a required story is essentially zero, keep required stories up to date with your current progress so that you can deliver the product as requested by the customer.&lt;/li&gt;
    &lt;li&gt;The project is done when the customer is happy with the current features or when it will cost more to develop a story than it is worth to the customer.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Follow these rules and you will get paid.&lt;/p&gt;

&lt;p&gt;And you will be happy.&lt;/p&gt;

&lt;p&gt;And your customer will be too.&lt;/p&gt;

&lt;p&gt;Start small. Think BIG.&lt;/p&gt;</description><link>http://blog.agileanimal.com/post/1030002775</link><guid>http://blog.agileanimal.com/post/1030002775</guid><pubDate>Thu, 05 Mar 2009 03:56:00 -0500</pubDate><dc:creator>markcm</dc:creator></item><item><title>Fail (or Succeed) Quickly</title><description>&lt;p&gt;I read a book by &lt;a href="http://www.sethgodin.com/sg/" target="_blank"&gt;Seth Godin&lt;/a&gt; a while back called &amp;#8220;&lt;a href="http://sethgodin.typepad.com/the_dip/" target="_blank"&gt;The Dip&lt;/a&gt;.&amp;#8221; (Well, by read I mean I listened to it after buying it from &lt;a href="http://www.audible.com/adbl/site/homepage/AnonHome.jsp?BV_UseBVCookie=Yes" target="_blank"&gt;Audible&lt;/a&gt;.) The book gets a bit repetitive but the message is relevant. It is a book about quitting as a technique for success.&lt;/p&gt;

&lt;p&gt;I am going to repeat that for those of you skimming this post: &lt;em&gt;&lt;strong&gt;&amp;#8220;The Dip&amp;#8221; is a book about quitting as a technique for success.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Initially this should seem strange. For some reason society seems to think &amp;#8220;winners never quit.&amp;#8221; Society is wrong. Winners quit. They quit so quickly that you might not even notice they tried at all. That is the whole point.&lt;/p&gt;

&lt;p&gt;In my post on Prioritizing Work I talk about how we need to work from a backlog that orders stories by value. Most often you will find that the high value items are usually difficult. A difficult item with low business value is something that likely will never be done - why would you waste time working on a problem that has no value. At times you will find that a projects success hinges on completing some difficult items. They may be so difficult that , for many reasons, they are impossible and the software project is doomed to fail. That is why we need to build these features first.&lt;/p&gt;

&lt;p&gt;If a software project fails after one week, great! This is the best possible way to fail: very little time and effort invested. Chances are there is disappointment but everyone survives.&lt;/p&gt;

&lt;p&gt;Software projects that take years to fail bring down companies. I have personally seen it happen.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;The only thing better than failing quickly is succeeding quickly. &lt;/strong&gt;&lt;/em&gt;What better success to start a project with: tackling the hardest problem!&lt;/p&gt;

&lt;p&gt;In XP they would call this a spike solution. In Scrum this is the way we organize our backlog. Either way the concept is simple: &lt;em&gt;&lt;strong&gt;don&amp;#8217;t invest time and effort into a project that you cannot finish&lt;/strong&gt;&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;Failing early is the key to success.&lt;/p&gt;

&lt;p&gt;I realized that this really answers a simple question and then presents a much harder one. Namely, you need to know if the problem you are working on is hard or if it is impossible.&lt;/p&gt;

&lt;p&gt;I don&amp;#8217;t have the answer for this one. There is no sure-fire way to measure your talent or that of your team and know if you will succeed. Analyze the problem. Be realistic about the availability of the resources need to complete it. Think about what is needed to succeed. Is success possible. Weigh the risks and rewards.&lt;/p&gt;

&lt;p&gt;It is hard to predict success and failure. That is not what this is about. It is about honestly evaluating if success is an option and if failure is inevitable.&lt;/p&gt;

&lt;p&gt;If you can&amp;#8217;t succeed, fail quickly. &lt;/p&gt;

&lt;p&gt;Start small. Think BIG.&lt;/p&gt;</description><link>http://blog.agileanimal.com/post/1029999504</link><guid>http://blog.agileanimal.com/post/1029999504</guid><pubDate>Wed, 04 Mar 2009 08:08:00 -0500</pubDate><dc:creator>markcm</dc:creator></item><item><title>Defining Done</title><description>&lt;p&gt;Ever ask someone how they were doing and then got the reply, &amp;#8220;Fine&amp;#8221; - what does &lt;em&gt;fine&lt;/em&gt; actually mean?&lt;/p&gt;

&lt;p&gt;As far as I can tell fine used to mean a little closer to good then bad but now I am convinced that it actually the equivalent of someone saying either &amp;#8220;You don&amp;#8217;t really care how I am feeling and I don&amp;#8217;t really care to tell you!&amp;#8221; or it means &amp;#8220;I am feeling so bad right now that if I actually tell you I am going to burst into tears and it is going to ruin your day.&amp;#8221;&lt;/p&gt;

&lt;p&gt;I think that software teams have the same problem with the word &amp;#8220;Done&amp;#8221;  - what does &lt;em&gt;done&lt;/em&gt; actually mean?&lt;/p&gt;

&lt;p&gt;Done can mean a lot of things including:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Delivered&lt;/li&gt;
    &lt;li&gt;Documented&lt;/li&gt;
    &lt;li&gt;Tested on Production&lt;/li&gt;
    &lt;li&gt;Pushed to Production&lt;/li&gt;
    &lt;li&gt;Staged&lt;/li&gt;
    &lt;li&gt;Tagged in the Repository&lt;/li&gt;
    &lt;li&gt;Acceptance Tested&lt;/li&gt;
    &lt;li&gt;Ready to Demo&lt;/li&gt;
    &lt;li&gt;Committed to the Repository&lt;/li&gt;
    &lt;li&gt;Unit Tested&lt;/li&gt;
    &lt;li&gt;Peer Reviewed&lt;/li&gt;
    &lt;li&gt;Ready to Test&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;Barely Working&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;What does done mean for your team?&lt;/p&gt;

&lt;p&gt;An exercise that like to do is to have everyone write down their definition of done and then read out the definitions to the team (obviously without naming who wrote the definition). Then as a group come up with a universal definition of done. Once you all agree hang it up on the wall in a nice frame. Have the creators sign it. The visibility of the definition will keep people honest.&lt;/p&gt;

&lt;p&gt;It is important to note that the definition will need to be different for every team. You probably do not have access to the production environment. Maybe you work for a large company that has policies requiring someone else stage or acceptance test your code. Work with what is realistic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When it comes to the &lt;i&gt;definition of done &lt;/i&gt;the most important thing you can do is just talk about and agree upon the definition. &lt;/strong&gt;The definition is less important.&lt;/p&gt;

&lt;p&gt;Once things are getting done then work on expanding your definition.&lt;/p&gt;

&lt;p&gt;When you are starting out it is sometimes a tall order to go from a concept to code that is working on production in a week. There needs to be a lot of tools in place to allow this to happen. As the team gets better include more in the definition. If you are working on a large project going from a Story to Done in a week or two might be a tall order without the right processes and the right tools.&lt;/p&gt;

&lt;p&gt;Here are some practices and tools that will help expand your &lt;em&gt;definition of done&lt;/em&gt;:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Behavior Driven Development: &lt;a href="http://rspec.info/" target="_blank"&gt;rSpec&lt;/a&gt;, &lt;a href="http://nbehave.org/" target="_blank"&gt;nBehave&lt;/a&gt;, &lt;a href="http://nspecify.sourceforge.net/" target="_blank"&gt;NSpecify&lt;/a&gt;, &lt;a href="http://xircles.codehaus.org/projects/jbehave" target="_blank"&gt;JBehave&lt;/a&gt;, &lt;a href="http://nspec.tigris.org/" target="_blank"&gt;NSpec&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;TDD and Unit Testing: xUnit (Yeah, there is a unit test framework for your platform. You need to fine it though.)&lt;/li&gt;
    &lt;li&gt;Continuous Integration: &lt;a href="http://cruisecontrol.sourceforge.net/" target="_blank"&gt;CruiseControl&lt;/a&gt;, &lt;a href="http://confluence.public.thoughtworks.org/display/CCNET/" target="_blank"&gt;CruiseControl.NET&lt;/a&gt;, &lt;a href="http://studios.thoughtworks.com/cruise-continuous-integration" target="_blank"&gt;Cruise&lt;/a&gt;, &lt;a href="http://www.jetbrains.com/teamcity/" target="_blank"&gt;TeamCity&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;Virtualization: &lt;a href="http://www.vmware.com/" target="_blank"&gt;VMWare&lt;/a&gt;, &lt;a href="http://www.xensource.com/" target="_blank"&gt;Cirtrix Xen&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;Scrum, XP: &lt;a href="http://studios.thoughtworks.com/mingle-agile-project-management" target="_blank"&gt;Mingle&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;When we started out our definition of done was demo-able. Now it means delivered.&lt;/p&gt;

&lt;p&gt;Start small. Think BIG.&lt;/p&gt;</description><link>http://blog.agileanimal.com/post/1029989766</link><guid>http://blog.agileanimal.com/post/1029989766</guid><pubDate>Sat, 28 Feb 2009 22:30:00 -0500</pubDate><dc:creator>markcm</dc:creator></item></channel></rss>

