Sorry, this wiki is closed to anonymous edits.
A competent framework should be opinionated yet flexible. It should be readable and understandable. It should have one great philosophy. It should only ever solve 80% of your problems, but it should solve them well. It should provide many tools for the initial development stage but should not fade away as projects grow. Here are some observations I've made, mostly from experience with the python frameworks Django, Flask, CherryPy: * Django is heavily ORM oriented. You get a hell of a lot if you play by its rules; async workers, auth, middleware, schema migrations, caching frameworks, easy deployment, admin panel, debug toolbar, asset management. Ditch the ORM and you lose most of it. * Flask has none of that, and concentrates on simplifying the web part of your web app. Its much more confused ideas about application organization hurt it. You get middleware for free (including the great debugger) via wsgi. * CherryPy tries to be too clever and ends up having very rigid ideas about code layout which become hard to break free from. You have to do quite a lot yourself. Flask makes you think about HTTP more. It's very easy to start up a Django project. It has scripts which automate project and application layout, sync the data model, etc. Revel has this as well. A Go framework should auto-build & run as well (which Revel also does).