Всё относительно, в рамках задачи, это инструменты, Вы вольны их использовать по своему удобству.
Я, например, очень часто использую yeoman-генераторы для старта проекта и, если они основаны на gulp, то, скорее всего, там используется bower, в таких случаях на одном npm не выедешь, потому что там четко разделены конфигурации и код, bower_components находятся уже в сурсах, конечно, через .bowerrc директорию можно разместить где угодно, но придется переписывать, в случае с yeoman-генератором каким-то, и gulpfile. Сами bower рекомендуют использовать только npm и для dev-зависимостей, и для зависимостей-библиотек. NPM - очень крутая штука, но одного в ней мне не хватает, что есть у bower-а, - это wiredep. Мне не нравится руками прописывать зависимости, а wiredep делает это автоматически. Поэтому я, для себя, выбрал, что мне удобно, когда за всё, что относится к сборке, отвечает npm, а всё, что относится к библиотекам - bower. Сейчас, например, я веду проект, где всё работает через npm и мне очень не удобно так работать, но за внедрением bower-а тянутся и другие изменения, поэтому приходиться жить только с npm-ом.
Кстати, если кто узнал про какую-то автоматизацию для записи зависимостей через npm, поделитесь знаниями, пожалуйста.
И я думаю, что npm, в скором времени, как и bower, напишет, что они рекомендуют работать только с yarn, посмотрим, как будет.