<?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>#AltDevBlogADay &#187; Kwasi Mensah</title>
	<atom:link href="http://www.altdevblogaday.com/author/kwasi-mensah/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.altdevblogaday.com</link>
	<description>Each day a little more #gamedev love</description>
	<lastBuildDate>Thu, 17 May 2012 03:06:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Angry Birds and Accessibilty Standards</title>
		<link>http://www.altdevblogaday.com/2011/08/25/angry-birds-and-accessibilty-standards/</link>
		<comments>http://www.altdevblogaday.com/2011/08/25/angry-birds-and-accessibilty-standards/#comments</comments>
		<pubDate>Thu, 25 Aug 2011 13:00:30 +0000</pubDate>
		<dc:creator>Kwasi Mensah</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://altdevblogaday.com/?p=15065</guid>
		<description><![CDATA[<p>Alas, I&#8217;m still putting the finishing touches on Stem Stumper&#8217;s post-mortem. In the meantime I want to introduce the AltDevBlogADay community to a post from a couple months ago on how incorporating accessibility into games makes them more usable for everyone.</p>
<p><a href="http://www.altdevblogaday.com/2011/08/25/angry-birds-and-accessibilty-standards/" class="more-link">Read more on Angry Birds and Accessibilty Standards&#8230;</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Alas, I&#8217;m still putting the finishing touches on Stem Stumper&#8217;s post-mortem. In the meantime I want to introduce the AltDevBlogADay community to a post from a couple months ago on how incorporating accessibility into games makes them more usable for everyone.</p>
<h2>Introduction</h2>
<p>While trying to look for a set of accessibility standards for <a title="Stem Stumper Info Page" href="http://www.ananseproductions.com/StemStumper">Stem Stumper</a> I couldn&#8217;t find any (Update: checkout the <a title="BBC Guidelines" href="http://www.bbc.co.uk/guidelines/futuremedia/accessibility/games.shtml">BBC&#8217;s  guidelines</a> for games used on any of its sites). While sites like <a title="The AbleGamers Foundation" href="http://ablegamers.org/">ablegamers.org</a> can give really useful <a title="Gaming On Collison Course paper" href="http://ablegamers.org/publications-a-research/53-gaming-on-a-collision-course.html">papers</a> and <a title="Youtube video with Disability Statistics" href="http://www.youtube.com/watch?v=zI2XZ3lJgDk">statistics about disabled gamers</a>,  I couldn&#8217;t find a clear list of guidelines to follow for making sure as many people as possible are able to play my game. While I understand blind adherence to rules isn&#8217;t the best way to achieve accessibility, game developers lives are a lot easier when we have a standard list of items to test against. Developers interested in accessibility should also check out the IGDAs <a title="IGDA's Game Accessibility Special Interest Group" href="http://gameaccessibility.blogspot.com/">Game Accessibility Interest Group</a>. They seem to be working on a gaming specific set of guidelines.</p>
<p>The closest thing I could find are the <a title="Web Content Accessibility Guidelines" href="http://www.w3.org/WAI/WCAG20/quickref/">Web Content Accessibility Guidelines</a>. They are a set of best practices that should be followed for making  a website and its content accessible. Each guideline also comes with an explanation of the reasoning behind it. So for this post, I&#8217;m going to use these standards to break down the immensely popular mobile game Angry Birds made by Finnish developer Rovio. In the spirit of the Gamasutra article <a title="Gamasutra article on accessibility and gaming" href="http://www.gamasutra.com/view/feature/6239/resetting_accessibility_in_games.php">&#8220;Resetting Accessibility in Games&#8221;</a> , I&#8217;m also going to show how following these standards leads to better usability for everyone.</p>
<h2>Scope</h2>
<p><a href="http://www.ananseproductions.com/wp-content/uploads/2011/01/mainMenu_sized.png"><img class="aligncenter size-full wp-image-44" src="http://www.ananseproductions.com/wp-content/uploads/2011/01/mainMenu_sized.png" alt="Angry Birds Main Menu" width="480" height="320" /></a></p>
<p>I&#8217;m not including Angry Bird&#8217;s social network menus in this review. I&#8217;m only focusing on content you see after hitting &#8220;Play&#8221;. I&#8217;m assuming this is the vast majority of a player&#8217;s experience in the game. Also, I&#8217;ve only made it up to level 1-21 on my iPhone. I really like the game, I just have next to no free time.</p>
<h2>General Gameplay</h2>
<p><strong>Relevant Guidelines:</strong><br />
<a title="WCAG Guideline 1.2" href="http://www.w3.org/TR/UNDERSTANDING-WCAG20/media-equiv.html">Guideline 1.2:</a> Provide alternatives for time-based media.<br />
<a title="WCAG Guideline 1.4" href="http://www.w3.org/TR/UNDERSTANDING-WCAG20/visual-audio-contrast.html">Guideline 1.4:</a> Make it easier for users to see and hear content including separating foreground from background.<br />
<a title="WCAG Guideline 2.1" href="http://www.w3.org/TR/UNDERSTANDING-WCAG20/keyboard-operation.html">Guideline 2.1:</a> Make all functionality available from a keyboard.<br />
<a title="WCAG Guideline 2.2" href="http://www.w3.org/TR/UNDERSTANDING-WCAG20/time-limits.html">Guideline 2.2:</a> Provide users enough time to read and use content.</p>
<p><a href="http://www.ananseproductions.com/wp-content/uploads/2011/01/slingshot_sized.png"><img class="aligncenter size-full wp-image-45" src="http://www.ananseproductions.com/wp-content/uploads/2011/01/slingshot_sized.png" alt="Bird in a slingshot" width="480" height="320" /></a></p>
<p>The core mechanic of Angry Birds is using a slingshot to fling birds at green pigs. The pigs can be protected by ice, wood, metal, or other materials. Some birds have special abilities. Like the blue bird that can split into three and the yellow bird that that can boost its speed in mid air.</p>
<p><a href="http://www.ananseproductions.com/wp-content/uploads/2011/01/bluebird_sized.png"><img class="aligncenter size-full wp-image-47" src="http://www.ananseproductions.com/wp-content/uploads/2011/01/bluebird_sized.png" alt="A blue bird split into three attacking green pigs" width="480" height="320" /></a></p>
<p>That&#8217;s it. The core of the game is that simple. No time limits or crazy combination of gestures needed. You don&#8217;t have to have the &#8220;twitch&#8221; reaction associated with most modern games. Since &#8220;twitch&#8221; is something you can only get from other video games, its lack in Angry Birds makes it usable not just for the disabled but by people who aren&#8217;t used to gaming at all.</p>
<p>Rovio does a good job off using multiple graphical cues to differentiate birds, pigs and obstacles from each other. By making sure the outlines and sizes of the birds and pigs differ significantly, they avoid confusing the color blind <sup><a title="Note 1" href="#note1">[1]</a></sup>. Even for the non-disabled, the variation helps enforce the difference between these objects.</p>
<p><a href="http://www.ananseproductions.com/wp-content/uploads/2011/01/characters_sized.png"><img class="aligncenter size-full wp-image-48" src="http://www.ananseproductions.com/wp-content/uploads/2011/01/characters_sized.png" alt="Angry Birds Characters" width="298" height="178" /></a></p>
<p>While not playable by keyboard, the game can be played with only one finger. There&#8217;s no need for &#8220;chording&#8221;, having to press multiple keys/use multiple fingers at the same time. This helps people with mobility related disabilities like cerebral palsy or arthritis play the game. It also simplifies the game and makes it easier for everyone to pick up and play right away.</p>
<h2>Lack of VoiceOver Support</h2>
<p><strong>Relevant Guidelines:</strong><br />
<a title="WCAG Guideline 1.1" href="http://www.w3.org/TR/UNDERSTANDING-WCAG20/text-equiv.html">Guideline 1.1:</a> Provide text alternatives for any non-text content so that it can be changed into other forms people need, such as large print, braille, speech, symbols or simpler language.<br />
<a title="WCAG Guideline 2.4" href="http://www.w3.org/TR/UNDERSTANDING-WCAG20/navigation-mechanisms.html">Guideline 2.4:</a> Provide ways to help users navigate, find content, and determine where they are.<br />
<a title="WCAG Guideline 3.1" href="http://www.w3.org/TR/UNDERSTANDING-WCAG20/meaning.html">Guideline 3.1:</a> Make text content readable and understandable.<br />
<a title="WCAG Guideline 4.1" href="http://www.w3.org/TR/UNDERSTANDING-WCAG20/ensure-compat.html">Guideline 4.1:</a> Maximize compatibility with current and future user agents, including assistive technologies.</p>
<p>Apple&#8217;s User Interface tech gives apps the ability to tag buttons, labels and other UI elements with accessibility information.  When <a title="Youtube video demonstrating how to use VoiceOver" href="http://www.youtube.com/watch?v=WxQ2qKShvmc">VoiceOver</a>, the iPhone&#8217;s screen reader, is turned on it can then read that information out loud to blind users. This tech has opened up the world of modern mobile devices to the blind. <sup><a title="Note 2" href="#note2">[2]</a></sup></p>
<p>However, using Apple&#8217;s off the shelf tech ties you to iPhone. Rovio, and many other mobile device developers, use their own cross-platform User Interface tech. It makes it easier to not only have a game on the iPhone but also on Andriod and other emerging mobile platforms. Rovio, however, doesn&#8217;t seem to use any of Apple&#8217;s accessibility tech since nothing in its User interface is tagged to work with VoiceOver <sup><a title="Note 3" href="#note3">[3]</a></sup>.</p>
<p>While there is no true cross platform way for providing accessibility information, WCAG suggest always making the following available from code:</p>
<p><strong>Name:</strong> The name of the element.<br />
<strong>Role:</strong> What it does.<br />
<strong>Value:</strong> The state its currently in</p>
<p>This information lines up nicely with what Apple&#8217;s accessibility code expects. Using the sound toggle in the pause menu as an example:</p>
<p><a href="http://www.ananseproductions.com/wp-content/uploads/2011/01/soundoff_sized.png"><img class="aligncenter size-full wp-image-49" src="http://www.ananseproductions.com/wp-content/uploads/2011/01/soundoff_sized.png" alt="Icon used when sound is turned off in Angry Birds" width="154" height="178" /></a></p>
<p><strong>Name:</strong> &#8220;Toggle Sound&#8221;<br />
<strong>Role:</strong> &#8220;Switch Between the sound being off and on&#8221;<br />
<strong>Value:</strong> &#8220;Sound is currently off&#8221;</p>
<p>Its worth noting that in a game as visually based as Angry Birds, VoiceOver support is the least of its problems. Even if every label and button  was tagged and setup properly, the act of pitching a slingshot to hurl birds at pigs behind obstacles is still fundamentally inaccessible to someone with a visual impairment. I&#8217;m learning that its better to make a game fundamentally accessible and not to rely on VoiceOver support to save the day. VoiceOver should be the icing on a cake of general accessibility.</p>
<p><a href="http://www.ananseproductions.com/wp-content/uploads/2011/01/Gabe-birthday-part.jpg"><img class="aligncenter size-full wp-image-50" src="http://www.ananseproductions.com/wp-content/uploads/2011/01/Gabe-birthday-part.jpg" alt="Yay Cake!" width="262" height="230" /></a></p>
<h2>User Interface</h2>
<p><strong>Relevant Guidelines:</strong><br />
<a title="WCAG Guideline 1.1" href="http://www.w3.org/TR/UNDERSTANDING-WCAG20/text-equiv.html">Guideline 1.1:</a>Provide text alternatives for any non-text content so that it can be changed into other forms people need, such as large print, braille, speech, symbols or simpler language.<br />
<a title="WCAG Guideline 2.2" href="http://www.w3.org/TR/UNDERSTANDING-WCAG20/time-limits.html">Guideline 2.2:</a> Provide users enough time to read and use content.<br />
<a title="WCAG Guideline 2.4" href="http://www.w3.org/TR/UNDERSTANDING-WCAG20/navigation-mechanisms.html">Guideline 2.4:</a> Provide ways to help users navigate, find content, and determine where they are.<br />
<a title="WCAG Guideline 3.2" href="http://www.w3.org/TR/UNDERSTANDING-WCAG20/consistent-behavior.html">Guideline 3.2:</a> Make Web pages appear and operate in predictable ways.<br />
<a title="WCAG Guideline 3.3" href="http://www.w3.org/TR/UNDERSTANDING-WCAG20/minimize-error.html">Guideline 3.3:</a> Help users avoid and correct mistakes.</p>
<p>Being a Finnish developer developing for an American market, Rovio must have been very conscious about the need for translating any text in the game. The game&#8217;s menu doesn&#8217;t rely on text at all but on intuitive symbols.</p>
<p><a href="http://www.ananseproductions.com/wp-content/uploads/2011/01/pause_icons_sized.png"><img class="aligncenter size-full wp-image-51" src="http://www.ananseproductions.com/wp-content/uploads/2011/01/pause_icons_sized.png" alt="Icons used on Pause Menu" width="202" height="320" /></a></p>
<p>The text that&#8217;s used for level names and numbers isn&#8217;t important for understanding the game. Even for crucial information, like the secondary abilities of birds, Rovio relies of descriptive pictures and good level design to teach the player.</p>
<p><a href="http://www.ananseproductions.com/wp-content/uploads/2011/01/placard_sized.png"><img class="aligncenter size-full wp-image-52" src="http://www.ananseproductions.com/wp-content/uploads/2011/01/placard_sized.png" alt="Bluebird Instructions" width="384" height="247" /></a></p>
<p>The use of symbols instead of text not only makes the job of localization easier but helps players that have trouble reading but can still see well enough to play the game.</p>
<p>Rovio also makes sure to keep the User Interface very shallow. Every important feature is only two taps away. The pause menu only has 5 buttons on it leaving it very uncluttered. Since the levels are small and restarting them is so easy, Rovio doesn&#8217;t have to implement &#8220;undo&#8221; functionality to let players fix mistakes. This keeps the game simple which again makes it more usable for everyone.</p>
<h2>Other Guidelines</h2>
<p><a title="WCAG Guideline 1.3" href="http://www.w3.org/TR/UNDERSTANDING-WCAG20/content-structure-separation.html">Guideline 1.3</a>: Create content that can be presented in different ways (for example simpler layout) without losing information or structure.<br />
<a title="WCAG Guideline 2.3" href="http://www.w3.org/TR/UNDERSTANDING-WCAG20/seizure.html">Guideline 2.3:</a> Do not design content in a way that is known to cause seizures.</p>
<p>I don&#8217;t think Guideline 1.3 is relevant. If VoiceOver support was implemented Angry Birds could support the standard VoiceOVer gestures. But given some quirks with how input is processed when VoiceOver or Zoom is on, using a slingshot wouldn&#8217;t be convenient. Messing with that core mechanic would make this another game entirely.</p>
<p>Angry Birds doesn&#8217;t have any flashing animations which eliminates the risk of seizures. While video induced seizures are relatively rare<sup><a title="Note 4" href="#note4">[4]</a></sup> most people who suffer from them don&#8217;t know they&#8217;re susceptible until the first attack. <sup><a title="Note 5" href="#note5">[5]</a></sup></p>
<h2>Conclusion</h2>
<p>The WCAG seems like a really good starting point for judging accessibility in games. Not only does it contain the main guidelines above but multiple levels of success criteria to judge how well you&#8217;ve implemented a guideline.  See  <a title="Web Content Accessibility Guidelines" href="http://www.w3.org/WAI/WCAG20/quickref/">Web Content Accessibility Guidelines</a> for the nitty gritty details.</p>
<p>One thing that&#8217;s lacking on most platforms is screen reader support. Apple has been ahead of the curve in terms of accessibility and hopefully other platform owners will follow. With the advent of motion gaming being used as a way to entice non-traditional gamers, I&#8217;d be disappointed if accessibility isn&#8217;t on the minds of Sony, Microsoft and Nintendo.</p>
<p>Its also important to note that ease of usability in Angry Birds goes hand in hand with most of these guidelines. Not only can the guidelines be used as a way to accommodate special needs players, but as a way to judge the usability of your game for everyone.</p>
<p><a href="http://www.ananseproductions.com/wp-content/uploads/2011/01/cake_sized.jpg"><img class="aligncenter size-full wp-image-61" src="http://www.ananseproductions.com/wp-content/uploads/2011/01/cake_sized.jpg" alt="Everyone likes cake!" width="500" height="375" /></a></p>
<h2>Notes:</h2>
<p>All images of Angry Birds were captured from my iPhone and used under fair use.<br />
Cake images taken from Wikimedia Commons. http://commons.wikimedia.org/wiki/File:Gabe-birthday-part.jpg and http://commons.wikimedia.org/wiki/File:Cake_from_WHR%28P%29.jpg</p>
<p><a name="note1"></a>Note 1: According to <a title="Wikipedia Stats on Color Blindness" href="http://en.wikipedia.org/wiki/Color_blindness#Epidemiology">Wikipedia</a> up 10% of American males are red-green color blind.  Color blindness is rare amongst women.</p>
<p><a name="note2"></a>Note 2: Austn Seraphin&#8217;s account of <a title="Behind the Curtain" href="http://behindthecurtain.us/2010/06/12/my-first-week-with-the-iphone/">getting his iPhone</a></p>
<p><a name="note3"></a>Note 3: For iPhone developer&#8217;s Apple&#8217;s guide to <a title="iOS Accessibility Programming Guide" href="http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/iPhoneAccessibility/Introduction/Introduction.html#//apple_ref/doc/uid/TP40008785">Accessibility Programming on iOS</a>. The link shows up in Google searches so I&#8217;m assuming this doesn&#8217;t break iOS NDAs.</p>
<p><a name="note4"></a>Note 4: From the <a title="Recommendations to Protect Public from Seizures" href="http://www.epilepsyfoundation.org/aboutus/pressroom/pr20050919.cfm">Epilepsy Foundation</a>:</p>
<p>&#8220;&#8230;the annual incidence of visually provoked seizures in the United States general population is estimated to be one in 91,000. Among young people 7 to 19 years of age – a population that is most susceptible to these provoked seizures and among the most frequent users of video technology – the annual incidence may be five-times as high, or one in 17,500. Only individuals who are susceptible, meaning who are photosensitive, are at risk for developing seizures provoked by light.&#8221;</p>
<p><a name="note5"></a>Note 5: Also according to the <a title="Photosensitivity and Seizures" href="http://www.epilepsyfoundation.org/about/photosensitivity/">Epilepsy Foundation</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.altdevblogaday.com/2011/08/25/angry-birds-and-accessibilty-standards/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Your Time Estimates are Broken</title>
		<link>http://www.altdevblogaday.com/2011/08/10/your-time-estimates-are-broken/</link>
		<comments>http://www.altdevblogaday.com/2011/08/10/your-time-estimates-are-broken/#comments</comments>
		<pubDate>Wed, 10 Aug 2011 12:00:41 +0000</pubDate>
		<dc:creator>Kwasi Mensah</dc:creator>
				<category><![CDATA[Bizdev]]></category>
		<category><![CDATA[General Interest]]></category>

		<guid isPermaLink="false">http://altdevblogaday.com/?p=14105</guid>
		<description><![CDATA[<div id="attachment_203" class="wp-caption aligncenter" style="width: 330px"><a href="http://www.ananseproductions.com/wp-content/uploads/2011/08/broken-clock.jpg"><img class="size-full wp-image-203" src="http://www.ananseproductions.com/wp-content/uploads/2011/08/broken-clock.jpg" alt="A broken clock is right every other sprint" width="320" height="320" /></a><p class="wp-caption-text">A broken clock is right every other sprint</p></div>
<p>My name is Kwasi Mensah, and I&#8217;ve fallen out of love with <a href="http://en.wikipedia.org/wiki/Agile_software_development">agile development</a>.  While I bought into it when I first started working, over the years I&#8217;ve lost faith in our ability to make reliable time estimates, the cornerstone of this methodology. My experience, and that of many other colleagues I&#8217;ve informally asked, is that while the majority our estimates may be in the ballpark<a title="Note 1" href="#note1">,[1]</a> when they&#8217;re off they&#8217;re really off. There are several reason proposed for this behavior (such as distractions and vacation time). In this post however, I&#8217;m going to focus on the aspect I think effects game developers the most: the cost of innovation.</p>
<p><a href="http://www.altdevblogaday.com/2011/08/10/your-time-estimates-are-broken/" class="more-link">Read more on Your Time Estimates are Broken&#8230;</a></p>
]]></description>
			<content:encoded><![CDATA[<div id="attachment_203" class="wp-caption aligncenter" style="width: 330px"><a href="http://www.ananseproductions.com/wp-content/uploads/2011/08/broken-clock.jpg"><img class="size-full wp-image-203" src="http://www.ananseproductions.com/wp-content/uploads/2011/08/broken-clock.jpg" alt="A broken clock is right every other sprint" width="320" height="320" /></a><p class="wp-caption-text">A broken clock is right every other sprint</p></div>
<p>My name is Kwasi Mensah, and I&#8217;ve fallen out of love with <a href="http://en.wikipedia.org/wiki/Agile_software_development">agile development</a>.  While I bought into it when I first started working, over the years I&#8217;ve lost faith in our ability to make reliable time estimates, the cornerstone of this methodology. My experience, and that of many other colleagues I&#8217;ve informally asked, is that while the majority our estimates may be in the ballpark<a title="Note 1" href="#note1">,[1]</a> when they&#8217;re off they&#8217;re really off. There are several reason proposed for this behavior (such as distractions and vacation time). In this post however, I&#8217;m going to focus on the aspect I think effects game developers the most: the cost of innovation.</p>
<p>How are we supposed to make an estimate on figuring out the color palette for a game about a psychic summer camp? Or how many iterations are going to be needed to get people to dance to Lady Gaga in their living room? Each game we develop hopefully has work that&#8217;s never been done before (or is at least new to the team making it). We have to deal with tasks outside the scope of our experience which agile development doesn&#8217;t seem to deal well with. And I don&#8217;t think there&#8217;s much we can do about it. We don&#8217;t get better at estimating how long it will take us to do unknown tasks. We gain experience doing similar tasks and then draw on that to give better estimates.</p>
<div id="attachment_204" class="wp-caption aligncenter" style="width: 307px"><a href="http://www.ananseproductions.com/wp-content/uploads/2011/08/estimation.png"><img class="size-full wp-image-204" src="http://www.ananseproductions.com/wp-content/uploads/2011/08/estimation.png" alt="To be fair, my natural sense of driving directions is much worse than this" width="297" height="335" /></a><p class="wp-caption-text">To be fair, my natural sense of driving directions is much worse than this</p></div>
<p>Humans are fundamentally flawed at telling how long tasks are going to take. The <a title="Planning Fallacy on Wikipedia" href="http://en.wikipedia.org/wiki/Planning_fallacy">planning fallacy</a>  tells us that we always overestimate how quickly we can do a task. There&#8217;s a famous example of this with  psychology students severely underestimating how long it would take them to finish their theses. And this is only one of the many psychological quirks that stop us from getting estimation right<a title="Note 2" href="#note2">[2]</a>. Breaking tasks down, documentation and technical design documents help give us a clear road map and disseminate knowledge to the rest of the team and managers. But when you&#8217;re uncertain about a key dependency in your task  any estimate you put down is useless<a title="Note 3" href="#note3">[3]</a>. And there are several cases when doing the work required for an estimation is a lengthy task in and of itself.</p>
<p>So how can we have any hope of shipping a product &#8220;on time&#8221;<a title="Note 4" href="#note4">[4]</a>? Deadlines are still important for talking to the press, managing PR pushes and getting paid by publishers. I think we can put better emphasis on becoming familiar with the unknown. This is where having a strong pre-production period helps. Having a period up front that says we&#8217;re willing to spend x amount of time exploring these y number of specific questions. And then having the discipline to limit production to the questions you know the answers to<a title="Note 5" href="#note5">[5]</a>.  If you&#8217;re going to try to do things your team has no experience in understand that you&#8217;re going to need a lot of experimentation time or you&#8217;re going to have to cut down on the number of new things to add. I think the power in being &#8220;indie&#8221;<a title="Note 6" href="#note6">[6]</a> is that the lack of resources forces you to be conscious of this balance at all times.</p>
<div id="attachment_205" class="wp-caption aligncenter" style="width: 410px"><a href="http://www.ananseproductions.com/wp-content/uploads/2011/08/good_balance.jpg"><img class="size-full wp-image-205" src="http://www.ananseproductions.com/wp-content/uploads/2011/08/good_balance.jpg" alt="Because we could all be making much more money outside of gaming" width="400" height="332" /></a><p class="wp-caption-text">Because we could all be making much more money outside of gaming</p></div>
<p>So once you&#8217;ve answered your games core questions and are in production what can you do to help the team stay its course? Assuming there are no shenanigans with your bug database, keep your bug count as low as possible before starting new features. Some places advocate charging the time back to the original task that caused them so you can better gauge the true cost of the task. I just think it&#8217;s important to keep the total number of bugs down<a title="Note 7" href="#note7">[7]</a>. Even if you&#8217;ve gathered the knowledge needed to have a semi-reliable estimates on getting the first pass of a task done, by definition bugs represent unknown quantities of work. There&#8217;s also the memory cost of having to remember the specifics of work done months ago instead of days ago.</p>
<p>While I&#8217;ve had a nebulous version of this problem in my head I can&#8217;t say we followed all of this advice when making Stem Stumper. And this post is largely based on fixing problems I&#8217;ve experienced before  and not on how the practical application of these ideas went<a title="Note 8" href="#note8">[8]</a>. Even if you think I&#8217;m overreacting (which is quite possible) I think we have to come to terms that we work in an industry where inspiration can&#8217;t always be forced by milestones.</p>
<h2>Notes</h2>
<p><a name="note1"></a><b>Note 1:</b> Small deviations from initial estimates is a problem in and of itself since these add up over the course of the project. As do distractions. Joel on Software <a title="Evidence Based Scheduling" href="http://www.joelonsoftware.com/items/2007/10/26.html">has an article</a> on developing a statistical model to take these into account. I like the idea of a confidence range instead of a date. But I think making a game has so many more creative unknowns than making issue tracking software that I think pre-production and not statistical modeling is going to have the most impact.</p>
<p><a name="note2"></a><b>Note 2:</b> Wikipedia has more examples of why we&#8217;re psychologically bad at this. Check out <a title="Section on Time Estimation" href="http://en.wikipedia.org/wiki/Software_development_effort_estimation#Psychological_issues_related_to_effort_estimation">this Wikipedia section</a>.</p>
<p><a name="note3"></a><b>Note 3:</b> Actually the estimate is worse than useless because it gets written down and gives production false hope.</p>
<p><a name="note4"></a><b>Note 4:</b> The psychology of deadlines is fascinating. There&#8217;s plenty of research that says intrinsic motivation can have a better effect than deadlines. But there&#8217;s also the non-scientific but often observed Parkinson&#8217;s Law, &#8220;Work expands so as to fill the time available for its completion&#8221;. There are parts of the process that we could stay on forever and parts we would rather skip over.</p>
<p><a name="note5"></a><b>Note 5:</b> But everyone knows this right? So why don&#8217;t we take the time to answer these questions before going full steam ahead? The problem with this type of planning is that it doesn&#8217;t fit well with how we currently staff projects. Unless you have ton of independent  questions you want answered by your team, you&#8217;re going to have a fair amount of people with nothing to do.</p>
<p>As a fiscally responsible company, you have to try your best to not let that happen but that last thing you want to do is tear apart the relationships and expertise you just finished building up on the last project. &#8220;Indie&#8221; developers have teams that come together and break apart as projects start and finish. Everyone has enough on their freelancing plate that they&#8217;re ok doing this. But at larger developers, which try to attract people who don&#8217;t want to live on ramen, job security is paramount. Extra Creditz has a <a title="Extra Creditz on Pre-Production" href="http://www.escapistmagazine.com/videos/view/extra-credits/3786-The-Pre-Production-Problem">really good episode</a> discussing pre-productions which you should all go watch now.</p>
<p>By the way, Extra Creditz seems to be having contractual problems with The Escapist. All I know is the videos are a constant source of intelligent conversation about games in accessible language aimed at non-developers. You can follow them on twitter <a title="ExtraCreditz on Twitter" href="http://twitter.com/#!/ExtraCreditz">@ExtraCreditz</a> to see what they&#8217;re up to next.</p>
<p><a name="note6"></a><b>Note 6:</b> Hopefully the quotations marks around &#8220;indie&#8221; give away how much of a loaded term I think its become. For the sake of this post, &#8220;indie&#8221; means a tiny team working out of their bedrooms eating ramen like its going out of style.</p>
<p><a name="note7"></a><b>Note 7:</b> Yes, I know 100 game crashing bugs is different than 100 bugs about a <a href="http://www.corruptedsave.com/blog/?p=52">dumb feature</a> not working properly. You&#8217;d probably need some type of stratified system where there are no crash bugs, up to 20 second tier bugs, 40 third tier bugs, etc. And you&#8217;d also have to take account bugs that might be fixed by future work. The numbers are completely arbitrary but your team should consciously decide on an acceptable balance between making progress and quantifying the current amount of outstanding work.</p>
<p><a name="note8"></a><b>Note 8:</b> I guess I&#8217;m suggesting time-bounded period for pre-production where you deal with issues in a preassigned priority. This sounds a lot like a sprint, except it&#8217;d be over a longer period and you have the disciplne to drop issues that couldn&#8217;t be figured out in time. I think agile can still be useful during production when you have a better handle on the amount of work in front of you.</p>
<p>Broken Clock image from: http://2.bp.blogspot.com/_0S4RTTd6-v0/Sc2ED9W_IYI/AAAAAAAAA0Q/XA5eZgFTjSE/s320/broken+clock.jpg<br />
Car estimation image from: http://xkcd.com/612/<br />
Balance image from: http://www.dailyhaha.com/_pics/good_balance.jpg</p>
]]></content:encoded>
			<wfw:commentRss>http://www.altdevblogaday.com/2011/08/10/your-time-estimates-are-broken/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Guerilla PR at PAX East</title>
		<link>http://www.altdevblogaday.com/2011/07/26/guerilla-pr-at-pax-east/</link>
		<comments>http://www.altdevblogaday.com/2011/07/26/guerilla-pr-at-pax-east/#comments</comments>
		<pubDate>Tue, 26 Jul 2011 05:00:09 +0000</pubDate>
		<dc:creator>Kwasi Mensah</dc:creator>
				<category><![CDATA[Bizdev]]></category>

		<guid isPermaLink="false">http://altdevblogaday.com/?p=12452</guid>
		<description><![CDATA[<p>Over at Ananse Proudctions we&#8217;re putting the finishing touches on our next Stem Stumper update so we&#8217;re putting up this oldie from our site. You can find the original article at http://www.ananseproductions.com/pax-east/ . Enjoy!</p>
<p><a href="http://www.altdevblogaday.com/2011/07/26/guerilla-pr-at-pax-east/" class="more-link">Read more on Guerilla PR at PAX East&#8230;</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Over at Ananse Proudctions we&#8217;re putting the finishing touches on our next Stem Stumper update so we&#8217;re putting up this oldie from our site. You can find the original article at http://www.ananseproductions.com/pax-east/ . Enjoy!</p>
<h2>Guerilla PR at PAX East</h2>
<p>Everyone at Ananse Productions is heads down working on Stem Stumper and we&#8217;re finally starting to see the light. But it would be nice if people knew about the game when we release in Mid-April. So I armed myself with business cards, packed up our stickers and buttons and brought Ananse Productions to PAX East.</p>
<p>Below are some thoughts on how our weekend went and what we&#8217;ve learned about trying to show our game to the 70,000+ people in attendance.</p>
<h2>Be Confident</h2>
<p>I&#8217;m normally not a very pushy person. But for Stem Stumper, Ananse Productions&#8217; first title, I honestly believe we&#8217;re doing something that sets us apart from other mobile games. Stem Stumper is a blind accessible puzzle game designed for both the non-sighted and sighted.</p>
<div id="attachment_97" class="wp-caption aligncenter" style="width: 490px"><a href="http://www.ananseproductions.com/wp-content/uploads/2011/03/ScreenShotHalfed_2.png"><img class="size-full wp-image-97" src="http://www.ananseproductions.com/wp-content/uploads/2011/03/ScreenShotHalfed_2.png" alt="Stem Stumper Screen Shot" width="480" height="320" /></a><p class="wp-caption-text">Stem Stumper Screen Shot</p></div>
<p>This makes me confident that I&#8217;m not wasting your time when I talk to you about Stem Stumper. And remember that everyone at PAX East is excited about gaming in some way shape or form. Even if Stem Stumper isn&#8217;t their cup of tea no one&#8217;s going scream bloody murder if you politely introduce yourself and try to start a conversation about your game.</p>
<h2>Demos are different from Betas!</h2>
<p>We&#8217;ve been preparing to get a build of Stem Stumper out to remote testers. I&#8217;ve been worrying about things like tutorials, getting the levels to unlock in order and what to show on that final screen when you beat the game.</p>
<p>The problem is none of that matters on an expo floor.  While its important to the overall timeline of getting Stem Stumper out the door, on the expo floor you have a very very short amount of time to show your game. Count out 10 seconds to yourself right now. It&#8217;s a surprisingly large amount of time when people have 100 booths with long lines that they want to see. I needed to be obsessive about shortening our pitch, cutting every extraneous word, every advanced feature, every small fact that we wanted people to know about Stem Stumper. I practiced the pitch until it rolled off my tongue. And then, only when someone is deeply interested, did I introduce them to the advanced features.</p>
<div id="attachment_101" class="wp-caption aligncenter" style="width: 440px"><a href="http://www.ananseproductions.com/wp-content/uploads/2011/03/clock_ticking.jpg"><img class="size-full wp-image-101" src="http://www.ananseproductions.com/wp-content/uploads/2011/03/clock_ticking.jpg" alt="The clock's ticking!" width="430" height="320" /></a><p class="wp-caption-text">The clock&#039;s ticking!</p></div>
<p>If you can&#8217;t shorten your sell that means your game&#8217;s learning curve is too steep. We showed Stem Stumper at Made in MA, the PAX East pre-party that highlights games made in the New England Area. We still had some big usability issues that got in the way of people picking up Stem Stumper and playing it right away. While seeing everyone fumble over the same issue was disheartening, we had a clear point of attack for what needed to be fixed and had it addressed the next day. When we showed the game to people on the first day of PAX East Stem Stumper clicked with them right away.</p>
<div id="attachment_102" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.ananseproductions.com/wp-content/uploads/2011/03/learning_curve_of_eve.jpg"><img class="size-medium wp-image-102 " src="http://www.ananseproductions.com/wp-content/uploads/2011/03/learning_curve_of_eve-300x291.jpg" alt="Steep learning curves make it impossible to demo" width="300" height="291" /></a><p class="wp-caption-text">Steep learning curves make it impossible to demo</p></div>
<h2>Always Be Demoing</h2>
<p>The great thing about working on a mobile game is that you can walk around the expo floor with an iPhone and headphones in hand and have people play it then and there. I walked up to everyone that had a yellow media pass and didn&#8217;t seem like they were speeding to another booth.</p>
<div id="attachment_98" class="wp-caption aligncenter" style="width: 329px"><a href="http://www.ananseproductions.com/wp-content/uploads/2011/03/glengarry.jpg"><img class="size-full wp-image-98 " src="http://www.ananseproductions.com/wp-content/uploads/2011/03/glengarry.jpg" alt="Glengarry's mantra modified just a smidge" width="319" height="214" /></a><p class="wp-caption-text">Glengarry&#039;s mantra modified just a smidge</p></div>
<p>While I did talk to ~100 press members over this entire weekend, I know I&#8217;ll be lucky if 10 of them followup. But even if I don&#8217;t hear from them again, we just got 100 people who&#8217;ve never seen Stem Stumper before giving us valuable information about our initial user experience. While I did use our quick spiel instead of our actual tutorials, we got a huge amount of people to help figure out what the most pressing issues with our controls are. So now we can make Stem Stumper even better for all of our players and for the 10 journalists that do followup.</p>
<h2>Go to Panels!</h2>
<p>The expo floor is great for meeting sheer amounts of people. But panels were our chance to meet people who are directly aligned with accessibility and diversity and gaming. Everyone in the room already has something in common which makes it easier to introduce myself.</p>
<p>Don&#8217;t be afraid to ask questions! At a conference like PAX East, standing up in front of a packed room and asking an intelligent question is an easy way to set yourself apart. Even when I wasn&#8217;t able to ask my question during the session,  I would talk to the panelist afterwards. They&#8217;re panelists because they&#8217;re passionate about the session idea and in my humble experience always want to chat more about it.</p>
<div id="attachment_99" class="wp-caption aligncenter" style="width: 394px"><a href="http://www.ananseproductions.com/wp-content/uploads/2011/03/raised-hands.jpg"><img class="size-full wp-image-99  " src="http://www.ananseproductions.com/wp-content/uploads/2011/03/raised-hands.jpg" alt="Don't be afraid to raise your hand!" width="384" height="259" /></a><p class="wp-caption-text">Don&#039;t be afraid to raise your hand!</p></div>
<h2>The Press is Friendly but Busy</h2>
<p>Last, but definitely not least, remember that the press are people too. At an event like this you&#8217;re going to start running into people who&#8217;s names sound eerily familiar. I made sure to tell myself the Stem Stumper and Ananse Productions aren&#8217;t too small for their attention. They&#8217;re at PAX East because they&#8217;re excited about games and they want to make sure their readers find out about the good ones no matter who makes them.</p>
<p>However, I kept in mind that a lot journalists already worked out who they&#8217;re talking to and what panels they&#8217;re covering.  Especially ones from from the bigger organizations like Kotaku, Gamespot, and Joystiq. Respect the fact that they&#8217;re doing their job just like you are. But I was always ready to exchange cards so I could follow up with our press kit (you&#8217;re never too small for a press kit!).</p>
<div id="attachment_100" class="wp-caption aligncenter" style="width: 401px"><a href="http://www.ananseproductions.com/wp-content/uploads/2011/03/Overworked-journalist.jpg"><img class="size-full wp-image-100" src="http://www.ananseproductions.com/wp-content/uploads/2011/03/Overworked-journalist.jpg" alt="An Overworked Journalist" width="391" height="310" /></a><p class="wp-caption-text">An Overworked Journalist</p></div>
<p>I wasn&#8217;t picky about who I talked to. If they have a press pass, they belong to an organization that talks to gamers that we&#8217;re never going to meet face to face. There&#8217;s no way to tell on the floor whether they reach 10 or 10,000 people a month and frankly it doesn&#8217;t matter at this point for Ananse Productions. Establishing relationships, getting people excited about Stem Stumper and honing my ability to quickly describe what stands out about Stem Stumper are things I can work on no matter who I&#8217;m talking to.</p>
<p>Monday was email madness day. I emailed <strong>everyone</strong> that gave me a card with our press kit and more information about Stem Stumper. For people who I remembered being especially excited about Stem Stumper I made sure to include a couple of lines about our meeting. Remember, this person probably has a million stories from PAX East that they&#8217;re trying to keep in their head at the same time. A friendly email reminder makes sure that we&#8217;re still visible on their todo list.</p>
<h2>Conclusion</h2>
<p>It&#8217;s too soon to see how much press Stem Stumper is going to get. But in my humble opinion all of PR comes down to establishing a relationship with your player base. Game journalists are an important part of that. Ananse has some other leads that we&#8217;re following for media exposure but this weekend was an important step in getting everyone to know about Stem Stumper.</p>
<div id="attachment_103" class="wp-caption aligncenter" style="width: 490px"><a href="http://www.ananseproductions.com/wp-content/uploads/2011/03/cards_sized.jpg"><img class="size-full wp-image-103" src="http://www.ananseproductions.com/wp-content/uploads/2011/03/cards_sized.jpg" alt="Cards from everyone we talked to this weekend" width="480" height="359" /></a><p class="wp-caption-text">Cards from everyone we talked to this weekend</p></div>
<p>&nbsp;</p>
<h2>Notes</h2>
<p>All external images used under fair use.</p>
<p>Clock ticking image from: http://campyellowfever.blogspot.com/</p>
<p>Learning curve image from: http://dementiagaming.wordpress.com/2010/08/23/learning-curve-of-eve-online/</p>
<p>Gleegarry Ross image from: http://www.michaelfruchter.com/blog/2009/02/abc-always-be-closing/</p>
<p>Image of hands raised from: http://vickicaruana.blogspot.com/2011/01/are-you-afraid-to-raise-your-hand.html</p>
<p>Overworked Journalist Image from: http://www.aspectuspr.com/blog/2011/02/churning-it-out-a-question-of-quality-content/</p>
]]></content:encoded>
			<wfw:commentRss>http://www.altdevblogaday.com/2011/07/26/guerilla-pr-at-pax-east/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Not Invented Here Manifesto</title>
		<link>http://www.altdevblogaday.com/2011/07/11/the-not-invented-here-manifesto/</link>
		<comments>http://www.altdevblogaday.com/2011/07/11/the-not-invented-here-manifesto/#comments</comments>
		<pubDate>Mon, 11 Jul 2011 06:32:28 +0000</pubDate>
		<dc:creator>Kwasi Mensah</dc:creator>
				<category><![CDATA[#gamedev]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://altdevblogaday.com/?p=11007</guid>
		<description><![CDATA[<h2><span class="Apple-style-span" style="font-size: 14px; font-weight: normal;">I have to admit one of my deepest darkest secrets. I have bad case of <a title="Wiki entry on Not Invented Here" href="http://en.wikipedia.org/wiki/Not_Invented_Here">Not Invented Here Syndrome</a>. For those not familiar with this malady, it means that I have no problem dissecting and reimplementing anything I find interesting. So when starting Ananse Productions I had to put in place some rules to make sure my curiosity doesn&#8217;t hurt us. When deciding whether to use our own code or to start using another game engine like Unity, the following 5 questions helped me decide on the (hopefully) right path for us and can hopefully help you out.<a title="Note 1" href="#note1">[1]</a></span></h2>
<p><a href="http://www.altdevblogaday.com/2011/07/11/the-not-invented-here-manifesto/" class="more-link">Read more on The Not Invented Here Manifesto&#8230;</a></p>
]]></description>
			<content:encoded><![CDATA[<h2><span class="Apple-style-span" style="font-size: 14px; font-weight: normal;">I have to admit one of my deepest darkest secrets. I have bad case of <a title="Wiki entry on Not Invented Here" href="http://en.wikipedia.org/wiki/Not_Invented_Here">Not Invented Here Syndrome</a>. For those not familiar with this malady, it means that I have no problem dissecting and reimplementing anything I find interesting. So when starting Ananse Productions I had to put in place some rules to make sure my curiosity doesn&#8217;t hurt us. When deciding whether to use our own code or to start using another game engine like Unity, the following 5 questions helped me decide on the (hopefully) right path for us and can hopefully help you out.<a title="Note 1" href="#note1">[1]</a></span></h2>
<h2>Is engineering your specialty?</h2>
<div id="attachment_194" class="wp-caption aligncenter" style="width: 528px"><a href="http://www.ananseproductions.com/wp-content/uploads/2011/07/real_programmers.png"><img class="size-full wp-image-194  " src="http://www.ananseproductions.com/wp-content/uploads/2011/07/real_programmers.png" alt="Because you're not a real programmer unless you read XKCD" width="518" height="284" /></a><p class="wp-caption-text">Because you&#39;re not a real programmer unless you read XKCD</p></div>
<p>I&#8217;ve always been a generalist, knowing just enough about graphics and audio to be dangerous. The elegance of managing complex relationships in real time, not just getting games to run blazingly fast, is what drew me into game programming<a title="Note 2" href="#note2">[2]</a>. However, in the game industry I&#8217;ve found a lot of programmers that have the &#8220;hack it together until works&#8221; philosophy which left me really frustrated.</p>
<p>I&#8217;ve always believed that good structured coding leads to better tools that empower content creators to iterate more and lets the team focus on making or changing features without running into a cavalcade of bugs. So with Ananse Productions I&#8217;m testing that theory. Plus it keeps me interested as a programmer which is important if I&#8217;m going to live and breathe this company.</p>
<h2>Can you keep your scope small?</h2>
<div id="attachment_195" class="wp-caption aligncenter" style="width: 410px"><a href="http://www.ananseproductions.com/wp-content/uploads/2011/07/scope-creep.jpg"><img class="size-full wp-image-195" src="http://www.ananseproductions.com/wp-content/uploads/2011/07/scope-creep.jpg" alt="Mmm, delicious scope creep" width="400" height="500" /></a><p class="wp-caption-text">Mmm, delicious scope creep</p></div>
<p>Stem Stumper was made in 6 months. And we only had our Artist, Audio Guru and Level Designer for 3 of those months. I think this was only possible because we kept our scope very tiny because our engine could only do so much. Constraints are a great source of inspiration<a title="Note 3" href="#note3">[3]</a>.</p>
<p>Our main priority was making a great game. But just underneath that was making sure we were battle tested and I had a clear understanding of what worked and what needed to be fixed to make our pipeline smoother. I committed to limiting the scope of the game to what the we could handle and being really hesitant to add new features. This is a paradigm shift from the industry standard of forcing in features because your scope demands it.</p>
<h2>How much risk are you willing to take on to grow expertise?</h2>
<p style="text-align: center;">
<div id="attachment_196" class="wp-caption aligncenter" style="width: 410px"><a href="http://www.ananseproductions.com/wp-content/uploads/2011/07/riskAssessment.jpg"><img class="size-full wp-image-196 " src="http://www.ananseproductions.com/wp-content/uploads/2011/07/riskAssessment.jpg" alt="Don't worry, she'll land on her feet" width="400" height="369" /></a><p class="wp-caption-text">Don&#39;t worry, she&#39;ll land on her feet</p></div>
<p>Like most &#8220;entrepreneurs&#8221; I have age on my side. If Ananse Productions doesn&#8217;t work out (knock on wood) I have a lifetime of earnings in front of me to make up for it. I have no one dependent on me and no one&#8217;s retirement funds to watch out for. On top of that if Ananse isn&#8217;t around this time next year (again knock on wood), I get to walk away with the experience of writing an engine, starting a company, managing a team, and learning how PR works. For me, that&#8217;s a win. My risk tolerance is about as high as its ever going to be.</p>
<p>Even if you&#8217;re not a kamikaze start up like us, there&#8217;s still an enticing risk/reward dynamic to doing things in house. If your artist needs to know how animation works in the game, someone on the team can answer her right away. If our sound person needs to know what audio format to use she can get an answer right away. Yes, proper documentation helps but having someone on the team who&#8217;s an expert in every system can be immensely helpful. You&#8217;ll not only have someone who understands how a physics system works but who has also actually implemented one. Engineers know there&#8217;s a huge difference between the two. You&#8217;ve just grown your human capital and cultivating talent can outweigh the time savings of a engine in the long run.</p>
<h2>Are you OK with the external dependencies?</h2>
<div id="attachment_198" class="wp-caption aligncenter" style="width: 363px"><a href="http://www.ananseproductions.com/wp-content/uploads/2011/07/clean-dependencies.jpg"><img class="size-full wp-image-198" src="http://www.ananseproductions.com/wp-content/uploads/2011/07/clean-dependencies.jpg" alt="An interesting take on the trust fall" width="353" height="500" /></a><p class="wp-caption-text">An interesting take on the trust fall</p></div>
<p>One thing that was very important in Stem Stumper was that we were able to talk to the screen reader tech of the platform we&#8217;re running on. It&#8217;s very easy for us to make sure our engine can do that because well&#8230; we built it from the very start to include that.</p>
<p>When we wanted to the game to work on Android (something we&#8217;re currently working on and will post about soon) we reimplemented our platform specific layer for Android. It sucked and it was painful but next time around we should have something that just works (although nothing ever does on Android). And learning the ins and outs of the Android platform set us up to do contract work for others. We weren&#8217;t reliant on working on an engine that already did this for us. And we didn&#8217;t have to touch the innards of an unfamiliar code base.</p>
<h2>What&#8217;s your long term plan?</h2>
<div id="attachment_197" class="wp-caption aligncenter" style="width: 288px"><a href="http://www.ananseproductions.com/wp-content/uploads/2011/07/scrooge-mcduck-make-it-rain.jpg"><img class="size-full wp-image-197" src="http://www.ananseproductions.com/wp-content/uploads/2011/07/scrooge-mcduck-make-it-rain.jpg" alt="Because we all want to make it rain" width="278" height="253" /></a><p class="wp-caption-text">Because we all want to make it rain</p></div>
<p>I&#8217;ll admit the questions above say more about my personality than my business sense. But one serious business reason for writing your engine is company stability. When you look at the big independent studios like Valve and Epic they each have ways of making money outside of game development. Valve has Steam, which allows them to take as long as they want with Half Life 3. Epic has Unreal which everyone and their grandma uses for console development (yes its starting to branch out onto other platforms). Even The Behemoth uses merchandising to help pay the bills. While riding an initial blockbuster can help setup a studio, for long term growth and stability I think you need something that isn&#8217;t as hit or miss as a game. And and making the code a potential product is hopefully a smart move for us. We&#8217;re obviously a while a way from acting on this and it slows us out of the gate, but we&#8217;re in it for the marathon not the sprint.</p>
<h2>Summary</h2>
<p>You&#8217;re not dooming yourself when you decide to roll up your sleeves and take care of things yourselves. But just like any other business decision you have to carefully evaluate the risks and see if its in line with what you&#8217;re trying to accomplish. We use WordPress for our site because we&#8217;re not about web development. And we&#8217;re not going to implement our own custom source control. I hope this helps others afflicted with NIH lead long and successful lives.</p>
<h2>Notes</h2>
<p><a name="note1"></a>Note 1: Joel Spolsky of Joel on Software and Stack Overflow fame has already written a post in defense of Not Invented Here syndrome which you can find <a title="Joel On Software on Not Invented Here Syndrome" href="http://www.joelonsoftware.com/articles/fog0000000007.html">here</a>. I wanted to focus on how it applied to Ananse Productions and game development.</p>
<p><a name="note2"></a>Note 2: You should check out Insomniac&#8217;s <a title="Insomniac on Components" href="http://www.insomniacgames.com/wp-content/uploads/2011/06/6-1-2010.pdf">presentation</a> on their component based architectures. And <a title="Radical Entertainment on Components" href="http://www.google.com/url?sa=t&amp;source=web&amp;cd=1&amp;ved=0CBUQFjAA&amp;url=http%3A%2F%2Fwww.gdcvault.com%2Fplay%2F1911%2FTheory-and-Practice-of-the&amp;rct=j&amp;q=radical%20entertainment%20Components&amp;ei=PbgYTpnxG-j40gHpnKWhBQ&amp;usg=AFQjCNGVTFg3QbWsg62Hqimepl-bQB1LaQ&amp;sig2=eCvBUX001kb3bR9132UG7A&amp;cad=rja">Radical Entertainment&#8217;s</a>. And check out the <a title="Game Programming Gems site" href="http://www.gameprogramminggems.com/">Game Programming Gems</a> books. I fully read the sections on Architecture and the rest of the articles are gravy.</p>
<p><a name="note3"></a>Note 3: According to legend, Chuck Jones (of Bugs Bunny fame) stuck to some <a title="Wile E Coyote rules" href="http://en.wikipedia.org/wiki/Wile_E._Coyote_and_Road_Runner#Laws_and_rules">pretty strict rules</a> when making Bugs Bunny and Wile E. Coyote cartoons. While there&#8217;s debate on the Wile E. Coyote rules, constraints get rid of indecision which frees us to focus in on what&#8217;s important.</p>
<p>&#8220;Real Programmers&#8221; comic from http://xkcd.com/378/<br />
&#8220;Scope Creep&#8221; from http://test.ical.ly/tags/scope-creep/<br />
&#8220;Risk Assessment Cat&#8221; from http://cheezburger.com/TemplateView.aspx?ciid=4401869<br />
Trapeze artist image from http://usrportage.de/archives/911-Not-having-globals-state-doesnt-mean-youre-doomed.html<br />
&#8220;Scrooge McDuck&#8221; image from http://listsoplenty.com/blog/?p=13032</p>
]]></content:encoded>
			<wfw:commentRss>http://www.altdevblogaday.com/2011/07/11/the-not-invented-here-manifesto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Game Loops on IOS</title>
		<link>http://www.altdevblogaday.com/2011/06/27/game-loops-on-ios/</link>
		<comments>http://www.altdevblogaday.com/2011/06/27/game-loops-on-ios/#comments</comments>
		<pubDate>Mon, 27 Jun 2011 04:04:20 +0000</pubDate>
		<dc:creator>Kwasi Mensah</dc:creator>
				<category><![CDATA[#gamedev]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://altdevblogaday.com/?p=9801</guid>
		<description><![CDATA[<p>Over at <a href="http://www.ananseproductions.com">Ananse Productions</a> we have some exciting Stem Stumper stuff in the works. But alas, I didn&#8217;t have time to write another true post for AltDevBlogAday. So I submit an oldie but goodie, an article <a href="http://www.ananseproductions.com/game-loops-on-ios/">originally from our site</a> that gives a high level overview on how we manage our game loop.</p>
<p><a href="http://www.altdevblogaday.com/2011/06/27/game-loops-on-ios/" class="more-link">Read more on Game Loops on IOS&#8230;</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Over at <a href="http://www.ananseproductions.com">Ananse Productions</a> we have some exciting Stem Stumper stuff in the works. But alas, I didn&#8217;t have time to write another true post for AltDevBlogAday. So I submit an oldie but goodie, an article <a href="http://www.ananseproductions.com/game-loops-on-ios/">originally from our site</a> that gives a high level overview on how we manage our game loop.</p>
<h2>Introduction</h2>
<p>(<em>This post assumes you&#8217;re familiar with C, Objective-C and Cocoa.</em>)</p>
<p>Just like TV shows and films a video game&#8217;s visual representation can be broken down into frames, single snapshots of the state of the game world at any given time. By showing these frames many times per second we give players the illusion of continuous motion.</p>
<p>The loop below is a high level description of what the game has to do each frame to draw the current snapshot.</p>
<pre><code>//Basic game loop
while(1)
{
    ProcessInput();
    DoLogic();
    Render();
}</code></pre>
<p>Even though the iOS API doesn&#8217;t make this clear there&#8217;s a similar loop going on, we just have less control over it.</p>
<p>All iOS apps start with a call to <code>UIApplicationMain</code> which kicks off a <code>NSRunLoop</code> which for our purposes is a fancy event queue. Whenever something interesting but non-critical happens (input for example) it gets put on the back of this queue and processed in the order it&#8217;s received.</p>
<p>So how do we emulate our loop above using this? We know with <code>UIApplicationDelegate</code> we don&#8217;t need <code>ProcessInput</code> anymore. We can care of input events as soon as they come in with <code>touchesBegan</code>, <code>touchesEnd</code> and <code>touchesCanceled</code>. In general, input is going to require some type platform specific callbacks so as long as we leave breathing room in our game loop for processing these we should be fine.<a title="Note 1" href="#note1">*1</a></p>
<h2>Naive Try at a Game Loop</h2>
<p>We know we want to calculate a new frame fairly frequently. Let&#8217;s pull the number 60 times per second out of thin air for now.</p>
<pre><code>//Bad iPhone game loop
-(void) doFrame:(id)data
{
    DoLogic();
    Render();
}

- (BOOL)application:(UIApplication *)application
    didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
    doFrame();
    [NSTimer scheduledTimerWithTimeInterval:(1.0/60.0) target:self
        selector:@selector(doFrame) userInfo:nil repeats:YES];
}</code></pre>
<p>The above won&#8217;t cut it. The resolution of an <code>NSTimer</code> is 50-100 milliseconds. <a title="Note 2" href="#note2">*2</a> 1/60th of a second = 16 milliseconds. <strong>Our resolution, at best, is thrice the frequency at which we want our function to be called.</strong> There are also a host of other problems with using repeating <code>NSTimer</code>&#8216;s <a title="Note 2" href="#note2">*2</a>. We could try messing with the <code>NSObject performSelector</code> family of functions but you&#8217;re going into run into other problems, especially with our friend v-sync.</p>
<h2>The Basics of Vertical Sync(v-sync)</h2>
<p>Monitors take a real (but very small) amount of time to draw the images on our screens. Furthermore, there&#8217;s a gap between when we finish drawing one image and when we&#8217;re ready to draw another.</p>
<p>Draw&#8211;Rest&#8211;Draw&#8211;Rest&#8211;Draw</p>
<p>The vertical refresh rate of a monitor is how often the monitor draws a frame per second. This number varies in different monitors in different regions. Since we&#8217;re only concerned about iOS in this post, we&#8217;re going to focus on 60 frames per second = 16 milliseconds  (remember the number I pulled out of thin air) because that&#8217;s the vertical refresh rate of iOS devices.<a title="Note 3" href="#note3">*3</a></p>
<p>Vertical synchronization (v-sync) refers to waiting for the screen to finish being draw i.e. waiting for the start of a &#8220;Rest&#8221; state.</p>
<p>With this information, let&#8217;s take a closer look at our Render function:</p>
<pre><code>void Render()
{
    InitDrawing();<a title="Note 6" href="#note6">*6</a>
...
    FinishDrawing();<a title="Note 7" href="#note7">*7</a>
}</code></pre>
<p><code>InitDrawing()</code> waits for v-sync, if it hasn&#8217;t happened yet, before letting us draw any objects.<a title="Note 4" href="#note4">*4</a>,<a title="Note 5" href="#note5">*5</a>. FinishDrawing() signals that we don&#8217;t have any more objects to draw this frame. In between them we put our special sauce that <a title="Westwood College's Video Game Degree Commercial" href="http://video.google.com/videoplay?docid=-7675519043804402267#">tightens the graphics on level 3</a>.</p>
<p>So what happens if we don&#8217;t take v-sync into account when we draw? We&#8217;ll be stuck inside of <code>InitDrawing()</code> waiting for v-sync when we could be doing other useful things like dealing with touches. In fact, it was debugging the lagginess of the VoiceOver (Apple&#8217;s screen reader tech)  in my game that made me realize that I was stuck inside of <code>InitDrawing()</code>.</p>
<p>Note, even if we were in a perfect environment and able to call doFrame every 16 msecs, if it&#8217;s not synchronized with vsync we&#8217;ll still waste a lot of time waiting for it.</p>
<h2>We&#8217;re Halfway There</h2>
<p>So how do we make sure doFrame gets called 60 times a second <strong>and</strong> we won&#8217;t have to wait for v-sync? Fortunately, <code>CADisplayLink</code> comes to our rescue.<a title="Note 8" href="#note8">*8</a> This functions like the <code>NSTimer</code> above but it has a good resolution and is timed with v-sync (sort of, we&#8217;ll talk about it later).</p>
<pre><code>//Better but not quite right yet.
-(void) doFrame:(id)data
{
    DoLogic();
    Render();
}

- (BOOL)application:(UIApplication *)application
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    mFrameLink = [CADisplayLink displayLinkWithTarget:self
        selector:@selector(doFrame:)];
    mFrameLink.frameInterval = 1;
    [mFrameLink addToRunLoop:[NSRunLoop mainRunLoop]
        forMode:NSDefaultRunLoopMode];
}</code></pre>
<p>If we can assure that every call to <code>doFrame</code> will <strong>always</strong> take less than 16 msecs than the above will work and you go home and get back to coding. And dear God, blog to the rest of us on how you&#8217;re doing that. However, if any of our frames take even a little bit longer you&#8217;re gonna be in for a shocking surprise. Let&#8217;s draw some pretty pictures.</p>
<p>Let&#8217;s say we have a frame that takes 21 msecs (needed a little extra time to decode your awesome background music).</p>
<pre>Timeline: 0---16---32---48
Frame 1:  0----21</pre>
<p>Since we took longer than our alloted 16msecs, <code>CADisplayLink</code> won&#8217;t wait untl the 32msec mark to call doFrame. It will call it immediately.<a title="Note 9" href="#note9">*9</a> It&#8217;s easy think &#8220;that&#8217;s ok. I normally only take 10 msecs so this will be straightened out by the next frame&#8221;. But remember our section on v-sync. By calling doFrame right away we&#8217;re going to be stuck in <code>InitDrawing()</code> until the 32msec mark. So our timeline after the second frame will look like<a title="Note 13" href="#note13">*13</a>:</p>
<pre>Timeline: 0---16---32---48
Frame 1:  0-----21
Frame 2:        21----42</pre>
<p>Our second frame has to wait until the 32 msec mark before it can start rendering and then it will take 10 msec to draw. And remember, you passed the 32 msec mark while drawing this second frame which means <code>doFrame</code> is going to be called immediately again.</p>
<pre>Timeline: 0---16---32---48---64
Frame 1:  0-----21
Frame 2:        21----42
Frame 3:              42---58</pre>
<p>The timelines above only take into account calling <code>doFrame</code>. There&#8217;s no breathing room for input processing which will make your app unresponsive and laggy until the storm settles. We know this will settle itself out because the amount of time spent waiting for vsync decreases with each frame, but the fact remains that one frame of suckiness can cause an avalanche of woe.</p>
<p>It&#8217;s hard to track down if you don&#8217;t know what you&#8217;re looking for. Instruments will still tell you that you&#8217;re rendering at 60 frames per second. But you&#8217;ll see a lot of time spent in some combination of <code>semwait_signal</code> and <code>usleep</code> because you&#8217;re stuck waiting for v-sync.</p>
<p>We could&#8217;ve put a quick end to this by enforcing that if we miss a v-sync we just suck it up and wait for the next one i.e. don&#8217;t get run over chasing the bus you missed.</p>
<pre>Timeline: 0---16---32---48
Frame 1:  0-----21
Frame 2:           32--42</pre>
<p>This gives us the breathing room we need to still process input and makes sure that one errant frame doesn&#8217;t screw us over in the long run. Fortunately, this is eerily similar to problems physics engines have run into and Glenn Fiedler has an excellent article that&#8217;s the basis of how we&#8217;re going to deal with this. <a title="Note 10" href="#note10">*10</a></p>
<h2>Conclusion</h2>
<p>We&#8217;re going to remember how long the past frame took and bank it.<a title="Note 11" href="#note11">*11</a> Then the next time we call <code>doFrame</code> we subtract 16 msecs from the bank. If the bank has no more time left in it then we know we won&#8217;t have to wait for v-sync. Otherwise, we do nothing because we know we&#8217;re being triggered for a v-sync that we missed.</p>
<p>Also note, the call to <code>fmod</code> if we take longer than a frame. If we miss multiple v-sync (using a breakpoint for example) there&#8217;s only one call to doFrame <a title="Note 9" href="#note9">*9</a>. If we didn&#8217;t have this, we can get a huge amount of time our bank and we won&#8217;t render until its all subtracted out, one frame at a time.</p>
<pre><code>//Psuedo-code for what I'm currently using.
-(void) doFrame:(id)data
{
    static double bank = 0;
    double frameTime = mFrameLink.duration * mFrameLink.frameInterval;
    bank -= frameTime;
    if( bank &gt; 0 )
    {
        return;
    }
    bank = 0;
    PlatformHiResTimer timer;<a title="Note 12" href="#note12">*12</a>
    timer.Start();
    DoLogic();
    Render();
    double elapsed = timer.ElapsedTime()*PlatformHiResTimer::sNanoSecToSec;
    bank = elapsed;
    if( elapsed &gt; frameTime )
    {
        bank = frameTime + fmod( elapsed, frameTime );
    }
}</code></pre>
<p>This should take account sporadic frames being longer than usual. This isn&#8217;t meant to protect against a stream of frames that consistently take longer that 16 msecs. If that&#8217;s the case you need to lower your frame rate.</p>
<p>It took a fair amount of experimenting to figure this out. While this discussion focuses on iOS its meant to serve as a baseline for setting up game loops for any platform.</p>
<h2>Notes</h2>
<p><a name="note1">Note 1:</a> If you&#8217;re really set on delaying input handling you can use the -touches* functions to queue them until you call <code>ProcessInput</code>. Be careful of lag, especially if you&#8217;re game is supposed to work with VoiceOver( Apple&#8217;s screen reader tech). The VoiceOver cursor relies on touch events being processed off of the run loop even if the events aren&#8217;t passed down to the app.</p>
<p><a name="note2">Note 2:</a> <code>NSTimer</code> accuracy issues discussed <a title="NSTimer Accuracy Issues" href="http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Timers/Articles/timerConcepts.html#//apple_ref/doc/uid/20000806-SW2">here</a>.</p>
<p><a name="note3">Note 3:</a> Our final solution actually isn&#8217;t dependent on knowing vertical refresh rate. It&#8217;s just easier to discuss with a firm number in mind.</p>
<p><a name="note4">Note 4:</a> <code>EAGlContext presentRenderBuffer</code> returns before v-sync happens. It&#8217;s the next render command that will be forced to wait for v-sync if it&#8217;s called too early. A lot of the google results for <code>glClear</code> being slow on the iPhone are probably related to not waiting for v-sync.</p>
<p><a name="note5">Note 5:</a> A lot of pc/mac games have options to not wait for v-sync. This lets you render faster but can cause visual artifacts. On iOS we&#8217;re stuck with v-sync. For a full discussion see <a title="Wiki Article on Screen Tearing" href="http://en.wikipedia.org/wiki/Screen_tearing">this wiki article</a>.</p>
<p><a name="note6">Note 6:</a></p>
<pre><code>void InitDrawing()
{
    [EAGLContext setCurrentContext: sGLContext];
    glColor4f( 0, 0, 0, 1 );
    glClear(GL_COLOR_BUFFER_BIT);

    //You can also draw a screen filling black quad. This hasn't been
    //a bottleneck for me.
}</code></pre>
<p><a name="note7">Note 7:</a></p>
<pre><code>void FinishDrawing()
{
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, sColorRenderBuffer);
    [sGLContext presentRenderbuffer:GL_RENDERBUFFER_OES];
}</code></pre>
<p>Note: it seems like iOS always uses double buffering.</p>
<p><a name="note8">Note 8:</a> <code>CADisplayLink</code> is only available in iOS 3.1 and later. <a title="Reference Doc for CADisplayLink" href="http://developer.apple.com/library/ios/#documentation/QuartzCore/Reference/CADisplayLink_ClassRef/Reference/Reference.html">Reference doc</a>.</p>
<p><a name="note9">Note 9:</a> <code>CADisplayLink</code>&#8216;s behavior is actually more complicated. If your frame misses multiple v-sync events the selector seems to only be called once for all of the missed v-sync events.  I also believe that the <code>CADisplayLink</code> object&#8217;s duration property is for the most recent v-sync event. Furthermore, the <code>CADisplayLink</code> object&#8217;s duration property can vary significantly from the time between calls to the selector <strong>even when we don&#8217;t miss a frame.</strong> Performing the selector seems to be put off if the <code>NSRunLoop</code> is busy when v-sync happens. The moral of the story: While <code>CADisplayLink</code> gives us a much better resolution that a <code>NSTimer</code>, calls to <code>doFrame</code> aren&#8217;t guaranteed to line up with v-sync.</p>
<p><a name="note10">Note 10:</a> Glenn Fielder&#8217;s article &#8220;Fix your Timestep!&#8221; can be found <a title="Glenn Fiedler's Fix Your Timestep" href="http://gafferongames.com/game-physics/fix-your-timestep/">here</a>.</p>
<p><a name="note11">Note 11:</a> Glenn would use the term accumulator but I think &#8220;bank&#8221; is more intuitive.</p>
<p><a name="note12">Note 12:</a> <code>PlatformHiResTimer</code> is a helper class that&#8217;s a wrapper around platform specific functions that give us nanosecond timing resolution. For the iPhone/Mac I use <code>mach_absolute_time()</code> and <code>mach_timebase_info</code> which are mentioned in <a title="Mac OS X doc on Timing" href="http://developer.apple.com/library/mac/#qa/qa2004/qa1398.html">this Mac OSX Q&amp;A</a></p>
<p><a name="note13">Note 13:</a> For the timelines we&#8217;re assuming <code>DoLogic()</code> doesn&#8217;t take a noticeable amount of time. It makes drawing the timelines easier. Note that without this assumption, you could get lucky and have the work in <code>DoLogic()</code> push the call to <code>Render()</code> past v-sync. But you&#8217;re playing with fire as it&#8217;s going to be very hard to make sure that happens on a consistent basis.</p>
<p>We could also call <code>Render()</code> before <code>DoLogic()</code> to make sure we start rendering as soon as v-sync is done. However, we&#8217;ll be rendering a frame behind the game. This can cause wonkiness, especially if we&#8217;ve processed input that&#8217;s changed the state of the game but we haven&#8217;t called <code>DoLogic</code> to validate/fix it.</p>
<p>It makes more sense to me to always call <code>DoLogic()</code> first. When <code>doFrame()</code> takes less than 16 msecs it doesn&#8217;t make a difference. When <code>doFrame()</code> takes longer than 16 msecs I think the final version of <code>doFrame()</code> handles it better than the trickeration needed to call <code>Render()</code> first. I&#8217;ve seen a fair amount of game programming books advocate calling <code>Render()</code> first so I might be missing out on something.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.altdevblogaday.com/2011/06/27/game-loops-on-ios/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Game Design and Elephant Handling</title>
		<link>http://www.altdevblogaday.com/2011/06/11/game-design-and-elephant-handling/</link>
		<comments>http://www.altdevblogaday.com/2011/06/11/game-design-and-elephant-handling/#comments</comments>
		<pubDate>Sat, 11 Jun 2011 06:33:02 +0000</pubDate>
		<dc:creator>Kwasi Mensah</dc:creator>
				<category><![CDATA[#gamedev]]></category>
		<category><![CDATA[Game design]]></category>
		<category><![CDATA[General Interest]]></category>

		<guid isPermaLink="false">http://altdevblogaday.org/?p=8148</guid>
		<description><![CDATA[<p>How many doctors does it take to make a game? Graphics PhDs put your hands down, I&#8217;m not including you!</p>
<div id="attachment_181" class="wp-caption aligncenter" style="width: 390px"><a href="http://www.ananseproductions.com/wp-content/uploads/2011/06/raygregredo.jpg"><img class="size-full wp-image-181   " src="http://www.ananseproductions.com/wp-content/uploads/2011/06/raygregredo.jpg" alt="BioWare Co-founders, each has a medical degree. We'll leave them out too" width="380" height="249" /></a><p class="wp-caption-text">BioWare Co-founders, each has a medical degree. We&#039;ll leave them out too</p></div>
<p><a href="http://www.altdevblogaday.com/2011/06/11/game-design-and-elephant-handling/" class="more-link">Read more on Game Design and Elephant Handling&#8230;</a></p>
]]></description>
			<content:encoded><![CDATA[<p>How many doctors does it take to make a game? Graphics PhDs put your hands down, I&#8217;m not including you!</p>
<div id="attachment_181" class="wp-caption aligncenter" style="width: 390px"><a href="http://www.ananseproductions.com/wp-content/uploads/2011/06/raygregredo.jpg"><img class="size-full wp-image-181   " src="http://www.ananseproductions.com/wp-content/uploads/2011/06/raygregredo.jpg" alt="BioWare Co-founders, each has a medical degree. We'll leave them out too" width="380" height="249" /></a><p class="wp-caption-text">BioWare Co-founders, each has a medical degree. We&#039;ll leave them out too</p></div>
<p>Last month I had the privilege of presenting at the Games for Health Conference.<sup><a title="Note 1" href="#note1">[1]</a></sup> It was a big gathering of people that want to use games to positively change the world. However, most of attendees were from the the education or healthcare space. While everyone knew they were on to something powerful, there were also a lot of misconceptions on how gaming works as a motivator.</p>
<h2>The &#8220;G&#8221; Word</h2>
<div id="attachment_179" class="wp-caption aligncenter" style="width: 410px"><a href="http://www.ananseproductions.com/wp-content/uploads/2011/06/gamification.jpeg"><img class="size-full wp-image-179 " src="http://www.ananseproductions.com/wp-content/uploads/2011/06/gamification.jpeg" alt="One way to apply games to real life" width="400" height="320" /></a><p class="wp-caption-text">One way to apply games to real life</p></div>
<p>I heard the word  &#8220;gamification&#8221; many times during the three day conference. While the term has been around for a while, Jesse Schell popularized this concept in his DICE 2010 speech.<sup><a title="Note 2" href="#note2">[2]</a></sup> A lot of attendees used it to describe adding points systems, social web interactions, and other extrinsic rewards to get people to do healthy and educational tasks. In their minds, the &#8220;game&#8221; was all about getting the reward.  However, extrinsic rewards in and of themselves aren&#8217;t good replacements for intrinsic motivations.<sup><a title="Note 3" href="#note3">[3]</a></sup> Those presenters didn&#8217;t understand what it means to make a &#8220;game&#8221;. True conventional<sup><a title="Note 4" href="#note4">[4]</a></sup> video game design is about finding the enjoyable parts of a process and exemplifying them while skipping over and minimizing the parts that aren&#8217;t fun.</p>
<h2>The Points Don&#8217;t Matter</h2>
<div id="attachment_177" class="wp-caption aligncenter" style="width: 223px"><a href="http://www.ananseproductions.com/wp-content/uploads/2011/06/whoseLine.png"><img class="size-full wp-image-177" src="http://www.ananseproductions.com/wp-content/uploads/2011/06/whoseLine.png" alt="Whose Line Is It Anyway" width="213" height="623" /></a><p class="wp-caption-text">Whose Line Is It Anyway</p></div>
<p>As Drew Carey would say at the start of &#8220;Whose Line is It Anyway?&#8221; the points don&#8217;t matter. A lot of presenters focused on the extrinsic rewards we give players (points, achievements, badges, etc.) because its the part of making games that&#8217;s most visible. What they don&#8217;t realize is that good games use these rewards as an icing on the cake of an inherently compelling experience. Kendra Markle, founder of AlterActions.org and another presenter at the conference, used a powerful metaphor of the rider and the elephant.<sup><a title="Note 5" href="#note5">[5]</a></sup> The rider is our rational mind which reacts to things  like money and tweets. The elephant is our emotional side where it takes a lot of effort to do something we don&#8217;t want to do. When there&#8217;s a disagreement about which way to go the elephant almost always wins out.</p>
<p>Good game designers understand that while we need to convince the rider to pick up and start playing the game, we should spend most of our time getting the elephant to not want to put it down. That&#8217;s why we spend so much time on polish, usability, and getting players into &#8220;flow&#8221;<sup><a title="Note 6" href="#note6">[6]</a></sup>. Being fixated on the things which most people don&#8217;t consciously notice is what separates designers from the rest of the world.</p>
<p>Let&#8217;s take Stack Overflow for example. It&#8217;s a popular question and answer forum used by programmers. Stack Overflow uses a system of upvoting the best answers and keeping track of how good members are at answering questions. On its surface it sounds the same as the forums and mailing lists coders normally go to for answers but with a score added. But just like &#8220;Who&#8217;s Line Is It Anyway&#8221; the points in and of them self don&#8217;t matter. It&#8217;s the fact that they act like filters, making sure the best answer is easily found at the top and that trusted posters are easily identifiable, that has made it the go to site for coding questions. And this in turn feeds into founder&#8217;s bigger intentions: to get programmers writing more.<sup><a title="Note 7" href="#note7">[7]</a></sup></p>
<div id="attachment_180" class="wp-caption aligncenter" style="width: 260px"><a href="http://www.ananseproductions.com/wp-content/uploads/2011/06/stackoverflow-logo-250.png"><img class="size-full wp-image-180" src="http://www.ananseproductions.com/wp-content/uploads/2011/06/stackoverflow-logo-250.png" alt="Stack Overflow: More useful than English classes?" width="250" height="70" /></a><p class="wp-caption-text">Stack Overflow: More useful than English classes?</p></div>
<h2>Bad Teacher</h2>
<p>The problem with trying to target intrinsic motivations is that not everything can be &#8220;gamified&#8221;. There are things in life that are necessary and are fundamentally not fun. &#8220;Games&#8221; implies being able to voluntarily start and stop at any time. Let&#8217;s take a hypothetical doctor that doesn&#8217;t like to fill out forms. We can use game design skills to try and streamline the process and make a better connection between filling out forms and the health of patients. But at the end of the day doctors have to do it or patients&#8217; health will be compromised. When you also take into account that what&#8217;s considered fun changes from person to person, leaning on &#8220;games&#8221; as a primary teaching method becomes really tricky.</p>
<div id="attachment_182" class="wp-caption aligncenter" style="width: 367px"><a href="http://www.ananseproductions.com/wp-content/uploads/2011/06/bunnyo.png"><img class="size-full wp-image-182 " src="http://www.ananseproductions.com/wp-content/uploads/2011/06/bunnyo.png" alt="What happens when you force people to play games" width="357" height="278" /></a><p class="wp-caption-text">What happens when you force people to play games</p></div>
<h2>Good Willed Propaganda</h2>
<p>The take away is that games are a great way to have people voluntarily reinforce a set of behaviors. Truly inspiring change should be about getting players to exercise the right behaviors on their own instead of relying on a carrot which won&#8217;t always lead them. We should be focusing on embedding our intent in what makes the game fun, even if the player has to go outside the game to get the specifics of the message. Good luck elephant handling!</p>
<div id="attachment_183" class="wp-caption aligncenter" style="width: 290px"><a href="http://www.ananseproductions.com/wp-content/uploads/2011/06/babyElephant.jpg"><img class="size-full wp-image-183 " src="http://www.ananseproductions.com/wp-content/uploads/2011/06/babyElephant.jpg" alt="Control the elephants, control the world!" width="280" height="354" /></a><p class="wp-caption-text">Control the elephants, control the world!</p></div>
<h2>Notes:</h2>
<p><a name="note1">Note 1:</a> My company is <a title="Ananse Productions' site" href="http://www.AnanseProductions.com">Ananse Productions</a>. We talked about Game Design and Accessibility using our iPhone game <a title="Stem Stumper on the App Store" href="http://itunes.apple.com/us/app/stem-stumper-lite/id435669104?mt=8">Stem Stumper</a> as a use case (you should pick it up!). You can find our slides <a title="Stem Stumper slides" href="http://www.slideshare.net/ananseKmensah/game-design-and-accessibility-using-stem-stumper-as-a-use-case">here</a> and you can find the other Games For health Conference presentations <a title="Games for Health Presentations" href="http://www.slideshare.net/event/games-for-health-2011">here</a></p>
<p><a name="note2">Note 2:</a> Watch Jesse Schell&#8217;s DICE 2010 speech <a title="Youtube Playlist of Jesse Schell's 2010 Dice Speech" href="http://www.youtube.com/watch?v=DLwskDkDPUE&amp;playnext=1&amp;list=PLD6E447FCFB8F8423">here</a></p>
<p><a name="note3">Note 3:</a> There&#8217;s a lot work in the social psychology space about how motivation works. For example, there&#8217;s the<br />
<a title="Wikipedia article on the Overjustification Effect" href="http://en.wikipedia.org/wiki/Overjustification_effect">overjustification effect</a> where people will start aiming for the rewards instead of for the behavior you were trying to instill in them.</p>
<p><a name="note4">Note 4:</a> I made sure to use &#8220;conventional&#8221; because there is interactive media  that aims to do something different. Check out Chris DeLeon&#8217;s <a title="Introduction to not games" href="http://www.hobbygamedev.com/int/notgames-a-concept-from-tale-of-tales/">post  on not games</a></p>
<p><a name="note5">Note 5:</a> You can find Kendra Markle&#8217;s full presentation <a title="Kendra Markle's Games for Health Article" href="http://www.alteractions.org/GamesForHealth11-Markle.pdf">here</a></p>
<p><a title="Kendra Markle's Games for Health Article" href="http://www.alteractions.org/GamesForHealth11-Markle.pdf"></a> <a name="note6">Note 6:</a> Flow is an interesting concept in and of itself. It&#8217;s about keeping a player challenged enough to be engaged but not so challenged that they give up. You can read more about it <a title="Wikipedia article on Flow" href="http://en.wikipedia.org/wiki/Flow_%28psychology%29">here</a>.</p>
<p><a name="note7">Note 7:</a> Jeff Atwood, one of the co-founders, admits that Stack Overflow wasn&#8217;t  just meant to be a good technical resource. It was also meant to  <a title="Jeff Atwood's blog post on the intentions behind Stack Overflow" href="http://www.codinghorror.com/blog/2011/02/how-to-write-without-writing.html">sneakily teach programmers how to write</a>.  Jeff wanted to help programmers become better writers and he knew the  only way to do that was to well&#8230; write. Blogging would seem too  insurmountable to  people who aren&#8217;t used to it.  So they honed in on  two things every programmer wants: quick, reliable answers and the  ability to show other programmers how smart they are.</p>
<p>Picture of Ray Muzyka and Greg Zeschuck from:  http://venturebeat.com/2008/03/29/qa-with-bioware-founders-on-mass-effect-and-life-at-ea/<br />
Picture of  &#8220;Reality: Worst Game ever.&#8221; from: http://foggslog.wordpress.com/2011/04/27/gamification/<br />
Picture of Whose Line Is It Anyway from: http://heyitscaitlinx3.tumblr.com/post/6331187274<br />
Picture of Stack Overflow logo from: http://stackoverflow.com/<br />
Picture of bunny from: http://www.ps3trophies.org/forum/dead-space-2/93628-hardcore-time-workaround.html<br />
Picture of baby elephant from: http://www.inspirationline.com/rss/10APR2006.htm</p>
]]></content:encoded>
			<wfw:commentRss>http://www.altdevblogaday.com/2011/06/11/game-design-and-elephant-handling/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

