- Use Crystal's built-in `spec` framework — place spec files in `spec/` mirroring `src/` structure and run with `crystal spec`.
- Use `describe` and `context` blocks for organization and `it` blocks for individual examples — write descriptions as full sentences starting with the method name.
- Use `should eq`, `should be_true`, and `should raise_error(MyException)` matchers — prefer `expect { }.to raise_error` for exception assertions.
- Use `before_each` and `after_each` hooks inside `describe` blocks for setup and teardown — avoid shared mutable state between examples.