Good stuff - too many people focus on the wizz-bang of new tech they forget how effective a well-designed monolith can be across a lot of very important dimensions.<p>I've been doing LEPP stack (Linux / Nginx, Python, Postgres) stuff for awhile now without an ORM; which makes you really consider how you're handling transactions ahead of time. So requests have become idempotent and transactional - the default of many frameworks to run in auto-commit really defeats the purpose of having a good transactional database imo - ymmv.<p>Also re concurrency, I've been using gevent for a long time - it's a nice framework and lets you write blocking code while being async behind the scenes. And it's nice for writing little backend http or tcp services. But, I think for what I do I could mostly just use OS threads - thread per request in gunicorn - and that'd work just fine. Request context is stored in thread-locals anyway, so there isn't really shared state across requests to worry about the GIL much. And I'd run a process per vcore anyway behind gunicorn.