Some tools I often use when working on ML or software projects outside of work (excluding LLMs / AI coding assistants).
I am mostly optimizing for reliability, ease of use, and availability of features I care about. It’s possible that given the kinds of things you build you have different needs.
vast.ai
Vast makes it very easy to rent GPUs to run stuff by the hour. You can get a 80GB A100 GPU for $1-1.5/hr. My workflow is something like:
Rent a vast GPU (or multiple)
SSH in via the VSCode remote-ssh extension
Add my GitHub SSH key to the vast machine
Git clone the repo I’m working on from GitHub
Do some work
Push the work to GitHub
Optionally sync model weights with Dropbox via the vast/Dropbox integration (many people use HuggingFace Hub for this I think?)
Kill the vast instance
Netlify
Free hosting for static sites. I host all my frontends on Netlify and it works very well with Next.js. Some features I like:
The paid version makes it easy to add collaborators who can push to particular sites
You get free form submission handling via Netlify forms, without a backend
It’s very easy to buy, manage, and link domains
Code auto-deploys from GitHub
Auto-deployed GitHub branch previews for PRs
DigitalOcean
Use for renting servers to run web services etc. starting from $4/month. There are probably cheaper-per-compute options, but I really like the simplicity of the DO UI (maybe I am traumatized by the AWS dashboard). DigitalOcean App Platform can replace more expensive PAAS like Heroku.
Next.js + React
My frontend framework of choice. People are very opinionated about this stuff and some may suggest Svelte. However, I like Next.js+React as a reliable option because:
Claude is very good at React
I wrote a bunch of React code pre-LLMs so I’m pretty good at debugging it compared to the average non-frontend engineer
Tailwind CSS
Tailwind is a CSS library that provides a bunch of utility classes and some useful defaults. Although the React code ends up looking pretty ugly with so many CSS utility classes everywhere, overall I still like using Tailwind—it makes it easier/faster to make UIs look exactly how I want and avoids my having to go back and forth between React and CSS. And this is coming from someone who ~knows CSS. If you’re purely relying on an LLM for CSS, I’d guess that using Tailwind will give you a better result and be easier to debug. Tailwind’s color palette is also really nice.
Django
Django is my choice of backend framework for anything that isn’t super simple. If it’s a super-simple API or web service, you can just use Flask of course. However, if you want something like a backend with an admin dashboard, user accounts/permissions/security, relational database with nontrivial object relationships, a JSON API (see DRF), etc., Django is a great all-in-one solution (although not recommended for ORM haters). Here are some things I like about Django:
The admin dashboard features are really, really good—it’s very easy to build and customize a dashboard to manage your data
LLMs are good at writing Django code
OK, kill me: I like a good ORM for anything that has some complexity in the object relationships
It’s a very established framework with a large community so there are well-maintained plugins and packages for anything
Python
Figma
Whether it’s for SVG editing, logo/graphic creation, website design, or making memes, I’m pretty sure Figma beats all other 2D design software out there. It’s also free and very easy to use.
Desmos
I used to think everyone knew about Desmos but I recently met some (technical) people who had never used it, so I thought to include it. A useful function plotting tool, comes in handy for some problems.
A general note on framework choice
If you’re building a new piece of software today, it’s very likely that you’ll be getting an LLM to write a lot or even most of the code. However, you may find that mindlessly copying LLM-written code for a complex project leads you down a dark path of annoying design choices and over-complication. This is caused by two factors
LLMs are not yet smart enough to make great, well-reasoned software design decisions and instead are too heavily influenced by the prior of what kind of code is commonly found on the internet (this can partially be remedied via prompting and is improving rapidly).
LLM users are executing greedy search. You have a rough idea that you want to build X, you instruct an LLM to write some code for X, you run the code and realize you need new features or changes Y. So then you follow up with “now make change Y”. Now the model is thinking about how to implement Y as a change to the code for X, and not how to implement X+Y together, optimally. This compounds as you continue adding on new requirements/iterating on a larger codebase.
In my experience, early choices and instructions given to LLMs that are writing software for you can make a big difference here. Certain framework choices will result in more reliable outputs and easier iteration loops. The main questions here are likely
What frameworks are more popular (and so show up more in the training data)?
What frameworks have higher-quality documentation and examples (which will also be in the training data)?
What frameworks encourage a default structure that is particular amenable to LLM prompting (e.g. shorter files with specific uses that the LLM will be aware of)?