<?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>The blog by the Software Developer Gunnar Ahlberg</title>
	<atom:link href="http://gunnarahlberg.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://gunnarahlberg.com</link>
	<description>A developers view on  Software</description>
	<lastBuildDate>Mon, 21 Nov 2011 21:15:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>To test an application through the applications UI is a waste</title>
		<link>http://gunnarahlberg.com/2011/11/21/to-test-an-application-through-the-applications-ui-is-a-waste/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=to-test-an-application-through-the-applications-ui-is-a-waste</link>
		<comments>http://gunnarahlberg.com/2011/11/21/to-test-an-application-through-the-applications-ui-is-a-waste/#comments</comments>
		<pubDate>Mon, 21 Nov 2011 21:15:06 +0000</pubDate>
		<dc:creator>Gunnar Ahlberg</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Sbe]]></category>
		<category><![CDATA[unit test]]></category>
		<guid isPermaLink="false">http://gunnarahlberg.com/?p=40</guid>
		<description><![CDATA[I once heard that &#8220;Every time you start the debugger, the life of a unit test is lost&#8221;. How very true. Why do I still see  many colleagues for every change in the code, redeploy and restart the application. Just to verify a code change. What a waste! Every time you test your code using <a href='http://gunnarahlberg.com/2011/11/21/to-test-an-application-through-the-applications-ui-is-a-waste/'>[more]</a>]]></description>
			<content:encoded><![CDATA[<p>I once heard that &#8220;Every time you start the debugger, the life of a unit test is lost&#8221;. How very true.</p>
<p>Why do I still see  many colleagues for every change in the code, redeploy and restart the application. Just to verify a code change. What a waste!</p>
<p>Every time you test your code using the GUI, a test is lost. And a lot of time is wasted.  How much time does take to get you to the point that you can verify your code through the application? I guess 30 seconds to a few minutes is a fair estimate. Compare that with a proper unit test that run in tenth of a second. Every time.  It was 2003 that <a title="Bye debugger" href="http://weblogs.java.net/blog/sspielman/archive/2003/10/dear_johneri_me.html" target="_blank">Sue Spielman said her farewell to the debugger</a>.</p>
<p>I say we should start by saying goodbye to our manual GUI testing, and at the same time say hello to short test-cycles too.  If you start TDD or BDD, your time spent at the keyboard should be so much more interesting. To enter the same data in the GUI is only dull and repetitive. At worst, it is error prone. How fair is a test that is manual? Do you expect any other craftsman to do this? Would a carpenter test by putting everything together for each nail? Or would he test nail by nail and then module by module?</p>
<p>This leads to Iterative vs Incremental development. Let&#8217;s talk about that too.</p>
]]></content:encoded>
			<wfw:commentRss>http://gunnarahlberg.com/2011/11/21/to-test-an-application-through-the-applications-ui-is-a-waste/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Daily code kata</title>
		<link>http://gunnarahlberg.com/2011/06/21/daily-code-kata/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=daily-code-kata</link>
		<comments>http://gunnarahlberg.com/2011/06/21/daily-code-kata/#comments</comments>
		<pubDate>Tue, 21 Jun 2011 06:42:30 +0000</pubDate>
		<dc:creator>Gunnar Ahlberg</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://gunnarahlberg.com/?p=77</guid>
		<description><![CDATA[A daily code kata is every day implement the same non-trivial algorithm in a different way. My assumption was that a daily code kata would force me to learn different things every day. I got this tip from the founder of the pragmatic programmer, Dave Thomas. He suggested that a code kata is 1) an <a href='http://gunnarahlberg.com/2011/06/21/daily-code-kata/'>[more]</a>]]></description>
			<content:encoded><![CDATA[<p>A daily code kata is every day implement the same non-trivial algorithm in a different way.</p>
<p>My assumption was that a daily code kata would force me to learn different things every day. I got this tip from the founder of the pragmatic programmer, Dave Thomas. He suggested that a code kata is 1) an oasis where it is ok to relax without a deadline and thereby have the time to really learn something new and 2) learn how to play with code, reflect, refine and measure code.</p>
<p>My routine goes something like this, I start with an empty workspace and pick one of the many different suggested katas by <a title="Daves katas" href="http://codekata.pragprog.com/2007/01/code_kata_backg.html" target="_blank">Dave </a> or by <a title="Google" href="http://www.google.se/search?sourceid=chrome&amp;ie=UTF-8&amp;q=codekata" target="_blank">google</a> and then just go with the flow. Sometimes I feel like using Regex (btw, have you read the <a title="How ‘Derive scope from Goal’ helped my client to choose a non-technical solution" href="http://gunnarahlberg.com/2011/06/21/regex-joke/" target="_blank">joke about regex?</a>)</p>
<p>Then, I just code until I feel happy. And I feel happy every day!</p>
<p>Try it you to, it helped me to get better insights in different java libraries, javascript, ruby, how to implement a simple test library, regex, maven, eclipse projects among all the little things. The beauty of it all is that I don&#8217;t store the code anyhow. I just throw it away when I don&#8217;t feel like having it around.</p>
<p>My hypothesis is that a daily rhythm make me remember to learn this every day. Love it.</p>
<p>Follow my daily code katas at <a title="Twitter search" href="http://twitter.com/#!/search/%23codekata%20gunnarahlberg" target="_blank">twitter</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gunnarahlberg.com/2011/06/21/daily-code-kata/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Regex joke</title>
		<link>http://gunnarahlberg.com/2011/06/21/regex-joke/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=regex-joke</link>
		<comments>http://gunnarahlberg.com/2011/06/21/regex-joke/#comments</comments>
		<pubDate>Tue, 21 Jun 2011 06:23:43 +0000</pubDate>
		<dc:creator>Gunnar Ahlberg</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://gunnarahlberg.com/?p=78</guid>
		<description><![CDATA[A smart guy said Some people, when confronted with a problem, think “I know, I&#8217;ll use regular expressions.”   Now they have two problems. Jamie Zawinski (JWZ) http://regex.info/blog/2006-09-15/247#comment-3085]]></description>
			<content:encoded><![CDATA[<p>A smart guy said</p>
<blockquote><p>Some people, when confronted with a problem, think<br />
“I know, I&#8217;ll use regular expressions.”   Now they have two problems.</p></blockquote>
<p>Jamie Zawinski (JWZ) <a href="http://regex.info/blog/2006-09-15/247#comment-3085">http://regex.info/blog/2006-09-15/247#comment-3085</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gunnarahlberg.com/2011/06/21/regex-joke/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How &#8216;Derive scope from Goal&#8217; helped my client to choose a non-technical solution</title>
		<link>http://gunnarahlberg.com/2011/06/10/how-derive-scope-from-goal-saved-thousands-of-dollars/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-derive-scope-from-goal-saved-thousands-of-dollars</link>
		<comments>http://gunnarahlberg.com/2011/06/10/how-derive-scope-from-goal-saved-thousands-of-dollars/#comments</comments>
		<pubDate>Fri, 10 Jun 2011 13:07:18 +0000</pubDate>
		<dc:creator>Gunnar Ahlberg</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[Sbe]]></category>
		<guid isPermaLink="false">http://gunnarahlberg.com/?p=56</guid>
		<description><![CDATA[As developer, how do you save money for your client and at the same time ensure that you work on interesting and motivating stuff? Here&#8217;s a tip. Chose to derive scope from a goal. When someone asks you to develop code without reason, say &#8220;I see this is important to you. Please, let me know <a href='http://gunnarahlberg.com/2011/06/10/how-derive-scope-from-goal-saved-thousands-of-dollars/'>[more]</a>]]></description>
			<content:encoded><![CDATA[<p>As developer, how do you save money for your client and at the same time ensure that you work on interesting and motivating stuff? Here&#8217;s a tip. Chose to derive scope from a goal. When someone asks you to develop code without reason, say &#8220;I see this is important to you. Please, let me know why?&#8221;</p>
<p>My responsibility at my current client is to be team leader for a development team of eight developers, two testers, two customer experts. My customer proxy asked me for a new feature. &#8221;We have to have another type of user in the system&#8221; and the first thing I got was a rough sketch of what the user interface should look like.</p>
<p><img src="http://gunnarahlberg.com/wp-content/uploads/2011/06/simple_Page_1.png" alt="The sketchup" /></p>
<p>I totally understand why he glossed over the reasons to actually do this piece of software change and new requirement. He had already spent hours and hours with a production problem. It was truly waste and should be eliminated. However, the UI sketch did not transfer this. His sketch was interesting but I didn&#8217;t get the why it was so important. For me, it transfer the understanding that this would take weeks to implement, would impact the security and permission aspect of the system. We have implemented two user roles with some pain. Another feature request like that was meant icebergs ahead. All manageable but feasible?</p>
<p>So, as this potentially was a mistake to implement without more thought, I asked him, &#8220;Could you please explain an example of what this will solve? Just to get my creativity going&#8221;. What I wanted to know was &#8211; what is the Goal or Desired effect. Was every option for a non-technical solution tried? What about the FAQ? What about the customer support first line? Let me see the knowledge base customer service use. Is it updated? Is the knowledge base used? What does the user FAQ look like? Can that be used? Enter the effect map</p>
<p>After some discussion we got a couple of examples</p>
<p><strong>Example</strong><br />
&#8220;A user may enter foo and the system does blah, which is confusing. A system administrator can view the same foo as the user and support the user same view as the user&#8221; &#8211; that is the new feature. Most information that the user enters is private to the user and not even the system administrator is allowed to view it by default. Ten minutes of discussion in front of a white board with two pens helped here. We agreed on a couple of examples that are problematic for the user in the current in-production version.</p>
<p>An amazing thing happened here, I asked the customer proxy, &#8220;If we look at these examples on the white board, could we agree on a desired effect or goal for the new function?&#8221; Another five more minutes and we had one sentence that described the new function. &#8220;To be able to understand whether the user acted foolishly in the system or is it a missing function?&#8221; That one sentence was written using all kind of trivial words, yet it captured the essence of that new role of the user in the system. Someone that is able to get the same view of the system as the user.</p>
<p>So, I asked, who can fix this? Interestingly, the proxy assumed I was talking about &#8220;who&#8221; as in what part of the software. So, we used the white board and spelled out &#8220;Customer phone support&#8221; and &#8220;FAQ&#8221;, &#8220;Database administrator&#8221; and &#8220;third line support&#8221; and so on. Some very interesting details showed up here that were not technical, for example, the knowledge is maintained not by the support but by an email to an administrator of the knowledge.</p>
<p>I asked &#8220;Who is that administrator? Does she or he get tons of emails? &#8221;<br />
and the answer baffled me, &#8220;She resigned last week&#8221; &#8211; wow! We agreed that a replacement should be the first priority if that was the only way to update the knowledge base.</p>
<p style="text-align: center;"><a href="http://gunnarahlberg.com/wp-content/uploads/2011/06/Goal-_Decide_if_user_behave_foolish_or_system_is_wr.gif"><img class="aligncenter size-large wp-image-73" title="Goal-_Decide_if_user_behave_foolish_or_system_is_wr" src="http://gunnarahlberg.com/wp-content/uploads/2011/06/Goal-_Decide_if_user_behave_foolish_or_system_is_wr-1024x291.gif" alt="Effect map" width="1024" height="291" /></a></p>
<p style="text-align: center;">We tried a couple of other non-technical solutions and some possible solutions that wouldn&#8217;t require software to be developed. Five minutes of more discussion and more people got excited and interested around our white board. It was fruitful, as it was a potential solution and we could review this and be certain it was not an option.</p>
<p>So, this is all interesting, we got other part of the system documentation improved. However, have we addressed the issue and got to the desired goal? Can we decide if the user is behaving foolish or is something wrong? Not really, something is missing. So I said, &#8220;What if we ask the user to this and that, that we already have. (I&#8217;m not allowed to tell you what). We just leave this note in front of the user of specific things to do so we could help them. &#8221; That turned everything upside down. Problem solved, just make a few tests that it does not interfere with existing processes and that the user documentation is updated with a note that &#8220;If you get stuck, please follow these simple steps, and we will get back to you&#8221;.</p>
<p>Some more discussion gave us that, if we just document this, problem solved! WHOA! That saved us so much trouble! I estimate that the initial sketch implementation by the customer proxy would take weeks or months to get right. Money that we saved by some spending half an hour in front of a white board. Simple questions.</p>
<p>Get me right here, I didn&#8217;t make this saving. I just happened to know how to ask the right questions. The real heroes here is the bright and talented people that really tried hard to find a proper solution to my probes. Was there any non-technical solution available? What is the goal or desired effect? I didn&#8217;t come up with that. I&#8217;m just a random guy who know how to ask questions. I let the customer to reason around these questions.</p>
<p>It is so often a developer team is asked to implement a feature that I made it into a pattern. By merely asking simple things like &#8220;Please, let me know why this is important&#8221; and then &#8220;Let me help you asses that every non-technical solution has been tried&#8221; really help. Sometimes you don&#8217;t get to do mundane stuff. Sometimes you really have to, but then, at least you have a crisp and clear understanding why.</p>
<p>This is of course in itself not new. This is a facet of what is called &#8220;Derive Scope from Goal&#8221; and came to me by the excellent Gojko Adzic. You should try it too. What I&#8217;m seeing though is that it is somewhat delicate to ask the right questions. For example, you may get in a us/them situation or that some domain specific words may get custom without a user to validate them. As always in a creative process, it is a minefield. Carefully questioning can be delicate. I&#8217;ll gladly help you or your client with that.</p>
<p>Send me an email &#8211; agile at gunnarahlberg.com &#8211; and let us see what can happen.</p>
]]></content:encoded>
			<wfw:commentRss>http://gunnarahlberg.com/2011/06/10/how-derive-scope-from-goal-saved-thousands-of-dollars/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>IPhone and Android friendly</title>
		<link>http://gunnarahlberg.com/2011/05/03/iphone-and-android-friendly/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=iphone-and-android-friendly</link>
		<comments>http://gunnarahlberg.com/2011/05/03/iphone-and-android-friendly/#comments</comments>
		<pubDate>Tue, 03 May 2011 10:11:25 +0000</pubDate>
		<dc:creator>Gunnar Ahlberg</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://gunnarahlberg.com/?p=37</guid>
		<description><![CDATA[I updated the site with a plugin for any iPhone and Android users. Hope you like it. Comment otherwise!]]></description>
			<content:encoded><![CDATA[<p>I updated the site with a plugin for any iPhone and Android users. Hope you like it. Comment otherwise!</p>
]]></content:encoded>
			<wfw:commentRss>http://gunnarahlberg.com/2011/05/03/iphone-and-android-friendly/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Estimates</title>
		<link>http://gunnarahlberg.com/2011/05/02/estimates/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=estimates</link>
		<comments>http://gunnarahlberg.com/2011/05/02/estimates/#comments</comments>
		<pubDate>Mon, 02 May 2011 16:50:23 +0000</pubDate>
		<dc:creator>Gunnar Ahlberg</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://gunnarahlberg.com/?p=30</guid>
		<description><![CDATA[Why is estimation work still relevant? Many projects do too many estimations. Isn&#8217;t estimation of software development just another waste? My wife is perfect at estimation. She can estimate exactly what size of jug I should use to save anything. But that is for food. How do we estimate software costs? Given a budget process <a href='http://gunnarahlberg.com/2011/05/02/estimates/'>[more]</a>]]></description>
			<content:encoded><![CDATA[<p>Why is estimation work still relevant? Many projects do too many estimations.</p>
<p>Isn&#8217;t estimation of software development just another waste?</p>
<p>My wife is perfect at estimation. She can estimate exactly what size of jug I should use to save anything. But that is for food. How do we estimate software costs?</p>
<p>Given a budget process for a project, a good estimate of how much cost the project  is maybe a good thing. The estimate can provide the product owner in a valuable gauge in how much money do I put in to the project versus the risk versus the possible gains. But all those are highly volatile. The productivity of any group has so many different factors. Just to mention a few, the number of external dependencies, unforeseen technical problems, scope creep, illness, hardware failure.</p>
<p>An alternative would be, just define that this project is allowed to run for a fixed period with a fixed set of people and an infinite backlog of items to accomplish and with a rough estimate in small &#8211; medium &#8211; large. And then evaluate how many story points was achieved. Give a small item one, medium two and large items four points. Let the experiences from the first iteration become empirical data for the next iteration.</p>
<p>This alternative has lower risk as the possible expense is set in advance. Anything that is not delivered in that iteration can possibly be either left on a backlog. The estimates now disappears and any data can be gathered from empirical data.</p>
<p>Too sad that people miss out on this.</p>
<p>Leave a comment  if you want a follow-up on more details!</p>
]]></content:encoded>
			<wfw:commentRss>http://gunnarahlberg.com/2011/05/02/estimates/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Specification by example</title>
		<link>http://gunnarahlberg.com/2011/04/22/specification-by-example/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=specification-by-example</link>
		<comments>http://gunnarahlberg.com/2011/04/22/specification-by-example/#comments</comments>
		<pubDate>Fri, 22 Apr 2011 17:00:59 +0000</pubDate>
		<dc:creator>Gunnar Ahlberg</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[Gojko Adzic]]></category>
		<category><![CDATA[Sbe]]></category>
		<guid isPermaLink="false">http://gunnarahlberg.com/?p=5</guid>
		<description><![CDATA[I was lucky enough to attend Gojko Adzic&#8217;s two day seminar &#8220;From user stories to acceptance test&#8221; If you get a chance to attend then Go! As a teacher, Gojko is one of the few that understand the power of teaching. It is all to seldom that someone with great familiarity of the solutions they <a href='http://gunnarahlberg.com/2011/04/22/specification-by-example/'>[more]</a>]]></description>
			<content:encoded><![CDATA[<p>I was lucky enough to attend Gojko Adzic&#8217;s two day seminar &#8220;From user stories to acceptance test&#8221; If you get a chance to attend then Go!</p>
<p>As a teacher, Gojko is one of the few that understand the power of teaching. It is all to seldom that someone with great familiarity of the solutions they teach also understand and listens to any other and novel problems someone share. It is hard to to put your self in someone else&#8217;s shoes. But Gojko does this remarkably well.</p>
<p>The problems that Gojko solves among many is a) how to understand what the customer really need in contrast to what the customer says he needs and b) how to make that into solution that evolve in collaboration with the customer and any other stakeholder like the quality assurance (QA) department and developers.</p>
<p>Let me start with an example that we worked on. Say that a ticket vendor say &#8220;we want more customers use our mobile site.&#8221; During the seminar, Gojko gave us numerous exercises  like this. What interests me wither this example is that it took the group together with Gojko under 30 minutes to identify that rather than focus on technical things and software, provide mobile customers with something like &#8220;joke of the day&#8221; would be the proper first step, easy and cheap. I see that as something that focus on point a above, understand the customer.</p>
<p>Gojko also gave numerous examples on how to mary that with any standard process like Agile and even waterfall. You can introduce his tools with any process. Software is not the point. Customer value is the point.</p>
<p>Read more about Gojko at twitter <a title="@gojkoadzic" href="http://twitter.com/#!/gojkoadzic" target="_blank">@gojkoadzic</a></p>
<p>Other who attended<br />
<a href="http://morgsterious.wordpress.com/2011/04/07/sucker-punch-to-my-agile-ego/" target="_blank">http://morgsterious.wordpress.com/2011/04/07/sucker-punch-to-my-agile-ego/</a></p>
<p><a href="http://natooktesting.wordpress.com/2011/04/07/specification-by-example-my-thoughts-collected-after-workshop-with-gojko-adzic/">http://natooktesting.wordpress.com/2011/04/07/specification-by-example-my-thoughts-collected-after-workshop-with-gojko-adzic/</a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://gunnarahlberg.com/2011/04/22/specification-by-example/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Getting things done</title>
		<link>http://gunnarahlberg.com/2011/04/20/getting-things-done/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=getting-things-done</link>
		<comments>http://gunnarahlberg.com/2011/04/20/getting-things-done/#comments</comments>
		<pubDate>Wed, 20 Apr 2011 16:54:21 +0000</pubDate>
		<dc:creator>Gunnar Ahlberg</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Gtd]]></category>
		<guid isPermaLink="false">http://gunnarahlberg.com/?p=4</guid>
		<description><![CDATA[Hello, and welcome back to my blog]]></description>
			<content:encoded><![CDATA[<p>Hello, and welcome back to my blog</p>
]]></content:encoded>
			<wfw:commentRss>http://gunnarahlberg.com/2011/04/20/getting-things-done/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
