I recently bumped into @slicknet, a developer for Box who maintains the ESLint project. Here's a quote from ESLint's About page:

The primary reason ESLint was created was to allow developers to create their own linting rules. ESLint is designed to have all rules completely pluggable. The default rules are written just like any plugin rules would be. They can all follow the same pattern, both for the rules themselves as well as tests. While ESLint will ship with some built-in rules to make it useful from the start, you'll be able to dynamically load rules at any point in time.

Here's a good example of when open, pluggable architectures are bad news, and why benevolent dictatorships might still be the best mode of governance.

Questions to ask before deciding on your own linting rules:

  1. How many people do you know really know their JavaScript?
  2. What percentage of devs at a non-Node shop might those folks represent?
  3. How diluted will their voices become when your company decides JS best practices in a committee?
  4. Will those rules that your company comes up with really be better than rules from Douglas Crockford?
  5. How long did it take for you to come up with those inferior rules?
  6. How much time will it take to discuss making changes to those rules in the future?

Answers:

  1. Three. Maybe three and a half.
  2. Ten percent. If you're lucky.
  3. Significantly.
  4. No.
  5. Hours on hours X number of developers in the meetings.
  6. Please, stop it already. You're killing me.

Technically speaking, of course open, pluggable architectures are superior. But in this case, culturally, it's a huge mistake.

Maybe Box's tech stack includes Node, where it's much harder to hide only so-so JavaScript skills, and maybe, in that environment, the openness of ESLint allows them to create something that's no worse than JSLint. But show me one place where JSLint's rules are demonstrably worse than your own (where they can't be turned off with directives) before you argue for ESLint or JSHint.

(That's not to say I don't think ESLint is cool, or that a pluggable interface isn't technically superior to what JSLint offers. But now take your time from questions 5. and 6., and add an obviously smart dude's time maintaining this project. If he's doing it on his own clock, well, more power to you. It's fun to [re]create these sorts of projects, and there's no way to understand a problem better than to live in a "meta-project" like this. My guess is that Mr. Zakas knows his stuff (if I really knew him, I'd have to change #2 to "4-4.5" Or I'd keep it the same, and take myself out). If he's doing it "at work", however, we might have a priorities problem.)

Labels: , ,