It's likely not a surprise to you that Runscope loves APIs. External service APIs have helped us build features faster and removed the complexity of dealing with things like payments and email deliverability. Internal APIs have given us flexibility to evolve our systems independently of each other and quickly compose new services.
Like many of our customers, we've got a variety of services that make up the entirety of our application. Here are the services we've integrated with so far.
A Bunch of Internal Services
Building Runscope from the ground up as a service-driven architecture was one of the best decisions we made early on. By separating out functionality into small, single-purpose services we're able to quickly build and evolve each part of the stack with near zero interference to the other parts. To create a new service we tie a few of the existing ones together via their APIs and add a thin layer of logic on top of it. We'll talk more about our internal service architecture in the future.
For our paid plans, we use Stripe to process transactions. The API and docs are as good as they get and their webhook allows us to be notified when a recurring subscription renews (or fails) so we can update a customer's transaction history. We also use the excellent PayPad iOS app for notifications, made possible by Stripe's support for multiple webhook registrations.
All of our transactional email is delivered by SendGrid via our 'Courier' service. Courier is our internal centralized messaging service that any other service uses whenever an email needs to be sent. It maintains a global opt-out list and handles queuing automatically. Sending an email is a fire-and-forget operation for any service with a simple API call to Courier.
Our internal deployment tool (called Prometheus) uses the GitHub API to display which of our GitHub organization's projects are available for deploying to our staging or production realms. GitHub also provided the first sign in system for Runscope during our earliest private previews.
Prometheus also makes a lot of API calls to the AWS API for managing and monitoring our instances. This is the rare case where we use an API wrapper library (we much prefer to just use requests everywhere), but boto is just that good.
During our preview our waiting list was stored in a MailChimp list updated via the API. It was clunky to pull out the complete list to display in our internal admin, but it looks like the new v2 API is a lot cleaner (no more XML RPC!).
Speaking of our internal admin, we use the Full Contact API to pull up details about our customers when viewing them in Mission Control. This gives us a much better sense of who is actually signing up and using the service. The API was a cinch to integrate using the jQuery plugin they maintain.
The pulse of our company, HipChat is a live stream of everything happening across our team and infrastructure alike. We've created separate rooms for Commits (using GitHub service hooks), Deployments (Prometheus calls to the HipChat API), Jenkins, and Support (HelpScout integration). If it's not in HipChat, it didn't happen.
We do a fair bit of action tracking to help us better understand what our customers are using (or aren't using). Using the Mixpanel API, we pull this data into Mission Control to give us a high-level overview of usage across every customer but also specific to individual customers.
For the examples in our documentation, we wanted to use something that would encourage people to replace the hostname with the API they were using, but still work in case it was copied and pasted without being updated. We spun up yourapihere.com on Heroku using a fork of Kenneth Reitz's excellent httpbin.org site (which we're proud to sponsor).
On the home page of our internal admin Mission Control we have a section dedicated to tracking our key company goals. Goals come in different shapes at Runscope with our obsession with FIFA on Xbox being the source of many of them. Last week the team surprised me by adding a new metric to our goals list: a live count of the number of Xbox Acheivements I've earned so far. Let's just say, I've got a lot of work to do there.
Needless to say, all of these services work great with Runscope. In every case above, we've used our debugging and testing tools to help troubleshoot issues and monitoring ongoing usage.