I've found them to be fairly terrible. They work great until you need to do more than use pip to install stuff (I'm using python). So things as simple as matplotlib get hairy. You have to use a custom buildpack someone contributed (which is based on an old version).
Now say I want to use python with R. It is a huge pain. You have to use heroku-buildpack-multi [1].
The problem is that environment variables and installed code from the first buildpack are invisible to the second. So you end up having to hack individual buildpacks, which is just gross. It worked in the end, but I wasted days on it.
A concept like docker, where you fire up a container, install stuff with apt-get, and then save the results is greatly superior.
I found a combination of buildpacks + docker really useful.
We use the the slugbuilder from the flynn project[1] which gives us a finished version of the app in a .tgz which will than be extracted into a docker container that already has all the other necessary stuff setup (logging architecture etc.) which is needed in different parts of the application (webserver, background workers...)
Now say I want to use python with R. It is a huge pain. You have to use heroku-buildpack-multi [1]. The problem is that environment variables and installed code from the first buildpack are invisible to the second. So you end up having to hack individual buildpacks, which is just gross. It worked in the end, but I wasted days on it.
A concept like docker, where you fire up a container, install stuff with apt-get, and then save the results is greatly superior.
[1] https://github.com/ddollar/heroku-buildpack-multi