#####Tests
- Is the code tested?
- Are the tests showing the intention how to use the code?
- Is the expected behavior clear?
- Are there gaps that also need testing?
######Functions and Methods
- Is the name reflecting the behavior / expected result?
- Are parameters validated, if any?
- Do parameters make sense? Or is there a way to get rid of them?
- Does the return value make sense?
- Is global state changed? Are pure/safe/trusted functions declared as such?
- Can the function / method take the parameter by reference? Is the parameter mutated?
- Null References (Yah yah, we know. Use F# and this goes away. We get it already.) Null references are a bitch and it’s worth looking out for them specifically.
- Conventions Consistency Make sure naming, formatting, etc. follow our conventions and are consistent. I like a codebase that’s fairly consistent so you know what to expect.
- Disposables Make sure disposable things are disposed. Look for usages of resources that should be disposed but are not.
- Security: There is a whole threat and mitigation review process that falls under this bucket.