image by Jacek Dylag
Software & Infrastructure we use to Run Our SaaS
Our team at CoverageBook (and AnswerThePublic) do a lot with a very small number of developers and designers. Over 4,000 paying customers and 600k monthly visitors (many using a free version of our product) all with a product team of five, including me.
One of the key principles we use to keep our lives calm, and reduce the stress of supporting so much with so few folks, is to buy a lot of software to support our products and reduce the burden on us.
This results in the augmentation of our team with lots of paid software products and services.
We resist building ourselves and pick the simplest, most pleasing-to-use software for the job. We even try, wherever possible not to configure away from the default settings!
Unless I specifically mention it, you can take our usage of these products as an implicit recommendation. Although I’d love to hear if you use any great solutions that might improve on what I’m using here.
Why?
Even the most expensive infrastructure bills pale in comparison to the cost of hiring a human being to build and maintain that code.
Why not?
I mean, if you’re Amazon or Google or Facebook or Apple or Twitter you might want to build to your unique scale and requirements. But then you’ll be hiring thousands of developers and you’re in a very different world to me.
This approach scales surprisingly well to teams an order of magnitude (or two) bigger than our team.
When choosing software, rather than building it, you often have to make choices that may not be ideal functionally or aesthetically. There are generally multiple providers with alternative approaches that you can choose from.
Our list
Application Framework: Rails
Its popularity waned (at least in the “public square”) for a couple of years, but it feels like a renaissance of sorts is happening as the JavaScript everywhere bubble is bursting.
Lots of bigger, hairier software products use it and there is no better solution for small teams doing big, mostly web, applications while remaining happy and productive.
Background Processing: Sidekiq Pro
We make heavy use of the paid version of this background procesing system for Ruby.
The important Pro features for us are the enhanced reliability, the web UI search and, in places, the batching functionality.
Hosting & CI: Heroku
Fundementally this means that we do not have the ability to break our own infrastructure. If I was to make one recommendation to anyone starting a software service it would be use a service like this where you have to configure nothing.
The inflexibility of infrastructure choice means deployment remains simple and you have to work hard to insert idiosynratic complexity you don’t need.
You’re not totally isolated from infrastructure concerns and you might have to architect your application in a certain way to make the most of how a Platform-as-a-Service (PaaS) Heroku works, but you are spared the overhead of managing fleets of servers or containers.
They also run our PostgreSQL and Redis databases and rely on their CI & Pipelines to manage deployment.
Scaling: Hirefire
Automatically scales our Heroku dynos based on response time and queue backlog. Solid.
Testing Parallelisation: Knapsack Pro
Added to our Heroku CI to parallelise it. The integration was very easy and it cut our builds to under 5 minutes. Most of that time is during setup: installing a browser for our system tests.
Performance, Errors & Uptime: AppSignal
Not as deep technically as some APM software, but at the right level for us and covers a bunch of infrastucture monitoring bases. Works nicely with Heroku. For instance the AppSignal PostgreSQL dashboard gives better insight than the (frankly poor) Heroku version.
And they send out stroopwafels.
Application Security: Sqreen
One piece of software that I’m especially glad to have found. It constantly reviews and protects our applications from both deliberate attacks from troublemakers and our own inadvertanty security issues.
Purchased by Datadog, I guess they’ll wind that into their main product at some point.
Logging: LogDNA
A nice UI and reasonable pricing for our volume.
Static Site Hosting: Netlify
Our static marketing sites are deployed here. We also make some use of a couple of very simple JavaScript “serverless” functions that are called from our applications.
It has a similarly straightforward deployment approach to Heroku, which is one of the main reasons we use it.
CDN: Fastly
Solid CDN. The main players are all much of a muchness in this arena. We’re (currently) only using it for our Rails assets.
Payment Processing: Stripe
Why would we use anything else to deal with our credit card transactions? Arguably without it, the business would have struggled to get off the ground.
I speak as a man who previously implemented online credit card processing directly with banks. It was horrible.
Code Collaboration: GitHub
Where our code is stored, reviewed, and merged. Pretty standard for a modern development team.
We have a couple of GitHub Actions that we use for linting our code and compressing our images before merging.
We also use the dependabot functionality GitHub absorbed.
Image CDN: Imgix
There’s a bunch of products that perform this task but their API is the most pleasant of any we’ve seen and their pricing is fair. Good and engaged support.
Video CDN: Mux
Our video CDN of choice. Lovely product, good on-site player and very nice API.
Video: Wistia
We serve some of our video marketing assets through here. We also use YouTube, for tutorials and webinar recordings.
Cloud Storage: AWS S3
We use Amazon’s storage because it’s the industry default. AWS’s dashboard terrifies me every time I open it.
Screenshots: Urlbox
Really decent solution for taking screenshots with a nice API, although we have to do a bunch of special configuration on our end to battle the Internet’s randomness.
Alerting: PagerDuty
It’s way more than we need and the scheduling is complex and byzantine. But reliable and fine.
Status: Statuspage
I don’t much like it, but it does what we need.
Email: Postmark
Great software from good people, really terrific deliverability for critical, transactional email. Visibly faster than all the other transactional mail services and really terrific support.
We haven’t expanded to use their broadcast email product.
Geolocation: IPStack
Simple, cheap, geolocation by IP address.
File uploading: FileStack
Nice JS-powered uploader, a requirement to avoid using Heroku dynos for file upload. We use other (better) solutions for serving the images, files and videos.
A bunch of “not infrastructure” tools
Basecamp for team communication and not much else (we may move after a decent testing period with Twist), Trello for medium term product planning.
Fireside to host the podcast, but I’d probably go with Transistor these days.
We host our blog on Wordpress hosted by Flywheel primarily due to its excellent development experience.
ConvertKit has somewhat moved away from being an ideal tool for SaaS email marketing communication, but it’ll do for now.
Intercom used to be the best tool for support. Now it’s bloated, confused, with ironically poor support (!), and seems mostly interested in squeezing every customer for the most money while changing “account managers” every six months. If we could be bothered to move, we would.
Last updated on January 31st, 2022