A Small Personal Project, Removed

tl; dr: Heroku will no longer be offering free-tier services by the end of this month. I will be sunsetting this project, and that I should probably post my thoughts on this somewhere before I forget about it. ​It's a tool to use to save hands and give a strategy on how to play different hands. This project will no longer exist by the publication of this post.

The first deployment of this was over on GCP. However as I have already exhausted all the free computes, I redid it on Heroku.

I piggybacked on cookiecutter django. Because of cookiecutter, I didn't really do too much on setting up tools for local development, I installed mailgun/maildev, set up Postgres, some services on Heroku like redis for cached sessions, and sentry for broken flows. I bought a domain (dysk.app), though never used due to free dyno restrictions.

It's not a complex app, the backend only needing to store a few things, but I started over many times, settling with a tool that saves poker hands, solving the game through a deterministic lens. I thought I could turn it into a paid app, and expand to other tools like stats tracking and bankroll management.

I DM'd some users of some poker forums to use this app for usage feedback. And I saw signs of life, things breaking in sentry reports, hands being added to a db, etc. All of which was really satisfying. If I wanted to, I could have also easily brought on a dev on the developer side of things in github through a pretty clean CI/CD flow / Heroku rbac.

Reasons for this project

Several months ago, I wanted to create an app that saves key poker hands, and would theoretically help me digest hands based on my knowledge of the game at that time.

My main motivation for the was that I thought that GTO solvers were overcomplicating things. Why use a strategy that is just trying to minimize loss against a perfect opponent? I was inspired by part 6 of my own post, classifying how hands interact the board, and having an action for each of those hand segments.

There are many things we can do to simplify poker (or so I thought). Pre-flop is static. We also know a set frequency we are defending at given a villain bet sizing, and so we can just choose a partition of hands we want to continue with (all sets, all ace-high flush draws, etc) rather than "play a certain hand 30% of the time".

Reasons why I'm sunsetting this project

The more I was writing "if/else" statements to do different thing with different hands, the more I realized at how tedious this was. You can see how there is a lot to be desired in the video demo. Just a couple of things right off the bat:

  • Historically speaking, optimal poker strategies were always about minimizing loss. If my value-add for my poker app isn't creating a strategy to minimize loss, then I'm trying to add exploitative tidbits in my if/else statements. If we want to be exploitative, we ought to be capturing data on a specific opponent rather than making assumptions about the general public. And this is an entirely new dimension of variables.
  • In theory, we want to bet when our range has an equity advantage. The right way to do this is to build an equity calculator range vs range, but if we were to do that, then we are veering away from human explainability (and my own sanity). How is an up and down straight flush draw (40% equity against villain's range) different from an A-high (also 40% equity against villain's range) + everything in between. Range vs range equity calculators don't exist for free on the internet, I started to write my own but gave up.
  • Strategies that work for the uniform distribution of possible cards on the turn and river.
  • I originally wrote this to service myself, and I didn't really structure the code to be malleable. What if you want to adjust your betting frequency on certain boards? What if you wanted to adjust your value frequency in certain scenarios? What if an opponent is never bluffing when raising?
  • Too many things that "ought" to be done (e.g. user flow edge-cases, etc.).

There are also excellent existing free-tier apps that does what my app set out or can pivot to. Why create a lesser version of something that's already so good available free?

I don't really consider this a lot of time wasted because (1) learned a lot, (2) didn't really book that many regrettable hours. Definitely helped me think about poker, the game. This blog post serves as vestige/memorabilia of what once existed.

A mini reflection on what could have went better:

  • I could have spent more time/effort on this project so that it's more polished.
  • Probably a bad idea from the start.
  • Heroku could have not removed their free tier.