« Try my prototype of a note taking application | Main | Real or fake difficulty? »

Nov 10, 2010

Comments

Feed You can follow this conversation by subscribing to the comment feed for this post.

Hugo

Being a Python fanatic, my approach was "learn AppEngine!" - do it right, then you get what's effectively a rapid prototype that scales. :-P

That was back before the days when there was a Java version. (Uh, at least for the general public.) It was immediately after the AppEngine launch, which came as the answer to my question of where I'd host a web app written in Python. Recognise my bias ;) - but I do insist it is worth looking into.

Marcin

+1 to what Hugo said. While AppEngine in many ways feels like a toy rather than a powerful platform (despite Google advertising it as such), it'll force you to do a few things right.

Your data model will fit Google's BigTable and your server code will have to be stateless (app engine requests do not have server ) - which buys you scalability almost by default (you can still screw it up, but I assume you won't).

Jakub Petrykowski

Hah! I had what I asked for. :)

Marcin, you also suggest Python? If not, what else is available on AppEngine (except Java, which I won't use)?

As for Python, that would probably mean using Django, right? I'm not familiar with Python (as opposed to PHP which I am using now for my app), so I'm not sure if it's worth learning 3 things (language + Django + AppEngine) when I may only learn one (e.g. Zend for PHP) and have next release in two days :)

I see though that choosing AppEngine would answer more than one question from my list... you guys aren't making it easier by providing one more good alternative :)

Also I see how hard emotionally it is to think about Python/AppEngine as another option when I already invested some work (even if only a day's worth of coding) in PHP which I like because I know it well. Emotions everywhere.

Arek

I would strongly suggest choosing Ruby + Rails + Heroku or Python + Django + AppEngine (these two stacks have much in common actually) instead of PHP. Even it it requires some additional time for actually learning new technology, it will quickly reward you with true ability to rapid prototyping server side app. Similarily to Hugo I'm a little bit biased (being a Rails fanatic myself), but a week spent on at least trying some new stack won't cost you much now and will probably let you save a lot of time later.

Hugo

I've never used django. Thus far. Maybe I need some better idea of what the advantage could be of adding that to the stack. ;)

Marcin

PHP means that you'll likely store your data in MySQL or something like that. MySQL does't scale, ever. I'd never back any site that has even a slight potential to grow into something big with a relational database. Relation (foreign keys in particular) is what gives all perf bottlenecks and scalability problems.

Just waaay too many pitfalls to fall into - one stupid mistake and if you accidentally succeed and thousands of users hit your server, you'll be putting out fires for weeks and then rewriting big parts of your app for months before you get it back to stable. Remember twitter stability? Remember Nasza Klasa in early days? There you go, don't repeat their mistakes.

Now PHP itself - fine, if you make it work with proper storage. Industry standard for webapps is now http://cassandra.apache.org/ - clone of BigTable - and having worked at Google you probably know how outstandingly BT scales.

Python is easy, as easy as PHP if not easier. Just as well documented, but sooo much nicer language. With AppEngine you will have to use parts of Django -- particularly models for AppEngine storage, but none of their frontend code.

One more thing that AppEngine buys you for free authentication and session management. It's something you just don't want to do yourself. If you decide to go with PHP (or anything else outside of AppEngine) please rely on OpenID. Never manage passwords yourself.

ms

I certainly second that! Not sure if OpenID is the way to go, though. If you want everybody and their dog to use your app, having an OpenID seems too much of a hassle - you need to have an easy, on-the-spot registration and sign-on. Unfortunately that may mean you have to implement it youself.

Now, if you decide to go this direction: 1) use a framework-provided session management logic (it's too easy to screw this up) and whenever credentials are passed over the network (in whatever form: username+password/session id (!)/etc) enforce https; 2) if you decide to implement authentication and access management bits youself, make sure to speak to me first.

misia

Someone needs to be against and that would be me!

Guys... really, technology sitting underneath does not matter at all to small internet businesses, the user experience does! Get a prototype fast built in anything you like or know, and see it in action - this looks like a key factor to me ;). Nobody cares about technology supporting small websites besides techies, really.

Cassandra for storing notes of yourself and your colleagues? Sounds great as a university project or small technology research, but... getting idea to work is crucial!

(I am a happy user of Java GAE edition)

Jakub Petrykowski

My perspective on this is now as follows:
- it's hard for me to make informed decision on technology
- speed of development is key for me
- I have to rely on what more experienced techies tell me, but there is no "optimal choice" here because there are too many unknowns

So for this prototyping stage I am building it with:
- PHP (I know it well)
- Zend framework
- MongoDB

We'll see how it goes. Today was the first productive day i.e. I actually added some features / ported backend to MongoDB etc. So far so good.

The comments to this entry are closed.

Become a Fan

Follow me

Books I'm reading