To add to @casperandersen 's great reply, a lot of times choosing a package for any framework (Rails, Django, Meteor), there are tradeoffs with technical debt vs an upfront speed increase.
Often the package has more features than your requirements. This means the surface area is much larger than it needs to be which can lead to complexity and additional bugs.
Most of the time I end up writing from scratch unless the package really helps me. For instance using check
can be sufficient in some cases where SimpleSchema brings on more debt. However, in larger apps SimpleSchema saves time and reduces bugs by providing a battle tested solution.
TabularTables is another example. This has lots of Meteor specific functionality that is hard to write from scratch. The tradeoff is much better than other packages that do something that an NPM package would also do but has more life.
Traditionally most have shyed away from using NPM which is a shame. There are lots of libraries to solve your problem that have more users, more contributions, etc…
An example would be push notifications. Sure you could do a one liner and have push on the client and push servers but that’s a huge maintenance cost and harder to debug. Using an NPM package for APNS or GCM is a much better bet.
In fact good engineering calls for decoupling things that change and taking a standard library off of NPM and writing an adapter to make it reactive/Meteorized is an overall win.
The good news is we’re getting first class NPM support soon which makes it trivial to import great libraries! Having React as a view layer brings up a huge ecosystem of view components that can now easily be imported (React Parts).