- NodeJS
- Working with Promises and writing them correctly
- Async/Await
- Constructing objects: Class vs Constructors vs Factory Functions
- Dependency Injection
- Common Low-Level Programming Patterns
- Higher Order Functions
- Builders/Factories
- Destructuring
- Maybe/Optional (Avoid dealing with nulls)
- Either (Avoid catching errors everywhere)
- Immutable Data
- Useful Higher Level Patterns
- Service Orchestration
- Sync vs Async Transactions
- Sagas
- Idempotency
- Non-concurrent resource access
- Event Sourcing/Domain History
- Transactional Outbox
- Introducing static typing on your NodeJS projects (TypeScript)
- NodeJS Debugging
- Detecting Memory Leaks
- Profiling your NodeJS code
- Logging Practices
- Useful NodeJS libraries
- Refer to tech-notes.md
- Google Cloud Platform
- Kubernetes (basic commands)
- Writing Helm scripts
- Stackdriver Logging
- Dashboards
- Grafana + Prometheus
- Creating Alerts
- APIs
- Contracts (JSON Schema/Open API)
- How to write proper contracts
- Gotchas of anyOf/oneOf
- Web Server (Fastify )
- API Evolution Strategies
- Contracts (JSON Schema/Open API)
- Database
- Postgres
- Schema Migrations
- Data Migrations
- Diagnosing slow queries
- Diagnosing current activity
- What isolation level is right for your transaction?
- Postgres