StackShareStackShare
Follow on
StackShare

Discover and share technology stacks from companies around the world.

Product

  • Stacks
  • Tools
  • Companies
  • Feed

Company

  • About
  • Blog
  • Contact

Legal

  • Privacy Policy
  • Terms of Service

© 2025 StackShare. All rights reserved.

API StatusChangelog
  1. Home
  2. Companies
  3. Checkly Inc.
Checkly Inc. logo

Checkly Inc.

Verified

Delightful Active Monitoring for Developers

Berlin, Utrecht, Bostonchecklyhq.com
18
Tools
10
Decisions
0
Followers

Tech Stack

Application & Data

6 tools

Vue.js logo
Vue.js
Tailwind CSS logo
Tailwind CSS
Golang logo
Golang
PostgreSQL logo
PostgreSQL
Node.js logo
Node.js
AWS Lambda logo
AWS Lambda

Utilities

3 tools

Auth0 logo
Auth0
Stripe logo
Stripe
Amazon SNS logo
Amazon SNS

Team Members

Giovanni Rago
Giovanni Rago
Hannes Lenke
Hannes LenkeCEO
Ignacio Anaya
Ignacio Anaya
Jan Osch
Jan Osch
ndom91
ndom91
Tim Nolet
Tim NoletCTO
adamwardecki
adamwardecki

Engineering Blog

Stack Decisions

Tim Nolet
Tim Nolet

Sep 18, 2019

When adding a new feature to Checkly rearchitecting some older piece, I tend to pick Heroku for rolling it out. But not always, because sometimes I pick AWS Lambda . The short story:

  • Developer Experience trumps everything.
  • AWS Lambda is cheap. Up to a limit though. This impact not only your wallet.
  • If you need geographic spread, AWS is lonely at the top.
The setup

Recently, I was doing a brainstorm at a startup here in Berlin on the future of their infrastructure. They were ready to move on from their initial, almost 100% Ec2 + Chef based setup. Everything was on the table. But we crossed out a lot quite quickly:

  • Pure, uncut, self hosted Kubernetes — way too much complexity
  • Managed Kubernetes in various flavors — still too much complexity
  • Zeit — Maybe, but no Docker support
  • Elastic Beanstalk — Maybe, bit old but does the job
  • Heroku
  • Lambda

It became clear a mix of PaaS and FaaS was the way to go. What a surprise! That is exactly what I use for Checkly! But when do you pick which model?

I chopped that question up into the following categories:

  • Developer Experience / DX 🤓
  • Ops Experience / OX 🐂 (?)
  • Cost 💵
  • Lock in 🔐

Read the full post linked below for all details

357k views357k
Comments
Tim Nolet
Tim Nolet

Jul 31, 2019

Vue.js Intercom JavaScript Node.js vuex Vue Router

My SaaS recently switched to Intercom for all customer support and communication. To get the most out of Intercom, you need to integrate it with your app. This means instrumenting some code and tweaking some bits of your app's navigation. Checkly is a 100% Vue.js app, so in this post we'll look at the following:

  • Identifying a user with some handy attributes
  • Getting page views right with Vue Router
  • Sending events with Vuex
  • Some nice things you can now do in Intercom

After finishing this integration, you can actively segment your customers into trial, lapsed, active etc. etc.

85.1k views85.1k
Comments
Tim Nolet
Tim Nolet

Jul 9, 2019

AWS Lambda Serverless Amazon CloudWatch Azure Functions Google Cloud Functions Node.js

In the last year or so, I moved all Checkly monitoring workloads to AWS Lambda. Here are some stats:

  • We run three core functions in all AWS regions. They handle API checks, browser checks and setup / teardown scripts. Check our docs to find out what that means.
  • All functions are hooked up to SNS topics but can also be triggered directly through AWS SDK calls.
  • The busiest function is a plumbing function that forwards data to our database. It is invoked anywhere between 7000 and 10.000 times per hour with an average duration of about 179 ms.
  • We run separate dev and test versions of each function in each region.

Moving all this to AWS Lambda took some work and considerations. The blog post linked below goes into the following topics:

  • Why Lambda is an almost perfect match for SaaS. Especially when you're small.
  • Why I don't use a "big" framework around it.
  • Why distributed background jobs triggered by queues are Lambda's raison d'être.
  • Why monitoring & logging is still an issue.

https://blog.checklyhq.com/how-i-made-aws-lambda-work-for-my-saas/

188k views188k
Comments
Tim Nolet
Tim Nolet

Jun 22, 2019

Let's Encrypt Amazon EC2 Heroku Node.js Vue.js JavaScript

We recently went through building and setting up free SSL for custom domains for our #SaaS customers. This feature is used for hosting public status pages and dashboards under the customers' own domain name.

