Say hello. 👋

Shubham Shah

Indie developer building native iOS, macOS, and full-stack apps people actually use.

Navigate

Connect

  • Email
  • LinkedIn
  • GitHub
  • RSS

© 2026 Shubham Shah. All rights reserved.

Built with ❤️ using React, Next.js and Tailwind

All posts
A terminal window with colorful code on a dark background

How I Got Here

June 1, 20266 min read
indieswiftcareerstory

I didn't grow up wanting to be a software developer. I wanted to be a dentist.

That's not a joke. I was the president of the Pre-Dental Club at the University of Waterloo. I took biochemistry and physiology. I sat in on shadowing days. The plan was clear.

Coding snuck in from the side, and by the time I noticed how much time I was spending on it, it had quietly become the thing I was most interested in.

A high school computer class

The seed was a Grade 11 computer science class. It was Python. Loops, functions, basic data structures. The standard curriculum. I wasn't exceptional at it, but I found the problem-solving genuinely satisfying in a way that not much else in school did. There's something specific about writing logic that runs and does exactly what you described. The feedback loop is immediate.

After the class ended I kept going on my own, which in retrospect was the only signal that mattered. If you do something after the grade is in, you probably actually like it.

Discord bots for clients

The first time coding felt like a real skill was when I started building Discord bots.

I was deep in Discord communities at the time, and I noticed that the most active servers all had bots doing useful things. Moderation, custom commands, welcome messages, role assignment. I figured out how to build one, and then I kept building them. After a few months I started getting paid for it. Small amounts at first, enough to matter to a high schooler.

The work taught me something more valuable than any single technical skill. Software you build for other people has different requirements than software you build for yourself. A client doesn't care about your implementation. They care about whether it works reliably and does what they asked for. Getting a bug report from someone who paid you is a very different feeling than discovering a bug on your own.

HQ Trivia and Trivia Utilities

HQ Trivia was a cultural moment. At its peak in 2018, millions of people tuned in simultaneously to answer twelve questions live and split a cash prize. The host was charismatic, the stakes were real, and the whole thing felt like something genuinely new. I was completely hooked.

I was also curious about how it worked. I got my hands on the IPA, ran it through a disassembler, and started poking at what was inside. That's how I found the WebSocket. The app connected to a live game server and received question payloads over a persistent socket connection. Question text, answer options, a timestamp. Everything you needed, arriving a beat before the question appeared on screen.

That discovery opened a door. If you could read the question off the wire, you could answer it programmatically. So I built a pipeline. The question came in over the WebSocket, got parsed and cleaned, then fired off against Google's search API. The goal was simple: find the most statistically likely correct answer in under five seconds. Tuning the search queries to surface accurate results at game speed took real iteration. You had to strip noise, weight the right signals, and handle the weird trick questions HQ loved to throw in.

The second piece was crowdsourcing. I ran Discord servers where people played HQ Trivia together. During a live game, players would drop their answers into a channel in real time. Just a, b, c, or with a question mark if they weren't sure, like a? or 2?. I built selfbots that listened to every message, parsed the responses, and aggregated them live. By the time most players were still reading the question, Trivia Utilities had a confidence-weighted answer on screen built from hundreds of simultaneous guesses and a Google cross-reference.

I sold access to it as a subscription. There were real paying users, real infrastructure costs, real customer support. I was in high school running what was functionally a small SaaS product built around reverse engineering a live iOS app.

At some point, one of the HQ Trivia hosts called us out during a live broadcast. Not by name, but clearly aware something was happening. I remember watching it happen in real time in the Discord while people lost their minds. That was probably the peak of the whole thing.

HQ Trivia eventually shut down and took the use case with it. But what I got out of it wasn't the money. It was the confidence that came from building something genuinely technical under real constraints. Reverse engineering, live networking, aggregation systems, shipping software that people paid for, without anyone teaching me how. These were my most rebellious days of coding, and looking back, I think that's exactly what made them formative. The best way to learn is to build something you're not supposed to be able to build.

Finding Swift

I was at Waterloo studying science when I decided I wanted to build an app. Not as a career move, just because I wanted to see if I could.

Paul Hudson's 100 Days of SwiftUI is where I started. It's a structured curriculum that covers SwiftUI from scratch over a hundred days, with projects at each milestone. It's well-designed and completely free, which meant I had no excuse not to finish it.

I did the lessons on my phone during commutes using Swift Playgrounds. That's the honest version. Not a dedicated study session at a desk, but fifteen or twenty minutes on the bus between campus and downtown Waterloo while also trying to maintain the grades needed for dental school applications. The Pre-Dental Club presidency didn't run itself either. I was scheduling speakers, coordinating faculty visits, and managing a committee while learning to build custom SwiftUI views in the margins.

It's not the most romantic origin story. No dramatic pivot moment, no late-night eureka in a dorm room. Just consistent effort across a long time, in small amounts, while also doing everything else.

What changed

The first app I shipped to the App Store was the inflection point. Not because it was good, but because it proved the path was real. The distance between "I can write Swift" and "there is a product on the App Store with my name on it" is enormous, and crossing it changes what feels possible.

After that, FuelUp was a more serious attempt. A real product, a real backend, a real design system. Then Quilt for macOS. Then Twick, WhatWord, and more.

FuelUp: real-time fuel prices on a map
FuelUp: real-time fuel prices on a map
Twick: native Twitch and Kick streaming with live chat
Quilt: scrolling screenshots stitched into one image
Quilt: scrolling screenshots stitched into one image

The thread connecting all of it is the same one that ran through the Discord bots and Trivia Utilities. Building things that solve a real problem for real people, and caring enough about the craft to do it properly. The technology changes. That part doesn't.

On this page

  • A high school computer class
  • Discord bots for clients
  • HQ Trivia and Trivia Utilities
  • Finding Swift
  • What changed