<?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>Information Technology Dark Side</title>
	<atom:link href="http://www.techdarkside.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.techdarkside.com</link>
	<description>Struggles of a Self-Taught Coder</description>
	<lastBuildDate>Thu, 26 Aug 2010 07:45:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Rails Workshop Topics</title>
		<link>http://www.techdarkside.com/rails-workshop-topics</link>
		<comments>http://www.techdarkside.com/rails-workshop-topics#comments</comments>
		<pubDate>Thu, 12 Aug 2010 15:45:47 +0000</pubDate>
		<dc:creator>David Christiansen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.techdarkside.com/?p=519</guid>
		<description><![CDATA[I&#8217;m noodling teaching a 3 or 4 day rails workshop. Here are the topics I want to cover: Rails Basics REST Plugins/Gems (will_paginate) Deploying with Heroku Authentication Testing Localization/Globalization Mobile Print I think the course will be based on my demo app, daibatsu.heroku.com &#8211; over the course of 4 days we&#8217;ll build out the app [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m noodling teaching a 3 or 4 day rails workshop. Here are the topics I want to cover:</p>
<ul>
<li>Rails Basics</li>
<li>REST</li>
<li>Plugins/Gems (will_paginate)</li>
<li>Deploying with Heroku</li>
<li>Authentication</li>
<li>Testing</li>
<li>Localization/Globalization</li>
<li>Mobile</li>
<li>Print</li>
</ul>
<p>I think the course will be based on my demo app, daibatsu.heroku.com &#8211; over the course of 4 days we&#8217;ll build out the app with all the features mentioned above.</p>
<p>What am I missing?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techdarkside.com/rails-workshop-topics/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Looking for Some Crazy Sales Entrepreneurs</title>
		<link>http://www.techdarkside.com/looking-for-some-crazy-sales-entrepreneurs</link>
		<comments>http://www.techdarkside.com/looking-for-some-crazy-sales-entrepreneurs#comments</comments>
		<pubDate>Tue, 27 Jul 2010 13:23:17 +0000</pubDate>
		<dc:creator>David Christiansen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.techdarkside.com/?p=515</guid>
		<description><![CDATA[TroopTrack isn&#8217;t &#8220;hard-wired&#8221; to Boy Scouts. It has an admin interface that I can use to create a unit type (currently Cub Scout Packs and Boy Scout Troops), define achievements for each unit type (Pins, Badges, Belt Loops, Etc), roles, training, positions, etc. Over the past two years, I&#8217;ve had a number of ideas for [...]]]></description>
			<content:encoded><![CDATA[<p>TroopTrack isn&#8217;t &#8220;hard-wired&#8221; to Boy Scouts. It has an admin interface that I can use to create a unit type (currently Cub Scout Packs and Boy Scout Troops), define achievements for each unit type (Pins, Badges, Belt Loops, Etc), roles, training, positions, etc.</p>
<p>Over the past two years, I&#8217;ve had a number of ideas for other ways to use TroopTrack. For instance&#8230;<br />
- Civil Air Patrol Units<br />
- Old man clubs (elks, rotary, etc)<br />
- Karate schools (dojomama.com is available)<br />
- Church youth groups<br />
- Home schooling organizations</p>
<p>There are probably lots more.</p>
<p>I&#8217;m looking for a partner who will explore these opportunities, get good at configuring TroopTrack, set a few of them up, work with me to make the public TroopTrack pages support multiple products more effectively, and then figure out how to sell the accounts.</p>
<p>For each of these, you&#8217;ll get to set your own price and take a large chunk of the revenue from your particular unit type. A civil air patrol captain I met said he thought $2500 per unit was a pretty good price. A karate school might be willing to pay $200, I don&#8217;t know&#8230;</p>
<p>We can also sell a stand-alone license to organizations like church youth groups. In those cases, they would have a dedicated TroopTrack instance that supports only their organization. Then, we can also provide a business intelligence tool (like Pentaho) for creating any kind of report they want on their units. The price would vary depending on the size of the organization, but you would get to set it, as long as I can still make a profit after the cost of hosting.</p>
<p>Your responsibilities would be level one support for all your customers. In other words, you would look at all the support tickets and emails from your customers and take care of any non-coding issues, such as:</p>
<ul>
<li>Adding new achievements</li>
<li>Resetting passwords (soon to be automated)</li>
<li>Questions about how to do something</li>
<li>Etc</li>
</ul>
<p>Remember, this is software as a service, so once you sell a customer you keep getting revenue for as long as we keep them happy.</p>
<p>There you go. Let me know what you think. If you want to try this, send me an email: dave@trooptrack.com.</p>
<p>Peace out.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techdarkside.com/looking-for-some-crazy-sales-entrepreneurs/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Things I Hate: A Quality Metric? And Beyond&#8230;</title>
		<link>http://www.techdarkside.com/things-i-hate-a-quality-metric-and-beyond</link>
		<comments>http://www.techdarkside.com/things-i-hate-a-quality-metric-and-beyond#comments</comments>
		<pubDate>Mon, 26 Jul 2010 13:16:48 +0000</pubDate>
		<dc:creator>David Christiansen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.techdarkside.com/?p=513</guid>
		<description><![CDATA[I&#8217;m Running Out Of Things To Hate If I were to give a name to the &#8220;theme&#8221; of the work I&#8217;ve been doing on TroopTrack for the past year or so, I would have to call it &#8220;Getting Rid of Things I Hate.&#8221; Here&#8217;s what I&#8217;ve been doing: Making controllers restful Making the user interface [...]]]></description>
			<content:encoded><![CDATA[<p><strong>I&#8217;m Running Out Of Things To Hate</strong><br />
If I were to give a name to the &#8220;theme&#8221; of the work I&#8217;ve been doing on TroopTrack for the past year or so, I would have to call it &#8220;Getting Rid of Things I Hate.&#8221; Here&#8217;s what I&#8217;ve been doing:</p>
<ul>
<li>Making controllers restful</li>
<li>Making the user interface easy to use and consistent</li>
<li>Fixing bugs</li>
<li>Removing or simplifying needless complexity</li>
<li>Replacing home grown bits with plugins/gems as appropriate</li>
</ul>
<p>My prioritization process has gone something like this:</p>
<ol>
<li>What parts of the app make me want to punch my monitor?</li>
<li>What do I have a good plan for fixing?</li>
<li>What will matter to my customers?</li>
</ol>
<p>A year ago the list of answers to #1 was really pretty long. Today, it&#8217;s down to just two bits &#8211; TroopTrack&#8217;s homegrown authentication system and the user_profile controller and views. This is not to say that TroopTrack is now perfect, but the remaining problems do not reach my punch-the-monitor threshold required to be on the list of things I hate.</p>
<p><strong>Is This a Quality Metric?</strong><br />
I think it is. It might be a good idea to keep a list of all the things people (including you) really, really hate about your product. Consider opening this list to developers, product owners, testers, and yes, customers. Set some threshold for what you mean by &#8220;hate&#8221;. It needs to be stuff that is more than just irritating. It needs to inspire rants, push people to take walks to calm down, tempt ex-smokers to reach for a pack, etc. </p>
<p><strong>Getting Past Hate</strong><br />
I think I will have 0 punch-the-monitor features left by mid-September at the latest. Then what?</p>
<p>Will I take a break and just tweak the app for a bit? Will I launch into new development for features I haven&#8217;t thought of yet? Will I focus on marketing and business development, something I&#8217;ve completely ignored for the past year?</p>
<p>Maybe.</p>
<p>One thing I&#8217;ve been thinking about lately is the applicability of TroopTrack to other things. Even though it is currently focused on Boy Scouts, it has the capability to support any organization that has similar needs to a Boy Scout troop. Some examples I&#8217;ve thought of include:</p>
<ul>
<li>Paramilitary organizations like the Civil Air Patrol</li>
<li>Church youth groups</li>
<li>Home school education providers</li>
<li>Girl Scouts</li>
<li>Scouting program outside the U.S.</li>
</ul>
<p>TroopTrack has finally reached the point where adding support for these organizations is simply a matter of configuration, not coding. Perhaps it&#8217;s time to start adding support for them as well.</p>
<p>Another thing I&#8217;d like to do is really flesh out the capabilities of my web page editor. I want to create a catalog of hooks back into the application so they can make data-driven web pages using their troop data. I also want to give them some more flexibility in the design and layout of their pages. I don&#8217;t really know how to do this yet, so it&#8217;s a good opportunity for some learning. Perhaps I will finally conquer the dreaded javascript.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techdarkside.com/things-i-hate-a-quality-metric-and-beyond/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>What is a tester&#8217;s job?</title>
		<link>http://www.techdarkside.com/what-is-a-testers-job</link>
		<comments>http://www.techdarkside.com/what-is-a-testers-job#comments</comments>
		<pubDate>Tue, 20 Jul 2010 19:33:08 +0000</pubDate>
		<dc:creator>David Christiansen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.techdarkside.com/?p=507</guid>
		<description><![CDATA[Melissa Bugai (@melbugai) from Atomic object asked the question &#8220;What is a tester&#8217;s job?&#8221; in twitter today. After a few 140 character attempts at succinct answers I gave up and decided to write a blog post about it. A tester&#8217;s job is to make the product better I admit this is a simplistic claim, so [...]]]></description>
			<content:encoded><![CDATA[<p>Melissa Bugai (@melbugai) from Atomic object asked the question &#8220;What is a tester&#8217;s job?&#8221; in twitter today. After a few 140 character attempts at succinct answers I gave up and decided to write a blog post about it.</p>
<p><strong>A tester&#8217;s job is to make the product better</strong><br />
I admit this is a simplistic claim, so I think I&#8217;d better explain what I mean. </p>
<p>Being a tester is much more than just finding problems. I&#8217;ve seen testers who are extremely good at finding bugs but fail to turn those bugs into substantial improvements for the product they test. Why is that?</p>
<p>Sometimes it&#8217;s because the tester is not a good bug advocate. They aren&#8217;t able to convince developer&#8217;s, managers, and stakeholders that a bug needs to be fixed. They try, are ignored, and then become irritating jerks when the bug is exposed in a production environment and begin taunting everyone else.</p>
<p>Sometimes it&#8217;s the result of crying wolf. A tester thinks every single bug they find, even the obscure boundary bug that only happens when you paste 10 million characters in a text field, is critical and must be fixed now. They escalate on everyone who tells them to chill out until everyone is sick of them and their bug reports are all ignored.</p>
<p>Sometimes it&#8217;s because the tester is out of sync with the development team. Maybe they are testing so far behind the dev team that they&#8217;ve lost interest in the area the tester is focused on. Or perhaps they have gotten ahead of the dev team and are testing stuff that doesn&#8217;t make sense contextually.</p>
<p>These are skill issues that can be taught, coached, and improved. More concerning to me is the third reason this happens.</p>
<p><strong>Sometimes it&#8217;s because a tester doesn&#8217;t believe it&#8217;s part of their job.</strong></p>
<p>&#8220;I just find the bugs. What you do with them is none of my business.&#8221;</p>
<p>I don&#8217;t care for this detached approach to testing software. You can&#8217;t coach a tester into caring about the product they test &#8211; first you have to remove their head from the dark body cavity in which it is embedded.</p>
<p>But&#8230; but&#8230; you argue. If they find the same bugs as a tester who cares what difference does it make?</p>
<p>Well, that&#8217;s not likely. They won&#8217;t find the same bugs. Their testing will be cursory and focused more on creating the impression that adequate coverage has been achieved than finding the bugs that matter the most in the context of the product development effort. </p>
<p>It&#8217;s sad to see a tester with otherwise good skills who is so ambivalent to the outcome of their work that they don&#8217;t even try to see it in the larger context of effectiveness as an individual CONTRIBUTOR.  </p>
<p><strong>A tester cannot succeed independently while the team fails</strong></p>
<p>A tester who doesn&#8217;t make the product better is failing. It might not be entirely their fault &#8211; maybe the organization has unhealthy incentives to ignore them. Maybe the developers are sensitive jerks who can&#8217;t take criticism. Maybe the managers don&#8217;t know a critical bug from a mis-spelled word in a EULA. Whatever. It doesn&#8217;t matter. If all that stuff conspires to make you fail as a tester&#8230;</p>
<p><strong>You still failed. You did not accomplish your job.</strong></p>
<p>Sorry. It&#8217;s a cold cruel world kids.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techdarkside.com/what-is-a-testers-job/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>The Best that You Can Hope For</title>
		<link>http://www.techdarkside.com/the-best-that-you-can-hope-for</link>
		<comments>http://www.techdarkside.com/the-best-that-you-can-hope-for#comments</comments>
		<pubDate>Tue, 20 Jul 2010 06:47:00 +0000</pubDate>
		<dc:creator>David Christiansen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.techdarkside.com/?p=503</guid>
		<description><![CDATA[A True Story Years ago I lived in a small city called Nobeoka on the eastern side of the island of Kyushu in southern Japan. Nobeoka, as I remember it, is built on a coastal plain wedged between the Hyuga-Nada Sea on the east and steep mountains in every other direction. There was only one [...]]]></description>
			<content:encoded><![CDATA[<p><strong>A True Story</strong><br />
Years ago I lived in a small city called Nobeoka on the eastern side of the island of Kyushu in southern Japan. Nobeoka, as I remember it, is built on a coastal plain wedged between the Hyuga-Nada Sea on the east and steep mountains in every other direction. There was only one train track through the city, coming down from Saiki in the north, through Nobeoka, then along the coast to Hyuga in the south. Southbound trains would stop in stations so that northbound trains could continue on their way back toward Fukuoka, the largest city on Kyushu.</p>
<p>Nobeoka was the first Japanese city I called home. I lived there for six months and it served as my indoctrination into a world that was both completely alien and totally fascinating. I loved the food, the language, the land, and the people. Every morning, as I rode my bike through town, I marveled at the ingenious ways in which the Japanese had merged their world with the natural (and sometimes harsh) beauty that surrounded them. Green was everywhere &#8211; it surrounded the town in every direction but the east, blanketing the mountains that pinned Nobeoka against the sea. </p>
<p>One thing that took a bit of getting used to was the toilets. Although I understand that Western toilets are very common in Japan now, in 1992 rural Japan they were neither unusual nor were they commonplace. At any given public restroom, you had a 50/50 chance at best that you were going to push a stall door open and find yourself face to face with a <a href="http://www.google.com/images?hl=en&#038;source=imghp&#038;q=squatter+toilet&#038;gbv=2&#038;aq=f&#038;aqi=&#038;aql=&#038;oq=&#038;gs_rfai=">squatter</a>.</p>
<p>Many gaijins are bothered by squatters. It can take a bit of getting used to if you haven&#8217;t grown up squatting in the brush on campouts to relieve yourself. Some gaijins had mental lists of which department stores and restaurants had western toilets and which did not, but that wasn&#8217;t me. I didn&#8217;t care. Once I had figured out the basic mechanics of the thing I was pretty comfortable with it.</p>
<p>Except for one time. One day, I rode my bike about 20 miles out of town to call on a family that lived fairly deep in the forested mountains around the town. The ride was spectacular and exhausting, winding up mountainous roads with steep drop-offs on one side and walls of rock and exploding greenness on the other. At last we arrived at the house we were looking for, a beautiful home in an idyllic forest glade. The house was old, at least a hundred years, probably much more. </p>
<p>We enjoyed a fairly luxurious amount of food in this setting, sitting on cushions around a low table, chatting with the family and eating an endless stream of Japanese favorites as the day wore away and the evening sky fell. Just as my stomach was starting to become uncomfortably full, our host presented us with a plate of about ten disks of round cuts of meat, each about the size and thickness of a large coin. The meat was almost thawed &#8211; soft and red around the outside, still a bit frozen in the middle. A small amount of blood pooled around the edges of the meat, thin and watery. Shika sushi, the host informed us. Deer meat. Raw deer meat. &#8220;I shot it myself,&#8221; he added.</p>
<p>I&#8217;d never had shika sushi before, and I haven&#8217;t since, but I wish I could. It was delicious. The other gaijin who was there with me wasn&#8217;t so keen on the stuff, so I was able to eat more than my fair share. I won&#8217;t lie. I loved it. It was like nothing I had ever tasted before. My brain told me it was gross, unsafe, and unhealthy, but my tastebuds told me a different story. My intestines, on the other hand, told me that it was the last straw. It was time for me to go to the bathroom.</p>
<p>I&#8217;ve always been prone to overeating, even when I was young. I still am, and it shows. That night was no exception, and out of some perverse sense of politeness I waited until my need was urgent to inquire about the location of the toilet. In a house this old, I could hardly expect a western toilet, but what I found instead terrified me. It wasn&#8217;t that it was a squatter. I was fine with that. The problem was the tiny closet the squatter was in. It wasn&#8217;t build for 6&#8217;1&#8243; Americans. It was built for somewhat shorter Japanese people. The ceiling was practically on top of me, and the room was just barely wider than I was, and not much deeper.</p>
<p>I stepped into the room, pulled the door to, and proceeded to squat. I stopped half-way down when my knees banged against the door and my butt hit the plumbing behind the toilet. I pulled up and looked at the squatter in disbelief &#8211; the room wasn&#8217;t deep enough, or I was too tall. I couldn&#8217;t squat OVER the toilet. My knees would bump up against the bathroom door, pushing my butt out of range of the squatter&#8217;s gaping hole no matter what I did.</p>
<p>My intestines let out a rumble. They were unhappy with me. I had taunted them with relief and then denied them. They weren&#8217;t having any of it, but what was I supposed to do? I couldn&#8217;t use that bathroom, not without missing the toilet or &#8230; Was there another option? I knew there was, but I didn&#8217;t like it. The bathroom was too close to the room in which people were still enjoying each other&#8217;s company. The bathroom door might even have been visible from there. Still&#8230; what choice did I have?</p>
<p>In the end, I did the only thing I could do, as quickly as I could manage it. I opened the door, letting it swing as wide as it needed to, then squatted over the ceramic hole in the floor and took care of business. It was loud, it was humiliating, and soon it was over. </p>
<p>When I was finished, I collected my wits and prepared to face my friends. I decided that our hosts were probably embarrassed that their bathroom was so small and unlikely to comment. Only the American I had come with would be interested in humiliating me, and maybe he hadn&#8217;t noticed. There was a chance no one else was going to say anything about what had just happened, so why should I? I put on the most dignified face I could manage and stepped back into the main room as if nothing had happened.</p>
<p>No one said a word about the incident. Not then, not ever. Apparently my gastrointestinal exuberance had gone unnoticed by our host and by the other guest. Thank goodness. I knelt back down on the cushion, took a sip of my water, and helped myself to a dumpling. It was a great evening.</p>
<p><strong>The Moral of the Story</strong><br />
What does this story have to do with software? How does it apply to Software as a service, testing, agile, or anything else I usually write about on this blog?</p>
<p>Not much. But I think it relates to yesterday&#8217;s post about <a href="http://www.techdarkside.com/sharing-my-code-feels-like-that-dream-where-i-show-up-at-school-in-my-underwear">how crappy some of my TroopTrack code is</a>. Things don&#8217;t always work out the way they ought to. Sometimes you have to part with convention and do things a different way, just to make things work. Sometimes, you just have to do what needs to be done and not worry about what that means.</p>
<p>Sometimes, the best that you can hope for is to simply avoid the worst case scenario. </p>
<p>In my case, I had to settle for being happy that I didn&#8217;t wind up with a brick in my shorts and a 20 mile bike ride home.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techdarkside.com/the-best-that-you-can-hope-for/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Sharing My Code Feels Like That Dream Where I Show Up at School in My Underwear</title>
		<link>http://www.techdarkside.com/sharing-my-code-feels-like-that-dream-where-i-show-up-at-school-in-my-underwear</link>
		<comments>http://www.techdarkside.com/sharing-my-code-feels-like-that-dream-where-i-show-up-at-school-in-my-underwear#comments</comments>
		<pubDate>Sat, 17 Jul 2010 13:53:51 +0000</pubDate>
		<dc:creator>David Christiansen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.techdarkside.com/?p=501</guid>
		<description><![CDATA[Lately I&#8217;ve had a couple of people volunteer to help out with TroopTrack. These are usually scouters who are also programmers. One of them is also a designer with a lot of Rails experience &#8211; I find that really, really exciting because there are plenty of places in the TroopTrack UI that make me want [...]]]></description>
			<content:encoded><![CDATA[<p>Lately I&#8217;ve had a couple of people volunteer to help out with TroopTrack. These are usually scouters who are also programmers. One of them is also a designer with a lot of Rails experience &#8211; I find that really, really exciting because there are plenty of places in the TroopTrack UI that make me want to put my fist through my monitor.</p>
<p>I was thinking about these requests and feeling a little embarrassed by the notion of nearly complete strangers poking around in my code. Some of the code really, really sucks. That&#8217;s a bit humiliating to me. Also, there are hardly any tests, which is a complete embarrassment given I&#8217;m a freaking tester. </p>
<p>The fact that there aren&#8217;t many tests is also a total hassle, as it means a lot of regression testing for me whenever I change something. It also means an unfortunate number of regression bugs as well, which drives my users insane.</p>
<p>When I think about other Rails devs poking around in the code, all sorts of insecurities kick in, but mostly it boils down to two things:</p>
<p>1) What if they decide I&#8217;m a crappy coder?<br />
2) What if they decide I&#8217;m a weak loser when I blame some of the bad code on other people?</p>
<p>Ah, well, it&#8217;s nice to have insecurities sometimes to remind you that you&#8217;ve still got plenty of room to grow.</p>
<p>So, specifically, here&#8217;s my TroopTrack dirty laundry. This is the stuff that I find emabarrassing:<br />
1) Some of the controllers are still not RESTful. I&#8217;ve converted most of them, but a couple are still crazy.<br />
2) The home grown authentication really sucks. It needs to be ripped out and replaced with AuthLogic.<br />
3) The before filters for limiting access based on roles are inconsistent and out of control.<br />
4) The UI metaphor is inconsistent.<br />
5) There are a few places where cascading deletes were implemented in the database<br />
6) Just plain crappy code and missing tests, as I already mentioned.</p>
<p>There are other problems that I don&#8217;t really find quite so embarrassing &#8211; features that aren&#8217;t totally mature, etc &#8211; that I consider a normal part of software development.</p>
<p>So, what to do about this? I thought about it and decided to put all my dirty laundry right on the README. That way, if someone decides to contribute, digs into the code, and gets all mad about it, I can honestly say that I tried to warn them. </p>
<p>Software is hard. Sheesh.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techdarkside.com/sharing-my-code-feels-like-that-dream-where-i-show-up-at-school-in-my-underwear/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>10 Seconds&#8230; Go: Exploratory Testing in a Nut Shell</title>
		<link>http://www.techdarkside.com/10-seconds-go-exploratory-testing-in-a-nut-shell</link>
		<comments>http://www.techdarkside.com/10-seconds-go-exploratory-testing-in-a-nut-shell#comments</comments>
		<pubDate>Thu, 17 Jun 2010 14:55:59 +0000</pubDate>
		<dc:creator>David Christiansen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.techdarkside.com/?p=494</guid>
		<description><![CDATA[The Doit Step 1: Take a tour of the feature A tour is an exploratory testing exercise that helps you create a mental model you can use for planning your testing where you simply clicky around the feature and get a sense of what it does. A typical tour is aimed at answering questions like [...]]]></description>
			<content:encoded><![CDATA[<h3>The Doit</h3>
<p><strong>Step 1: Take a tour of the feature</strong><br />
A tour is an exploratory testing exercise that helps you create a mental model you can use for planning your testing where you simply clicky around the feature and get a sense of what it does. A typical tour is aimed at answering questions like the following:</p>
<ul>
<li>What does the feature do?</li>
<li>How does the feature vary by user?</li>
<li>What other features are related to this feature or impact the way it operates?</li>
<li>What capabilities are included in this feature?</li>
<li>What setup activities are required to make the feature operational or to customize it?</li>
</ul>
<p>It&#8217;s important to take notes during your tour as you find the answers to these questions. These notes will provide the information you need for the next step: writing session charters.</p>
<p><strong>Step 2: Write some session charters</strong><br />
Writing session charters is easy &#8211; all you really have to do is capture the mission of the charter. A mission is what you are trying to accomplish in a 30-90 minute testing session. Examples of missions include:</p>
<ul>
<li>Try to find bugs in the happy path of adding a new person</li>
<li>Look for XSS bugs in the event data entry views</li>
<li>Look for bugs creating forms using IE7</li>
</ul>
<p>Use your notes from step 1 to create these charters. You can record them in a spreadsheet, a wiki page, a notebook, whatever. Just leave some room for notes.</p>
<p><strong>Step 3: Test away</strong><br />
Doit! Grab a charter and start testing. As you test, try to think of different variations of what you are doing that might matter and try those too. If you think of something else that should be tested that isn&#8217;t captured in the charters you&#8217;ve already written, pause for a minute and write a new mission down. Make notes of any bugs you&#8217;ve found, but don&#8217;t go submit a bug report yet.</p>
<p>If you encounter something related to the mission you&#8217;re on that looks strange or interests you for whatever reason, focus on it for a while until something else distracts you (that is consistent with your mission of course). Following your instincts in this way helps keep you mentally engaged and avoid &#8220;brain-dead testing.&#8221;</p>
<p><strong>Step 4: Isolate and document bugs</strong><br />
After you&#8217;ve done a charter or two, go back over your notes and highlight any bugs you&#8217;ve found. Take each one and try to isolate them. An isolated bug is one for which the simplest path to repeating it reliably has been identified. Once you get there, then document it in whatever way your team reports bugs.</p>
<p>There are good bug reports and there are bad bug reports. Good bug reports:</p>
<ul>
<li>Include information for reproducing the bug</li>
<li>Clearly identify the part of the system in which they occur</li>
<li>Clearly identify the outcome of the bad behavior (system crash, user confusion, etc)</li>
<li>Include the reason you think it is a bug (see oracles below)</li>
<li>Include supporting information such as screenshots and stack traces</ul>
</li>
<p><strong>Step 5: Take a nap</strong></p>
<p>Testing this way requires energy. Most testers can only manage 3-4 charters per day before their brains start to melt and their productivity dips. It&#8217;s important to take breaks between charters and mix in meetings (the few we have) as well as other work. For instance, if you are planning on doing 3 charters, an expense report, a call with your boss, lunch, and some development, don&#8217;t plan on doing all 3 charters in a row after lunch. Instead, mix them in throughout the day to give your brain some time to recover.</p>
<h3>Tips</h3>
<p><strong><a href="http://www.techdarkside.com/testing-ruts-you-should-stay-out-of">Stay out of ruts</a></strong></p>
<p><strong>Use your domain knowledge</strong><br />
In TriSano, this means knowing things like</p>
<ul>
<li>which diseases occur most frequently</li>
<li>which forms are longest</li>
<li>what reports are used for</li>
<li>how tech-savvy the users are</li>
</ul>
<p>This could be different for your app, but what matters is that you have some sensible understanding of the problem your solving and how the solution is used in the real world. When you test, take this knowledge into account and put it to use by modeling real scenarios in your testing.</p>
<p><strong>Pretend to be someone else</strong><br />
Here are some people you can pretend to be:</p>
<ul>
<li>A slow reader</li>
<li>An angry user</li>
<li>A malicious user</li>
<li>A new user</li>
<li>A distracted or bored user</li>
<li>A user with a disability</li>
</ul>
<p><strong>Use oracles to find bugs</strong></p>
<p>An oracle is a theory of error that tells you something is wrong. Here are the oracles I use most frequently, captured by the mnemonic &#8220;HICCUPPS&#8221;.</p>
<p>A bug could anything that is inconsistent with one of the following:</p>
<ul>
<li><strong>H</strong>istory of the product</li>
<li><strong>I</strong>mage of the product</li>
<li><strong>C</strong>laims made about the product</li>
<li><strong>C</strong>omparable products</li>
<li><strong>U</strong>ser expectations</li>
<li><strong>P</strong>urpose of the product</li>
<li><strong>P</strong>roduct itself (i.e. similar things work differently elsewhere)</li>
<li><strong>S</strong>tatues or internal standards</li>
</ul>
<p>For more information on HICCUPS, check this out: <a href="http://www.testingreflections.com/node/view/2635">http://www.testingreflections.com/node/view/2635</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.techdarkside.com/10-seconds-go-exploratory-testing-in-a-nut-shell/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Noodling on Contributor Agreements</title>
		<link>http://www.techdarkside.com/noodling-on-contributor-agreements</link>
		<comments>http://www.techdarkside.com/noodling-on-contributor-agreements#comments</comments>
		<pubDate>Wed, 12 May 2010 22:27:03 +0000</pubDate>
		<dc:creator>David Christiansen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.techdarkside.com/?p=489</guid>
		<description><![CDATA[Have I come full circle? It&#8217;s been almost two years since I started working on TroopTrack, and over a year since it launched. In that time a lot of things have changed &#8211; the partners I started with have quit, ending one decent friendship, and my attitude and objectives have changed dramatically. For the most [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Have I come full circle?</strong><br />
It&#8217;s been almost two years since I started working on TroopTrack, and over a year since it launched. In that time a lot of things have changed &#8211; the partners I started with have quit, ending one decent friendship, <a href="http://www.techdarkside.com/slow-growth-is-a-competitive-advantage">and my attitude and objectives have changed dramatically</a>. For the most part, I have really enjoyed working alone on TroopTrack since it became a solo act last year, but I&#8217;m starting to feel a need for help. I&#8217;ve got a pretty serious amount of tech debt to pay down, not to mention a user interface that still makes me want to punch the screen in certain areas.</p>
<p>I&#8217;m wiser. I&#8217;m older. I&#8217;ve got much better programming skills than I had two years ago. I&#8217;ve got a sustainable vision for the product and I&#8217;ve got a helpful, hopeful user base. I think I&#8217;ve come full circle.</p>
<p>I might be ready to bring on some help again.</p>
<p><strong>The Ideal Contributor Agreement</strong><br />
In my older, wiser world here&#8217;s what I want to get out of a contributor agreement:</p>
<ul>
<li>Incentives that encourage long-term sustainable contribution</li>
<li>Incentives that discourage get rich quick expectations or decision-making</li>
<li>Clear system for ending the agreement fairly if needed</li>
</ul>
<p><strong>The General Idea</strong><br />
<a href="http://www.michaeldkelly.com/">Mike Kelly</a> gave me some good ideas about how I might structure such an agreement. There would be four components of the agreement:</p>
<ul>
<li>An Ownership Target</li>
<li>A Contribution Target</li>
<li>A Vesting Plan</li>
<li>A Reverse Vesting Plan</li>
</ul>
<p><strong>The Ownership Target</strong><br />
This is the percent of TroopTrack the contributor would own after meeting the contribution target for three years.</p>
<p><strong>The Contribution Target</strong><br />
The number of hours the contributor will spend working on TroopTrack each year to maintain their contributor status.</p>
<p><strong>The Vesting Plan</strong><br />
For every quarter the contributor meets their contribution target they will acquire 1/12 of their ownership target.</p>
<p><strong>The Reverse Vesting Plan</strong><br />
When a contributor decides to leave or I decide they need to leave, then the reverse vesting plan kicks in. This plan converts their ownership into cash over five years by giving them a gradually declining percentage of revenue based on their ownership level. Each quarter, they receive a payment proportionate to their percent ownership, and each quarter they own 1/20 less of TroopTrack. After five years, they get nothing cuz they own nothing.</p>
<p><strong>What&#8217;s Wrong with this Picture?</strong><br />
Umm. I&#8217;ve got nothing to say here actually. I&#8217;m looking for your opinions.</p>
<p>Thanks!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techdarkside.com/noodling-on-contributor-agreements/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Slow Growth is a Competitive Advantage</title>
		<link>http://www.techdarkside.com/slow-growth-is-a-competitive-advantage</link>
		<comments>http://www.techdarkside.com/slow-growth-is-a-competitive-advantage#comments</comments>
		<pubDate>Fri, 07 May 2010 14:10:36 +0000</pubDate>
		<dc:creator>David Christiansen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.techdarkside.com/?p=487</guid>
		<description><![CDATA[You don&#8217;t believe me Go ahead. Say it. WTH. Yeah, I know you probably said WTF, but I don&#8217;t use the F word. But if you want to, do it. I don&#8217;t care. This is crazy &#8211; how can slow growth be good? I don&#8217;t blame you When I started TroopTrack I thought I&#8217;d have [...]]]></description>
			<content:encoded><![CDATA[<p><strong>You don&#8217;t believe me</strong><br />
Go ahead. Say it. WTH. Yeah, I know you probably said WTF, but I don&#8217;t use the F word. But if you want to, do it. I don&#8217;t care.</p>
<p>This is crazy &#8211; how can slow growth be good?</p>
<p><strong>I don&#8217;t blame you</strong><br />
When I started TroopTrack I thought I&#8217;d have $100k in revenue within a year, easy. We were gonna build web-based copy of TroopMaster, launch it, and watch the scouting market, starving for a solution that didn&#8217;t suck, flock to us.</p>
<p>That didn&#8217;t happen. Twenty-three months later over 300 troops have tried TroopTrack and only about 40 of them have purchased it. That&#8217;s about $1300 in revenue. The guys who started TroopTrack with me, disappointed by our slow takeoff, have quit and gone back to their normal lives. But I keep plugging along, perhaps delusional, refining the application for the 40 troops that care and the 3 new troops that click the buy button every month.</p>
<p>At this rate I&#8217;ll have $100k in revenue in 78 years or so. So how can this be a good thing? </p>
<p><strong>In the early stages LEARNING is more valuable than a lot of users</strong></p>
<p>When you start a business, you don&#8217;t KNOW jack about what will be successful. You have hopes, plans, strategies, concepts, ideas, but little knowledge. Replacing theories with KNOWLEDGE is a big freakin&#8217; deal. You&#8217;ve gotta do it.</p>
<p>The thing is, you don&#8217;t need 100,000 users to turn your theories into knowledge. You may not even need a thousand. Heck, if your product is something you and your colleagues will use for yourselves you may only need 10. What you really need is an engaged user base that will tell you when you really screw up, will generate good ideas, and will be tolerant of the mistakes you make along the way.</p>
<p><strong>Learn what users want</strong></p>
<p>You start a company because you think you know what some group of people want, even if they don&#8217;t know they want it. The first year of TroopTrack taught me that I didn&#8217;t have a clue what users want, and the systems we had in place didn&#8217;t help me learn the truth. I didn&#8217;t have much more than a horrible conversion rate to tell me that my product sucked. I needed more information.</p>
<p>Things started to turn around when I added a real help desk, not the POS we rolled our selves that was nothing more than an issues table. I signed up for ZenDesk ($9/month), integrated it with TroopTrack in about 15 minutes, and voila, I had a first class help desk and a pretty decent user forum solution.</p>
<p>Once I had a good solution for keeping track of all the things users had asked for I started to learn things. I started to see TroopTrack from the users point of view and it stung a little.</p>
<p>TroopTrack sucked. It was little more than a really buggy web-based version of the POS desktop software that most troops already use. The interface was clunky and difficult to use. Many of the features didn&#8217;t work or were incomplete. The first-time user experience was totally lame and unconvincing.</p>
<p>It was pathetic and disheartening, but I just kept going, attacking each support request as they came in. Every now and then, users would go out of their way to encourage me. One even called me to tell me how awesome the application was becoming. Feedback became gold to me &#8211; what the users want was the thing I really needed to learn. </p>
<p><strong>Incremental improvements add up over time</strong><br />
TroopTrack still has a long way to go. I try to do something good for TroopTrack every day, even if it&#8217;s just a small change or answering a user question. Most days I spend about two hours working on some part of the app, more on weekends if I can get away with it.</p>
<p>For a long time I was focused on adding new features like troop wikis, document libraries, etc. But things have changed lately. I&#8217;ve been focused on making the interface better, a little bit at a time. I&#8217;m slowly moving away from the traditional slow web page approach (fill out a form, save it, reload the page) to something more Web 2.0-ish. </p>
<p>I started with a simple, but frustrating, part of the application that had traditional index, show, new, and edit pages and converted it over to an AJAX driven interface that only had an index page that never did a fill reload. It&#8217;s fast, intuitive, and my users really seem to like it. They asked me to make the whole app work that way, a good sign that I had found at least a part of the path to awesome.</p>
<p>Since then I&#8217;ve converted more parts of the app, typically bits on the fringe that I can work on without tackling the huge core bits. I wanted to learn how to do it right before I attacked the core functionality and it&#8217;s been very educational (just an aside, if you know how to do AJAX right with rails it&#8217;s really pretty easy).</p>
<p>Yesterday I started on one of the core features &#8211; user profiles. I&#8217;m stoked and unafraid, because I&#8217;ve learned a lot and am prepared. </p>
<p><strong>Learn how to make a buck</strong><br />
Entrepreneurs are searching for a business model that will make them successful. My business model boils down to two simple metrics:<br />
- Percentage of troops who try TroopTrack and decide to buy it (conversion rate)<br />
- Percentage of troops who buy TroopTrack and decide to renew their annual subscription (renewal rate)</p>
<p>These two things tell me how awesome my product is or isn&#8217;t and whether my efforts are paying off. In the last year, my conversion rate has gone from less than 1% to just over 10%. That&#8217;s pretty good, but it&#8217;s not good enough. I don&#8217;t want to go through 10 potential customers to get 1. I could live with 4, and until I get there I don&#8217;t see any point in aggressively marketing TroopTrack.</p>
<p>I&#8217;ve learned something interesting about the 9 customers who don&#8217;t buy. They usually only log in once. Their first experience somehow doesn&#8217;t create a compelling experience. This is something I&#8217;ve gotta fix. Hopefully it will drive the conversion rate up. If it does, I&#8217;ll be happy. If it doesn&#8217;t, then I&#8217;ll keep experimenting until I crack that nut.</p>
<p>I don&#8217;t know what my renewal rate is. My first paying customer&#8217;s subscription expires in the next month. Cross yer fingers.</p>
<p>That&#8217;s my simple plan for figuring out how to make a buck: two simple metrics and experiments to make them better.</p>
<p>One experiment my users have suggested is to raise the price. A few of them have told me I&#8217;m too cheap. That&#8217;s feedback I didn&#8217;t expect.</p>
<p><strong>You must have AMAZING product support</strong><br />
My user base is pretty tolerant of mistakes I make. Sometimes I introduce bugs into the application, breaking things that used to work, but they put up with it. Why? Because we have a sense of knowing each other.</p>
<p>I can tell you the names of my ten most active troop leaders off the top of my head. I have interacted with them by email, IM, phone, and mail. Our interactions aren&#8217;t formal or unfriendly &#8211; they are casual and pleasant. They have become vested proponents of TroopTrack and what used to be just my goal &#8211; to create a troop management solution for the 21st century &#8211; has become our goal.</p>
<p>ZenDesk has a lot to do with this. It makes it easier to manage my support requests and keep my users informed. It&#8217;s also priced appropriately for my little enterprise, but still supported really brilliantly.</p>
<p>Attitude is also important here. The support I provide has changed dramatically since I began to really appreciate its value. </p>
<p><strong>You can&#8217;t do all this with a huge user base</strong><br />
So, this is a pretty long windup to the pitch, but here it is:</p>
<blockquote><p>I couldn&#8217;t do all this stuff if I had 100,000 users. That many users would bury me.</p></blockquote>
<p>Someday I&#8217;d like to have that many users. But not yet, not when I don&#8217;t know that my product is awesome. Not when I have to churn through 10 customers to get 1. Not when I look at parts of my interface and want to punch the screen. No way. </p>
<p><strong>Persistent Patience</strong><br />
That&#8217;s my theme. Persist. Patiently. Do something good every day. Keep at it, knocking the rough edges off as I find them, looking at my product through the eyes of users until it shines.</p>
<p>Do it. Do it. Do it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techdarkside.com/slow-growth-is-a-competitive-advantage/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Is this a story, a bug, or a chore? The value of pointing liberally.</title>
		<link>http://www.techdarkside.com/is-this-a-story-a-bug-or-a-chore-the-value-of-pointing-liberally</link>
		<comments>http://www.techdarkside.com/is-this-a-story-a-bug-or-a-chore-the-value-of-pointing-liberally#comments</comments>
		<pubDate>Wed, 05 May 2010 13:09:19 +0000</pubDate>
		<dc:creator>David Christiansen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.techdarkside.com/?p=483</guid>
		<description><![CDATA[How I Find Problems in Software I use a mnemonic called HICCUPPS* to help me find problems with applications I test. The idea is that as I test I look for anything that is inconsistent with: History of the product Image of the product Comparable products Claims about the product User expectations other features within [...]]]></description>
			<content:encoded><![CDATA[<p><strong>How I Find Problems in Software</strong><br />
I use a mnemonic called HICCUPPS* to help me find problems with applications I test. The idea is that as I test I look for anything that is inconsistent with:</p>
<ul>
<li><strong>H</strong>istory of the product</li>
<li><strong>I</strong>mage of the product</li>
<li><strong>C</strong>omparable products</li>
<li><strong>C</strong>laims about the product</li>
<li><strong>U</strong>ser expectations</li>
<li>other features within the <strong>P</strong>roduct</li>
<li><strong>P</strong>urpose of the product</li>
<li><strong>S</strong>tatutes that apply to the product</li>
</ul>
<p>*Not my invention. Google it.</p>
<p><strong>Not Every Problem is a Bug</strong><br />
I have a tendency to enter any problem I find as a bug. There are lots of reasons for this, including:</p>
<ul>
<li>Users tend to think everything they don&#8217;t like is a bug, which translates into pressure for me</li>
<li>Bugs seem less likely to be ignored than feature requests (stories) from a tester</li>
<li>I don&#8217;t have to think about it if I just call it a bug</li>
<li>I often can&#8217;t remember what stories have already been implemented and I&#8217;m too indifferent too do research to figure out if something was defined in a story or not before I call it a bug</li>
<li>Part of me just doesn&#8217;t care. &#8220;It needs to be fixed whether you see it as a bug or a story&#8221;</li>
</ul>
<p>This creates a tension between me and the devs because they look at a bug like &#8220;such and such list should be sortable on column headers&#8221; and they rightly call it new development. For lots of testers, this could become a regular argument. Lately, I&#8217;ve just been saying something like this:</p>
<blockquote><p>You&#8217;re right. Change it to a story.</p></blockquote>
<p><strong>Be Wrong</strong></p>
<p>I&#8217;m motivated here by a couple of things. First of all, I try to cultivate a belief in myself and others that being wrong is no big deal. One of the ways you do that is by practicing being wrong. In a situation where there is no compelling evidence that I am right other than I just want to be, I try to assume I am wrong when my peers disagree. The ability to acknowledge possible faultiness in your own smartiness is a key factor in having healthy relationships. </p>
<p><strong>Testing Adds Value</strong><br />
Another reason I have become more liberal about logging problems as stories is to demonstrate the value that testing brings to the application. You see, the way we estimate development, the estimates are an expression both of cost and value. So, if I, through testing, create 20 points worth of new development in a given iteration, I have made it possible to add 20 points of value to the product. That&#8217;s kind of cool to be able to articulate the value created by testing in metrics beyond bugs found and bugs fixed.</p>
<p><strong>Quality Has a Cost</strong><br />
Bugs aren&#8217;t pointed in our approach. This is because if it really is a bug, we already got credit for it when we shipped the feature I found it in. In other words, we probably should have found it when we built it, so getting points for fixing it is double dipping. </p>
<p>Stories, when they really are stories and not bugs, do get points. They have a cost. Pointing stories found through testing makes it easier to prioritize them. An eight point story that addresses a purely cosmetic issue is probably going to be prioritized lower than a 2 point story that addresses a functional one.</p>
<p>Knowing the cost of a story helps me avoid getting wrapped around the axle with some issue I think is mission critical but really doesn&#8217;t matter much in the grand scheme of things. It helps me put it in the context of the entire development flow and see it relative to all the other things we need to do.</p>
<p><strong>Be a Liberal Story Writer</strong><br />
Don&#8217;t get bent about some problem you found being a bug or a story. If you suspect it might be a story, or your colleagues feel it&#8217;s new development, log it as a story. Don&#8217;t sweat it much. I&#8217;ve seen testers get absolutely irate about this, and developers too. Ironically, I&#8217;ve seen irate testers also say what I said above : &#8220;It needs to be fixed whether you see it as a bug or a story&#8221;, all the while making the case for its buggishness. Don&#8217;t do that. Err on the side of points if there is a chance you are wrong and trust in your team&#8217;s ability to refine the accuracy and criteria of such judgments over time.</p>
<p>Have a nice day.</p>
<p>Dave</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techdarkside.com/is-this-a-story-a-bug-or-a-chore-the-value-of-pointing-liberally/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
