## Programming languages
- Scala is a good language. Kotlin is a good language. Java is a meh language, but the JVM is a very good platform.
- I don't get Java getters and setters overuse.
- Rust is good as a language and easy to write. If you build a new project, just clone everything until you'll have a user-base and need performance.
- TypeScript is a good language.
- Node.js performance is fine for building most backends, but the ecosystem isn't good. But for something smallish is completely fine.
- Dynamic typing is introduces more problems than advantages, except for rare use-cases.
## Architecture
- Field injection make everything more confusing.
- Convention over configuration makes everything more confusing.
- Don't introduce tens of microservices in small teams.
- Monorepos are good thing on any project size.
- Bazel is hard and doesn't worth most projects. If you want Bazel, you need at least one developer who knows it very well and help others.
- Nix is very helpful if you have more than a single language stack, or need any binary build or dev tools in your project. It's easy to setup for such use-case.
## CI
- Don't write bash code in your CI workflow file. Put it into separate script files. This way it can be executable on local developer machine, which makes it easier to debug. Also don't rely on env variables provided by CI where possible.
## AI
- Don't underestimate modern AI tools. Claude helped me a lot with unfamiliar tech stack.
- Don't overestimate modern AI tools.
## API
- gRPC with ConnectRPC is much better than Swagger/OpenAPI.
- GraphQL is ok for some use-cases, but in general it an overcomplication.
## Developer Workspace
- Developer machine should have good CPU and a lot of RAM. Linux is fine if you don't program for MacOS/iOS. You can buy a Linux laptop for $1500-$2000 with same power of $4000-$5000 MacBook Pro. If can afford to spend such amount of money on MacBook Pro, do it for sure.
- Ubuntu is the best Linux distro for most. It just works out of the box.
- Emacs and Vim aren't suitable for most modern development. Vim mode in you modern text editor/IDE is fine.
## Testing
- If you use mocks in tests, you do something wrong.
## Teams
- PR reviews shouldn't be too detailed. It's better to move fast, then play review ping-pong. Refactor later if needed.