<?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>Binary Solo &#187; Postmortem</title>
	<atom:link href="http://www.binarysolo.com/category/development/postmortem/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.binarysolo.com</link>
	<description>We want to make a videogame!</description>
	<lastBuildDate>Wed, 24 Mar 2010 17:15:24 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Postmortem: Guess What?</title>
		<link>http://www.binarysolo.com/2009/09/28/postmortem-guess-what/</link>
		<comments>http://www.binarysolo.com/2009/09/28/postmortem-guess-what/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 17:59:47 +0000</pubDate>
		<dc:creator>Chad</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Postmortem]]></category>
		<category><![CDATA[Chad Stewart]]></category>
		<category><![CDATA[Guess What]]></category>

		<guid isPermaLink="false">http://www.binarysolo.com/?p=139</guid>
		<description><![CDATA[Guess What? was an experiment, an introduction, and a valuable lesson.  For me, Chad Stewart, Guess What? was an awesome way to get introduced to iPhone development.  It had  ups, and it definitely had downs, but all and all I&#8217;m glad that we made Guess What?  It taught me so much about the entire [...]]]></description>
			<content:encoded><![CDATA[<p>Guess What? was an experiment, an introduction, and a valuable lesson.  For me, Chad Stewart, Guess What? was an awesome way to get introduced to iPhone development.  It had  ups, and it definitely had downs, but all and all I&#8217;m glad that we made Guess What?  It taught me so much about the entire process of developing, submitting, and (slightly) marketing a game for the iPhone / iPod Touch.</p>
<p>&nbsp;</p>
<p><span id="more-139"></span></p>
<h1>What Went Right</h1>
<h3>1. A Simple Idea.</h3>
<p>When I chose the first project for Binary Solo&#8217;s foray into iPhone development, I personally chose a very simple idea.  I had no clue about the programming language that would be used, the tools, or anything else really, so I knew that we had to make sure the first idea was simple.  Innovation can wait.  I think going with the wordplay genre was a good choice, and I love games like Taboo.  I decided to make something similar to that to take a lot of the decision rules from the code to the user.  As a bonus, this allows for users to create house rules since the game itself does not have any method to enforce what they say.</p>
<p>From a programming stand-point, this game was simple in technology.  The only features that the user visibly sees is buttons, graphics, and text.  The most complicated feature was adding custom phrases.  The iPhone SDK already provides the code to create buttons and display text and images, so it was more about using what was there.</p>
<h3>2. Objective-C 2.0 works like C++ &amp; C#</h3>
<p>I was afraid that I would be battling a new language tooth and nail, however that was not the case.  There were a few expected mis-steps figuring out some of the Objective-C quirks, but for the most part it was an easy transition.  If I could not quickly figure out an Objective-C based solution, I could always implement a C++ one.  This was almost never the case, save for one, but it provided a fallback which made the actual coding process less of a transition and more of an extension.  As a programmer learning a new language always has its follies, but they were greatly reduced in XCode.</p>
<h3>3. Amazing, Quick Assets</h3>
<p>I think Guess What? looks and sounds excellent, which was in no part thanks to me.  From the start of the project I made sure that I had consummate professionals on hand to provide assets, and I think they really delivered.  Phil Davis whipped up the logo based on some programmer art, white-board, chicken scratch and turned out a pretty logo.  Promptly after that he created the actual art for the game.  I had only made a few placeholders before I got the email containing a whole slew of backgrounds and buttons.</p>
<p>The other half of the assets, sounds, were also just as prompt and awesome.  I contracted another friend, Arin Mann, to create the background music for the game.  I had a good idea of what I wanted, but that doesn&#8217;t exactly translate to the keyboard very well.  I told him I wanted that same excitement of recent game shows, something that will build a sense of urgency in the players as time counted down.  What he delivered within a week or two was nothing short of incredible.  It had the feeling I wanted to capture.  It actually had a useful function of re-enforcing the time limit.  In fact, a lot of first impressions are praise about the music.</p>
<h3>4. No Deadline</h3>
<p>Binary Solo was and is not focused on iPhone development.  There, I said it.  That isn&#8217;t to say we aren&#8217;t going to do a bit of it for now, but we&#8217;re flexible.  This project was more of a pet project than an official studio-wide, all points bulletin project.  I had the flexibility to code for a few hours a day, a few hours a week, and while I was going through all of the wedding shenanigans, a few hours a month.  I was able to go at my own pace because we had no deadlines, or expectations for that matter.  This took a lot of pressure off of my shoulders.  Had I needed to get tasks done for a demo or make sure no one had tasks with dependencies falling on me, I might have coded some quick hacks and tempers would have flown (during the wedding month, approximately) to new heights.  Luckily, that was not the case.</p>
<h3>5. Support Framework</h3>
<p>Due to the nature of this game, and of this platform, I knew that the game could easily be extended later.  This shows as we submitted our first update shortly after release.  (Although it sat a while waiting for approval.)  The way that Apple handles updates is nice, so we knew from the start that we could send plenty of updates down the pipe.  All of the data is in an easily editable, underlying structure that allows us to quickly push it through.  I&#8217;d like to claim this as my victory, but it&#8217;s mostly Apple.  I have already started on incremental updates and so far the process is very simple.  With the first update down, I&#8217;m ready to throw some time into the next one so we can really see Guess What? shine.</p>
<p>&nbsp;</p>
<h1>What Went Wrong</h1>
<h3>1. Trying To Use Interface Builder</h3>
<p>For some reason I was very insistent on using the Interface Builder.  It was going to be a very simple project, and it should be able to handle it.  I figured the time savings of using a Designer based tool to generate code would help.  Unfortunately, I think that obscured the code-base and made it harder to track down the bugs that were found.  There were a lot of issues in the beginning that were a simple misunderstanding of what the Interface Builder did for the developer, and what the developer was expected to do.</p>
<p>Despite that, I kept pushing on and using it because each time I thought the Interface Builder was finally mastered.  Then I would be surprised again.  One thing that the Interface Builder lacks is any visible code generation (or I just didn&#8217;t find it.) which is a real pain coming from Windows using Visual Studio&#8217;s Designer.  A level of magic exists between how the Interface Builder works and what I get to see and handle in the code myself.  This disconnect lead me down the wrong path far too many times during development, especially so with a nasty slow-down bug that almost had me switch entirely from Interface Builder.</p>
<h3>2. Apple Sample Code</h3>
<p>Now, I&#8217;m not slamming Apple&#8217;s sample code.  However, once or twice the sample code lead me astray.  There are little gotchas and quirks that the sample code conveniently does not handle, and when you try to do something slightly different, you might run into those.  A specific issue with timers comes to mind where I had followed the Apple sample and then tried to re-use a timer.  Bad idea.  Very bad idea if you were following what they were doing with their disposable timer.  That&#8217;s not to say that the sample code did not help me.  Far from it.  Sometimes the sample code was a saving grace.  It&#8217;s just very annoying when you end up debugging an issue for a few days and then find a buried post on a Google Group after a few hours of searching and find that one guy who notes, &#8220;They did not cover this in the Yadda Yadda Example, but do this one thing before you use their code or else.&#8221;</p>
<h3>3. Getting the Data</h3>
<p>Apparently people buy databases, mined data, and libraries for a reason.  I did not even consider creating anything robust for all of the phrases I would need in the game.  A definite lack of foresight on my part.  I ended up manually entering all of the phrases into the game.  Only half way through the process did I create a tool to speed it up, but even then it was nothing robust.  If we are going to update and support Guess What? more extensively, I will definitely be writing a better tool to handle and automate the process a little more.  (So get all your friends to go buy it. <img src='http://www.binarysolo.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> )</p>
<h3>4. iPhone Provisions, Certificates, and Profiles (Oh My!)</h3>
<p>I had an iPod Touch.  I bought a Mac Mini.  Now I am all set to develop iPhone games right?  That&#8217;s what I had envisioned based on how easy it all seemed in the forums and success stories.  I did a little research and found that in order to test on my iTouch I would need to be a paid developer.  That was a hidden cost I was not fond of.  I thought I could hold off until the end, but eventually I realized the Simulator was just too limiting sometimes and we paid our fees a little early. That is, after the fiasco that was getting Apple to accept us as a company.</p>
<p>Now, we thought, we can go ahead and put our app on the iTouch and test it out for real.  However, there was another step to go through.  Because any iPod Touch or iPhone can be hooked up to a Mac to debug your app, Apple had to put in some pretty steep protection against letting XCode install apps all willy-nilly.  You wouldn&#8217;t want to have people passing around source code to bypass the App Store.  In order to do this you have to create a Certificate for your Mac to install apps, a Profile for the device that lets it accept the app, and then a Provision that tells XCode it is all right for X app to be put on Y device.  It&#8217;s an entirely lengthy process to go through the first time and I had to go through it a few times to get myself and others set up to test it.  I don&#8217;t know if this is 100% what went wrong material, but it sure was frustrating.  Then on top of that there&#8217;s a whole Ad Hoc system so that you can get other people to test the game (or from what I hear, preview apps for review sites). The whole affair is kind of a necessary evil to learn.</p>
<h3>5. App Store Rejections</h3>
<p>Before we submitted to Apple, we thought we had fixed all of the bugs.  However, because of the way that Guess What? copies data to your iDevice, there was one that slipped through the cracks.  Since I already had installed the game on my device, certain files already existed and did not need to be copied.  This came back to bite us in the form of an App store rejection.  Of course, this is a nine day process that takes a while.  After finally finding the bug and fixing it, we resubmitted. However, this time I forgot to set the release date and we never really hit the front page of the store.</p>
<p>Any iPhone App marketing wizard (No one has perfected it yet. It&#8217;s still magic.) would tell you that sales are greatly affected by not being on the What&#8217;s New, What&#8217;s Hot, or Featured lists when they come out.  Maintaining sales relies on some Top 100 action and if you can&#8217;t capture it right away, it&#8217;s an uphill battle to get there.  This compiled on top of a missing Lite version and no big marketing push at launch really hit us in the wallet, the hardest place to be hit after a game&#8217;s release.</p>
<p>&nbsp;</p>
<h1>The Numbers:</h1>
<p>Programmers: 1</p>
<p>Artists: 1 (Contract)</p>
<p>Audio Designers: 1 (Contract)</p>
<p>Testers: 2 (Contract)</p>
<p>Dev Time: 4 months</p>
]]></content:encoded>
			<wfw:commentRss>http://www.binarysolo.com/2009/09/28/postmortem-guess-what/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
