I really like iOS development. Ideally, I’d like to have a full time job developing games for iOS. But really, I just want more experience doing iOS development. I want to get better, find a mentor or a coding buddy. With that in mind, I recently started applying and interviewing for junior level positions. I even asked a couple of local game developers if I could work for them for free in exchange for mentoring. It didn’t really go as I had hoped.
But I didn’t give up. I sat down and started writing an email to Ian Marsh of NimbleBit, inquiring about employment opportunities and offering to work for free in the mornings and afternoons a couple of days a week in exchange for mentoring. Blah, blah, blah. All stuff I had written or said before. It occurred to me that emails were not really getting me very far and I’m just not very good at communicating my enthusiasm and passion for iOS and games. That’s when I got the idea to do do something big and different. It had to be an attention grabber that conveyed my determination. I got set on the idea of a custom app that would somehow incorporate my resume.
It sounded good, in theory, but the reality was they probably receive tons of emails from people smarter and more qualified than me asking for a wide range of things. I also imagined if I had received an email from someone I didn’t know very well asking to install or TestFlight some random app, that I would be skeptical. Besides, a single app wouldn’t really be able to showcase all the apps and prototypes I had done. It was at this point I got the idea to mail them my entire iPad2 with all the apps on which I had worked. I could put my resume on there and even write a custom app to sell myself. It seemed like an OK idea, but there were things to consider.
Would my iPad be safe? Didn’t think much about this one, I figured if I insured it, I’d be covered. How do I get my iPad back? This required a little more thought. I didn’t really think the NimbleBit guys would keep it. I mean, they are iOS developers, they should have plenty of devices on hand, right? And they did donate a bunch of iPads to a school. I didn’t want them to feel obligated to talk to me if they didn’t want to, so I had to come up with an easy way for them to opt out. But there was one more question.
What if they think I’m insane? I had quite a few reservations about this one. I didn’t want to cross the line from enthusiastic fanboy over into the area of creepy stalker. I also started to wonder if this was considered a “leave behind”. I spoke to a friend of mine about this, and he reminded me about the crazy guy who camped out at the Blizzard HQ. The thing that my my buddy pointed out, besides the fact that this guy didn’t get a job with Blizzard was that the Internet made fun of him. I took pause, but it didn’t take long to come to the conclusion that if the crazy Blizzard guy didn’t at least try then there was no way he would even have a chance to accomplish his goal. I suppose the Internet may still make fun of me, that remains to be seen, but I had to try. Besides, at this point I had already finished the app and was pretty proud of what I had learned and accomplished.
I went home put a hand written note to the Marsh brothers on my iPad explaining why they were getting an iPad in the mail and giving them an easy out to return it if they weren’t interested. I boxed it all up and it was ready to go. The next morning I stopped by the post office on my wake to work and it was off. Whew!
I didn’t expect to get a response for at least a couple of days, if at all. To my surprise, by that evening I saw this on Twitter. Followed shortly, by this tweet. I was encouraged!
What was on the iPad?
I completely reset my iPad. I put all the default apps into a single group and moved that group to the second page of the device. On the first page, I made several other groups that included contract apps I had done, protoypes I had created, apps I had done individually, and as part of a team. I also had an app on the first page that was simply a PDF of my resume that used a picture of myself as the app icon. I removed everything from the dock except the single custom app I had created for NimbleBit to showcase my skills and enthusiasm for iOS Development. I made the background image on the iPad a custom image. The custom image was basically a default iPad image where I pasted a game studio floor from Tiny Tower. I named the studio NimbleBit. I then created a Bitizen that looked like me and put it on the floor. I wrote a little note about how NimbleBit was my dream job and directions to start with my custom app. It looked like this:
How did I create the custom app?
I was very fortunate as I developed this app that almost all of the resources I needed were available from the NimbleBit Bitizen Builder or the Tiny Tower Wiki. Since I was going with a Tiny Tower theme, this was perfect. I think every single image, sound, and music I used in the app, except maybe two, came directly from those resources or a screenshot directly from the game.
The app had two components. The first component was a sort of intro page that answered a few questions about why I created the app, who I was, my contact info and what I had to offer. While creating this app, I also found two bugs in the Bitizen Builder. I reported the bugs here and explained that I was already helping them before they had even hired me. Here’s a peek:
The second component of the app was a memory style game that consisted of randomly created Bitizens. I had already coded the memory game using crude art, as exercise in clean code for myself, so I had a nice starting point. It was a fully functional game with high scores and times. The icon for the app was nearly identical to the Tiny Tower icon, except that instead of a Bitizen construction worker I used my own Bitizen. The navigation between the two components used a vertical UIScrollBar to create the vertical look and feel that you see in several of the NimbleBit games like Tiny Tower, Scoops, and Sky Burger. Here’s what it looked like:
What went wrong?
Not much really went wrong, but the one thing that did go wrong was kind of big and I’m still beating myself up over it. At some point, after I had loaded all my apps to the iPad, my provisioning profile had expired. I renewed the profile, but there was some weirdness going on, so unfortunately some of my apps didn’t even launch. The custom app did work and that was the most important one.
What went right?
I completely reversed engineered the creation of Bitizens. Not just an image of a bitizen. Bitizens with random hair colors, skin colors, clothing colors, hair, facial hair, hats, ties, earrings, costumes…the whole deal.
I learned how to do color overlays on a single image, preserving transparency and allowing for the randomization of skin color, hair color, and clothing color.
arcrandom() % 0 doesn’t just return zero. Many head explosions over this one. ☺
I figured out a better way to programmatically animate a UIScrollBar.
I learned about adding and implementing a custom ttf font.
I was able to apply a real-world implementation of recursion.
I created an observer and actually understood how and why I did it.
I used Instruments for the first time to track down a memory management crashing bug.
I proved to myself that I can make a game of my own if I put my mind to it. I’m pretty sure I already knew this, but it was a nice confidence booster.
I didn’t get a job. This may seem odd for a what went right, but by the time I was done, I was just so proud that I had done it and I learned so much that I knew it wouldn’t bother me too much if I didn’t get much of a response from NimbleBit.
The NimbleBit guys bought me lunch and gave me a tour of their sweet studio. David, Ian, and Tim took time out of their busy schedule to meet with me and shoot the breeze about iOS, games, and just every day stuff. Very cool, though I’m still not not sure that they don’t think I’m insane. At least they haven’t made fun of me on the Internet…yet. ☺
This post is part of iDevBlogADay, a group of blogs by indie iPhone developers featuring new posts every day. You can subscribe to iDevBlogADay through RSS or follow the #iDevBlogADay hash tag or @idevblogaday on Twitter.