We are in the #Node.js, #AWS and #Heroku world, but most of the things we learned are applicable to other stacks too.

The post linked goes into three things:

  1. Configuring the Let's Encrypt / ACME client called Greenlock.
  2. Getting DNS right on Amazon Route 53
  3. Actually determining what content to serve based on hostname.

All seem pretty straightforward, but there are gotcha's at each step.

Hope this helps other budding SaaS operators or ops peeps that need this functionality.

22.5k views22.5k
Comments
Tim Nolet
Tim Nolet

May 29, 2019

PostgreSQL Heroku Heroku Postgres Node.js Knex.js

Last week we rolled out a simple patch that decimated the response time of a Postgres query crucial to Checkly. It quite literally went from an average of ~100ms with peaks to 1 second to a steady 1ms to 10ms.

However, that patch was just the last step of a longer journey:

  1. I looked at what API endpoints were using which queries and how their response time grew over time. Specifically the customer facing API endpoints that are directly responsible for rendering the first dashboard page of the product are crucial.

  2. I looked at the Heroku metrics such as those reported by heroku pg:outlier and cross references that with "slowest response time" statistics.

  3. I reproduced the production situation as best as possible on a local development machine and test my hypothesis that an composite index on a uuid field and a timestampz field would reduce response times.

This method secured the victory and we rolled out a new index last week. Response times plummeted. Read the full story in the blog post.

138k views138k
Comments
Tim Nolet
Tim Nolet

May 8, 2019

Hotjar GitHub MailChimp Drift

When I started Checkly, I had no clear strategy on collection, managing and acting on customer feedback.

Over the last year, going from private beta to the first couple dozen customers I found my way in the jungle of customer feedback tooling and found something that worked for me and my company.

The linked post is a bit less technical than normally. The post goes into:

  • Using Hotjar and how it sorta worked for me.
  • Using Drift and why I was totally wrong about chat widget.
  • Using GitHub as a public roadmap.
29.7k views29.7k
Comments
Tim Nolet
Tim Nolet

Apr 29, 2019

JavaScript Node.js hapi Vue.js Swagger UI Slate

Two weeks ago we released the public API for Checkly. We already had an API that was serving our frontend Vue.js app. We decided to create an new set of API endpoints and not reuse the already existing one. The blog post linked below details what parts we needed to refactor, what parts we added and how we handled generating API documentation. More specifically, the post dives into:

  • Refactoring the existing Hapi.js based API
  • API key based authentication
  • Refactoring models with Objection.js
  • Validating plan limits
  • Generating Swagger & Slate based documentation
402k views402k
Comments
Tim Nolet
Tim Nolet

Apr 8, 2019

Stripe Stripe Billing Vue.js

When I started building a SaaS from scratch, I adopted the Stripe Billing product for managing plans and subscriptions. At that moment (roughly a year ago) I did not fully realise that this was a new addition to the Stripe product line.

One year down the road, I can write this decision and support it with technical details on how I implemented Stripe Billing and integrated it with the Checkly backend.

Key takeaways are:

  • Keep coupling minimal. I hardcode our pricing and plans into the pricing page.

  • Choose good ID's and a good structure to segment product and pricing. This enables grandfathering customers and adding ad hoc new products.

  • Use one or two webhooks to keep things in sync. We use just one webhook.

See all details with code examples in the linked blog post.

55.9k views55.9k
Comments
Tim Nolet
Tim Nolet

Apr 1, 2019

Vue.js JavaScript vuex

If you run a SaaS, you probably want to show your users when they are almost running out of widgets. Or that they can get some cool feature on a more expensive plan.

Or, in other words, how can you be nice and commercial in dealing with plan limits?

We use Vue.js with Vuex for our front end, but the patterns and code examples here can be applied to any other SPA framework.

We implemented some very specific data structures in Vuex to make it easy for components to check what a user's status is with regard to plan limits and usage. This centralizes and encapsulates the knowledge about typical SaaS things in one place and leverages Vue's component system nicely. Read more in the dedicated blog post.

20.5k views20.5k
Comments
Tim Nolet
Tim Nolet

Mar 26, 2019

Node.js Vue.js JavaScript hapi PostgreSQL A pretty basic question for any SaaS is how you deal with what a user can do on their account in a SaaS app? Can Jane on the "Starter" plan create another widget when she is near the limit of her plan? What if she's a trial user?

When building Checkly, I found it pretty hard to find good, solid examples on how to implement this. Specifically for my stack of Vue.js and Node.js / hapi

Turns out this is a mix of things:

  • Feature toggling
  • Counting stuff™
  • Custom API middleware very specific to your situation

Read my post on how we did this and where the bottlenecks are. The HackerNews thread on this has some great contributions too.

17.7k views17.7k
Comments