I recently launched my new company, Pragmatic Potato Software Inc. The creation of a company itself is pretty easy, but setting up everything you need to do business can become overwhelming quickly. There are a lot of compelling options available, each promising the moon. It’s not that simple though.

I’m going to be writing about the technology stack I’m using to run my company, and why I made the choices I did. There is a lot more to a company than its technology, but I’m not an expert in setting those up.

I made these choices for my company, keeping in mind my needs and values. I would probably recommend something similar for another small company, but it would depend. I didn’t perform an exhaustive search for each decision. Most options are going to be good enough, and even if I make a poor choice, I can replace most of these with a few hours of work while my company is small. I did put some effort into it though, and I’m happy to share that with you.

Here is some more of the context that guided my decisions:

  • Pragmatic Potato Software is a small (single employee) software architecture and development consulting company based in Burnaby, Canada.
  • I want to minimize the time I’m spending managing infrastructure because I’d rather spend that time helping customers and potentially earning income.
  • I am pretty technically capable, and can handle setting up and hosting my own infrastructure. I also don’t need to worry much about usability: I am happy to use a code editor when I want to update the text on my website.
  • I have modest expectations for traffic and customer interactions, so I should be able to use free or low-cost services for most things. I would like to keep my costs down.

Domain Registration: Cloudflare and Porkbun

For any kind of web presence, you need a domain name. Of all the registrars I’ve used, my favourite is Cloudflare Registrar. They famously don’t make any profit on their domain offering, so it is also the best price you can get. I used them for the pragmaticpotato.com domain.

Because I have a Canadian company, I also registered pragmaticpotato.ca, and have it set up to redirect to the .com site. At the time of this writing Cloudflare can’t register .ca domains, so I am using Porkbun for that one.

Website: Hugo static site hosted on Cloudflare Pages

I’ve written before about my preference for static websites. They are the simplest thing that can possibly work, and that’s often a good starting point. I can’t imagine anything I’d want to do on this website that’d require a dynamic back end, so this should be good enough for a long time.

I originally planned to use Hexo for the website because I already use it for this blog, but I had trouble finding a template that I liked for a business landing page. I ended up using Hugo. It is very similar to Hexo, but I found several templatse that I liked.

Having used both, I now prefer Hugo. One feature I appreciate is its ability to extend templates through partials rather than modifying the templates directly. This allows some pretty direct customizations, and should make it easier to take updates in the future. I used this functionality to tune the page metadata for search engines and social links. In the template I chose the templates was broken up into several partials to make these sorts of customizations trivial.

The hardest part of putting the website together was writing the text, and I went through several iterations to get it just the way I wanted. Then my friends told me it was garbage, so I rewrote most of it again!

I’m using Cloudflare Pages to host the content. It’s very similar to GitHub Pages (which I use for this blog), but I like that it’s a bit more configurable. I also found the build system a little easier to set up. I liked it enough that I will probably end up moving this blog over at some point too.

Contact Form: FabForm

I’m using FabForm for the contact form on the website. It is a simple service that was trivial to set up. I also find the one-time pricing much more reasonable than the higher (over time) monthly fees of other popular options. Using this allows me to accept messages on the website without needing a dynamic back-end.

Stock Photography: Unsplash and Squoosh

I used a few stock photos on the website to make it feel more engaging. Unsplash has a massive library of free, high-resolution photos taken by professionals. I made a point of including an attribution page, but that isn’t necessary with their licence. I used Squoosh to resize and compress the images for efficient load times.

I also hired a professional photographer to take some pictures of me to make the website more personal. This was a particularly fun process, and I’m thrilled with the results. The photographer was very reasonable. My new clothing was the most expensive part.

Website Analytics: Cloudflare Web Analytics

I am using Cloudflare Website Analytics for the website, mostly because it was easily available. I also appreciate that they collect minimal information, and in a way that doesn’t require popups to comply with modern privacy laws.

Email: Zoho Workplace

Microsoft 365 and Google Workspace are the two big players for email and office application, and I did consider each of them. I ended up going with Zoho Workplace because it is much cheaper and comes bundled with more stuff.

Setting it up was an easy process. Even setting up email for my custom domain was easy. I had it all up and working in less than an hour.

I don’t recommend trying to run your own email server, even for medium-sized businesses. Email used to be an open system that anyone could participate in, but with all the spam and especially with the spam prevention mechanisms today, it can be difficult to keep your emails out of spam boxes.

Document Editing & Storage: Zoho Workplace & Evernote

I’m gradually moving my (few) stored files over to Zoho WorkDrive. I was using a little bit of Google and a bit of Microsoft, but ultimately found their free options too limiting. The final straw for me was editing a contract. I spent a couple of hours trying to get the numbered lists and cross-section links right in the free online Microsoft Word and Google Docs before giving up. Zoho Writer has limitations too, but it proved the easiest to use.

Almost all of my work notes and planning content is in Evernote, which I’ve been using for many years. It’s not great for some kinds of content (like sheets), but it is extremely searchable, which makes it fast for pretty much all other information.

Task Management: Trello & Evernote

I’ve been using Trello for years to organize myself. I use it primarily to track the things I’m working on in the short term. It’s especially easy to slap cards into a list and put them in a sensible order. I mix personal and professional tasks in the same list to reduce friction as I go through the day.

For my longer term backlog, I’m using notes in Evernote. It isn’t a great tool for project management, but it’s good enough for now.

Video Conferencing: Zoho Meeting

Because I’m already using Zoho Workplace, I get Zoho Meeting included, and it works great. It looks and performs a lot like Zoom, but I don’t have to pay extra for it. It’s not quite as smooth as Google Meet (which has a particularly streamlined experience), but it has a few more features that I sometimes want.

Appointment Scheduling: Zoho Bookings

Zoho also has Zoho Bookings which allows customers to schedule meetings with me themselves. This can save a lot of emailing when someone needs to talk to me. I have it integrated with my Google calendar (which I use for my personal and family schedules), so it can automatically avoid conflicts with my other obligations.

Bookkeeping: Outsourced

Another key part of a business is keeping appropriate financial records. I spent some time looking into software for managing this, but I have decided so far not to bother. My accountant is happy to take care of this for me, and they can do it far faster than I can. Even though I’m the kind of person that likes to keep records up to date, and to see the numbers for myself, I would rather spend that time helping customers instead.