Battery usage is a tricky thing. For this project it was more important to show a functional proof of concept, than it was to optimize for either power or data efficiency. As such, it was publishing its coordinates every 10 seconds regardless of movement. In this state, it lasted roughly 2 days on a 2000mAh battery.
There are many ways to improve battery life, by making the code a little bit smarter. It usually isn't necessary to publish as often as I did, and fewer points would mean both power and data usage should go down. You could check the difference in location between GPS queries to dynamically adjust the sampling frequency based on distance traveled. Adding an accelerometer would allow it to stop sampling/sending until the device actually starts moving, and sleep otherwise.
Sleeping either the GPS and the cellular modem in between their respective publishes or queries would also help cut down on data and power usage quite a bit.
For some uses you want high granularity in location data, in others you only want to get notified after it changed its location by a certain amount. In some places you can hook up a solar panel, and in others you might be able to recharge every so often.
In the end, it really comes down to your application to decide the best way to go about optimization.
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.