Also depends on the codebase.

300 lines is nothing in some boilerplate-heavy codebases I've worked at.

After seeing the same patterns for the hundredth time, it's easy to detect deviations. Not to mention linters and typing helps a lot too.

Not a fan of those but oh well.