I wanted to code up a single-form application for updating/editing the PyGTA events. Since it runs on Vex and I didn't want to bother them with setting up per-user WSGIs or TurboGears for me (they do give me the space free, after all), I went with bald CGI.

Wow.

I've written very large CGI-only systems (VoIP provisioning system comes to mind immediately), but they were, effectively, using my own home-grown web framework with error handling, form abstractions, widgets, templates, etceteras. By the time I *finished* them the API looked a lot like any other web framework, declarative models, views and controllers that view/manipulate them.

I work almost every day on TurboGears 2.0 applications for clients. I've given up my own Object-Relational wrapper for SQLAlchemy. I've embraced Genshi (even for the CGI I used Genshi). And TurboGears has just baked itself into my thinking so much that I sometimes overlook just how much the framework is doing for me.

Even simple things such as authentication... you don't really think about it when you're inside a web framework stack, but it takes knowledge that seems to "slip away" with disuse. You can spend an hour debugging ht password permissions problems if you've been away from raw CGIs for a while.

Long story short. Without a stack web-programming is a series of annoying, pointless, low-level pieces of trivia which must all be held aloft in the proper pattern at precisely the right time to catch the light of a query and return the glory of a page. No single thing is hard, but the sum total is an annoyance that far outweighs the expected benefits of simplicity and portability.