Question: What is the fundamental difference between `bower` and `npm`? Just want something plain and simple. I've seen some of my colleagues use `bower` and `npm` interchangeably in their projects.

Answer: 
My team moved away from Bower and migrated to npm because:

* Programmatic usage was painful
* Bower's interface kept changing
* Some features, like the url shorthand, are entirely broken
* Using both Bower and npm in the same project is painful
* Keeping bower.json version field in sync with git tags is painful
* Source control != package management
* CommonJS support is not straightforward

For more details, see ["Why my team uses npm instead of bower"](https://medium.com/@nickheiner/why-my-team-uses-npm-instead-of-bower-eecfe1b9afcb).
For many people working with node.js, a major benefit of bower is for managing dependencies that are not javascript at all. If they are working with languages that compile to javascript, npm can be used to manage some of their dependencies. however, not all their dependencies are going to be node.js modules. Some of those that compile to javascript may have weird source language specific mangling that makes passing them around compiled to javascript an inelegant option when users are expecting source code.

Not everything in an npm package needs to be user-facing javascript, but for npm library packages, at least some of it should be.