order to • Capture invariants of the code • Ensure its correctness • Definitely exclude certain classes of programming errors. • Stricter typing rules at compile time • Errors and exceptions are more likely to happen during compilation. • Rules affect variable assignment, return values and function calling.