Monday, September 28, 2015


Our last update to this blog was almost 3 years and 9 months ago, which is not really the communication pattern I want to be following. So I’m here to end that silence, discuss what we’ve been doing, why it wasn’t working, and how we’re changing course to make things work.

What We’ve Been Doing

Almost 4 years ago, we announced our plans to get a new version of 2cloud, codenamed Bessie, released. This would be our first release that was no longer running on Google’s App Engine platform, and our first release that required users to pay to use the software. Those two distinctions were not arriving together through a happy accident; too many of our problems at the time were caused by factors outside our control. The APIs we relied upon were not being actively developed, according to some friends. The new, emerging technologies meant for our use cases weren’t supported. And our entire product lived in someone else’s ecosystem, which left us feeling a little powerless.

The trade-off is, all that loss of control brought us a lot of lost responsibility, as well. We didn’t need to worry about a vast number of things, including: data backups, logging, monitoring, keeping the service online, and a million other little details that need attending to to keep a highly-utilised service online. Google paid some very smart people to take care of all of that for us, and we got the benefits.

Since moving off App Engine, we’ve looked at several hosting providers, several databases, and several “in house” platforms, which were more strategies and implementations around deploying the service. We’ve written a few implementations of the server component, of the Android app, of the Chrome extension.

In short, we’ve tried a bunch of things. And the bad news is, this stuff takes a lot of time and effort to try. The good news is, we’ve finally arrived at a solution we feel confident in. We’re using another Google technology that mimics a lot of the behaviours and ideas that we took advantage of in App Engine. The difference is, this time it’s open source and can be run on a wide range of hosting providers, so we’re not as helpless. We’re building using the same programming language we started Bessie with, but we’re using a different database and following some better industry practices. We have paths available to us in the event we need to scale up, and we’ve thought through some of the probable worst-case-scenarios we could face, and have made some informed decisions about how to handle them ahead of time.

In the process, it has become clearer and clearer that we were going to need to insert a clean break from our user experience. We wouldn’t just be able to issue an update and have users not notice we changed things; we’re going to need users to sign up for new accounts, and old data may or may not be migrated with it. Since we need to make that break anyways, which usually signals a huge drop in user retention, we figured it was time to make all the changes we had been contemplating for some time. Like branding. So we renamed the project to Ducky, developed a new icon, and got some branding in place we felt comfortable supporting in the long term.

Why It Wasn’t Working

This has been an incredibly informative exercise, and we’ve grown a lot in our attitude towards building systems, and we feel much more confident that we’ll be reasonably capable of keeping your data safe and the service online. But this direction has involved building a lot of the pieces that Google previously provided for us. Things like how you log in, with all the headaches that brings. We’ve also introduced new measures, like the ability for administrators to email users so we can properly communicate problems and changes in the future. And building and testing software like this takes time, and we’re really just one person working in the spare hours he can find.

Surprisingly, it is hard to recommend “trial and error until you’re all out of error” while building a product people have been waiting for. At the time of this posting, Google Play is reporting we haven’t updated in just over 2 years. In reality, we’re probably closer to that 4 year figure updated above.

That does not exactly inspire confidence in the product, nor does it bely love and support for it. Further, there are a small mountain of Android system improvements that have passed us by, as well as user experience tweaks we’d like to make and improvements that we know users want. We do not want to abandon this project, or let it stagnate, and yet we have. For years.

Further, we’re at an even worse point in terms of our funding. With user contributions essentially dried up as the software looks more and more abandoned, and with our guilt for the abandoned appearance for the software making us reluctant to solicit funding, we’ve more or less just assumed the server costs. On the plus side, as more users jumped ship for some better-maintained software, our server costs went down. Though that’s searching kind of hard for a silver lining. On the negative side, this puts us further from our goal of making this project sustainable. Fortunately, a lot of the time we’ve spent over the last few years has been in researching, talking about, and weighing some revenue models, and while we’re not ready to say we’ve decided for forever what we’re doing, we at least know what we’re going to try, and have thoughts on how to adjust it down the road.

How We’re Changing Course

If you’ve made it this far, thanks for bearing with me. Clearly, what we’re doing (a ground-up rewrite with no deadline or schedule) isn’t working. And when you say it like that, it’s hard to be surprised at that result.

So we’re changing things up. Google has announced that the way we log users in will no longer be supported after November, 2015. As it is essentially October, I do not feel confident that we will have a release-ready product by then. So you can look forward to an iteration on how you log into 2cloud by mid-November. The new system will be easier to use, will integrate better with your phone and with Chrome, and should solve a lot of the bugs that currently exist with logging users in. Unfortunately, this change will require you to log back into your account, and there’s no real way for us to avoid that. Fortunately, we have some options we’ll be trying to utilise to minimize the impact of this on you. And the good news is, this will address a large majority of the support requests we get.

Furthermore, we’re setting a hard deadline on the abandoned state of the publicly-usable parts of the project. If we do not have at least some level of deployment for Ducky by January 1st, 2016, we’ll be refocusing our energies on maintaining the currently-released version and upgrading it with new features and improvements. We’ll then reexamine our plans for Ducky and come up with a plan that will allow us to release something in a shorter timeframe. Whether that means developing it while also maintaining 2cloud responsibly or abandoning the sweeping rewrite in favour of multiple smaller rewrites to allow us to move forward remains to be seen. But stopping all maintenance and development of 2cloud has a hard deadline of January 1.

Tuesday, January 3, 2012

About Subscriptions

In early September, we launched a compulsory survey about charging subscriptions for 2cloud. We spent much of September and October gathering responses, analysing feedback, and continuing the conversation with the responders who gave us email addresses to contact them at. We sent over 400 emails, by hand, trying to get a feel for the needs of our users and trying to communicate clearly with them.

Then we went quiet.

A lot has been happening, and we hope to share some of it with you in the coming days or weeks, but we wanted to take a moment and give an update on the subscriptions front. There are two parts to this: what we’re doing, and why we’re doing it. We’ll try to explain them both in full.

What We’re Doing

We’re going ahead with the subscription plan. When subscriptions go active, we’ll be requiring everyone to pay the subscription fee or lose access to our server. A couple of fine points:

  • This only affects our server. All the software will still be licensed under the MIT License, and we’ll still be more than happy to help you set up your own server installation that you can run without paying us a dime.
  • New users will receive a free trial month to evaluate the service. This will only be extended to those who do not already use 2cloud, whose Google accounts have never existed in our systems.
  • Subscriptions are not active yet. We’ll be turning them on when the newest iteration leaves beta mode and we’re confident in its quality, reliability, and performance. Rest assured, there will be a sufficient period in which anyone who wants to can try the new beta before subscriptions go active.

You’re probably wondering how much a subscription is by now. We’re pretty pleased to announce we’ve brought the cost down to $1 if you want to buy a month at a time, or $8 if you buy a full year at a time. When we conducted the poll, we got a pretty good reaction to the $2/month or $24/year price point, but we wanted to do better.

Why We're Doing It

There are a lot of factors that influenced our decision. The over-arching reason, really, is user experience. We can simply offer a far superior user experience for a minimal cost. So just like we had to make the tough decision to discontinue supporting Android devices below Froyo, we’ve had to make the tough decision to discontinue supporting free users. It wasn’t a decision we arrived at easily, but we feel it’s the best choice considering the circumstances.

A lot of people have been sharing this post with us recently, and it’s a pretty good overview of why we arrived at the subscription model. We’re not here to be bought out. We’re not looking for a multi-million dollar exit. We’re looking to build a sustainable, viable service that offers real value to users. Sadly, we need users to pay for that value, or it just can’t work.

There is a bright side to this, though; we’re committed to you. We’re committed to building the best service we can, creating the best experience we can, and making our users as happy as we can. At the end of the day, that’s what this is all about, to us: we want you to walk away from an interaction with us saying “Wow. That was awesome.” It doesn’t matter whether that interaction is using 2cloud, or dealing with our support team, or even just saying hi on Twitter. We’re here to be remarkable.

We’ve learned not to deal with absolutes or make promises we can’t keep. We’ll be more conservative about our “never”s and “forever”s. But the mindset and spirit of 2cloud has not changed since August 2010, when the project started: build something awesome for awesome people, and do the right thing.

We’re going to continue to be honest and open with you, and try to give you every insight possible into what we’re thinking and what we’re planning. We hope you’ll stay part of the conversation with us.

Tuesday, December 6, 2011

Engaging Real People

Last Friday, as you may or may not have heard, we had our first Google+ Hangout with the team. It was, I feel, a success. Google+ says 14 people showed up—2 of those are us, and there were some people who were confused when they showed up and clearly were just joining random Hangouts. Which is cool, we had fun. We talked about the next version of 2cloud, I demoed it a little bit, we talked about monetisation and about the subscription plan (I realise I have not blogged about the subscription plan yet; I will, I promise). We even had one visitor to the Hangout who had never heard of 2cloud and became a user while talking to us. That was really cool.

It was really great to meet all of you. I was talking with Tino after the event, and I asked how he thought it went. This is what he said:

Our service depends on engaging real people, and I'm happy to be a part of our work because that is precisely what we do. And yesterday's hangout is a wonderful example of that. These people, whose only connection to us is software, gave up their time (which we know is the most valuable resource there is) just to meet with and talk to us about the software they enjoy. That is an amazing thing.

It really is an amazing thing. Thanks for setting aside some time to meet with us and chat. We had a Hangout for about 3 hours, and it was an absolute blast. We hope to do one again real soon.

As a closing note, I know I haven't updated this blog since (*cringe*) early September. We've been really busy getting Bessie ready, and haven't had much time to blog. We'll be updating shortly with some information on the subscription model and the next update. We'll also be doing a (*cringe*) mass email when we can't put it off any longer to tell everyone about the new version and the subscription model. We'll keep it short and it won't be until late January, so don't worry too much about it.

Sunday, September 11, 2011

Upcoming Poll, Again About Money

TL;DR version: There will be a poll. It will guide whether or not this app remains free. Please vote if you care at all.

I'm a very opinionated person. I believe in a lot of things, and I believe them very strongly. I believe that software should be open source. I believe that everybody should have access to it. But just because I believe things does not make them true; nor does it mean I'm not willing to change my beliefs. It just means I haven't heard any ideas that are better or evidence that is convincing enough to unseat my beliefs.

I've had a hard time with this project, recently. It stems from a few reasons: my own inadequacies as a developer, limitations of certain platforms, the refusal of device manufacturers to conform to a standard Android experience, the lack of certain standards in Android apps.. I could list things until I turn blue in the face. But the main thing is really that I've been floundering on the business side of this project recently. I'm not a business man, I'm an idealist. When I started this project, I just wanted to learn Android and Chrome development; that's why we have no business plan, why we are so informal about this: it all grew up very, very quickly.

Today, I had a revelation. It came from a user. Now, Michel is a very active user; he runs his own server, he talks with me a lot (we're chatting as I write this, actually), and he's always interested in what's going on with the project. He offers ideas, feedback, and support. I wish Michel were the average user, because the tech world would be a vastly more enjoyable place were that the case. I was lamenting the poor performance of our quota on Google+, and it kicked off a brainstorming session as to why things are the way they are, and how they can be fixed. I love social media.

The revelation Michel prompted in me is simple: "The main problem I see with the quota current model is that it is 'too free'". The idea of "too free" is an interesting one. It suggests that offering something for free devalues the product in the eyes of its users, which shields the fact that it costs money to run from them. So when you have to do things like introduce a quota, they get upset; to them, something that was free is being charged for, which smacks of profiteering. In reality, something that was being run at-cost is trying to get sustainable. We try to communicate that, but it's hard without spamming everyone.

Now, Tino is going to get upset with me over this, because I have a habit of realising things he tried to tell me long after he tells me, and sometimes I forget he told me about them in the first place. I think this is one of those times. He's told me for forever that making it free makes people feel more entitled, but I've never really given much credence to it. Because he's long been advocating for more pressing policies of monetisation, and for good reason: he's been right. But it took a user, someone who would not profit at all, telling me that not only would he pay for the app if we charged a subscription, it's wrong of us to not charge a subscription, before I really heard the argument. Which is a shortcoming of mine that I'm trying to overcome.

I think part of my reluctance to accept the idea was due to one of the most debilitating shortcomings I have: a lack of self-confidence. When we release buggy builds (which happens with unacceptable frequency and is something we're working on), I feel like it's just another reason we shouldn't charge for the app. And I won't be implementing the new subscription model, if there is one, until the current bug count is brought way down and the app's stability is much, much better. But the number of users who have told me the solution lies in charging for the app is helping to overcome my fears that the software isn't good enough.

So what's going to happen is simple. I'll update the app in the Android Market. When you run it, you'll get a popup that will ask you if you would pay a monthly fee for the app. Please vote; it's very important. And please be honest with us; we try so hard to be honest with you.

Thursday, September 8, 2011


I was going to limit this to my personal blog. I wasn't going to make the fatigue I was feeling over the constant struggles this project provides an issue for the project at large. And then something happened; we got a particularly nasty support request from a user. I'm going to go ahead and reproduce it below.

I am getting a message that the server is over quota and my link will be stored until tomorrow unless I want to pay $1 ? What good is the link going to do me tomorrow and if the server really is over quota why will;l $1 free it up? Is this a new fee or something? If it is this app is dead to me and I'm sure many others. If this isn't a bug then it down right wrong to hold my link hostage for $$

Tino gave a pretty detailed response as to why this reaction is insulting and outrageous. I tried to give a more level response, but we're both pretty much on the same level as to how we feel about this. It's a betrayal. It's nothing more than us bending over backwards, trying to provide a service, and it seems like the nicer we try to be about it, the more we're told we're "malicous" or holding links hostage or some other absurd assertion about how us providing a free service by paying for it ourselves is really an evil move on our part.

The project is still going strong. I'm still responding to bug reports. I've found the cause of an issue and will be issuing a fix in the next day or two to try and address it. Another issue is in Google's code, not ours, and we're working with the Engineer behind the API to fix it. He says it's fixed, but is waiting on a rollout. All we can do is wait, sorry. We'll keep working on the bugs that we can fix. But it's getting hard to pour my sweat, blood, tears, and money into a project and not only not get compensated for it, but get verbally abused at every turn. I'm 21 years old, guys. I'm a college student, taking a full course load and working at the same time. I try to provide the best service I can, and try to apologise when I fall short. My shortcomings are many and varied, and the community has borne the brunt of all of them at one point or another. And I'm sorry for that, I am. But malice is not among my shortcomings. And when I go to bed with a heavy heart already, it's hard for me to wake up to people telling me that I'm not being fair to them because I expect even a modicum of engagement from them.

This isn't a post looking for sympathy. This isn't a post looking for donations. This isn't a call to action at all. The sole purpose behind this post, if I'm to be 100% honest with you, is to remind you that there are people behind this project. That people will be reading your support requests. That people worked hard on this and die a little inside watching you talk about how badly it sucks.

This is breaking me down, guys. In my phone call with Tino tonight, I mentioned that writing software for this wasn't even fun right now. It almost brought me to tears to say that, because I purposefully did not pursue an education in programming because I wanted it to remain something pure and fun.

Since the start of this project, I've been banging on about how it's our project. How the community is in control and calls the shots. Well, the community needs to take some responsibility, too. We can't do this alone. This needs to be a partnership, or the project will have to be shut down. We're reaching out to you, desperately flailing in the dark. Please meet us halfway.

Monday, August 22, 2011

Development Cycles

I don't know how many of you have noticed this, but we tend to go through development cycles with this project. We release an update, there's a flurry of activity as we polish it and fix any lingering issues, and then... silence. We don't issue updates until the next large iteration.

This isn't something I'm proud of, or something I'd like to continue, but I'm afraid it has to be the case. I'm still doing the majority of software writing for this project, and I'm still a student working a few jobs to pay the bills. I still can only engage this project in my "free time", such as it is. That means that the development pushes tend to be around when I can clear out some time in my schedule to knuckle down and focus on this project. We're in one of those times now (summer is awesome, isn't it?).

The impetus for writing this post was because we're coming to the end of this little push. I'll be fixing up the major issues that remain (things that prevent people from using the app), but minor inconveniences may or may not get done. A week from today, I start classes at my college again, and those will be taking up a good portion of my time. Development will continue, but it will be slow, and updates won't be as frequent.

I'd love to say this is a temporary problem, but the future is uncertain. When I graduate, I'll need to take a look at my financial situation and see what my options are. If I can, I'd like to continue writing software. I'd like to be able to devote myself to this every single day. I doubt that's going to be the case (this project is still in the red in terms of money) but it's nice to dream. If I can't do this full-time (which, really, is absurdly unlikely), I'll probably have to continue this cycle.

All I know is that the project has grown in leaps and bounds since last year. I'd like to see similar growth this year. I'm going to work hard on it whenever I can, and hopefully I can get it to the point where other people will start working on it, too.

Thanks for your support over the last year, and I hope you'll stick with us as we stumble our way through this one.

Paddy Foran
2cloud Lead Developer

Friday, August 5, 2011

About the Quota

Seeing as we just started rolling out 2.1, I thought I'd take a moment and try to expound a bit on our quota system, our thoughts about administering it, and the plans we have in regards to it.

Anyone who is not new to this project knows we've been fighting with monetisation since the very beginning. We haven't found a way to make the project sustain itself yet, and so far we've just been burning holes in the pockets of our developers and our community members, trying to keep this service online. When you think about it, it's a bit silly. We have over 12,000 active installs, according to the Android Market. That number's a bit low based on our metrics (doesn't cover custom builds, people using non-Market apks, etc.), but we'll use it as a minimum number we can rely on for accuracy.

We have 12,000 users with the app installed. The server costs $31/month, give or take, to maintain. This app should be sustainable if even one half of a percent of our users donated one dollar a day (keeping in mind that Google takes a cut). Put another way, if every user donated a dollar once every 23 years (again, keeping in mind we get seventy cents of that dollar), the app would pay for itself.

We've tried a couple things. The donations model seemed promising, but there wasn't enough of a steady flow of cash to keep things paid for. We tried ads, but... well, that was a bad idea. Our app wants to get out of your way and not be noticed. Hard to implement display monetisation on something that tries not to display. Our efforts were... well, failures. Since the launch of our ads, we've made four whole dollars. Actually, we've made nothing; we don't get a payout until we make fifty dollars. Which seems unlikely to happen, so we literally got nothing from ads.

Tino (our project manager) and I sat down to think a bit on this and how to make it work. The first important breakthrough we had was that users didn't realise this costs money to run. A lot of you read this blog, subscribe to the mailing list, and follow us on Twitter. And really, thanks for that. We appreciate it, and hope you enjoy hearing from us as much as we enjoy hearing from you. But you're a tiny percentage. Probably less than a percent. Being overly generous and assuming there are no duplicates, we have almost 330 followers on Twitter. Out of over 12,000. So 97% of our users never see our money struggles. Not good.

The second realisation we had was that it's not easy to give us money. Yes, you can run across a donation link. If you use PayPal, that's fairly simple. But if you don't use PayPal or don't run across the link, the barrier is too high. You can buy the donation version from the Market, but you can only buy that once. And if you don't have the Market/can't buy apps on the Market in your country/want to donate more, you're out of luck.

The third realisation we had was that we can't keep this up forever. I'm too busy with classes, my jobs, and iterating on 2cloud to devote myself to writing entirely new software for Second Bit, software that will bring in money to support this. So we're a company whose only product is burning through money like it's that Yule log you see on TV. That leads to bankruptcy and/or server shutdowns pretty quickly. Neither of which is really what we want.

The fourth realisation was that downtime sucks, but some types of downtime suck less than others. For example, if we can fail gracefully and explain that the server is down, that's better than the app just... not working. If we can explain why the server is down, so much the better. And if we can offer a way to keep the app working anyways, then that's probably the best situation we can hope for.

So we came up with a quota. Normally, I hate quota systems, but I am actually pretty excited about this one. I'll get to why in a moment. First, let me explain how it works. One particular piece of our app is the expensive part: the connection between the server and Chrome. As long as Chrome is open, we need to keep that connection alive; that takes some CPU power, and CPU can get pricey. So what we're doing is keeping track of how many of those connections we make. Based on that, we can calculate our CPU usage. Based on that, we can create a "soft quota" to limit how much CPU we use in a day to be something we can reasonably support for a little while with our current funds. That quota is variable; we have an interface to set it based on our available cash on hand and the statistics we have on how many connections/day we're averaging. Our goal is to keep the number of times we exceed that quota a month to one or two, but still be able to pay for everything.

When the quota is exceeded, your links won't open. At all. But we will still store them for you, and open them when the quota resets the next day. Because it's our own imposed quota, we can do that. If that gets too CPU intensive, we may have to turn that off—but rest assured, we'll let you guys know when we're reaching that stage.

This is the cool part, though: you can pay to get around the quota. When you try to send a link and the server is over quota, you'll get a popup explaining that the server is over quota and offering a way to pay. By paying roughly $1 (depending on your country; it's calibrated to be the lowest round number the Market will accept), you gain immunity to the quota. For now, we're saying you get the rest of the day immune. In the future, we may toy with that; you may be able to buy, say, immunity for the next three times we're over quota, as opposed to immunity for a certain amount of time. You may get an entire week for your $1. We're still figuring out that part of this, and hope you'll bear with us and offer feedback. What your immunity buys you is pretty simple: as long as you're immune, you get to use the app, regardless of its quota.

This brings me to our fifth and final realisation, and the reason I'm pretty excited about this quota, instead of dragging my feet. Ready for this? You are not our enemies. We are not here to work against you. You are not trying to take things from us. You don't want us to go bankrupt or shut down the server any more than we want those things. And we know that. And we respect that; we respect our relationship with you. We've worked hard and made a lot of tough decisions about this system to ensure that it would never harm someone by accident. Our payment verification system is less secure than we'd like because we'd rather have ten people slip around the quota than one person get denied on accident, or have the user base jump through hoops. In the end, it's pretty easy to cheat our quota system; the caveat is, we'll know. We just need to manually catch cheaters, which is more desirable than automatically catching cheaters and accidentally catching a couple honest users. We're extending our trust to you guys in the spirit of cooperation; please don't abuse it.

We're also going to be doing a few things to try and mitigate the impact this will have on our users' lives. Our friend Eva has helped out quite a bit on this end. At her suggestion, we'll be randomly choosing one active user a month to be exempt from quotas that month. We're going to take it a step further though; we want to reward people who are consistently paying to get around the quotas. So we're also going to select one user a month who paid to escape the quotas in the previous month (e.g., for October, we'll choose someone who paid in September) and we'll give them immunity for the month. Finally, I'm working on a way to make the cost of immunity go down the more you buy it. Think of it as the bagel card; buy ten, get one free. It's possible that, in future versions, every fourth quota exemption you buy will last a week, and every tenth quota exemption you buy will last a month.

As you can tell, we're trying pretty hard to come up with ways to reward you guys for paying. We're not trying to separate you from your hard-earned money by deception, coercion, or trickery. We just want to keep the server online, possibly recoup some of the cash we've invested in this project over the last year, and maybe even make a modest profit on our hard work. But we want to do it the right way, and we want to do it honestly. We don't want your money unless we've earned it and you're willing to give it to us.

I know there has been a lot of money talk on this blog. You've all been amazing about accepting it on faith. For those of you interested or who doubt the financial claims we've been making, I'm going to release the financial records from the start of the project. All project-related expenditures and project-related income is reported here. I can't promise one of these reports frequently (they take some time to put together, and we'd rather be working on software than compiling financial reports), I'll make a public announcement next time I update it, and will do my best to make it some reasonable frequency, but I can't promise anything.

Thanks for all your support in the last year. If you have questions, comments, concerns, ideas, or cool ways we could reward loyal users, we'd love to hear them!