<?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>This Blog Needs No Name &#187; Geeky things</title>
	<atom:link href="http://www.toomik.net/helen/blog/category/geeky_things/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.toomik.net/helen/blog</link>
	<description></description>
	<lastBuildDate>Thu, 29 Jul 2010 20:31:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>ScanDevConf notes: Nathaniel Schutta, &#8220;Making web apps suck less&#8221;</title>
		<link>http://www.toomik.net/helen/blog/2010/04/13/scandevconf_notes_nathaniel_schutta_making_web_apps_suck_less/</link>
		<comments>http://www.toomik.net/helen/blog/2010/04/13/scandevconf_notes_nathaniel_schutta_making_web_apps_suck_less/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 20:01:22 +0000</pubDate>
		<dc:creator>Helen</dc:creator>
				<category><![CDATA[Geeky things]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[nathaniel_schutta]]></category>
		<category><![CDATA[scandevconf]]></category>
		<category><![CDATA[sdc]]></category>
		<category><![CDATA[usability]]></category>
		<category><![CDATA[web_development]]></category>

		<guid isPermaLink="false">http://www.toomik.net/helen/blog/?p=1689</guid>
		<description><![CDATA[This is my summary of Nathaniel Schutta&#8217;s &#8220;Making web apps suck less&#8221;, a session I attended at ScanDevConf 2010. Please understand that, except for the notes at the top and bottom, this post reflects the opinions of the speaker, not me. [various examples and illustrations of bad usability] What does usability include in web apps? [...]]]></description>
			<content:encoded><![CDATA[<p>
<i>This is my summary of Nathaniel Schutta&rsquo;s &ldquo;Making web apps suck less&rdquo;, a session I attended at <a href="http://www.scandevconf.se/2010/conference/">ScanDevConf 2010</a>. <b>Please understand that, except for the notes at the top and bottom, this post reflects the opinions of the speaker, not me.</b></i>
</p>
<p>
[various examples and illustrations of bad usability]
</p>
<p>
What does usability include in web apps?</p>
<ul>
<li>
Learnability
</li>
<li>
Efficiency
</li>
<li>
Memorability &ndash; how easy is it to pick up an application again after a few months&rsquo; absence
</li>
<li>
Handling errors
</li>
<li>
User satisfaction
</li>
</ul>
<p>How much should you focus on each of these? As usual in software development, the answer is &ldquo;It depends&rdquo;.</p>
<ul>
<li>
How many users will the system have?
</li>
<li>
How often will they use it?
</li>
<li>
Will they get training?
</li>
<li>
Do they have alternatives to using your application?
</li>
</ul>
<p>
How do you find usability problems?</p>
<ul>
<li>
Ask users
</li>
<li>
Watch them
</li>
<li>
Try doing it yourself
</li>
<li>
Just as comments are a code smell, (the need for) documentation is a usability smell. Warning signs include post-its stuck to the screen, looking things up in the manual.
</li>
</ul>
<p>
Paper prototyping is a powerful tool for evaluating usability. Test them with actual users!
</p>
<p>
<i><b>My opinion:</b> A good intro for those who have never given usability much thought. Luckily we&rsquo;ve come a bit further than this with our application.</i></p>
]]></content:encoded>
			<wfw:commentRss>http://www.toomik.net/helen/blog/2010/04/13/scandevconf_notes_nathaniel_schutta_making_web_apps_suck_less/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ScanDevConf notes: Brian Marick, &#8220;What the Agile Manifesto Left Out&#8221;</title>
		<link>http://www.toomik.net/helen/blog/2010/04/13/scandevconf_notes_brian_marick_what_the_agile_manifesto_left_out/</link>
		<comments>http://www.toomik.net/helen/blog/2010/04/13/scandevconf_notes_brian_marick_what_the_agile_manifesto_left_out/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 19:54:01 +0000</pubDate>
		<dc:creator>Helen</dc:creator>
				<category><![CDATA[Geeky things]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[brian_marick]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[scandevconf]]></category>
		<category><![CDATA[sdc]]></category>

		<guid isPermaLink="false">http://www.toomik.net/helen/blog/?p=1685</guid>
		<description><![CDATA[This is my summary of Brian Marick&#8217;s &#8220;Seven Years Later: What the Agile Manifesto Left Out&#8221;, a session I attended at ScanDevConf 2010. Please understand that, except for the notes at the top and bottom, this post reflects the opinions of the speaker, not me. The Agile Manifesto has an outward focus: it tells the [...]]]></description>
			<content:encoded><![CDATA[<p>
<i>This is my summary of Brian Marick&rsquo;s &ldquo;Seven Years Later: What the Agile Manifesto Left Out&rdquo;, a session I attended at <a href="http://www.scandevconf.se/2010/conference/">ScanDevConf 2010</a>. <b>Please understand that, except for the notes at the top and bottom, this post reflects the opinions of the speaker, not me.</b></i>
</p>
<p>
The Agile Manifesto has an outward focus: it tells the business how the development team will work with it. What it does not talk about is how the team must work within itself and with the code.
</p>
<p>
What should the team keep in mind?</p>
<ul>
<li>
Joy
</li>
<li>
Naivete: ignore the people and books who say that it&#8217;s impossible
</li>
<li>
Ease: tools should work as if they are a natural extension of your hand. Pay attention to what it feels like to work. Spend time fixing the annoyances.
</li>
<li>
Reactive: ignore the future. Don&#8217;t back up &#8211; change your course forward instead. This forces you to make your code easy to change.
</li>
</ul>
<p>Being wrong: is an opportunity to learn.
</p>
<p>
<i><b>My opinion:</b> Nice words and nice thoughts, but what do I actually do with them? Less inspiring than <a href="http://www.toomik.net/helen/blog/2010/03/22/scandevconf_notes_brian_marick_artisanal_retro-futurism_crossed_with_team-scale_anarcho-syndicalism/">Brian&#8217;s first talk at ScanDevConf</a>; rather vague and fluffy.</i></p>
]]></content:encoded>
			<wfw:commentRss>http://www.toomik.net/helen/blog/2010/04/13/scandevconf_notes_brian_marick_what_the_agile_manifesto_left_out/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ScanDevConf notes: Thomas Lundström, &#8220;BDD approaches for web development&#8221;</title>
		<link>http://www.toomik.net/helen/blog/2010/04/13/scandevconf_notes_thomas_lundstrom_bdd_approaches_for_web_development/</link>
		<comments>http://www.toomik.net/helen/blog/2010/04/13/scandevconf_notes_thomas_lundstrom_bdd_approaches_for_web_development/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 19:46:35 +0000</pubDate>
		<dc:creator>Helen</dc:creator>
				<category><![CDATA[Geeky things]]></category>
		<category><![CDATA[bdd]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[scandevconf]]></category>
		<category><![CDATA[sdc]]></category>
		<category><![CDATA[thomas_lundstrom]]></category>
		<category><![CDATA[web_development]]></category>

		<guid isPermaLink="false">http://www.toomik.net/helen/blog/?p=1682</guid>
		<description><![CDATA[This is my summary of Thomas Lundström&#8217;s &#8220;BDD approaches for web development&#8221;, a session I attended at ScanDevConf 2010. Please understand that, except for the notes at the top and bottom, this post reflects the opinions of the speaker, not me. Development should start with user stories. Then break these down into acceptance criteria: Given [...]]]></description>
			<content:encoded><![CDATA[<p>
<i>This is my summary of Thomas Lundström&rsquo;s &ldquo;BDD approaches for web development&rdquo;, a session I attended at <a href="http://www.scandevconf.se/2010/conference/">ScanDevConf 2010</a>. <b>Please understand that, except for the notes at the top and bottom, this post reflects the opinions of the speaker, not me.</b></i>
</p>
<p>
Development should start with user stories.<br />
Then break these down into acceptance criteria:</p>
<ul>
<li>
Given &laquo;situation&raquo;
</li>
<li>
when I &laquo;do this&raquo;
</li>
<li>
then &laquo;this happens&raquo;
</li>
</ul>
<p>This should be done before the sprint planning meeting. Know what you commit to!
</p>
<p>
The rest of the session was a demonstration/walkthrough of automated BDD.
</p>
<p>
<i><b>My opinion:</b> The non-automated part of the session was a somewhat useful recap of BDD. The automated example involved, as usual, an extremely simple application and extremely simple user stories. While I understand that it will work in that case, I have great difficulty envisaging how we could possibly use it in our system.</i></p>
]]></content:encoded>
			<wfw:commentRss>http://www.toomik.net/helen/blog/2010/04/13/scandevconf_notes_thomas_lundstrom_bdd_approaches_for_web_development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ScanDevConf notes: Diana Larsen, &#8220;Creating a Climate for Project &amp; Team Success&#8221;</title>
		<link>http://www.toomik.net/helen/blog/2010/04/13/scandevconf_notes_diana_larsen_creating_a_climate_for_project_team_success/</link>
		<comments>http://www.toomik.net/helen/blog/2010/04/13/scandevconf_notes_diana_larsen_creating_a_climate_for_project_team_success/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 19:40:36 +0000</pubDate>
		<dc:creator>Helen</dc:creator>
				<category><![CDATA[Geeky things]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[diana_larsen]]></category>
		<category><![CDATA[scandevconf]]></category>
		<category><![CDATA[sdc]]></category>
		<category><![CDATA[teams]]></category>

		<guid isPermaLink="false">http://www.toomik.net/helen/blog/?p=1679</guid>
		<description><![CDATA[This is my summary of Diana Larsen&#8217;s &#8220;Creating a Climate for Project and Team Success&#8221;, a session I attended at ScanDevConf 2010. Please understand that, except for the notes at the top and bottom, this post reflects the opinions of the speaker, not me. What is a team? A group of people with&#8230; a common [...]]]></description>
			<content:encoded><![CDATA[<p>
<i>This is my summary of Diana Larsen&rsquo;s &ldquo;Creating a Climate for Project and Team Success&rdquo;, a session I attended at <a href="http://www.scandevconf.se/2010/conference/">ScanDevConf 2010</a>. <b>Please understand that, except for the notes at the top and bottom, this post reflects the opinions of the speaker, not me.</b></i>
</p>
<p>
What is a team? A group of people with&#8230;</p>
<ol>
<li>a common purpose, undertood and committed
</li>
<li>
interdependent work and skills
</li>
<li>
a shared approach to this work
</li>
<li>
joint accountability
</li>
<li>
small size
</li>
<li>
a mutual history (at day one, you are not yet a team)
</li>
</ol>
<p>
How do you achieve these? What do these imply?</p>
<ol>
<li>
A project kickoff, project charter; reminders and mini-re-kickoffs
</li>
<li>
Think about what skills are needed before you select people for your team
</li>
<li>
Have a working agreement &#8211; &#8220;we aspire to work this way&#8221;. Make implicit norms explicit.
</li>
<li>
</li>
<li>
If the team is too large, it will break into sub-teams.
</li>
<li>
Common adversities and successes; stories to tell about the team; knowing each other.
</li>
</ol>
<p>
<i><b>My opinion:</b> Basic stuff. I guess there are groups out there that need these tips but they were not of much use to me.</i></p>
]]></content:encoded>
			<wfw:commentRss>http://www.toomik.net/helen/blog/2010/04/13/scandevconf_notes_diana_larsen_creating_a_climate_for_project_team_success/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ScanDevConf notes: Henrik Kniberg, &#8220;Kanban and Scrum &#8211; Making the Most of Both&#8221;</title>
		<link>http://www.toomik.net/helen/blog/2010/04/13/scandevconf_notes_henrik_kniberg_kanban_and_scrum_-_making_the_most_of_both/</link>
		<comments>http://www.toomik.net/helen/blog/2010/04/13/scandevconf_notes_henrik_kniberg_kanban_and_scrum_-_making_the_most_of_both/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 19:34:06 +0000</pubDate>
		<dc:creator>Helen</dc:creator>
				<category><![CDATA[Geeky things]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[henrik_kniberg]]></category>
		<category><![CDATA[kanban]]></category>
		<category><![CDATA[scandevconf]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[sdc]]></category>

		<guid isPermaLink="false">http://www.toomik.net/helen/blog/?p=1675</guid>
		<description><![CDATA[This is my summary of Henrik Kniberg&#8217;s &#8220;Kanban and Scrum &#8211; making the most of both&#8221;, a session I attended at ScanDevConf 2010. Please understand that, except for the notes at the top and bottom, this post reflects the opinions of the speaker, not me. A supershort summary of Scrum: Split your team into small [...]]]></description>
			<content:encoded><![CDATA[<p>
<i>This is my summary of Henrik Kniberg&rsquo;s &ldquo;Kanban and Scrum &ndash; making the most of both&rdquo;, a session I attended at <a href="http://www.scandevconf.se/2010/conference/">ScanDevConf 2010</a>. <b>Please understand that, except for the notes at the top and bottom, this post reflects the opinions of the speaker, not me.</b></i>
</p>
<p>
A supershort summary of <b>Scrum</b>:</p>
<ul>
<li>Split your team into small parts</li>
<li>Split your product into small parts</li>
<li>Split your time into small parts</li>
</ul>
<p>&#8230; i.e. instead of a large team working on a large product for a long time, you have small teams working on small pieces of the product for short periods of time.
</p>
<p>
<b>Kanban</b> is:</p>
<ul>
<li>a signalling system</li>
<li>with visible indicators</li>
<li>that are limited in number.</li>
</ul>
<p>
Kanban in software development includes:</p>
<ul>
<li>visualizing the workflow (with columns on a whiteboard)</li>
<li>visualizing the stuff in workflow</li>
<li>limiting work in progress (WIP)</li>
<li>measuring and optimizing flow</li>
<li>explicitly defining your policies &ndash; the definition of done, WIP limits etc</li>
</ul>
<p>
How do the two differ?</p>
<ul>
<li>Scrum has more rules than kanban. On a scale from prescriptive to adaptive, the order would be<br />
RUP&nbsp;>&nbsp;XP&nbsp;>&nbsp;Scrum&nbsp;>&nbsp;Kanban >&nbsp;do&nbsp;whatever&nbsp;works.
</li>
<li>
Scrum defines roles while Kanban doesn&rsquo;t. In practice they might look the same.
</li>
<li>
Both are empirical and measure things (velocity, lead time, quality etc). Kanban gives you more knobs to twiddle to change the outcome.
</li>
<li>
Scrum has one cycle: planning and committing, releasing, and retrospectives, all three are done on the same cycle. Kanban does not tie these together; you could have a different cycle for each one.
</li>
<li>
In Scrum, items must fit within a sprint. Kanban allows long-running tasks, limited only by WIP limits.
</li>
<li>
Both limit WIP. Scrum limits by velocity, per time; Kanban limits by column in the workflow.
</li>
<li>
Scrum discourages mid-sprint change: &ldquo;We want to work in peace and quiet for a few weeks&rdquo;. In Kanban, you just need to wait for a slot to become available.</li>
<li>
In Scrum, the board is reset between sprints. In Kanban the board has a long life. Scrum gives you closure and a feeling of success, but also some waste.
</li>
<li>
Scrum prescribes one team per board, cross-functional. Kanban is more permissive of specialist teams.
</li>
<li>
Scrum prescribes estimation and calculating velocity. In Kanban both are optional.
</li>
</ul>
<p>
For more information, read <a href="http://www.infoq.com/minibooks/kanban-scrum-minibook">the free PDF minibook</a>.
</p>
<p>
<i><b>My opinion:</b> Well-structured and informative. I&rsquo;d been curious about Kanban, wondering if it might be worth trying instead of Scrum (which we use now). After this presentation I have a good grip on the differences between the two and know that Scrum suits our needs better.</i></p>
]]></content:encoded>
			<wfw:commentRss>http://www.toomik.net/helen/blog/2010/04/13/scandevconf_notes_henrik_kniberg_kanban_and_scrum_-_making_the_most_of_both/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ScanDevConf notes: Diana Larsen, &#8220;How Can You Manage New Organizations in an Old Way?</title>
		<link>http://www.toomik.net/helen/blog/2010/03/27/scandevconf_notes_diana_larsen_how_can_you_manage_new_organizations_in_an_old_way/</link>
		<comments>http://www.toomik.net/helen/blog/2010/03/27/scandevconf_notes_diana_larsen_how_can_you_manage_new_organizations_in_an_old_way/#comments</comments>
		<pubDate>Sat, 27 Mar 2010 20:54:47 +0000</pubDate>
		<dc:creator>Helen</dc:creator>
				<category><![CDATA[Geeky things]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[diane_larsen]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[scandevconf]]></category>
		<category><![CDATA[sdc]]></category>

		<guid isPermaLink="false">http://www.toomik.net/helen/blog/?p=1625</guid>
		<description><![CDATA[This is my summary of Diana Larsen&#8217;s &#8220;How Can You Manage New Organizations in an Old Way?&#8221;, which was the keynote speech for day 2 ScanDevConf 2010. Please understand that, except for the notes at the top and bottom, this post reflects the opinions of the speaker, not me. The short answer is, You can&#8217;t. [...]]]></description>
			<content:encoded><![CDATA[<p>
<i>This is my summary of Diana Larsen&rsquo;s &ldquo;How Can You Manage New Organizations in an Old Way?&rdquo;, which was the keynote speech for day 2 <a href="http://www.scandevconf.se/2010/conference/">ScanDevConf 2010</a>. <b>Please understand that, except for the notes at the top and bottom, this post reflects the opinions of the speaker, not me.</b></i>
</p>
</p>
<p>
The short answer is, You can&rsquo;t.
</p>
<p>
Before discussing the differences between the old and the new, it&rsquo;s useful to remember that the &ldquo;old&rdquo; way of work, command and control, has only existed for the past 80-100 years.
</p>
<p>
Now the old kind of work is being replaced by knowledge work, where the workers know more about their job than their manager does. The old kind of management no longer works.
</p>
<p>
Old management activities are: planning, organizing, budgeting, monitoring, directing, supervising, evaluating, controlling, commanding.
</p>
<p>
New management: managers focus on flow, people and value, and continuous improvement. Their job is to enable and facilitate.
</p>
<p>
New management activities include mentoring, mediating, protecting, advocating, acquiring and allocating resources, tracking and reporting metrics, supplying a good work climate, supporting learning, improving systems.
</p>
<p>
The people working are affected by the system they work in, and that is the reponsibility of management. Behaviour is a function of person and environment.
</p>
</p>
<p>
<i><b>My opinion:</b> This all seemed pretty self-evident to me.</i></p>
]]></content:encoded>
			<wfw:commentRss>http://www.toomik.net/helen/blog/2010/03/27/scandevconf_notes_diana_larsen_how_can_you_manage_new_organizations_in_an_old_way/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ScanDevConf notes: Niclas Nilsson, Hans Brattberg, &#8220;The Pair Programming Show&#8221;</title>
		<link>http://www.toomik.net/helen/blog/2010/03/27/scandevconf_notes_niclas_nilsson_hans_brattberg_the_pair_programming_show/</link>
		<comments>http://www.toomik.net/helen/blog/2010/03/27/scandevconf_notes_niclas_nilsson_hans_brattberg_the_pair_programming_show/#comments</comments>
		<pubDate>Sat, 27 Mar 2010 20:48:58 +0000</pubDate>
		<dc:creator>Helen</dc:creator>
				<category><![CDATA[Geeky things]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[hans_brattberg]]></category>
		<category><![CDATA[niclas_nilsson]]></category>
		<category><![CDATA[pair_programming]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[scandevconf]]></category>
		<category><![CDATA[sdc]]></category>

		<guid isPermaLink="false">http://www.toomik.net/helen/blog/?p=1622</guid>
		<description><![CDATA[This is my summary of Niclas Nilsson and Hans Brattberg&#8217;s &#8220;The Pair Programming Show&#8221;, a session I attended at ScanDevConf 2010. Please understand that, except for the notes at the top and bottom, this post reflects the opinions of the speaker, not me. This session was a live play showing pair programming in action &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>
<i>This is my summary of Niclas Nilsson and Hans Brattberg&rsquo;s &ldquo;The Pair Programming Show&rdquo;, a session I attended at <a href="http://www.scandevconf.se/2010/conference/">ScanDevConf 2010</a>. <b>Please understand that, except for the notes at the top and bottom, this post reflects the opinions of the speaker, not me.</b></i>
</p>
<p>
This session was a live play showing pair programming in action &ndash; done right, and done wrong.
</p>
<p>
<i><b>My opinion:</b> Fun and relatively well done, but pretty basic stuff. The only thing it gave me was a reminder of the different roles that the two people in a pair should have. One to focus on the small, immediate stuff; the other to focus on the bigger picture &ndash; Are we doing the right thing? Are we doing it right? Could we do something else?</i></p>
]]></content:encoded>
			<wfw:commentRss>http://www.toomik.net/helen/blog/2010/03/27/scandevconf_notes_niclas_nilsson_hans_brattberg_the_pair_programming_show/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ScanDevConf notes: Udi Dahan, &#8220;Intentions and Interfaces&#8221;</title>
		<link>http://www.toomik.net/helen/blog/2010/03/27/scandevconf_notes_udi_dahan_intentions_and_interfaces/</link>
		<comments>http://www.toomik.net/helen/blog/2010/03/27/scandevconf_notes_udi_dahan_intentions_and_interfaces/#comments</comments>
		<pubDate>Sat, 27 Mar 2010 20:43:41 +0000</pubDate>
		<dc:creator>Helen</dc:creator>
				<category><![CDATA[Geeky things]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[design_patterns]]></category>
		<category><![CDATA[interfaces]]></category>
		<category><![CDATA[scandevconf]]></category>
		<category><![CDATA[sdc]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[udi_dahan]]></category>

		<guid isPermaLink="false">http://www.toomik.net/helen/blog/?p=1619</guid>
		<description><![CDATA[This is my summary of Udi Dahan&#8217;s &#8220;Intentions and Interfaces&#8221;, a session I attended at ScanDevConf 2010. Please understand that, except for the notes at the top and bottom, this post reflects the opinions of the speaker, not me. A core design pattern: intentional interfaces. Whenever you find yourself facing a design problem, tell yourself [...]]]></description>
			<content:encoded><![CDATA[<p>
<i>This is my summary of Udi Dahan&rsquo;s &ldquo;Intentions and Interfaces&rdquo;, a session I attended at <a href="http://www.scandevconf.se/2010/conference/">ScanDevConf 2010</a>. <b>Please understand that, except for the notes at the top and bottom, this post reflects the opinions of the speaker, not me.</b></i>
</p>
<p>
A core design pattern: intentional interfaces. Whenever you find yourself facing a design problem, tell yourself &ndash; &ldquo;Make roles explicit&rdquo;.
</p>
<p>
For example, a Customer class may be used to validate a customer before persisting it, for making customers preferred, and for adding orders to the customer. Making these roles explicit, the Customer class would implement IValidator<Customer>, IMakeCustomersPreferred, and IAddOrders. Now that these are in place, we may use them, for example, to implement different fetching strategies for #2 and #3 &ndash; lazy vs eager.
</p>
<p>
Another example: there might be a CustomerService class for those same three tasks. Separating out the three responsibilities, the class might implement IMessageHandler<ChangeAddressMsg>, IMessageHandler<AddOrderMsg> and IMessageHandler<MakePreferredMsg>. Now that this is explicit, we may split this into three different classes, which would (among other things) allow us to have several handlers for a single message, in a pipeline.
</p>
<p>
As a rule of thumb, define your interfaces starting from use cases. These tend to be a stable foundation to build on.
</p>
<p>
Often we think one interface &ndash; many implementations. With this pattern it&rsquo;s the opposite: one implementation, many interfaces.
</p>
<p>
<i><b>My opinion:</b> This session is difficult to summarize without all the examples and step-by-step reasoning, so I&rsquo;m afraid the blog post won&rsquo;t do it justice. I found it useful, and the reminder to Make Rules Explicit will probably lead to better design with less sprawling classes in our code.</i></p>
]]></content:encoded>
			<wfw:commentRss>http://www.toomik.net/helen/blog/2010/03/27/scandevconf_notes_udi_dahan_intentions_and_interfaces/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ScanDevConf notes: Chris Hedgate, &#8220;Effective Retrospectives&#8221;</title>
		<link>http://www.toomik.net/helen/blog/2010/03/26/scandevconf_notes_chris_hedgate_effective_retrospectives/</link>
		<comments>http://www.toomik.net/helen/blog/2010/03/26/scandevconf_notes_chris_hedgate_effective_retrospectives/#comments</comments>
		<pubDate>Fri, 26 Mar 2010 20:28:27 +0000</pubDate>
		<dc:creator>Helen</dc:creator>
				<category><![CDATA[Geeky things]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[chris_hedgate]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[retrospective]]></category>
		<category><![CDATA[scandevconf]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[sdc]]></category>

		<guid isPermaLink="false">http://www.toomik.net/helen/blog/?p=1604</guid>
		<description><![CDATA[This is my summary of Chris Hedgate&#8217;s &#8220;Effective Retrospectives&#8221;, a session I attended at ScanDevConf 2010. Please understand that, except for the notes at the top and bottom, this post reflects the opinions of the speaker, not me. Note: In Agile development, a retrospective is a meeting at the end of an iteration (which a [...]]]></description>
			<content:encoded><![CDATA[<p>
<i>This is my summary of Chris Hedgate&rsquo;s &ldquo;Effective Retrospectives&rdquo;, a session I attended at <a href="http://www.scandevconf.se/2010/conference/">ScanDevConf 2010</a>. <b>Please understand that, except for the notes at the top and bottom, this post reflects the opinions of the speaker, not me.</b></i>
</p>
<p>
<i>Note: In Agile development, a retrospective is a meeting at the end of an iteration (which a period of work, usually 2 to 4 weeks) where the team reviews the iteration together, and discusses possible improvements to their process.</i>
</p>
<p>
A bad retrospective is: ad hoc, not prepared, with no structure.
</p>
<p>
The goals of a retrospective are two:</p>
<ul>
<li>participation</li>
<li>decide on actions, what should we change (this is what new scrum masters often focus on)</li>
</ul>
<p>
Keys:</p>
<ul>
<li>Facilitation = planning, leading, setting a goal. Gives us flow.</li>
<li>Framing = setting up and ending, making it focused</li>
<li>Structure = ensures balance, gets everyone&rsquo;s input</li>
</ul>
<p><b>Facilitation</b></p>
<ul>
<li>Use an external facilitator. The person leading the meeting should not have an interest in its outcome. It is difficult to lead and participate at the same time. If not possible: be very clear about when you&rsquo;re leading and when you&rsquo;re participating.</li>
<li>Work with the energy and the dynamics of the group. Take breaks; split into smaller groups when appropriate.</li>
<li>Prepare. Think about what activities to use; when and where to have the meeting; is food needed, etc.</li>
</ul>
<p><b>Framing</b></p>
<ul>
<li>Modify the retrospective according to its purpose</li>
<li>Define the goal and agenda</li>
<li>Not every retrospective needs to be about &ldquo;how can we get better&#8221;</li>
<li>Try retrospectives with specific themes: QA, communication, etc &ndash; gets you away from boredom and routine</li>
<li>Start with a check-in: everyone says/draws something about the iteration</li>
<li>Make it safe to participate</li>
</ul>
<p><b>Structure</b><br />
A retrospective should have three phases:</p>
<ol>
<li>What happened? Why are we here? &ndash; In this phase we share context</li>
<li>Why did that happen? &ndash; In this phase we diverge, by brainstorming</li>
<li>what should we do? &ndash; In this phase we converge again, and decide on actions</li>
</ol>
<p>Sharing context can include:</p>
<ul>
<li>Looking at raw data: burndown chart, story list, bug count chart</li>
<li>Creating a timeline: write post-its with things that happened and stick them on the timeline (all at the same time or with individual preparation)</li>
<li>An emotional timeline (a line chart scaled simply from &ndash; via 0 to +, and everyone draws their own line between these extremes)</li>
</ul>
<p>During brainstorming, people write ideas and thoughts on post-its.
</p>
<p>
During the convergence phase, you can cluster the post-its, vote on them, discuss them in smaller groups, etc. At the end, the team commits to actions that are</p>
<ul>
<li>possible</li>
<li>valuable/important</li>
<li>someone who wants to do it</li>
</ul>
<p>Finally, summarize: what have we learned, what are we taking with us.
</p>
<p>
<i><b>My opinion:</b> This was exactly what I needed. Chris&rsquo;s comment about how inexperienced scrum masters always focus on &ldquo;what should we change&rdquo; really hit home. And our retrospectives have become relatively boring. This session gave me lots of useful, practical tips. I believe our next retrospective will be much better than the last one.</i></p>
]]></content:encoded>
			<wfw:commentRss>http://www.toomik.net/helen/blog/2010/03/26/scandevconf_notes_chris_hedgate_effective_retrospectives/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ScanDevConf notes: Bill Wake, &#8220;To Make a Long Story Short &#8211; Splitting User Stories&#8221;</title>
		<link>http://www.toomik.net/helen/blog/2010/03/26/scandevconf_notes_bill_wake_to_make_a_long_story_short_-_splitting_user_stories/</link>
		<comments>http://www.toomik.net/helen/blog/2010/03/26/scandevconf_notes_bill_wake_to_make_a_long_story_short_-_splitting_user_stories/#comments</comments>
		<pubDate>Fri, 26 Mar 2010 20:05:37 +0000</pubDate>
		<dc:creator>Helen</dc:creator>
				<category><![CDATA[Geeky things]]></category>
		<category><![CDATA[bill_wake]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[requirements]]></category>
		<category><![CDATA[scandevconf]]></category>
		<category><![CDATA[sdc]]></category>
		<category><![CDATA[user_stories]]></category>

		<guid isPermaLink="false">http://www.toomik.net/helen/blog/?p=1601</guid>
		<description><![CDATA[This is my summary of Bill Wake&#8217;s &#8220;To Make a Long Story Short &#8211; Splitting User Stories&#8221;, a session I attended at ScanDevConf 2010. Please understand that, except for the notes at the top and bottom, this post reflects the opinions of the speaker, not me. Why split user stories? A story may be too [...]]]></description>
			<content:encoded><![CDATA[<p>
<i>This is my summary of Bill Wake&rsquo;s &ldquo;To Make a Long Story Short &ndash; Splitting User Stories&rdquo;, a session I attended at <a href="http://www.scandevconf.se/2010/conference/">ScanDevConf 2010</a>. <b>Please understand that, except for the notes at the top and bottom, this post reflects the opinions of the speaker, not me.</b></i>
</p>
<p>
Why split user stories? A story may be too big to manage. Or different parts of it may have different value. Or some parts may be better understood than others. We&rsquo;re looking for bargains: best value for least cost.
</p>
<p>
There are 4 categories of splits:</p>
<ul>
<li>high-level splits that get rid of lots of work</li>
<li>&#8220;ilities&rdquo; &ndash; non-functional splits</li>
<li>UX splits &ndash; simplify the user experience</li>
<li>behavioral splits &ndash; simplify behaviour</li>
</ul>
<p>Technical splits are not recommended. Stories still need to make sense and be valuable to users.
</p>
<p>
High level splits include: research; partly manual process (instead of full automation); buying instead of building; deferring features.
</p>
<p>
&#8220;ilities&rdquo; splits include: static data instead of dynamic (a &ldquo;refresh&rdquo; button instead of constant automatic refreshes); simplified persistence; lower fidelity; lower reliability; lower performance.
</p>
<p>
User experience simplifications include: batch processing instead of immediate response (generate reports off-line overnight); single user (instead of multi-user); API only (UI can wait); simplified UI style; a generic UI (textboxes in a grid instead of nicely aligned dropdown boxes etc).
</p>
<p>
Behavioural splits include: happy path first (ignore alternative flows and exception cases); fewer choices (0 or 1 instead of many, e.g. fonts in a text editor); base case first (wait with a more general solution); collect less data.
</p>
<p>
<i><b>My opinion:</b> Pretty basic stuff rather dully delivered. I could have just taken the one-page handout and not missed much.</i></p>
]]></content:encoded>
			<wfw:commentRss>http://www.toomik.net/helen/blog/2010/03/26/scandevconf_notes_bill_wake_to_make_a_long_story_short_-_splitting_user_stories/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ScanDevConf notes: Brian Marick, &#8220;Artisanal Retro-Futurism Crossed With Team-Scale Anarcho-Syndicalism&#8221;</title>
		<link>http://www.toomik.net/helen/blog/2010/03/22/scandevconf_notes_brian_marick_artisanal_retro-futurism_crossed_with_team-scale_anarcho-syndicalism/</link>
		<comments>http://www.toomik.net/helen/blog/2010/03/22/scandevconf_notes_brian_marick_artisanal_retro-futurism_crossed_with_team-scale_anarcho-syndicalism/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 20:16:16 +0000</pubDate>
		<dc:creator>Helen</dc:creator>
				<category><![CDATA[Geeky things]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[arxta]]></category>
		<category><![CDATA[brian_marick]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[scandevconf]]></category>
		<category><![CDATA[sdc]]></category>

		<guid isPermaLink="false">http://www.toomik.net/helen/blog/?p=1589</guid>
		<description><![CDATA[This is my summary of Brian Marick&#8217;s &#8220;Artisanal Retro-Futurism crossed with Team-Scale Anarcho-Syndicalism&#8221;, a session I attended at ScanDevConf 2010. Please understand that, except for the notes at the top and bottom, this post reflects the opinions of the speaker, not me. There is a core in agile that is going missing now that Agile [...]]]></description>
			<content:encoded><![CDATA[<p>
<i>This is my summary of Brian Marick&rsquo;s &ldquo;Artisanal Retro-Futurism crossed with Team-Scale Anarcho-Syndicalism&rdquo;, a session I attended at <a href="http://www.scandevconf.se/2010/conference/">ScanDevConf 2010</a>. <b>Please understand that, except for the notes at the top and bottom, this post reflects the opinions of the speaker, not me.</b></i>
</p>
<p>
There is a core in agile that is going missing now that Agile is going mainstream and <a href="http://en.wikipedia.org/wiki/Crossing_the_Chasm">crossing the chasm</a>.
</p>
<p>
A problem with Agile is its name. Of course everybody wants to be agile. Look up the opposites in a dictionary: sluggish, torpid, immobile. Who wants to be sluggish and torpid?
</p>
<p>
So I came up with a description of Agile that is weird enough that nobody is going to immediately, before they&rsquo;ve had time to really understand it, react with &ldquo;oh yes, that&rsquo;s me&#8221;: <b>Artisanal Retro-Futurism crossed with Team-Scale Anarcho-Syndicalism</b>.
</p>
<ol>
<li>
Anarcho-syndicalism:</p>
<ul>
<li>Worker self-management &ndash; no managers</li>
<li>Direct action. To take an example from the original anarcho-syndicalism, say you have a strike, and those opposing the strike are attacking you with clubs and guns. The standard approach would be to vote to elect a congressman who passes laws that prohibit violence against strikers. The AS approach is to get your own clubs and guns and protect your strikers. Don&rsquo;t try to get into management to fix your problems, fix them now.</li>
<li>Worker solidarity: the team fails together and succeeds together, we&rsquo;re all in this together</li>
</ul>
</li>
<li>
Team-scale: we&rsquo;re not revolutionizing society, just helping your team
</li>
<li>
Artisanal: people on the team care deeply about the product and its users, sometimes more than the business. Counteracts the risk of becoming so infatuated with our process that we lose sight of our aim.
</li>
<li>
Retro-futurism: 1930s futurism pictured all sorts of nice things for the future, i.e. for now. Orbital cities, clean cheap urban transport, underwater cities, personal jetpacks. We didn&rsquo;t really get much of any of that. The same happened with Agile. In the early days agile projects were few and far between, but everybody hoped that the idea would spread and make all developers happy. Instead we now have lots of teams doing Agile in name only. People on &ldquo;agile&rdquo; projects are saying &ldquo;at least my job doesn&rsquo;t suck as much as it used to&rdquo; instead of &ldquo;this is the best project I&rsquo;ve ever worked on,&rdquo; which is how it should be. Retro-futurism reminds people of the possibilities. Don&rsquo;t accept things as unchangeable, change your circumstances to get where you want, keep that gosh-wow spirit.
</li>
</ol>
<p>
To summarize the spirit of Agile:</p>
<ul>
<li>scrappy &ndash; we are trying to do something here, get out of my way</li>
<li>care &ndash; for the product, the users, the process</li>
<li>naive optimism</li>
</ul>
<p>
<i><b>My opinion:</b> Inspiring! Brian was an enthusiastic, passionate speaker who delivered a thought-provoking speech. New ways to think about old things. Conference sessions tend to fall into two categories: those where I learn new facts, and those that simply energize me and make me want to get back to work and improve everything. This is a prime example of the latter kind.</i>
</p>
<p>
<i>If you find this interesting, there is a bit more information at <a href="http://www.arxta.net/">ARxTA.net</a>, including a <a href="http://www.arxta.net/video">video of Brian delivering a similar talk</a> some years ago at some other conference.</i></p>
]]></content:encoded>
			<wfw:commentRss>http://www.toomik.net/helen/blog/2010/03/22/scandevconf_notes_brian_marick_artisanal_retro-futurism_crossed_with_team-scale_anarcho-syndicalism/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ScanDevConf notes: Erik Lundh, &#8220;Making Sense of Lean and Agile with GTD&#8221;</title>
		<link>http://www.toomik.net/helen/blog/2010/03/22/scandevconf_notes_erik_lundh_making_sense_of_lean_and_agile_with_gtd/</link>
		<comments>http://www.toomik.net/helen/blog/2010/03/22/scandevconf_notes_erik_lundh_making_sense_of_lean_and_agile_with_gtd/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 19:53:37 +0000</pubDate>
		<dc:creator>Helen</dc:creator>
				<category><![CDATA[Geeky things]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[erik_lundh]]></category>
		<category><![CDATA[gtd]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[scandevconf]]></category>
		<category><![CDATA[sdc]]></category>

		<guid isPermaLink="false">http://www.toomik.net/helen/blog/?p=1585</guid>
		<description><![CDATA[This is my summary of Erik Lundh&#8217;s &#8220;Making Sense of Lean and Agile with Getting Things Done (GTD)&#8221;, a session I attended at ScanDevConf 2010. Please understand that, except for the notes at the top and bottom, this post reflects the opinions of the speaker, not me. GTD and lean both aim to offload your [...]]]></description>
			<content:encoded><![CDATA[<p>
<i>This is my summary of Erik Lundh&rsquo;s &ldquo;Making Sense of Lean and Agile with Getting Things Done (GTD)&rdquo;, a session I attended at <a href="http://www.scandevconf.se/2010/conference/">ScanDevConf 2010</a>. <b>Please understand that, except for the notes at the top and bottom, this post reflects the opinions of the speaker, not me.</b></i>
</p>
<p>
GTD and lean both aim to offload your mind. Instead of lots of wishes and worries, you have a defined list of things to do. At any point, you can just pick the next thing off the list.
</p>
<p>
Worry is waste.
</p>
<p>
We shouldn&rsquo;t be breaking down requirements, we translate them into things to do.
</p>
<p>
<i><b>My opinion:</b> An interesting parallel to draw, but the presentation was confused and rambling. I do not know what he really wanted to achieve with this talk. And he spent way too much time talking about how great he is and what successes he has had. I had the same problem with his presentation at Agila Sverige 2009, but unfortunately I didn&rsquo;t recognize his name until I saw him on stage. I will be avoiding this guy&rsquo;s presentations in the future.</i></p>
]]></content:encoded>
			<wfw:commentRss>http://www.toomik.net/helen/blog/2010/03/22/scandevconf_notes_erik_lundh_making_sense_of_lean_and_agile_with_gtd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ScanDevConf notes: Michael Feathers, &#8220;Reinventing Software Design&#8221;</title>
		<link>http://www.toomik.net/helen/blog/2010/03/22/scandevconf_notes_michael_feathers_reinventing_software_design/</link>
		<comments>http://www.toomik.net/helen/blog/2010/03/22/scandevconf_notes_michael_feathers_reinventing_software_design/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 19:44:58 +0000</pubDate>
		<dc:creator>Helen</dc:creator>
				<category><![CDATA[Geeky things]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[michael_feathers]]></category>
		<category><![CDATA[scandevconf]]></category>
		<category><![CDATA[sdc]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.toomik.net/helen/blog/?p=1579</guid>
		<description><![CDATA[This is my summary of Michael Feathers&#8217; &#8220;Reinventing Software Design&#8221; which was the keynote speech for day 1 of ScanDevConf 2010. Please understand that, except for the notes at the top and bottom, this post reflects the opinions of the speaker, not me. In the last 5 to 7 years there has been a lot [...]]]></description>
			<content:encoded><![CDATA[<p>
<i>This is my summary of Michael Feathers&rsquo; &ldquo;Reinventing Software Design&rdquo; which was the keynote speech for day 1 of <a href="http://www.scandevconf.se/2010/conference/">ScanDevConf 2010</a>. <b>Please understand that, except for the notes at the top and bottom, this post reflects the opinions of the speaker, not me.</b></i>
</p>
<p>
In the last 5 to 7 years there has been a lot of talk about process and not so much about design. When you raise the profile of one issue (process) all others tend to fall by the wayside. There&rsquo;s also been a lot of focus on technologies. Developers in the .NET world discover things that were known in the Java world already 3 years ago, and vice versa. Design knowledge that was around has been getting lost in the generational shift. People think that they know design, but they don&rsquo;t really. The design books people read tend to be 5 years old. Where are the new books?
</p>
<p>
There&rsquo;s been a kind of a &ldquo;design winter&rdquo; &ndash; but we&rsquo;re coming out of it now.
</p>
<p>
There is also a focus on things like TDD and emergent design. But these don&rsquo;t mean that design is no longer needed &ndash; they require a tacit knowledge of design.
</p>
<p>
Trends worth looking at, regarding design:
</p>
<ul>
<li>
Software development is becoming more of an engineering discipline. We&rsquo;re bumping into constraints.
</p>
<p>
Hardware design has always been surrounded by constraints: heat, power. Software has mainly been constrained by our ability to make sense of it. No constraints means we do just about anything. We have capacity for unbounded complexity.
</p>
<p>
Now software is beginning to run into hardware limits. Hardware is going to affect software; software will become more tightly coupled to hardware. Hardware will shape business. (Google was made possible by cheap hardware. Software that utilizes GPUs.) Hardware will lead to new business models that we haven&rsquo;t even thought of yet.
</li>
<li>
&#8220;It&rsquo;s ergonomics all the way down.&rdquo; User experience design used to be thought of as something off to one side, a separate discipline, a separate community with a separate nomenclature. But what we call &ldquo;software design&rdquo; is really &ldquo;user experience design&rdquo; where we are the users. That is one of the reasons why software design often sucks: we don&rsquo;t take ourselves seriously as users.
</p>
<p>
Design guidelines are all about ergonomics. Small classes and methods are easier to read. Cohesion and coupling have a cognitive basis.
</li>
</ul>
<p>
Design will grow at the pressure points of hardware and user experience.<br />
We&rsquo;re entering an era with more constraints. Constraints will drive design. Design thrives in constraints.
</p>
<p>
<i><b>My opinion:</b> Not too impressed. I can relate to Michael&rsquo;s point about the links between design and user experience. But software bumping into hardware constraints? In some parts of the industry I&rsquo;m sure this is true, but I believe it&rsquo;s something that affects a tiny minority of developers.</i></p>
]]></content:encoded>
			<wfw:commentRss>http://www.toomik.net/helen/blog/2010/03/22/scandevconf_notes_michael_feathers_reinventing_software_design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Need to code</title>
		<link>http://www.toomik.net/helen/blog/2009/09/05/need_to_code/</link>
		<comments>http://www.toomik.net/helen/blog/2009/09/05/need_to_code/#comments</comments>
		<pubDate>Sat, 05 Sep 2009 20:07:57 +0000</pubDate>
		<dc:creator>Helen</dc:creator>
				<category><![CDATA[Geeky things]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[ruby_on_rails]]></category>

		<guid isPermaLink="false">http://www.toomik.net/helen/blog/?p=902</guid>
		<description><![CDATA[I like programming. When I don&#8217;t get to program for a while, I feel a certain restlessness. It&#8217;s the same with reading books, and physical exercise: when I get too little of it, I feel it. Most of the time my work fills that need. When I get home and Ingrid&#8217;s gone to bed, I&#8217;d [...]]]></description>
			<content:encoded><![CDATA[<p>
I like programming. When I don&rsquo;t get to program for a while, I feel a certain restlessness. It&rsquo;s the same with reading books, and physical exercise: when I get too little of it, I feel it.
</p>
<p>
Most of the time my work fills that need. When I get home and Ingrid&rsquo;s gone to bed, I&rsquo;d rather blog, read a book, etc. My hobby programming projects languish untouched. I haven&rsquo;t done any work on <a href="/helen/blog/2009/06/01/rails_stuckness/">my Rails app</a> for over a month.
</p>
<p>
But this week I have barely touched a line of code at work. Instead I&rsquo;ve been installing a new build-cum-version control-cum-database server, migrating all of those things from the old server to the new one, plus getting our new developer up to speed, doing various administrative tasks, and handling customer support issues.
</p>
<p>
By Thursday I was definitely feeling the pangs of abstinence, and my Rails app finally got some attention again. Luckily it&rsquo;s a small app so it isn&rsquo;t too hard to pick it up again. The hard part is remembering whether I had some unfinished task lying around, or whether I can just start on the next interesting-looking piece. I&rsquo;ve taken to checking in a &ldquo;next step.txt&rdquo; in order to keep track of where I was.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.toomik.net/helen/blog/2009/09/05/need_to_code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ALT.NET micro-unconference coming up (12 September)</title>
		<link>http://www.toomik.net/helen/blog/2009/08/18/altnet_micro-unconference_coming_up_12_september/</link>
		<comments>http://www.toomik.net/helen/blog/2009/08/18/altnet_micro-unconference_coming_up_12_september/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 15:30:09 +0000</pubDate>
		<dc:creator>Helen</dc:creator>
				<category><![CDATA[Geeky things]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[alt_net]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.toomik.net/helen/blog/?p=879</guid>
		<description><![CDATA[An unconference similar to the previous ones I have described has been scheduled for September 12th. Read more here and join us if you can.]]></description>
			<content:encoded><![CDATA[<p>
An unconference similar to the <a href="http://www.toomik.net/helen/blog/2009/04/18/not-altnet_open_space/">previous</a> <a href="http://www.toomik.net/helen/blog/2009/02/08/altnet_unconference/">ones</a> I have described has been scheduled for September 12th. <a href="http://altdotnet.se/uunconference.htm">Read more here</a> and join us if you can.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.toomik.net/helen/blog/2009/08/18/altnet_micro-unconference_coming_up_12_september/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>If it hurts, do it more often. httpd.conf hurts.</title>
		<link>http://www.toomik.net/helen/blog/2009/08/07/if_it_hurts_do_it_more_often_httpdconf_hurts/</link>
		<comments>http://www.toomik.net/helen/blog/2009/08/07/if_it_hurts_do_it_more_often_httpdconf_hurts/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 21:12:40 +0000</pubDate>
		<dc:creator>Helen</dc:creator>
				<category><![CDATA[Geeky things]]></category>
		<category><![CDATA[Work and career]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://www.toomik.net/helen/blog/?p=874</guid>
		<description><![CDATA[We&#8217;ve started work on a new help system at work. The old one uses a CMS from 2001 and we all loathe it. &#8220;Updating the help files&#8221; is the least popular task of each release. We&#8217;ve had enough; we&#8217;re starting afresh with Drupal. So I&#8217;ve spent today setting up a Linux VPS, configuring the web [...]]]></description>
			<content:encoded><![CDATA[<p>
We&rsquo;ve started work on a new help system at work. The old one uses a CMS from 2001 and we all loathe it. &ldquo;Updating the help files&rdquo; is the least popular task of each release. We&rsquo;ve had enough; we&rsquo;re starting afresh with <a href="http://drupal.org/">Drupal</a>.
</p>
<p>
So I&rsquo;ve spent today setting up a Linux VPS, configuring the web server, installing Drupal and all sorts of plugin modules for it. And it&rsquo;s a painful experience. Every step I take is based on something Google tells me. I have no feeling for what I&rsquo;m doing, no intuition as to whether it&rsquo;s dangerous or not. So with every other step, I&rsquo;m wondering &ndash; <i>if I get this wrong, how much of the system will blow up?</i>. How wrong am I allowed to get my changes in httpd.conf before the web server will stop responding at all?
</p>
<p>
It gives me an all new perspective on what it must feel like to be an inexperienced computer user. Afraid to click on anything, afraid to change a setting, just in case they make the computer blow up.
</p>
<p>
Another perspective on this is <a href="http://martinfowler.com/bliki/IncrementalMigration.html"><i>if it hurts do it more often</i></a>. It was not meant quite in this sense originally but it still makes sense. Unfortunately it&rsquo;s very rare that I have a meaningful need to tinker with Linux sysadmin tasks or web server settings.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.toomik.net/helen/blog/2009/08/07/if_it_hurts_do_it_more_often_httpdconf_hurts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Evolution = Variation + Selection</title>
		<link>http://www.toomik.net/helen/blog/2009/06/13/evolution_variation_selection/</link>
		<comments>http://www.toomik.net/helen/blog/2009/06/13/evolution_variation_selection/#comments</comments>
		<pubDate>Sat, 13 Jun 2009 20:50:27 +0000</pubDate>
		<dc:creator>Helen</dc:creator>
				<category><![CDATA[Geeky things]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[change]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.toomik.net/helen/blog/?p=852</guid>
		<description><![CDATA[Out of all the talks and discussions at Agila Sverige 2009, the most useful tidbit I took with me was this: Evolution = Variation + Selection The equation is obvious, and yet it was useful to have it spelled out like that. The moment I saw it on the screen, I knew it was just [...]]]></description>
			<content:encoded><![CDATA[<p>
Out of all the talks and discussions at <a href="http://www.agilasverige.se/">Agila Sverige 2009</a>, the most useful tidbit I took with me was this:
</p>
<p>
<span style="font-weight:bold; display:block; text-align: center;">Evolution = Variation + Selection</span>
</p>
<p>
The equation is obvious, and yet it was useful to have it spelled out like that. The moment I saw it on the screen, I knew it was just what our Agile project needed right now.
</p>
<p>
I&rsquo;d been thinking for some weeks now that our project felt a bit stagnant. Everything was going well, we were delivering good stuff, the process was flowing smoothly, but there was something missing: change. And if there&rsquo;s no change, there&rsquo;s no improvement, and I get restless.
</p>
<p>
We&rsquo;d had our regular retrospectives, and we&rsquo;d always come up with some points for improvement. But I felt that we were often saying the same thing every month, and that any adjustments we made were small, on the margin. Looking back (with that equation in front of me) the reason is obvious. We had a good deal of selection (critical evaluation) but far from enough variation. We need to experiment more, change our routines and our processes more (more often, more extensively, more deeply, more creatively) and see what happens.
</p>
<p>
The first thing we&rsquo;re going to change (after we all get back from our vacations) is try 1-week sprints/iterations instead of 4-week ones. And I&rsquo;m going to spend a lot of time during the summer doldrums (when we&rsquo;re between iterations) thinking up more variations to try.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.toomik.net/helen/blog/2009/06/13/evolution_variation_selection/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Agila Sverige 2009</title>
		<link>http://www.toomik.net/helen/blog/2009/06/10/agila_sverige_2009/</link>
		<comments>http://www.toomik.net/helen/blog/2009/06/10/agila_sverige_2009/#comments</comments>
		<pubDate>Wed, 10 Jun 2009 20:26:11 +0000</pubDate>
		<dc:creator>Helen</dc:creator>
				<category><![CDATA[Geeky things]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[alt_net]]></category>
		<category><![CDATA[philosophy]]></category>
		<category><![CDATA[politics]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.toomik.net/helen/blog/?p=851</guid>
		<description><![CDATA[I spent Monday and Tuesday at Agila Sverige (Agile Sweden). A lightweight and agile event, as befits the topic, somewhere in the continuum between the ALT.NET unconferences and &#8220;real&#8221; conferences. There was a small attendance fee, and meals were provided, and there were printed programmes, but the structure was like an unconference &#8211; lots of [...]]]></description>
			<content:encoded><![CDATA[<p>
I spent Monday and Tuesday at <a href="http://www.agilasverige.se/">Agila Sverige</a> (Agile Sweden). A lightweight and agile event, as befits the topic, somewhere in the continuum between the ALT.NET unconferences and &ldquo;real&rdquo; conferences. There was a small attendance fee, and meals were provided, and there were printed programmes, but the structure was like an unconference &ndash; lots of scheduled lightning talks in the mornings, and Open Space sessions in afternoons.
</p>
<p>
As with the ALT.NET events, I came home not so much with facts or techniques or tips, but with feelings of inspiration and energy. While it would have been nice to find answers, it is also nice to at least know that others are struggling with the same questions (such as fitting testing into short iterations, or adjusting Agile &#038; Scrum for use in a very small team). The term <i>mutual admiration society</i> may be derogatory, but sometimes a bit of mutual admiration is what we need to energize us.
</p>
<p>
The most interesting discussion was a philosophical-political one. I cannot recall the original label for the session, but one of the topics we ended up discussing was the parallels between some dynamics of the Agile movement and &ldquo;real-world&rdquo; revolutionary movements. Liberation movements themselves are often very illiberal, even autocratic, and it can be hard to shift from leading a liberation movement to leading a liberated population. Very different qualities and behaviours are required.
</p>
<p>
The Agile movement is a kind of liberation movement, aiming to free developer teams from the burden of excessive management, procedure, planning and documentation. But when the message trickles through to the masses, the original leaders think the message has been distorted, lament the degradation that their lofty ideas have undergone, and start talking about the need to restart the process under a new name and a new manifesto. And the masses get upset that their leaders seem to be abandoning them.
</p>
<p>
The Agile movement is a principles-based movement. It&rsquo;s not so much a method as a philosophy. (Aren&rsquo;t real-world revolutions the same?) And for the leaders of the movement, principles suffice. But when the idea spreads (or when you try to spread the idea) from innovators and early adopters on to the early majority, it starts to seem that principles are no longer enough. The target audience now includes people who do not think much about principles &ndash; because if they did, they would be leaders or early adopters themselves. So processes and methods and rules start to agglomerate. &ldquo;If you&rsquo;re not doing TDD then you&rsquo;re not doing Agile,&rdquo; and so on. So there is an inherent conflict between the foundation of Agile software development (trusting people), and the desire to spread it to the bulk of the developer population (whom you don&rsquo;t trust to do the right thing on their own).
</p>
<p>
(This, of course, raises a new question: should we even try? Would it be desirable to have the majority of projects run in an Agile manner? Or, as another speaker put it, are we running out of Agile developers? Can any developer work in an Agile manner, or does it take a certain kind of developer, of which there is a finite number?)
</p>
<p>
The issue of leaders abandoning a movement once it reaches some level of maturity is also an interesting one. (Lean development is one of the new new things that people orient towards when they get enough of Agile.) There are at least two forces conspiring to make it so. Firstly, thought leaders are rebels and/or innovators. In order to feel happy they need to feel that what they&rsquo;re doing is new and fresh, and not mainstream. When their idea becomes mainstream, they must find something even newer. Secondly, the leaders will naturally continue to develop and refine their own ideas. They won&rsquo;t stop just to wait for the rest of us to catch up. So by the time we get to Agile, the people who started Agile will again be ahead of us.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.toomik.net/helen/blog/2009/06/10/agila_sverige_2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rails stuckness</title>
		<link>http://www.toomik.net/helen/blog/2009/06/01/rails_stuckness/</link>
		<comments>http://www.toomik.net/helen/blog/2009/06/01/rails_stuckness/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 20:31:06 +0000</pubDate>
		<dc:creator>Helen</dc:creator>
				<category><![CDATA[Geeky things]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[ruby_on_rails]]></category>

		<guid isPermaLink="false">http://www.toomik.net/helen/blog/?p=847</guid>
		<description><![CDATA[The Rails learning project continues. I&#8217;ve got an actual application to work on, one that will be useful when it&#8217;s done: a web-based version of our expense tracking application. The old one was done in Access and has served us well over many years. But file sharing has always been a pain since we often [...]]]></description>
			<content:encoded><![CDATA[<p>
The Rails learning project continues. I&rsquo;ve got an actual application to work on, one that will be useful when it&rsquo;s done: a web-based version of our <a href="/helen/blog/2007/06/05/money/">expense tracking application</a>. The old one was done in Access and has served us well over many years. But file sharing has always been a pain since we often have different OS versions (and now different OSes) on our two computers, and can&rsquo;t be bothered with hooking up external hard drives etc. So we want a solution that we can both access more easily. Thus, web, and Rails.
</p>
<p>
It&rsquo;s fun and educational but it is also painful. The trivial tasks are trivial, but the moment I try to do something other than plain <a href="http://en.wikipedia.org/wiki/Create,_read,_update_and_delete">CRUD</a> with strings and numbers, I get stuck. Every task takes me a whole evening. At this rate the application won&rsquo;t be done until Christmas.
</p>
<p>
Today&rsquo;s stuckness: time zones. I want to be able to migrate the data from our existing database, and CSV files seemed like a sensible medium. Exporting from Access to CSV went easily. Importing text went well enough, once I figured out that I needed to open and resave the file with different encoding. But importing dates did not. My data file had an entry for 1998-01-01 and after importing it somehow became 1997-12-31 23:00. When I got that fixed (by changing the application&rsquo;s time zone to UTC) the data <i>looked</i> right but whenever I re-imported the data file, the dates were not recognized as matching what was already in the database, so the records were appended rather than updated. It turns out that in SQLite a date without time is not the same as a datetime with time = 0. Who comes up with this stuff?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.toomik.net/helen/blog/2009/06/01/rails_stuckness/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Michael Feathers &#8211; &#8220;Working Effectively with Legacy Code&#8221;</title>
		<link>http://www.toomik.net/helen/blog/2009/04/29/michael_feathers_-_working_effectively_with_legacy_code/</link>
		<comments>http://www.toomik.net/helen/blog/2009/04/29/michael_feathers_-_working_effectively_with_legacy_code/#comments</comments>
		<pubDate>Wed, 29 Apr 2009 21:30:04 +0000</pubDate>
		<dc:creator>Helen</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Geeky things]]></category>
		<category><![CDATA[book_review]]></category>
		<category><![CDATA[legacy_code]]></category>
		<category><![CDATA[michael_feathers]]></category>
		<category><![CDATA[non_fiction]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.toomik.net/helen/blog/?p=830</guid>
		<description><![CDATA[In a way, Working Effectively with Legacy Code does what it says on the tin: gives advice on how to work with legacy code. But while the title is technically correct, it is also misleading enough to be harmful. After all, I have been working with legacy code without any help, and making progress cleaning [...]]]></description>
			<content:encoded><![CDATA[<p>
In a way, <i>Working Effectively with Legacy Code</i> does what it says on the tin: gives advice on how to work with legacy code. But while the title is technically correct, it is also misleading enough to be harmful.
</p>
<p>
After all, I have been working with legacy code without any help, and making progress cleaning it up, too. So why would I need a book? What can it possibly do to help, other than commiserate and advise me to refactor? For a long time I dismissed the book as &ldquo;probably won&rsquo;t help me much in practice&rdquo;.
</p>
<p>
Well, it turns out that the book is not really about how to work with legacy code. Michael Feathers has his own, very specific, definition of <i>legacy code</i>: for him it means code without tests. And he also has a very specific definition of <i>working with</i> legacy code: for him it means adding no more untested code. Whenever a change or a new feature is needed, the affected parts of the code base need to be made testable first.
</p>
<p>
Redefining the problem from &ldquo;working with legacy code&rdquo; to &ldquo;making untestable code testable&rdquo; suddenly makes the topic appear very useful indeed, and the book turned out to be excellent. Like <a href="http://www.amazon.co.uk/review/R2RLN68FO6RE5E/ref=cm_cr_rdp_perm/">numerous</a> <a href="http://vanryswyckjan.blogspot.com/2007/11/book-review-working-effectively-with.html">other</a> <a href="http://aspadvice.com/blogs/ssmith/archive/2008/05/13/Book_3A00_-Working-Effectively-With-Legacy-Code.aspx">reviewers</a>, I wish I had read it a year ago!
</p>
<p>
It&rsquo;s full of practical advice, with lots of great examples, rather than high-level principles. Very pragmatic, where other software design veer off into idealism: &ldquo;you often need to make your design worse before you can make it better&rdquo; was a recurring theme here that I really sympathise with. It was a very inspiring rbook, making my fingers itch to refactor. On top of that it&rsquo;s interesting, well-written, and very obviously written by an experienced, knowledgeable expert.
</p>
<p>
The book is structured sort of like a cookbook, question-answer style: &ldquo;I need to make a change. What methods should I test?&rdquo; I cannot imagine using the book to look up answers to such specific, disjointed questions. No, the book needs to be read and digested, and then re-read and re-digested, repeating until you&rsquo;ve fully internalized all its ideas. I&rsquo;ve read it once from cover to cover (skipping only the C/C++ specific advice) and I know I will be browsing it for inspiration many times. The numerous cross-references make it a very browsable book.
</p>
<p>
However. I like the general idea of making all legacy code testable, but in practice it&rsquo;s not always practicable. GUI code is the most obvious example: it&rsquo;s hard to test in the best of cases, and in a legacy code base, making it testable is a hopeless battle. I&rsquo;m not going to refactor an entire 1500-line aspx page so that I can test my one-line change which makes a certain element invisible in certain circumstances. And more generally, making legacy code &ldquo;non-legacy&rdquo; is a worthwhile goal, but sometimes the change really is small and safe enough, and entangled enough, that making it testable is just not worth it. But I guess the book needs to be more categorical than reality: aim for the stars, get to the treetops.
</p>
<p>
<a href="http://www.amazon.com/Working-Effectively-Legacy-Robert-Martin/dp/0131177052">Amazon US</a>, <a href="http://www.amazon.co.uk/Working-Effectively-Legacy-Robert-Martin/dp/0131177052">Amazon UK</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.toomik.net/helen/blog/2009/04/29/michael_feathers_-_working_effectively_with_legacy_code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
