The Console tech stack 2021
Tags: engineering, techstack, serverless
Published: 2021-01-22 10:20:24

---
title: The Console tech stack 2021
published: true
date: 2021-01-18 18:58:54 UTC
tags: engineering,techstack,serverless
canonical_url: https://blog.console.dev/console-tech-stack-2021/
---

 ![The Console tech stack 2021](https://blog.console.dev/content/images/2021/01/japan-osaka-2011.jpeg)

When I built the original version of Server Density, a server monitoring startup I started in 2009, I was using it as a project to learn Python. I also had to build a lot of the underlying infrastructure because there were only a few cloud products and they were not very mature.

This was a world of visiting the bank to get a merchant account, writing my own invoicing and subscription management system, renting dedicated servers, and figuring out which relational database to use.

[Things are different in 2021](https://davidmytton.blog/comparing-web-development-2009-vs-2020/). There are so many tools and products and projects - everything we need to run Console is available as a fully-managed, pay-as-as-you-go service. This means we have been able to focus on our core product, rather than building the infrastructure from scratch.

## A serverless tech stack

[Console](https://console.dev) is starting as a weekly newsletter for developers, which means the tech stack is minimal. This means Console v1 is entirely serverless, but we have written a few tools here and there.

This is our tech stack as we launch at the beginning of 2021. I intend to publish a review of our stack every year so it will be fun to see how things develop.

### Basecamp

We run the company using [Basecamp](https://basecamp.com) and follow their ethos of [real-time sometimes, asynchronous most of the time](https://basecamp.com/guides/how-we-communicate).

We discuss things using longer-form messages in the Basecamp Message Board rather than internal email, and [avoid group chat for anything important](https://basecamp.com/guides/group-chat-problems) (I really dislike Slack). Chat has its uses, from posting fun links to coordinating incident management, but there should almost never be a need to monitor it in real-time. We do not expect an immediate response (to chat or messages) and we can choose when and whether to participate in any discussions.

Keeping an eye on how subscriber numbers are going is important, so I wrote [a simple bot](https://github.com/consoledotdev/bc-totorobot) that queries the Mailchimp API to post our subscriber stats every morning. This is the closest we get to running servers, but it is actually an [Azure Function](https://docs.microsoft.com/en-us/azure/azure-functions/functions-reference-python) originally written in Python, but now ported to Rust (blog coming soon).

I have been playing around with Azure recently because [I have been impressed with Microsoft's environmental progress](https://davidmytton.blog/fighting-over-who-has-the-greenest-public-cloud/). The chatbot is currently running in the Azure Europe West region but as soon as the new [100% renewables with 24/7 hourly matching region in Sweden](https://azure.microsoft.com/en-gb/blog/achieving-100-percent-renewable-energy-with-247-monitoring-in-microsoft-sweden/) comes online later in 2021, I will move it there.

### Mailchimp

There are lots of tools for people running newsletters ([ConvertKit](https://convertkit.com/) is interesting), but [Mailchimp](https://mailchimp.com/) is industry-standard. The company has been around since 2001 and [has revenues of +$500m/yr without any external funding](https://www.inc.com/magazine/201802/mailchimp-company-of-the-year-2017.html). All we need is a way to reliably send emails to our subscribers, and Mailchimp has proven its ability to achieve this.

![The Console tech stack 2021](https://blog.console.dev/content/images/2021/01/screenshot_1609773337.png)<figcaption>Console Mailchimp dashboard as of early Jan 2021.</figcaption>

### Google Workspace

Microsoft has come a long way with Microsoft 365, but having used it to collaborate with my classmates [when I was doing my MSc in 2019/2020](https://davidmytton.blog/start), Google Docs is still the best for real-time collaboration & commenting. Setting up group Sharepoints and trying to work on the same Word documents is still pretty frustrating, especially when docs get out of sync and/or people save and email different versions around. I am also on Linux, and the Office web apps are well behind their desktop versions (which only exist for macOS or Windows).

I try to avoid Google's free products for my personal tools because of their approach to privacy, however they still offer the best suite of collaboration products for business. Paying with money rather than privacy, with contractual data guarantees when you do so, makes it easier for me to accept using [Google Workspace](https://workspace.google.com) to provide our email, calendar, drive, and docs/sheets. I don't like how [there are no local files](https://onezero.medium.com/the-death-of-the-computer-file-doc-43cb028c0506) for Google Docs, but browser-only real-time collaboration avoids the merge-conflicts I regularly saw with Word.

We run our editorial process through Google Sheets, collecting the interesting tools and betas throughout the week ready for review. Once we have selected the content for the newsletter, a custom [Google Apps Script](https://developers.google.com/apps-script/) generates the Mailchimp HTML and Twitter drafts ready to publish. I was pleasantly surprised at how powerful Apps Script is - we've used it to build a good editorial flow.

![The Console tech stack 2021](https://blog.console.dev/content/images/2021/01/screenshot_1609769249.png)<figcaption>Beta programs Google Sheet with custom "Deploy" and "Newsletter" Apps Script.</figcaption>

### Cloudflare

Being a newsletter, we need a way to subscribe people and provide somewhere to explain what we're doing. We wanted to have a very fast, static website, but also needed some scripting abilities without having to run our own backend servers.

We use [Cloudflare Workers Sites](https://developers.cloudflare.com/workers/platform/sites) to host our [homepage](https://github.com/consoledotdev/home) because it makes it easy to deploy static content to a huge, global CDN, and manipulate the pages using serverless scripting. For example, [our index page adjusts the referrer form field based on the query string](https://github.com/consoledotdev/home/blob/64ed03f0de8d759a9c3d8063f806777de8570b46/workers-site/index.js#L21). We will use this to track performance as we experiment with various marketing channels. The site is deployed using GitHub Actions and runs [k6](https://k6.io/) performance testing against a test worker to [ensure the site meets performance SLAs](https://github.com/consoledotdev/home/blob/main/tests/perf.js).

Our domains are also hosted with Cloudflare DNS because we can use Workers to direct routes for the additional pages we plan to build. I've been really impressed with the products Cloudflare offers for core infrastructure.

All our Cloudflare configuration is managed using [Terraform](https://www.terraform.io/), and [Terraform Cloud](https://www.terraform.io/cloud).

![The Console tech stack 2021](https://blog.console.dev/content/images/2021/01/screenshot_1609770963.png)<figcaption>The Console homepage Cloudflare Worker dashboard.</figcaption>

### Plausible Analytics

We tried using [Cloudflare Privacy First Analytics](https://blog.cloudflare.com/privacy-first-web-analytics/) but the 1-week data retention limit of the UI was too low, so switched to [Plausible Analytics](https://plausible.io). There is an upcoming blog post about this decision.

### GitHub

GitHub continues to thrive under Microsoft and they are regularly releasing interesting and useful features. One I really appreciate is [Dependabot](https://docs.github.com/en/free-pro-team@latest/github/managing-security-vulnerabilities/about-alerts-for-vulnerable-dependencies#github-dependabot-alerts-for-vulnerable-dependencies), which helps us stay up to date with new library releases. This is particularly important given [the risks of compromise up the software supply chain](https://puri.sm/posts/the-future-of-software-supply-chain-security/).

The small amount of code we have is [all in GitHub](https://github.com/consoledotdev) and our deployments are managed by GitHub Actions, but I am keeping an eye on [Source Hut](https://sourcehut.org/) which is growing as a credible alternative.

![The Console tech stack 2021](https://blog.console.dev/content/images/2021/01/github-consoledotdev.png)<figcaption><a href="https://github.com/consoledotdev">Console GitHub account</a>.</figcaption>

### Xero

All our receipts go into a Google Group which forwards them into the accounting product, [Xero](https://www.xero.com). We aren't paying for much at the moment so it is very lightweight, but every company needs to keep proper books. Xero has led the small business accounting market for over a decade now, and I used it extensively at my previous business. It makes accounting much easier.

![The Console tech stack 2021](https://blog.console.dev/content/images/2021/01/screenshot_1609772356.png)<figcaption>Bills paid so far in Xero.</figcaption>

### 1Password

Keeping track of all those logins, especially managing password security, enforcing 2FA, and dealing with new/leaving team members is still a hassle. It's annoying that Single-Sign-On is an "enterprise" feature in most products, which means bumping the monthly fee far too high for a new business.

I have been using 1Password for over a decade now, and it is still my favourite. We're using [1Password Teams](https://1password.com/teams/) to manage shared (and private) logins at Console. I like [pass](https://www.passwordstore.org/) as an open source alternative, but having my personal and company logins in the same product is smoother.

![The Console tech stack 2021](https://blog.console.dev/content/images/2021/01/screenshot_1609772237.png)<figcaption>Just a few items in the Console 1Password Teams account.</figcaption>

### Ghost

This blog is hosted by [Ghost](https://ghost.org/), a very lightweight blogging platform that is also available open source and self-hosted. I use WordPress for [my personal blog](https://davidmytton.blog), but we had heard good things about Ghost and wanted to try out a more modern product. So far I am impressed with the performance, and how clean the generated HTML is, but WordPress still has an advantage when it comes to the large ecosystem of plugins and themes.

### Feedbin

One of [the reasons we started Console](https://blog.console.dev/welcome-to-console/) was because it is difficult to keep up with all the new releases in the industry. We still trawl through Twitter, Reddit, Hacker News, forums, and many other sites, but we also use [Feedbin](https://feedbin.com/) to follow thousands of sources. Saved searches and tagging helps us separate vendors from individuals, and we also use it to receive lots of email newsletters. Feedbin is a core part of our content monitoring process.

![The Console tech stack 2021](https://blog.console.dev/content/images/2021/01/screenshot_1609772728.png)<figcaption>Using Feedbin to track all the releases and announcements.</figcaption>

### That's it!

10 vendors. I'm sure that will grow as Console develops, but we achieved our goal of running zero servers! I will write this post at the start of every year to see how things change over time.