One of the biggest fears I've heard from many of my programmer friends is showing their code to other people. Or coding in front of other people. It's as if, they're so afraid that there's some way they could be coding things better that they don't know about, that if they showed their code to others they'd be ridiculed. Or that they think that they're doing things in a great way and are afraid to be ridiculed and find out that perhaps their way isn't so great after all.
I don't remember having this fear for a long time. I got used to pairs programming in high school, which to a lesser extent involves sharing your code with someone. But it's more recently that my lack of fear has been obvious; I taught iPhone Dev School this weekend and was coding in front of an audience of ten others, not only showing off my coding style in real time, but making the claim that it was good enough that they should listen to me and code this way. (For sure, I was coding nothing particularly difficult in a two day course, but my co-instructor, Michael, came up to me and said, "Man, you're brave. Coding in front of ten other people!"
Truthfully, until he said that, I hadn't even thought about it.
No, when it comes to code, my fear is not showing it to others. My fear is my product. Michael gave a speech this weekend with roughly the following quote: "If you're not embarassed by the first version of your product, then you've shipped too late." I agree with this notion full heartedly. But although I will publish an embarassing product to see if there is any interest in it, once I know there is an interest, I get more concerned with doing things right.
I released Castle Conflict almost a year ago now. It has been a pet project of Josiah's and mine, and we have since released one minor and two major updates for it, with another one that we are currently planning. We have over 20 000 people who have downloaded non-pirated versions of the game at this point. While I am certain that it has been deleted by a number of these people, assuming only half of that audience liked the game enough to keep it, that means that each time we update our game, there's 10k people who might see it.
One of the popular requests for Castle Conflict has been multiplayer. I finally spent the time teaching myself the BlueTooth and WiFi libraries on the iPhone. I finally spent time learning about syncing, time stamps, etc. I expected that I would be done January 7th, but it was not until minutes before midnight on January 21st (after skipping my weekend and spending 4 days working 12 hour shifts, something I did without noticing because I love my job so much) that I finally submitted the multiplayer update. After days of testing, checking stability, reducing crashes, keeping the devices connected as solidly as possible. etc.
But there's a problem. I am in no means a network programmer. While I enjoyed that course in school, it was not my strong suit. And I haven't really touched anything network-program-y since 2006 in school. (Technically, I was working on Gwabs, a networked game for about a year, but by the time I was on the project most of the network code had already been written and I never touched the networking code itself). So, in terms of how to structure things, I was learning the entire way.
Then again, the first week when Josiah and I did Castle Conflict, I was teaching myself Cocos2d. But my experience with 2D game engines is much stronger, and it's a lot harder to structure rendering wrong.
On January 21st, I felt fairly certain that I was submitting a game that would be received well, that would give Castle Conflict a much-wanted boost in sales, and that was fairly certain. But I had a fear. I had a fear because I am not a network programmer, and while I tested everything I could think of, my instincts are not as sharp as they would be in searching for bugs in gameplay. I don't know with as much certainty where to look to make sure I haven't made any obvious mistakes. What if I missed a spot?
Nonetheless, surely my audience would appreciate what I had made for them, the weeks I had spent getting it working on their request, the time I had spent learning and implementing? Surely, even if there were bugs, they would understand that they would be ironed out over time, and appreciate the new features that most of them were getting for free?
Not quite so. I've got three reviews since the multiplayer update went live. One is about another game, making me wonder if the reviewer is confused, or a spammer. One was in German, and although google translate tried, it was not able to make the review completely understandable. (I did get that they liked it, though). But one said this:
"Bluetooth and WiFi gameplay always disconnects... Horrible coding and balancing."
It was a one star review, the first review lower than three stars I have gotten since campaign mode was released. And while it's too early to say for sure, my sales took a turn downwards today compared to yesterday (when this review was written). Such an early review discounts all the other stuff in the game that people have already liked, and says that it sucks because this new feature I spent weeks writing and learning for - literally as much time overall as the entire rest of the game combined - is not yet perfect. And I wonder, by spending these weeks trying to give back to my users, have I potentially damaged my sales more than hurt them? (This all being said, I just checked out this guy (NeverEverSatisfied)'s stats and he's written 14 reviews on the app store, of which 12 were 1 star.)
I'm reminded of a quote that refers to rock stars: "You're only as good as your last hit single." Perhaps this is true on the app store? Perhaps you're only as good as your last update?
I wish that the iPhone app store allowed me to e-mail people who reviewed my game. For, certainly, I would love to know what problems this guy ran into. What device he was on (I was able to test on an iPhone 3G, 3Gs, and an iPod Touch 2nd Gen, but not iPhone 2G or iPod Touch First Gen). What disconnect messages he was getting. Then, perhaps, I would be able to learn from this information, update my code, and make things more stable.
Anyways, we will continue to make wireless more and more viable as time passes. And we will continue to add more content. I have learned a couple other things from this update that I hope to blog about soon, including some classes I wrote for it.