One of my background projects this year is reducing the paid services that my software company, Pulse Storm, makes use of. These aren’t gigantic costs, but sales of Commerce Bug and No Frills Magento Layout have steadily declined as Adobe has methodically retired the Magento brand and the Open Source version of Magento has become an almost private project used exclusively by official Magento partner agencies.
Step one was moving store.pulsestorm.net from Shopify to Gumroad for my SaaS “click this button to buy a thing” provider. Gumroad isn’t free, but its pricing is solely based on a percentage of sales. Shopify’s cheapest plan is $29/month so that’s a $348/year flat rate for the privilege of using their software. Worth it when times are flush, but less so when sales are dwindling. This was a relatively easy change to make.
The next steps were trickier. There are two web applications I have running to support the business and product. The first, commercebug.pulsestorm.net, is the place users go to download their purchases. The second, graph.pulsestorm.net, was a support service for Commerce Bug that renders directed graphs of Magento block layouts.
With the move to Gumroad I don’t need commercebug.pulsestorm.net for purchases — but I still need to support existing users who didn’t purchase via Gumroad. In other words, this service needs to stay running. I also needed to modify the service to verify purchases with a local copy of Shopify’s order data (you lose access to the Shopify API when you stop paying them).
The graph.pulsestorm.net service was an experiment in giving Commerce Bug users features that relied on external servers. It was a simple app that accepted a POST of a graphviz dot file and rendered a full image of the layout tree. While this feature is useful, it required a $10/month server to run (Linode’s nano instances didn’t have enough memory for graphviz to render the dot files). That’s another $120/year that I probably don’t need to spend. That’s a server worth decommissioning. Commerce Bug still gives you access to the raw dot source of the PHP block layout and a jsTree view of the UI Components.
Cool URLs are a Headache
Decommissioning this server was a little trickier than I would have liked. I wanted to make sure that graph.pulsestorm.net/dot included a brief mention of where the service went. This means I still need to host a website. The easiest thing to do was put it on the same Linode instance as commercebug.pulsestorm.net.
This solution creates another problem — what to do about the SSL/HTTPS certs?
My ancient web mastering knowledge says you can’t host two secure sites on the same server. I’m not sure if that’s true anymore (or if it ever was) — but I do know that I don’t have a wildcard certificate for pulsestorm.net. Back in the day, I paid for two individual certs for these URLs. More recently I moved them over to Let’s Encrypt.
I started sighing inwardly about having to sort all this out until I remembered that Cloudflare’s proxy services can magically put any domain behind an HTTPS URL and that they have a free tier. So this meant a DNS nameserver swap for pulsestorm.net which went mostly smoothly. The only hiccups were one missed subdomain in the new Cloudflare DNS configuration, and Gumroad not being able to handle Cloudflare’s proxy. Both were easily fixable (add the DNS entry, turning off proxying for store.pulsestorm.net)
All this brings me down to one Linode nano instance at $5/month. I’ve also got
alanstorm.com hosted with Pair for around $9.60 a month. I’ve also got pulsestorm.net hosted with Squarespace for $12/month. So that’s around $320/year to keep things up and running.
The pulsestorm.net site is more important than it seems. Specifically, this contact form is my Zendesk. It’s how customers get in touch with me. I could program my own contact form pretty easily, but making sure it continues to work and is delivering mail properly is an ongoing job I’d rather not have. So that is, for now, $12/month I’ll continue to spend.
This old website, alanstorm.com, is served out as a static site these days. I could probably find a slightly cheaper host than Pair Networks but I’ve been a customer of theirs for 20 years. Nostalgia’s a weird force and I’m not ready to sell mine for the $20 or so I could save in a year.
The commercebug.pulsestorm.net site, as it’s written now, requires some backend server processing logic, so I need a server there. I could add this as a site to my Pair Networks plan. Unfortunately, this server also runs a number of cron jobs and while Pair allows you access to cron, some of these jobs can be CPU hogs and I’m unsure how well that would go over in Pair’s shared environment. Also, I like having a server that’s “all mine” on the internet, so that’s another $5/month I’ll continue to spend.
There are also the Big Cloud providers like Amazon Web Services to consider. My usage is small enough that a lot of the above could be moved there and fit in the free-or-almost-free tiers. The main blocker is the non-transparent and non-throttled pricing that comes with these services. All it takes is one griefer (either human or bot) and your usage tiers might trip over into the paid category.
This is exacerbated by the need to combine services to do simple things with AWS. For example — alanstorm.com could be a static site hosted in an S3 bucket. Except S3 website hosting doesn’t support SSL/HTTPS. To get this you need to bring in a second service, CloudFront. Now that’s two services whose free tiers you need to remain aware of. Also, it’s not clear from that support article whether SSL/HTTPS certs are free on CloudFront or incur a cost. I could probably bring in Cloudflare to get everything behind an HTTPS URL, but then I’m rolling the dice on their free tier. (which I’m OK with to keep an old HTTPS URL working — less so for full-on hosting of my website)
Putting commercebug.pulsestorm.net in AWS would be similarly tricky. There’s no EC2 free tier — the cheapest servers are still around $3/month and in a direct comparison the Linode’s $5/month server is better than the $5-ish
t4g.micro. Putting aside the cron jobs, I’d probably replace the current app at commercebug.pulsestorm.net with a Lambda function hosted behind an API Gateway URL. Again — two services, two free pricing tiers to be aware of. Also, Lambda’s “GB Second” isn’t the easiest pricing metric to reason about.
AWS and its ilk are for the big players — better for hobby sites to pay a few bucks more than they technically need to in order to cap their costs.
So I think I have things optimized as best I can for now. If sales dry up completely this year I’ll probably revisit. In the meantime, my next big personal IT project is dealing with the pending end of the free tier on
Google Apps for your Domain, G Suite, Google Workspace. I see a Pobox or FastMail in my future, so that’s another $25 – $50 a year. I’m not looking forward to touching my MX records for the first time in over a decade, but that’s another story for another time.