02/03

An open apology to everyone

14 Comments

I have not handled the Tubular project properly. I admit it. I have not kept my customers up to date on what’s been happening, and have been misguided in handling the delays. And I let the lack of information go on for way too long. I’m truly sorry for the way that I’ve behaved over the course of this project. I’m going to use this post to explain everything that has happened, to hopefully answer all the questions everyone has had about what I have been doing. I know that many of you are extremely upset with me about this course of action, and I accept that. I’m not looking for pity or expecting anything out of this, but it’s the explanation that everyone rightfully deserves.

The first signs of trouble with Tubular began developing at the end of December, 2006. At this point, we were still using the default Flash-based YouTube player. Up to that point, it was ugly, but it worked. However, suddenly, using this method stopped working. When you’re writing an app like Tubular, any change to YouTube has the possibility of breaking the app. I quickly noticed that there were changes to the way that Flash players were created on YouTube’s site. A small “key” string was being passed around, and was generated from YouTube’s servers. I couldn’t find a way to work around the issue while still using Flash. This is what led to the decision to switch from the Flash player to a QuickTime player based on the open-source Perian codec.

This took a lot longer than I was anticipating, mostly because of the way that Tubular was designed. A lot of rearchitecture had to be done to safely accomodate the new video player. However, I decided that this was a worthwhile trade-off at this point, especially since I would be able to extend the QuickTime player in the future to support things like a custom controller and a full-screen mode, as well as CoreVideo processing. This was during a particularly crushing quarter at the university I attend. Getting Perian running took about a month of my available time, and confirming that it worked with the rest of the system took even more. Much of the delay was due to my school work, but I decided not to tell anyone for fear of sounding like I was unable to finish on time. Which was obviously the wrong decision to make.

As customers grew more and more upset, I got more and more depressed about the project. I knew I was letting people down by not disclosing the nature of the delays. And they were getting upset at spending money on something that wasn’t happening. The more let down I made myself, the more difficult it was to work on the project. This eventually would spiral on and on. I know ths is a completely irrational decision, and I was definitely wrong for doing it. Tubular was and is a very emotional project for me.

In March, I started working full-time at a company doing web software development. This was required by my university as part of the graduation requirements. I thought I would have more time to work on Tubular, but I was wrong. Nevertheless, I trucked along and released a few updates over the summer. Each time, I would get a lot of response from people saying that I was taking way too long to finish. This continued to drive that downward spiral. Everything was starting to line up for the beta release.

In August, a lot of things had been lined up for the beta release. However, after the announcement that it was ready, there was a huge bug that was noticed in the video conversion code. When it occurred, it caused the app to start writing a lot of random data to disk. And “a lot” means several gigabytes, if left unchecked for a few minutes. This was introduced at some point after Tubular 0.9.8 was released, so nobody had to panic about it. But it was something that needed to be fixed before it could go out. The bug ended up being something incorrectly sent to ffmpeg, which handles transcoding the video into a QuickTime file for iPods. It took a long time to discover, and by the time I found the fix for it, I was taking classes again.

In late September, I found out that I would have to transfer to another university. This added another layer of stress. As time wore on, it became more difficult to find the time or energy to work on the project. This is nobody’s fault but my own, and should’ve been disclosed.

With very little time, I kept working on getting the release finished. I didn’t announce anything about it, though, because I was afraid of getting a lot of angry people on the blog. And when Leopard came out, everything turned for the worse again.

Since Tubular deals with YouTube a lot, it uses Safari’s engine to make doing the work easier. One such case was in the piece of code that got the raw video for a given YouTube video. Up until this point, it created a Safari page in the background, loaded the normal video player, and watched for the video stream. Once Tubular found it, it would stop dealing with the background page, and download the video. But Leopard included the new version of Safari 3, which caused much of that code to break. Now, getting access to that video is a very tricky thing to do, and so this complex method was needed. It’s taken us a long time to find a fix for this bug. In fact, we just found one three days ago. But that piece of the puzzle was such a showstopper that it caused the app to crash or hang in Leopard, and exhibit very weird behavior. It clearly wasn’t shippable. This all, once again, should have been conveyed to everyone.

So, to all of you, I’m very, truly, and deeply sorry. I have let you all down for my utter failure to act professional about my actions. I am turning myself around and am hoping to win back your trust. To that end, I will be much more open on the blog. I will let you know about delays when they happen, what their cause is, and progress on fixes. I will inform everyone on the status of upcoming releases and other information on the project.

Regarding refunds, I unfortunately can’t do any refunds right now, because of my financial situation. However, since Tubular is now in public beta, I will be able to supply refunds out of any future purchases. Please contact me at the support email address; I will not discuss refunds in the comments.

I hope that this explanation will at least answer many of the questions you all have. If it hasn’t, please respond here in the comments or privately by email.