Skip to Main Content
Official App
Free – Google Play
Get it
FreshBooks is Loved by American Small Business Owners
FreshBooks is Loved by Canadian Small Business Owners
FreshBooks is Loved by Small Business Owners in the UK
Dev Blog

Eating our own dog food

by Diana Clarke on November 11/2009

About a year ago, we started to really focus on what the future of development at FreshBooks would look like.

Aside from the obvious concerns about code quality and maintainability, we had an additional requirement to keep in mind: integrations! We integrate with tons and tons of other applications, so while FreshBooks the web application is still our flagship, we needed to stop developing from its point of view, and embrace that fact that our web application is just one of many FreshBooks data consumers. We needed to start eating our own dog food.

The mantra is simple — anything we develop for FreshBooks the web application should also be, by definition, available for third parties to consume. To accomplish this, we are in the process of decoupling our web application from the database/business logic, and instead consuming a new FreshBooks API called Evolve. Since our own application is driving the requirements, the resulting API is more complete and performant than previous passes. I look forward to the day when I can announce Evolve’s public debut, but for now it’s strictly internal.

Stay tuned for more technical details and a series of posts on how we got here. In the mean time, I’ll close with a quick example of FreshBooks eating its own dog food to render a capacity meter by calling out to Evolve for the data it needs. The new API is a RESTful one that supports serialization in both XML and JSON. It’s written in Python and uses Pylons and SQLAlchemy — there’s a bunch we could discuss there.

The capacity meter on the documents tab.

$ curl -u [auth] https://[evolve]/documents/capacities.json

  "response": {
    "result": {
      "capacity": {
        "available": 0.34,
        "size": 2.0,
        "unit": "MB",
        "used": 1.66

$ curl -u [auth] https://[evolve]/documents/capacities.xml


Evolve went into production a couple of weeks ago, quietly ripping the backend out of our web application, one data silo at a time. I’m proud. What do you think? Feedback? Questions?