I didn’t like the price so I built a SaaS company over a weekend. Here is what it took.

Justin Hartung
7 min readDec 5, 2022

--

User traffic starting on “launch day” July 19th

Every once in a while you do something unexpected or out of character. Last summer I created a company, initially out of spite, but it turned into an incredible learning experience and the realization that it is very easy to start a company. Perhaps this may be helpful to others starting a similar journey.

Many of us at Qarik are Xooglers, in fact we started Qarik to help companies develop more like Google. At Google, we used “go” links to quickly share a URL in a memorable way. I.e. type in “go/hr” to get to our HR portal. It effectively replaced an intranet for most use cases.

Naturally we wanted the same at our new company. We found a tool that worked well and wanted to purchase it, however, the cost was over $10 per user per month. To put this in context, we spend $18 per user per month for all of Google’s communications and collaboration tools. It is also 2x the amount most companies spend on GitHub.

I also, however, find value in paying others so we can focus on our core. While this tool will be helpful, it didn’t make sense for us to spend over $12,000/year. As it turns out my core is building robust cloud based systems…

So over the weekend last summer while watching my kiddos at a pool I built and launched a virtual SaaS company, Goto Tools. Since this was going to be a side project, it needed to be built in a way that wouldn’t require my time during normal business hours and because I am lazy, it needed to be 100% automated including tracking expenses and revenue and all accounting functions. Despite these design goals, I went from idea, to fully operational, including CICD with automated testing and self healing in 3 days. In all honesty, it did take two more weeks for the official business license registration, so 14 days but 3 days sounds way better.

Almost everything is 100% automated. A dirty secret is I don’t charge any customers because it is very cheap and I haven’t yet built robust billing (shh, please don’t tell my customers). Perhaps I’ll do that sometime next summer. In the meantime, I can count some impressive customers from an AI company (105 employees) to a food delivery company (>3,000 employees) to a large FANG tech company (close to 1,000,000 employees), which I am shocked as they must have their own 🤔. Well, clearly there is a need, even if they already have their own internal system that tries to meet the need. If I am being honest here, it probably started with an employee that did a Google search by mistake and ended up on my site rather than their internal system 🤷.

I have found many tools that make running a company incredibly easy and affordable. I spend a total of $79/month for all fixed costs. Everything on top of this is variable and trackable directly to revenue if I decide to monetize.

In case anybody else is looking at automating the back office of your company, here is Goto Tools operational stack and monthly costs. If there is interest I’ll be happy to share details about the integrations along with source code/instructions.

  1. Google Ads + Linked-in Ads ~ $100/month (variable, not fixed)
  2. HubSpot for CRM, customer funnel tracking and conversion ~ $30/month
  3. Stripe for billing ~$0/month (I’ve decided not to monetize yet)
  4. Quickbooks for accounting ~ $25/month
  5. Mercury for banking ~ $0/month
  6. Google Workspace for all communications, including voice calling ~ $18/month
  7. Slack for automated communications (chat with us on website, deployment trigger, alerts, etc.) ~ $0/month
  8. GitHub for source code hosting, CICD + IDE for quick changes ~ $0/month
  9. Google Cloud for hosting ~$incredibly low /month
  10. Google BigQuery for data warehouse ~$0/month (at current scale)
  11. Google Looker Studio for reporting ~$0/month
  12. Microsoft o365 to test SSO auth with MSFT ~$6/month

Startup costs: ~$400

  1. Domains (several for testing purposes): $30
  2. Business license + processing fees: $350
  3. A few verification fees to establish accounts like Google Developer to publish our Chrome extension to the Chrome webstore.

IT Systems

Everything is SaaS and Single Sign On linked to Google Workspace Account w/2FA. Google Voice for phone communications so it can ring my other phones and help screen spam phone calls. Hubspot also provides a voice number and has some fancy sales call logging built-in that I’ll explore later. Since everything is web based, I can do most of my development from a Chromebook and GitHub code spaces.

Source Code & CICD

I currently use a monorepo in GitHub with built in CI via GitHub Actions for every aspect of the business from public facing website, core go link application, to data sync and data warehouse schema management. This allows cross system changes such as updating pricing, fields, etc. with one commit. I can do this on the go from my phone in a pinch. The CICD system alerts me on Slack of build and test results so I can approve the push to production. There are components of the software written in Python and NodeJS, but this setup can easily accommodate any language if needed. I was tempted to learn Go or Rust, but that would have probably taken me an extra few days.

Data Sync

To get data from all the above systems into BigQuery, I built some simple Cloud Functions that copy data from APIs and write to BigQuery. For systems that support it I just accept a webhook feed of data changes as they happen. For deduping, I do a full sync and than run a SQL query to materialize the only the latest records:

execute_query(sql=f"SELECT * FROM `{GCP_PROJECT}.{DATASET}.{source_table_id}` QUALIFY ROW_NUMBER() OVER(PARTITION BY id ORDER BY {updated_by_field} DESC) = 1", 
destination_table_id=f"{GCP_PROJECT}.{DATASET}.{destination_table_id}")

This happens every 15 minutes. I expect this will start to experience scale issues when I get to over 50,000 customers in the CRM or 1,000,000 users of the system due to in memory requirements. But good enough for now.

Advertising

I love LinkedIn’s targeting ability. I can target employees that once worked for Google than are now working at another engineering company with less than 1,000 employees. Here is over a million views, just from October 22nd to November 11th.

LinkedIn Advertising impressions from October 22nd to November 12th

Reporting

I can see every touchpoint through the funnel through purchase which is signing up for the service. This triggers a drip campaign to nudge users to invite and grow the account. All the data is pushed in real time (or batch synced in 15m to BigQuery so I get near real time dashboards on all aspects of activity and my core business metrics.

Accounting

All receipts are automatically entered into Quickbooks and tracked to the correct GL codes, allowing continuous closing meaning I can see my exact P&L, balance sheet, and any forecasted costs coming down the pipeline. Right now I’m on a cash basis, and will likely switch to accrual if this turns into anything meaningful.

What is next?

I’m tempted to create a “virtual sales staff” essentially building a SaaS software — very light CRM and sales tracking to allow others to become virtual sales staff and pay anybody that wants to sell my services 20% of first year revenue and 5% of year two revenue. If they sell a customer with 10,000 employees, they would get a check for $20,000 for year one and $5,000 in year two. I think this would unlock a very interesting business model and allow meaningful freelance revenue for some enterprising individuals. Please let me know if you are interested!

You can read the full business plan and financial model, and I’ll post later about the software stack, which has built in geo pinning to handle enterprise jurisdiction + global HA, but here is a sneak peek on how great Google is when you embrace their ecosystem. I spend less than $500/month for sustained multiple QPS (queries per second).

Every deployment is automatically monitored and analyzed including performance regressions:

Google’s latency report comparing the latency distribution of a new software version.

Effort: NOTHING!

Every request is traced, including interaction between microservices, and event based architectures.

Google’s Trace report for RPC calls inside of application code.

What did I need to do to code this? NOTHING.

Built in SLA, SLO and SLIs with Error Budgets, Alerting and incident management:

Google’s built-in SLO compliance dashboard.
Another view of Google’s Latency SLO compliance dashboard.

Effort/Cost: a few simple configurations.

This has been a fascinating side project that has allowed me to dive a little deeper in advertising, funnel tracking and conversion optimization — something I think more engineers should learn about.

If you or your company needs or wants internal short links, I know a guy who has a company that you should check out :)

-Justin Hartung

--

--

Justin Hartung

Lackluster husband and writer, but above average dad, engineer, and business guy.