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. 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.
Console 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.
We run the company using Basecamp and follow their ethos of real-time sometimes, asynchronous most of the time.
We discuss things using longer-form messages in the Basecamp Message Board rather than internal email, and avoid group chat for anything important (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 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 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. 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 comes online later in 2021, I will move it there.
There are lots of tools for people running newsletters (ConvertKit is interesting), but Mailchimp is industry-standard. The company has been around since 2001 and has revenues of +$500m/yr without any external funding. All we need is a way to reliably send emails to our subscribers, and Mailchimp has proven its ability to achieve this.
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, 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 to provide our email, calendar, drive, and docs/sheets. I don't like how there are no local files 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 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.
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 to host our homepage 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. We will use this to track performance as we experiment with various marketing channels. The site is deployed using GitHub Actions and runs k6 performance testing against a test worker to ensure the site meets performance SLAs.
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.
GitHub continues to thrive under Microsoft and they are regularly releasing interesting and useful features. One I really appreciate is Dependabot, 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.
All our receipts go into a Google Group which forwards them into the accounting product, Xero. 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.
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 to manage shared (and private) logins at Console. I like pass as an open source alternative, but having my personal and company logins in the same product is smoother.
This blog is hosted by Ghost, a very lightweight blogging platform that is also available open source and self-hosted. I use WordPress for my personal 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.
One of the reasons we started 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 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.
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.