If you give each update a few weeks/month and pay attention to the comments on each release blog you'll save yourself quite a bit of headaches.
Before doing that I had two situations where the major release broke something. Never looked back.
For 5 users we use 18G/4vCPU. For 20 users we use 32G/8vCPU
I keep asking to lower the footprint but the gitlab is the very definition of feature creep. And that comes at the cost of optimisation.
Ruby is like a back-of-the-napking sketch, almost: it takes nothing to get started, you can just jump in and start writing. Other languages are closer to gradations of a proper engineering diagram, the sort of thing you draw up once you've fleshed out your idea a little and want to scale.
As much as I hate bothering with a proper diagram, it's very hard to scale based on napkin sketches.