---
# System prepended metadata

title: Backend Technology

---

# 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)