In my experience a lot of the jobs I get are to build backends that are mostly CRUD operations with a few endpoints that present 'aggregated' or filtered views of that data. Most of these apps will also need some mechanism to do background processing.
What is your preferred stack to build such a backend today? What tools and frameworks do you like and what have you changed your mind on and don't like anymore (after using it)?
Does your choice of tools change depending on if it is a commercial venture or a personal project?
Curious to hear what everyone is using these days.
Fullstack including frontend, jobs, emails, I'd still pick the PHP+Laravel, with Livewire. It's incredibly powerful.
- Stack:
- Application:
- Flask[0]
- Flask-Admin[1] (maybe for the initial prototype)
- SQLAlchemy --> PostgreSQL
- Gunicorn --> Nginx
- Celery[2] (long-running background jobs)
- Monitoring:
- Sentry[3]
- Analytics:
- PostHog[4]
- Packaging:
- Docker[5] & docker-compose
I may use Flask-Admin initially to offload the "CRUD" operations to have an initial prototype fast but then drop it ASAP because I don't want to write a "flask-admin application" to fight against later on. If the application is mainly "CRUD", then Flask-Admin is suitable.Now...
Would you do a breakdown/list of all the jobs you've done by sector/vertical and by function/role and by application functionality?
- [0]: https://flask.palletsprojects.com
- [1]: https://flask-admin.readthedocs.io/en/latest
- [2]: https://flask.palletsprojects.com/en/2.3.x/patterns/celery
- [3]: https://sentry.io
- [4]: https://posthog.com
- [5]: https://www.docker.com
Django + Unpoly + Postgres
Development as fast as it can be. :D
Alternatively, Flask/Jinja/Vuejs if I'm working in Python.
Also it has ApiPlatform where you can just add new CRUD api using few annotations/attributes
If a web frontend is needed, I'll take svelte (not svelte kit) to code independente components that talk to the backend. I'll code there only interface logic (no control, no calculation, etc...)
- Stack:
- Application FE:
- Next JS (Hosted via Vercel)
- Hasura GraphQL for real-time messaging.
- Supabase for Auth and hosted Database.
- Application BE:
- PostgreSQL via asyncpg (no ORM)
- Uvicorn - hosted on AWS Lightsail.
- Redis - as a message queue.
- Hasura GraphqlQL for real-time messaging.
- Monitoring:
- Axiom https://axiom.co/vercel as it integrates with Vercel.
- Packaging:
- Docker & docker-compose
Same for personal projects.
Sentry is great for monitoring. Prometheus/Grafana for operational insights. All are easy to integrate with Elixir.
React or svelte for UI. Don’t use next or any of that bloat. Use vite and lazy loading. If you need SSR don’t use SPA tech, maybe sveltekit would be good. I use sveltekit and react mostly.
For anything else like using sdk I use node if it’s not available for Go.
For CRUD is the perfect fit (for me).
For background processing job I would pick Sidekiq or GoodJob
And would add to it a library like Avo - a good admin that will remove for me the need to create my own backoffice dashboard.
If I would have more time to put aside for learning something new I would try Hanami 2: it is Ruby but it comes with a different code architecture for a web app.
- I know Python very well.
- I know Django quite well.
- Django is extremely mature.
- The Django REST Framework is quite mature.
Other stacks I've used: None, because I only started taking this kind of stuff seriously a year ago.
What else I'd recommend: Whatever you're most familiar with.
When I was around 14 or something I started teaching myself relational databases with something called Paradox for DOS. For at least 15 years I went along with the assumption that real programmers use a relational database for just about everything.
When the NoSQL trend appeared and became wildly popular, it made me reconsider.
These days, if I can get away with using JSON files, then I just do that.
As far as the stack I usually use Node.js and JavaScript just because I have been doing it that way for so long. Recently some people specifically ask for Python.
Obviously, whether that will work depends on the project.
You often don't have a choice because the database is already built.
For many projects, there are multiple different approaches that would work fine.
I think for the future you will start to see languages that target web assembly becoming more and more popular for portability. Such as Rust and maybe some Rust competitor that has yet to become popular.
There will probably be some kind of popular web assembly runtime soon bundled with Postgres or something.
Or maybe someone will just build a Postgres extension that serves web pages running web assembly that can query Postgres.
https://loopback.io/doc/en/lb4/
https://github.com/ferdikoomen/openapi-typescript-codegen/tr...