At this point only you know why it didn't work out. We don't yet know what approach you took and
what potential mistakes were made. So only you can answer what to do and not to do when starting over.
To help you get started, why are you declaring dotfile bankruptcy?
Best I can imagine now is using GitHub as a primary and other hosted services as a mirror. Mirroring the git repos will only get you so far though, you won't have the services built around them (e.g. issues, merge requests, comments, actions) or you may not be mirroring all git repos that you need access to. But a reduced service may be sufficient for short periods during an outage.
How so? We've been self-hosting Gitlab for 2.5 years now (maybe more?). Besides a regular update (through apt) we haven't had any trouble. Team of 5 developers w/ a dozen or so repos and basic CI/CD builds. I highly recommend it.
We didn't have a better SLA than hosted GitHub when self-hosting GitLab, and then there's the extra cost of maintaining the instance, the CI runners, the DB, the networking, configuration and so on. Wasn't worth it for us after using self-hosted for 2+ years with a tech team ranging between 10-25. On top of that, most of the team thinks GitHub has a better UX and enjoy using it more.
I don't care that much between dynamic and strict types but I like strict typing.
So yeah typesecs and guard clauses cover a lot of that (and the ever fun dialyxir) but it's more cumbersome than just typing your function parameters and variables.
And funnily enough in the end what I miss the most is the type hinting when I write function calls. I use Intellij and the elixir plugin doesn't support that AFAIK, it's a real productivity killer.
After using Elixir for almost a year professionally, I find structs/schemas to be fairly useless when it comes to type safety. These are essentially just maps, there is absolutely no guarantees, anywhere in your code, that your map was created properly, and went through the proper set of validations.
When I get a `Point` struct, I have no guarantee that the wrapped lat/long are actually valid. After 15 years of static typing this is just so stressful :)
We have a lot of python code, along with C++ and Java, and it is an absolute nightmare dealing with python. If we include conda-forge as a channel, dependency resolves can take hours with the right/wrong combination of packages. We can't easily replicate environment across machines, and build times for our conda packages can take tens of minutes, just to copy a few py files around. We hate it, but our ecosystem is built on it (data science/ML/etc), so it is what we have to deal with. I always look at these threads with hope, but then envision the nightmare that would be involved in moving to poetry or some other system.
Compared to other languages and ecosystems, it really is lagging behind. Depedendency and version management were afterthoughts in Python. I dread having to maintain our Python projects.
This may be UK specific, but as Vice chair of the New Digital division of Prospect the quick version is:
Recongnition is where a union has a formal agreement to negotiate collectively either by mutual agreement or via the legal process (similar to the us system)
However unions will still represent members individually I have done so in the past.
The union that has the majority of technology workers who are union members is Prospect - this is tech in the widest sense.