Week 06, 2024 - Takeoff
While the site has only one new post, this was still a surprisingly busy week! I got to spend a bit more time with my family, and the weather allowed me to take longer walks in the morning. I'm gradually preparing to be in better shape for bicycle trips in the spring, so after several years, I have returned to Zwift, the indoor cycling platform.
📰 Side note, if you care about the overlap of sports and tech, there are interesting news at Zwift. On one hand, they announced a deeper partnership with one of the biggest indoor trainer maker, Wahoo — and at the same time, they laid off what seems like a quarter of their workforce and discontinued their entire hardware line, including the recently announced Zwift Hub One too. Is this another company learning that “hardware is hard” — or just struggling to find focus? Maybe the latter: Kurt Beidler, the CEO who joined approximately a year ago to lead together with Eric Min, has also stepped down. This leaves the co-founder once again solely in charge.
After a motivating discussion with a fellow engineering lead, I wrote my thoughts on being successful as a first-time remote engineering lead — but then it got lengthy, so I stopped after the people aspect, and will continue later. I’m not going to copy the article here, you can read it on the site, but if you need a one-sentence summary, I’ll borrow it from Kim Scott’s insightful book Radical Candor:
What I learned this week
Last week I committed to producing content and not tinkering with the technology behind this blog - and then, well, life happened. I needed to make some adaptations to the Ghost theme I’m using, and it led me through a journey that ended in moving away from Ghost(Pro) and handling the hosting part myself(ish).
Lessons in bullet points:
- 🤖 This official Ghost Theme repository has ready-made GitHub Actions to deploy theme changes to a live blog. After setting up, which simply involves generating a custom integration in Ghost and adding the keys to GitHub Action Secrets, any modification I make on my laptop can be seen live on the site within a minute or two. Awesome!
- 💸 Using custom templates on Ghost bumps you out from the Starter package to the Creator one, which is almost a threefold price increase. However, hosting Ghost on PikaPods is surprisingly easy and effective (see more below).
- 🏗️ But, you need to set up some stuff yourself. DNS changes were trivial, but Mailgun took longer time to configure properly. Sure, email is complex, but I felt lost more often than in Cloudflare’s dashboards, and that arguably covers more areas. Also, the UX dark patterns left a bad aftertaste, for example, to have a simple pay-as-you-go pricing model to avoid having to spend hundreds of dollars per year upfront, you need to subscribe to a Foundation 50k trial, and then downgrade to Flex, which is not available otherwise. 🤯
- 💬 I need to engage more with other engineering leaders. Every interaction, whether it's a call, a chat, or just commenting on various interesting posts, leaves me feeling energized.
What I want to try next week
On the tech side, I want to spend an hour or so max to set up a local Ghost instance in developer mode, to be able to see changes without messing up the live site. Maybe move away from Google Analytics. The challenge will be finding the point of “good enough”, not to spend too much time on these. On the content part, I want to publish the second part of the first-time remote engineering leader article, and look for some online communities I can participate in.
Something cool: PikaPods
(During editing this part I realized I probably need to be clear: this is not an advertisement, I don’t benefit in any way from writing about PikaPods, I’m just excited about a cool product. 😅)
When looking for alternatives to host this site, PikaPods came up in a Reddit thread. Their concept is interesting: on an imaginary scale from using SaaS products to VPS/cloud/selfhosting, they are somewhere in the middle, offering simple hosting of popular Open Source applications for a low cost. Technically, they pull the official docker image of the app, and set up an environment that only runs this, with various customizations available to finetune performance / cost. Plain simple, no need to worry about interoperability with other apps, compatibility with the OS, finetuning and configuring anything besides the app itself.
Moving my site here was surprisingly straightforward. I took a screenshot of the resources the blog is allowed to use now, without any Cloudflare or similar caching enabled (please don’t DOS me). It’s lower than their recommendation for Ghost, but I want to see what’s the minimum I can get by — and experience how it looks like when it breaks. 😄
Looking at a few performance tests online, and based on anecdotal experience, this works perfectly fine with the current traffic the site gets — and it’s really cheap to scale up: 1 CPU core with 2GB of RAM and 50GB of storage would still be around just $4/month. Crazy!
Since PikaPods is handling the updates of the underlying application transparently, it’s important that they are keeping things up-to-date in a predictably fast manner. So far it's promising: my site runs on Ghost 5.78.0, which was released on the 30th January. The latest is one version ahead, 5.79.0, just published 6 days ago. PikaPods strives to apply updates in “1-2 weeks, after internal testing”, so I’m optimistic on this one too.
One more thing, look at how long a full restart takes:
[2024-02-08 10:33:09] WARN Ghost is shutting down
[2024-02-08 10:33:09] WARN Ghost has shut down
[2024-02-08 10:33:09] WARN Your site is now offline
[2024-02-08 10:33:09] WARN Ghost was running for 16 hours
[2024-02-08 10:33:10] INFO Ghost is running in production...
[2024-02-08 10:33:10] INFO Your site is now available on <https://peterszasz.com/>
[2024-02-08 10:33:10] INFO Ctrl+C to shut down
[2024-02-08 10:33:10] INFO Ghost server started in 1.001s
[2024-02-08 10:33:11] INFO Database is in a ready state.
[2024-02-08 10:33:11] INFO Ghost database ready in 1.304s
[2024-02-08 10:33:14] INFO Adding offloaded job to the queue
[2024-02-08 10:33:14] INFO Scheduling job mentions-email-report at 19 53 * * * *. Next run on: Thu Feb 08 2024 10:53:19 GMT+0000 (Coordinated Universal Time)
[2024-02-08 10:33:14] INFO Ghost URL Service Ready in 4.956s
[2024-02-08 10:33:14] INFO Adding offloaded job to the queue
[2024-02-08 10:33:14] INFO Scheduling job clean-expired-comped at 55 24 4 * * *. Next run on: Fri Feb 09 2024 04:24:55 GMT+0000 (Coordinated Universal Time)
[2024-02-08 10:33:14] INFO Adding offloaded job to the queue
[2024-02-08 10:33:14] INFO Scheduling job clean-tokens at 38 42 13 * * *. Next run on: Thu Feb 08 2024 13:42:38 GMT+0000 (Coordinated Universal Time)
[2024-02-08 10:33:14] INFO Ghost booted in 5.066s
Five seconds! Amazing. I’m really pleased with the performance for such a low price - honestly, I’m afraid that I’m missing something and it will turn out to be too good to be true!
Two small things I missed so far:
- I’d love to see an out-of-the-box backup solution. They allow you to turn on SFTP access for your files and Adminer for your database, but I would love to see something as simple as connecting an S3 or similar remote bucket and having regular backups there. (I wouldn’t even mind the occasional pod restart to ensure all data is stored.) Considering that the same company is behind BorgBase, I’m optimistic that there’s going to be a solution for this soon.
- Sometimes it would be great to be able to modify the contents of the docker image, or maybe replace it with my own forked version. With Ghost, the SFTP access allows me to see a
content
folder, which has my data, images, themes, logs, etc. – but there’s no way to go deeper in changes than modifying themes. I guess I understand, this is the core deal of the PikaPod model: simple application hosting. Once they would go down this route of customization, it wouldn’t be sustainable to maintain quick and reliable updates. Still, a compromise with patches or something similar would be interesting.
Again, none of these are critical, so far I’m a very happy customer.
That’s it for this week, thanks for your time and attention, take care of yourself and the people around you,
Péter