Embrace Linters

You know that person on your team who does a great job of making sure everybody's code confirms to conventions (you have conventions, right?) or catches the gotchas in your code that always seem to pop up? That person needs to be replaced by a robot.

Linters are tools that you can run as part of your development and build process that analyze your code to catch stylistic or programmatic issues. Some popular linters are gofmt (for Go) or Rubocop (for Ruby).

Stylistic linters are valuable because they take the human element out of maintaining conventions. It can be easy to tell a code reviewer that the capitalization or indentation choice you made is fine and you don't want to go through another review cycle just do fix it. You'll clean it up next time, you swear. With a linter, you can catch this during development just by running a script before pushing code. You can also have your build block on linting issues. Then it's CIs fault, not your teammates!

Using static analysis (looking at code without executing it) is also a great way to maintain the health of your codebase. You can check for patterns like unhandled errors. You can put a cap on the number of soon-to-be-deprecated methods in the codebase. This can be a big help with large refactors or dependency updates.

Linters are great for offloading a lot of the things that we know we should do, but aren't always top of mind as we're writing code.