Wednesday, July 20, 2011

You Can't Teach An Old Dog New Tricks

Android has a lot of features to it, a lot of services that make development easy, reliable, and convenient for the end user. And this list is constantly growing. And that's a problem.

Right now, we support any Android device that runs Android 1.5 or higher. That means any phone made in the last two years can run the 2cloud Android app. Which is really cool, don't get me wrong. But I was looking at the stats today, and 234 of our users use either Android 1.5 or 1.6. Which seems like a lot, but they really only amount to about 2% of our user-base, give or take. And yet, we're not taking advantage of new APIs (things like the Accounts API) because we're too busy futzing around and fixing bugs with outdated, legacy things (things like the OAuth implementation). 98% of our users are getting a sub-optimal, overly complicated, sometimes buggy experience so that 2% of our users can have any experience. As I was trying to coerce App Engine's OAuth implementation into submission today, I realised something: that's wrong.

Therefore, the 2.1 release will be the last release to support 1.5 or 1.6. New versions of 2cloud will only work on 2.1 and higher. Much like your pet Spike, who (as your parents claimed) "ran away" one summer while you were at camp, we're euthanising our 1.5 and 1.6 client. We will not update it after the public 2.1 release. It will remain on the Market, but any Android 2.1+ users who download it will be prompted to download the new application instead.

In a month or two, expect a new package to hit the market. This will be namespaced to the project (something like com.twocloud.android) and will match only 2.1+ devices. It will be built to support the latest features, and we'd like to include things like tablet support and a certain C2DM API I've heard something about. I can't promise the feature-set yet, but this is our public announcement: from now on, we're looking towards supporting the future, and looking away from keeping the past on life-support.

If you're one of our 200 1.5/1.6 users, I'm sorry. I wish I had the time to support all the devices perfectly. I don't. If you want to port new features over, we'll gladly accept pull requests and update the Market app every now and then. Our code is on Github. But if, as I suspect, you don't want to take the effort, please don't blame us; rather, ask whoever is controlling your updates why you're still on a version of the OS that was released 2 years ago.

As always, you can ask questions and raise concerns in the comments or on our help forum (in the questions forum). We'd love to hear from you.

Tuesday, July 12, 2011

They Grow Up So Fast

Exactly one year ago today, android2cloud hit the Android Market. Two weeks later, it was already getting far more usage than I had ever imagined. Since then, the usage has increased pretty steadily. It has been covered by most industry blogs (just Google 'android2cloud'). It has been covered by the venerable Lifehacker, and included in several of their 'top ten' lists. It has gained an advocate (and I've gained a friend) in Kevin Purdy, the author of those Lifehacker posts. It has run into money issues, and gotten two awesome sponsors, SiteSpect and Wonderproxy. It has gotten the team early access to new APIs from Google that now form the core of its software. It has gained an amazing supporter in Moishe, the developer that wrote the API and who now advocates for our project whenever and wherever he can. It has been acquired been Second Bit. It has been launched, still buggy and non-working, to thousands of users. It has been fixed by an overworked, sleep-deprived team on a tight schedule. It has been rebranded to 2cloud as we lay the foundations for expanding into more and more operating systems. It has gotten a gorgeous website from Eternity Online. It has had ads enabled as an opt-in way of donating to the server. It has brought the team to Google I/O. It's been one hell of a year.

And we can't see it stopping any time soon. We've been contacted by a publication (let's call it "Eebowai Mag") that plans on reviewing 2cloud in an issue at the end of July/beginning of August. We'll let you know more information as it becomes available and we're sure it's okay for us to publish it. Suffice to say, Eebowai Mag has several hundred times more readers every day than we do users since January 1st, 2011. And considering we've had over 16,000 users since January 1st, that's not saying nothing.

Ever since we were contacted by Eebowai Mag, the team has been in lockdown, trying to get updates and improvements ready. But Tino (the project manager) and I have been in lengthy discussions about how to make the application scale to support an influx of users. We don't think we'll get all the readers of Eebowai Mag by any of stretch of the imagination, but if we get even one tenth of a percent of them, it will bankrupt us rather quickly. A sustainable system for supporting the application has been our top priority ever since July 1st. We've come up with a system, and I hope you'll like it.

The problem, as I see it, is that we can't pay for all of you to use this as much as you want. I wish we were a multi-million dollar company and could. I really do. But we have a very limited bank account and as our only product is losing money, it tends to dwindle pretty quickly. Your donations are appreciated and amazing and wonderful, but they, unfortunately, don't cover the balance, or even most of it. So if we do nothing, our server will be going down. We started by just assuming this would happen, and planning for it. Our first course of action was to make sure we fail gracefully. We want to make sure you know what is happening. We want to make sure the app doesn't just force close, or silently fail and leave you wondering what happened. We want it to return an error message saying "We're over quota. We'll be back tomorrow."

And this train of thought led us to an idea. What if we do that, but let you pay to get around it? I mean, we can't pay more money--we don't have it--but if you have the money to pay for your usage after that and want to, who says you shouldn't be able to? So we're going to do two things:


  1. We're going to set the App Engine quota high. Unconscionably high. So high, we'll never be able to pay for more than a couple days of it.
  2. We're going to implement our own "soft quota". We're keeping track on our server of how many resources we're using, and when we hit the limit for resources we can pay for, we fail gracefully. We say "Sorry, we're out of quota". But we also offer to let you pay $1 to get around the quota. Right now, we're saying $1 buys you the rest of the day. We still need to do some testing to figure out what those numbers should be-- it could wind up being $1 to get a week of no quota.
A lot of this work was already done. Our team has been feverishly working since July 1st to implement this. We've also been refactoring our codebase so it's readable and takes advantage of everything we've learned in the last year. We were really hoping to have a beta release for you today, but fell barely short. We'll be releasing something to our beta testers tomorrow, if everything goes as planned.

It has been a really exciting year. 2cloud has grown significantly in the last year, and the team has grown with it. We're much better at handling an open source project. We're much better at writing scalable, efficient software. We still have a long way to go in both those. We owe a lot to a lot of people for that. One person who deserves a huge thank you is Matt Turland for all his guidance and mentoring in application design. Our code would be far worse off today were it not for him. So if you have a moment, @ mention @elazar with a "Thank you".

We're really excited for the future. We hope you like the things we've come up with. We hope we've fixed the bugs that are bothering you. But, most of all, we hope you understand how grateful we are to you, our users. This application is what it is because of you. We have over 1,000 reviews on the Android Market and a 4 star rating. We're working really hard to live up to that rating.