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: 
Bower maintains a single version of modules, it only tries to help you select the correct/best one for you.

> 
> [Javascript dependency management : npm vs bower vs volo?](https://stackoverflow.com/questions/15092345/javascript-dependency-management-npm-vs-bower-vs-volo/22101165#22101165)
> 
> 
> 

NPM is better for node modules because there is a module system and you're working locally.
Bower is good for the browser because currently there is only the global scope, and you want to be very selective about the version you work with.
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).