# Backend Technology
## Factors
- Maintainability
- How complex is the code?
- What about edge cases? Easy or hard to catch?
- How much benchmarking and profiling is required?
- Programmers
- What happens if the main programmer leaves?
- Who has experience with the language?
- How easy/expensive is it to hire someone?
- Ecosystem
- How much do we have to build ourselves?
- Do there already exist frameworks?
- Performance
- Is it fast when having many customers? (< 1.000.000)
- Is it single threaded?
- Does it have a garbage collector?
- Compiled to native language?
- How is the tooling?
- IDE
- Linter
- Package manager
- Debugging
- Testing
- Documentation
- Can documentation be generated? Useful when working with clients.
- Testing
- How easy/hard is it to test source code?
- Database
- Network
- General
---
# Analysis of the languages
## Rust
### Advantages
- Fast & memory safe
- No garbage collector
- Meta-programming (macros)
- Documentation / Support
- We can ask for help on the community discord.
- Crates / Bindings for almost everything
### Disadvantages
- Ownership / Borrow Checker -> Increased development time
- Slower compile times
### Example
- Web Server:
- We can either use [Rocket](https://rocket.rs/) or [Actix](https://actix.rs/) for the web server.
- Serialization:
- Really easy with [serde](https://crates.io/crates/serde) and [bincode](https://github.com/servo/bincode).
- [Crypto libraries](https://github.com/RustCrypto) for pretty much everything
- [ORM](https://github.com/diesel-rs/diesel) that supports Postgres
---
## Go
### Advantages
- Fast
- Large ecosystem
### Disadvantages
- Garbage collector (probably not a problem until we get **really** big)
### Example
---
## C#
### Advantages
- OpenAPI/Swagger
- Entity Framework
- Code First or Database First?
### Disadvantages
- Virtualized
### Example
---
## Node.js
### Advantages
- Ecosystem massive
- OpenAPI/Swagger, TypeORM, bindings for every db
- Boilerplate best practice frameworks like NestJS
- Can run native code through node-gyp bindings
### Disadvantages
- Need to handle memory well (GC)
- Need typescript to be safe
- Threading (solution is just cluster processes and load balance)
- Can be complex tooling depending on transpilation etc
### Example
[Using Redis as pub/sub transport in NestJS](https://docs.nestjs.com/microservices/redis)