Friday, November 7, 2014

The last 10%

Well, that was a fun month or two. I've been working hard on my video game - getting it ready for release. It's so close to being completed I can smell it. To the extent that you can smell software, that it. The one major take away lesson I've learned so far is that software development is slow. Agonizingly slow.

I actually knew this already. I've been writing software for a good 15 years both on my own and in large teams, but it's just hit me again: software development takes forever.

Someone said, the first 90% of the product takes 90% of the time. The second 10% of the product also takes 90% of the time. This is pretty good summary.

The thing that trips you up is it's relatively quick to get something basic working. So if all you've ever done is a little scripting for yourself or in-house tools you're getting a warped perception. Once you want to release software commercially to actual users the quality needs to be much better. And I'm writing software in the consumer space - where no one cares that it's hard and there are no second chances; it has to be perfect first time.

For example, with this game I'm writing it took me about two weeks to get the program to work correctly when it's in the background. You would think this would be fairly simple. After all, it's unlikely you're ever run into an application on Android that's ever had issues when put into the background. Well, my game was crashing. After I fixed that crashing, the game would continue to play itself while in the background. After I fixed that the music would do the same. Then I had to release the graphics to free up memory to be a good Android citizen or risk being barred from Google Play store. Finally I had to correct an edge case where locking the phone would cause the application to reset.

It takes time to understand how things work on a new platform and how to design an architecture that works with the platform instead of fighting it. Throughout the process you can't help but think you're not adding anything to the product; I'm not adding levels or new characters or anything to the game. I'm just fixing stuff that should just work anyway. It also doesn't demo well: Look! Doing this doesn't crash! It did before?

 I don't mind though. In fact, it's what attracts me to the consumer space; because consumers have a choice. People aren't being saddled with your software because their organization chose it for them. They aren't being forced to use it because that's what their client uses. When someone uses your software it's because they want to. No IT department to help with the migration. No pressure to conform. You have to convince people to use it. In this sense it's a more honest type of software development. I've always had high expectations from the software I use and I've observed that, in aggregate, when they have a choice, human beings do too.

No comments: