Go Read: One Year with Money and App Engine
mattjibson.com
mattjibson.com
"30-day trial: This action cost me about 90% of my users. Many were angry and cursed at me on twitter. I agree that it is sad I did not say I was going to charge from the beginning, but I didn't know that I would be paying hundreds of dollars per month either."
Honestly I think the sense of entitlement nowadays is way too high, people use a product that is free and needed weeks or months of your own free time, and then complain about it when you change it.If you decide to charge for it, you're a greedy bastard, instead if it's free, they say "if you aren't paying, you are the product". Other complain that the product doesn't work, when instead it's a case of PEBCAK. When it's not, it means you're going to say goodbye to a couple of night's sleep or a weekend or too, or maybe it's ONE feature away from being perfect (again).
...sometimes I hate people :(
That is not to say, in any way, that you shouldn't charge - but don't expect users of a free application to change to a pay to use model en masse. Unless, of course, you don't have any competitors who do a similar thing for free...
How is he going to recoup anything for his time if you use his product in a way he can't charge for?
It's also ok to try to get some money out of your time, if it's desired.
Not ok: use someone else's time to gain personal profit, expect someone else to pay for your actions, etc
I was an early user, and one day I went to read my feeds, only to be greeted with very curt "trial expired" screen.
That was the first indication of any form I'd had the service was going pay-to-play.
I wasn't upset, but I could see how someone would be -- it was just a very abrupt, almost rude, way to communicate the change.
(Caveat: All from memory. Memory is unreliable, so take w/ salt.)
I'm a user and have been negatively impacted by the feed fetching optimizations - daily feeds are often a few days behind and come in bunches. Two examples:
- Penny Arcade updates its comics Monday, Wednesday, and Friday, always at 7:01AM UTC, and then news other times during the week. It's Wednesday at 4:25PM UTC - 9 hours after - and goread hasn't picked it up.
- Dinosaur Comics is updated weekdays. I'll eventually get all of them, but usually two or three at a time. For example, yesterday I marked all my feeds as read; today, I have entries from Monday and Tuesday, but not from Wednesday.
I had hoped that the move to the everyone-pays model would give you the resources (either developer or quota) to fix these issues, but they've gotten no better or maybe worse.
I haven't looked at what you're doing, but I believe Google Reader used pubsubhubbub where available to reduce/eliminate polling for many popular feeds.
I honestly didn't have a great experience with my last bug report, so I haven't tried again.
Perhaps with a similar trick you can run your scraper more frequently on some feeds, still keeping the cost under control.
I've experienced this myself, and I'm hearing it more and more from others. Maybe this is a market need that is going unfulfilled.
I don't think it'd be feasible to run an advertising company that was less strict on adult/copyrighted content. People that buy advertising are really risk-averse on that subject, they don't want to see a meme on twitter or whatever of their brand next to porn.
1) The content that got my site kicked off adsense was text only, and it was a girl writing about going skinny dipping. It was tamer than much of cable TV, but I'm guessing some word frequency algorithm thought it was more than that. We aren't talking ads showing up next to porn. The great frustration is that if you aren't a big player, google doesn't give a shit and maybe they will turn your ads back on, maybe they won't. I'm guessing there are a lot of people out there that would jump on any ad network that didn't make you fear this all of the time.
2) My assumption, and I could be wrong about this, is that there are a lot of companies willing to advertise that aren't as paranoid. They may be able to pay less per click for the same quality of traffic, due to less competition for opening up to content that is less than PG
I guess a self-serve business would be possible, but since your costs are the same for non-sketchy (for whatever silly definition of sketchy) content, you basically become a remarketer for the content that everyone else doesn't want to advertise on. You can sell it, sure, but it's a hard pitch.
I'm wondering, for the icons or other cacheable content, have you thought of using cloudflare or similar? What are your costs going to be this month, after getting onto the HN front page again?
After giving it a try, I noticed that this text is quite out of date now:
We've just released! Read the blog post about it.[0]: https://news.ycombinator.com/item?id=7402393 [1]: https://news.ycombinator.com/item?id=7408089
Having the same exact article submitted 3 different times and getting 2 votes, 4 votes, and then #1 front page. That's interesting.
That might be a good way to increase revenue.
It should be part of the pitch, can even be after the screenshot on the front page. E.g.,
"Sign in a give it a try for the next 30 days. If you like what we've built, the subscription is only $3/Mo or $30/Year (we'll give you 2 mo free for making that commitment)". Or something like that.
It would have bugged me if I hadn't read that there was a subscription and came upon the Account page while perusing.
Without knowing what your server load looks like, I would imagine you could save a couple hundred dollars a month in hosting, which would go right to your bottom line profit. A couple hundred dollars a month isn't huge, but at this point in your business that's say $2,400 a year. From the looks of it, that's at least 2-3 months worth of revenue or almost 5 months worth of profit.
I think it's at least worth considering with where your project is at right now.
* Once you write your app the App Engine way, it scales automatically. You don't need to re-write periodically to accommodate growth, add replication, shard your data, ...etc.
* Data is replicated to several servers and data centers. You don't worry about losing data due to a hard drive crash.
* If an instance crashes, or a whole datacenter dies, your app keeps running.
Basically, measure how much time you send on non-code activities. App Engines saves you 90% of that.
You could argue that it's good to spend this extra time because it makes your site more scalable. But if you ever reach the scale "the App Engine way" becomes relevant at, you are likely paying an order of magnitude more than you would if you bought dedicated servers. For all smaller cases, you are prematurely optimizing for scalability.
App Engine's reliability is easily overstated. App Engine has had a long history of issues with their services like datastore. When datastore does not function, there isn't any reasonable way to build a backup storage system because the platform is so restrictive. Frankly, backup services are cheap, and there are plenty of hosted database services if that's all you need. Ones which don't lock you in forever.
So, yeah, sites built on App Engine do go down for various reasons and still have to be monitored just like anything else. Except that you can't use any of the usual tools because the platform is completely unique and the underlying software is proprietary and completely secret to you as a platform user.
App Engine apps realistically only run on Google's servers. So even in the best case, you must have a lot of pure faith in Google. Because if you have reliability problems, problems with the platform's restrictions, problems with the terrible support or if the price skyrockets again, or if the platform gets wound down... you will be absolutely forced to rewrite your whole project to move it off of App Engine. You really won't have any idea that this is going to happen until man-years have already been invested.
You pay a bit more developer effort up front (weeks, not years, for these projects) so you can walk away, but that's when I'm actually interested in working on the code. Migration is a non-issue since I don't plan to migrate. If I have to do any real work at all, I'll probably shut the site down anyway.
What does Google's datastore do that makes it worth sticking to and paying more for.
Yes, so what? Its still something you need to cost out for an alternative.
> You could switch over to Google Cloud (AWS but from Google)
App Engine is part of Google Cloud (the AWS-equivalent umbrella of offerings). You probably mean "Google Compute Engine" instead of "Google Cloud" and "EC2" instead of "AWS".
> and still use Data Store
You could (Google Cloud Datastore seems to be very much the App Engine datastore outside of App Engine) but its then a separate cost you have to include in the comparison.
> or you could switch to any PaaS and use something like mongohq
You could, but its then a separate cost you have to include in the comparison.
RDS is mysql or postgres. DynamoDB is your nosql solution.
ElasticBeanstalk + DynamoDB is what you use in AWS to get the same "App Engine" type service.
This is especially interesting to me. My side project http://www.longboxed.com was recently launched to a modicum of regular users (~300). My app runs on Heroku on the free tier with the 'Hobby Basic' level of the Heroku Postgres database. All told it costs me ~9 dollars a month. No big deal.
However, if I ever stepped the site up to another tier I'd be looking at ~50 bucks for the database and ~36 bucks for another process instance. These expenses can add up fast for a site that doesn't currently generate any money.
Anyway - it is nice to see examples of introducing a pay model into your app after it has launched.
As for optimizing when to check for new feed items, I recently moved to the "moving average" strategy described here [1] for my personal feed reader [2]. Overall, more active feeds have really benefited from it while I still need to tweak the algorithm for less active feeds, I think.
Here's to another successful year for Go Read!
[1] http://www.rn.inf.tu-dresden.de/uploads/publikationen/feedpa...
I'm not convinced that being locked in to one cloud provider's services and APIs is healthy long term - it means you are locked in to that ecosystem and it's harder to consider alternatives, even if your needs are quite straightforward, so you can end up in a situation where you're paying hundreds of dollars a month for hosting when you don't need to be.
This tweet from former AppEngine dev Brett Slatkin caught my eye: https://twitter.com/haxor/status/411351463806263296
I still think Dynamo has a ways to catch up in terms ease of use to GAE, but it provides the performance, scalability, and replication like datastore.
It'd be an interesting test to try setting up a simple stack of psql/nginx/memcache and your go processes behind, and serving up the same data from it, to see what sort of performance you get, but I understand why you wouldn't bother if your app is somewhat tied in to the datastore already and works fine for you as is. Just out of interest, did you start on something else and move over to Google App Engine for performance, or start there?
Yes, I could set up a simple psql stack. But I would lose automatic multi data center replication and infinite scaling, so that's not a win. My database hit 500GB in a few months. I don't want to deal with scaling up psql instances when it doubles in size over the next year again. See my first post linked below about when newsblur hit the HN frontpage and was effectively down for 3 days due to load. It's because psql doesn't scale in that direction.
http://mattjibson.com/blog/2013/06/26/go-read-open-source-go...
It's always surprising to me when devs are surprised by outrage at the change/removal of a free product. There is a non-negligible cost for a user to research/choose/setup/learn a new tool. In this case, a feed reader has favorited articles, read/unread state of articles, etc. When you pull the rug out from users that have made that investment who now have to start over, they are going to be mad, regardless of what they paid.
I know plenty of people who use RSS that wouldn't be able to check if Python is in their PATH as per your instructions. Unless there's some friendlier instructions that I'm not seeing.
I am always surprised (and dismayed) and the grotesque sense of entitlement engendered in people that they expect everything to be free, all the time, forever.
Ruben Gamez of Bidsketch had a similar story about switching from freemium to paid only -
http://www.softwarebyrob.com/2010/08/18/why-free-plans-dont-...
Thank you for such a lovely product. Someday I would like to contribute to your project(s) more.
But, $600+ is a lot of money. You can get a good number of very decent servers for that kind of money.
If you are not afraid of managing your own data, I think hosting stuff on virtual servers is way more cost effective.
btw: Lots of typos in the article, be sure to spell check !
https://www.nearlyfreespeech.net/
The performance is good enough that I'm able to cram a java application powered by jetty + mysql + phpmyadmin in a single small "gear" (they give you 3 small gears free, 1gb of hard disk).
I've got an MSDN subscription, so I've got free credits to bring me to a higher tier and it's a no-brainer. You could also qualify for the BizSpark program which provides you with a free MSDN subscription.
You could charge users a fee per feed proportional to server cost (e.g., frequency of posts) and inversely proportional to the number of subscribers.
* Unpopular/infrequent feeds (like my friends' blogs) would be free
* Popular/infrequent and unpopular/frequent feeds would be cheap, maybe $1/year/user/feed
* Popular/frequent feeds would cost more, maybe $10/year/user/feed
This way you can peg your income to an exact multiple of your costs.
Definitely would not advise this model for a feed reader.
[1]news.ycombinator.com/rss
"A simple rule in computers is to make something run faster, have it do less work. I remember reading about how grep works quickly. Instead of splitting a file by lines and then searching for the string, it searches for the string, then finds the newlines on either side. Thus, if a file has no matches, it won't ever have to do the work for line splitting. Done the naive way, it would always split by line even if there was no match. Do less work."
Good observation, but I doubt if that's remotely even the reason why grep works quickly.
http://lists.freebsd.org/pipermail/freebsd-current/2010-Augu...
still, see also:
http://ridiculousfish.com/blog/posts/old-age-and-treachery.h...
> Moreover, GNU grep AVOIDS BREAKING THE INPUT INTO LINES. Looking for newlines would slow grep down by a factor of several times, because to find the newlines it would have to look at every byte!
(italics added, but uppercase original!) On my reading this sounds quite huge; I seem to understand the gist is that it's still a significant gain after Boyer-Moore. But, whatever.