@rameerez https://rameerez.com/ Maker of PromptHero, Jobician, Hustl, and more Sat, 07 Feb 2026 13:52:13 +0000 en-US hourly 1 https://wordpress.org/?v=6.0.1 https://rameerez.com/wp-content/uploads/2023/02/cropped-favicon2-32x32.png @rameerez https://rameerez.com/ 32 32 Kamal’s missing tutorial – how to deploy a Rails 8 app with Postgres to your VPS https://rameerez.com/kamal-tutorial-how-to-deploy-a-postgresql-rails-app/ https://rameerez.com/kamal-tutorial-how-to-deploy-a-postgresql-rails-app/#comments Mon, 11 Nov 2024 15:55:13 +0000 https://rameerez.com/?p=6097 Rails 8 is out. And with it Kamal 2, the new default way of deploying Rails apps. But Kamal is hard for the uninitiated. This is a complete tutorial on how to get a Rails app fully in production using Kamal.

The post Kamal’s missing tutorial – how to deploy a Rails 8 app with Postgres to your VPS appeared first on @rameerez.

]]>
Last updated: Jan 2026. Now fully updated for Rails 8.1+ and Kamal 2.8+!

Rails 8 is out. And with it Kamal 2, the new default way of deploying Rails apps.

For those unfamiliar, Kamal is a tool that puts your Rails app in a Docker container, which makes it easier to deploy it anywhere. But it comes with its own learning curve.

I personally found Kamal hard for the uninitiated. Many things were missing in the official docs, and I didn’t find any good tutorial on how to get a full whole Rails app in production using Kamal 2 – from scratch to fully in production, accounting for all the moving pieces a Rails app usually needs.

Skip all this config & ship your next Rails app 10x faster

I’ve made RailsFast, a production-ready Rails 8 boilerplate that comes with everything wired and working out of the box (including Kamal with PostgreSQL databases, backups, and all the config described in this blogpost!) Stop rebuilding auth, payments, and admin panels, and ship your next Rails app in a couple days, not weeks.

Rails 8+
Kamal 2+
Stripe Payments
Auth, admin & much more

For example – there’s no good default example or guide on how to set up a Postgres database container for your Rails app to use. You need to dig deep into the Kamal docs and know very well your way around Docker to figure things out. There’s a decent amount of undocumented features too, and even unimplemented behavior that’s present in the docs but doesn’t acutally work in the real world (like the SSH keys array configuration option, which is documented but not implemented – just try it out)

It turns out configuring everything to run even a simple Rails app in production is non-trivial. In the past few weeks I managed to migrate a few of my production apps to Rails 8 and Kamal 2, and I spent a bunch of hours figuring all this out. I’m writing everything down in this blogpost so you can learn from my mistakes and avoid spending all that time figuring things out on your own.

Harden your host instance

Kamal claims that by running kamal setup it “runs everything required to deploy an application to a fresh host”, but it really doesn’t.

Kamal just installs Docker.

It installs Docker only if it was missing in the host machine, when running kamal setup. That’s it.

I managed to shoot myself in the foot and get my production Docker server hacked – mainly because I was unfamiliar with Docker and I changed the wrong config, but also because Kamal doesn’t really harden your instance and fails to make this clear in their messaging.

I think hardening is a crucial step. You can’t really have a production server running and sleep well at night if things aren’t properly hardened. Real production traffic from the internet is full of automated attacks and probing / testing malicious requests, and you better protect yourself against it. At the very least, you need to set up a firewall to block all ports except the absolutely necessary for your app to work; and fail2ban so people can’t just brute force their way into the machine.

I made a comprehensive script to thoroughly harden a fresh Ubuntu Server instance and make it fully ready to run production Docker containers.

You can ⬇ download it from my GitHub Gist. Just ssh into your new Ubuntu server wget it, chmod +x it and run it.

Note: it’s good practice to always check scripts you find on the internet before you run them. Make sure they don’t do things you don’t want them to do. For example, ask Claude / ChatGPT to review and explain my script for you.

Configure a Docker image registry

With Kamal, you now need a Docker registry to upload and pull your images from. You can’t just deploy your code straight to the server: it now has to be built into a Docker image, that Docker image needs to be uploaded to a remote container registry, then that same image needs to be downloaded from the container registry into the target production server. There’s rumors that Kamal will allow you to easily make your deployment server also work as a Docker registry in the future to avoid this external dependency, but for the time being, using a separate registry is the easiest – and the default.

I shopped around and considered a bunch of options, like GitHub (ghcr.io), Docker’s own container registry (Docker Hub), the DigitalOcean Container Registry, and even setting up your custom container registry using Cloudflare R2. The problem is if you need to keep your Docker images private, and deploy often to production (as you should), each service varies wildly in thresholds for the free tier / pricing for the private tier.

I found AWS Elastic Container Registry (ECR) was easiest and cheapest option (ironically, because I left the cloud last month)

The first thing you want to do is create an AWS account if you hadn’t already, configure billing and all that, and configure the aws CLI.

Then, on ECR, create an actual registry for each project you want to deploy with Kamal. You can name your ECR repositories anything you like, I chose to name mines following the typical Docker Hub naming convention username/projectname

While you’re still on your AWS ECR repo, set up a lifecycle policy rule under Repositories > Lifecycle Policy so only the most ~10-20 recent images are kept (~5GiB) and the old ones get auto deleted, so you don’t incur in big storage costs by keeping every single image you build.

ECR costs $1 per 10GiB; each Kamal image is roughly ~250Mb, so if you’re pushing to production twice a day, you’re increasing your total ECR storage by 1GiB every 4 days, so you’re roughly increasing your ECR costs by $1/mo every 40 days. It’s not much but it’s a waste to have stale images taking up space in your registry.

Now, there are also charges for data transfer.

In particular, AWS ECR charges $0.09 per GiB transferred OUT of the registry, if your repository is private and you’re deploying the images to servers outside of the AWS network (like Hetzner, for example). In the case you’re deploying twice a day, you’re transferring out 250Mb * 2 times/day * 30 days/month * $0.09 / GiB = ~15Gib / month * $0.09 / GiB = $1.35/mo

So you’d expect to pay around $2.35/mo for the registry and associated data transfers, PER repository, if you’re deploying to production twice a day every day and you have a private Docker registry.

Configure Kamal secrets

To allow Kamal to access the Docker registry, you’ll need to configure the right access secrets on the .kamal/secrets file.

This is also partially why I found AWS ECR the easiest to set up. I can just write this on my secrets file:

# .kamal/secrets

AWS_ECR_PASSWORD=$(aws ecr get-login-password --region us-east-1 --profile default)

and that’s enough for Kamal to access my ECR registry on production, provided I also set it right in deploy.yml, like this:

# config/deploy.yml

password:
  - AWS_ECR_PASSWORD

If I were using something else, like Docker Hub or the GitHub Container Registry, I’d have to provide Kamal with access to my whole password manager, in my case using Kamal’s Bitwarden adapter, which would require me to:

  • Download and install the Bitwarden CLI tool
  • Configure the Bitwarden CLI with my credentials and leave it logged in
  • Unlock my Bitwarden vault in the CLI
  • Make sure my Bitwarden vault is always unlocked in the CLI every time before deploying with Kamal
  • (!!!) Expose my whole Bitwarden account’s master email in plaintext by commiting it to GitHub:
# You'd need to commit this line when using a password manager like Bitwarden to store Kamal secrets:

kamal secrets fetch --adapter bitwarden --account [email protected] REGISTRY_PASSWORD DB_PASSWORD

I found AWS not only cheaper, but also nicer in the way it shares secrets with Kamal because I can just use the aws CLI and avoid leaking my Bitwarden master admin email.

Run PostgreSQL in the same server as your Rails app

To run PostgreSQL in the same server as your Rails app, you’ll need to configure a postgres accesory and set up the right Postgres config across your Rails app.

This is not trivial.

To begin with, define your production postgres accessory in Kamal’s deploy.yml file:

# config/deploy.yml

# First, define the right database ENV variables in the env / clear section
# These are the ENV variables your RAILS app uses. They'll need to match your Postgres variables ofc
env:
  clear:
    DB_HOST: servicename-postgres
    POSTGRES_USER: appname
    POSTGRES_DB: appname_production
  secret:
    - POSTGRES_PASSWORD # Comes from the .kamal/secrets file
    # you'll have here other keys like RAILS_MASTER_KEY etc.

# Then, configure the `postgres` accessory
accessories:
  postgres:
    image: postgres:15
    host: x.x.x.x # The IP you want the database deployed to
    env:
      clear:
        POSTGRES_USER: appname # Same as above
        POSTGRES_DB: appname_production # Same as above
      secret:
        - POSTGRES_PASSWORD # Comes from the .kamal/secrets file
    directories:
      - data:/var/lib/postgresql/data

Few things going on here:

  • We define an accessory named postgres (this name is important, we’ll use it later)
  • We use the postgres:15 Docker image for the database, which will get pulled from the Docker registry. The reason why we use the 15 tag and not the latest version (17 at the time of writing this blogpost) or the alpine version is deliberate. PostgreSQL 15 is the most mature, stable and long-term supported PostgreSQL version as of today, with extensions and tools thoroughly tested against 15, and the alpine versions, despite having a smaller footprint, are not as well suited for production use because they may not fully support some extensions, may lack security updates, debugging tools, etc.
  • We do not expose the PostgreSQL database to the internet. The Rails app container and the PostgreSQL database container talk to each other via the kamal Docker network, which has its own name resolution, so there’s no need to even expose a port or an IP to the host machine. The Rails app just connects to the appname-postgres container via Docker (appname = your app name; postgres = the name of the accessory, defined as the key of the accesory in the Yaml)
  • This way, we can have multiple Rails apps and Postgres databases running on the same host machine seamlessly, without worrying about port collision.
  • If, for some reason, you want to expose the Postgres container to the host machine (for example: if you’re using a database management program, or something that needs to connect to a port), you can still expose the Postgres container port to your host machine without exposing it to the internet. To do this, below the host key, you would add the port key, like this: port: "127.0.0.1:5432:5432" — This way, you’re linking the host server’s internal / localhost 5432 port (127.0.0.1:5432) to the Postgres’ Docker image’s own 5432 port. This way, as far as the server is concerned, the Postgres server is only running on localhost:5432, and not exposed to the internet (which would be achieved by writing only 5432:5432 instead)
    • In fact, if you wanted to have multiple Rails apps running in the same server, each of them with their own PostgreSQL Docker image, and each of them exposing their own unique port to the host machine, you could just change the internal port to something else like 5433 or 5434, while still routing it to the Docker image 5432 port, like this: 127.0.0.1:5433:5432. You’d do this just to avoid multiple containers colliding in port 5432 in the host machine – but in your Rails deploy.yml file, in the env section, you’ll still define the DB_PORT as 5432, because the communication is happening inside the Docker network through the servicename-postgres name (Inside the Docker network, containers always use the internal port, 5432)
  • We define a few env variables to hook up the database to the Rails app:
    • POSTGRES_USER and POSTGRES_DB should contain your app name as Rails usually uses it when creating databases. They usually look like appname_development, appname_production, etc. (if you’re unsure, check out what your development database name is)
    • DB_HOST gets set to a special name that Kamal builds for you. It’s the name that your database Docker container will get in production. Let me explain. The name has two parts: servicename and postgres. Let’s start with servicename: in Kamal’s deploy.rb file, in the first few lines, you define a service name. I usually set it to the same name as my app (appname), but it may be different. This name, whatever it is, let’s call it servicename, then gets used to name the Docker containers running in the production machine. In our case, we’re defining a PostgreSQL accessory named postgres, so the Docker container that will run in production will be named servicename-postgres. If you name your service or PostgreSQL accessory differently, you’ll need to adjust this.
    • DB_PORT gets set to the server’s localhost port hooked up to the postgres Docker container’s port. Remember when I said you can use port 5433, 5434 or any other port instead of the default 5432 if you want to run multiple PostgreSQL containers in the same machine? This is where you need to also modify it.
    • POSTGRES_PASSWORD gets passed here as env variable, but it’s defined and set in the .kamal/secrets file. You need to add it like POSTGRES_PASSWORD=$(cat config/db.key) or read its value from a password manager like Bitwarden, as discussed before. If you decide to save it to disk, make sure to add the config/db.key file to your .gitignore so you don’t commit it to GitHub, and know that it’s less secure than storing it in a password manager like 1password or Bitwarden.
  • To persist database data across deployments, we route the PostgreSQL to the host machine filesystem with data:/var/lib/postgresql/data

To finish, we need to actually use all these environment variables by linking them to the Rails’ app database config in config/database.yml:

# config/database.yml

production:
  primary: &primary_production
    <<: *default
    username: <%= ENV["POSTGRES_USER"] %>
    database: <%= ENV["POSTGRES_DB"] %>
    password: <%= ENV["POSTGRES_PASSWORD"] %>
    host: <%= ENV["DB_HOST"] %>
    port: <%= ENV["DB_PORT"] %>

Of course, instead of deploying a PostgreSQL accessory with your Kamal app, you can also use a managed database, like the Digital Ocean PostgreSQL hosting, AWS RDS, or just host a PostgreSQL server yourself (as I outlined here) – in that case, just set the corresponding database URL and credentials in the .kamal/secrets, config/deploy.yml, and config/database.yml files, and do not define a Postgres accessory in Kamal’s deploy config.

Forward headers from Cloudflare

If you’re using Cloudflare, you’ll need to set up forward_headers: true in the proxy setcion, like this:

proxy:
  ssl: true
  host: example.com
  forward_headers: true

If you don’t do this, you won’t see the real requesters’ IP addresses and all you’ll see will be Cloudflare’s own IP addresses, especially if you’re using the cloudflare-rails gem, as described in this issue.

Setting up a remote builder machine

Sometimes you don’t want your own development machine to build the Docker images that you’ll use to deploy your Rails app. Why? Because you want a beefy machine to build your images faster and reduce deployment time, or simply because your development machine can’t build for the server’s target architecture.

Setting up a remote machine to build your Docker images is fairly simple. Just use the same hardening script we used to set up the server Docker host machine, and then set up the remote machine in Kamal’s deploy.yml file, like this:

# config/deploy.yml

builder:
  arch: amd64
  local: false
  remote: ssh://[email protected]
  args:
    RUBY_VERSION: 3.3.5
  secrets:
    - AWS_ECR_PASSWORD
    - RAILS_MASTER_KEY

You don’t need to configure the remote build server’s Docker daemon for remote access. This means you don’t need to configure Docker in any specific way to expose Docker endpoints publicly, whether authenticated or not. That’s exactly what I got wrong, and how I got hacked. Just use the exact same hardening script as your Docker host server, and Kamal will just connect to the remote build server using just ssh – no Docker endpoints needed.

Make sure to specify all the correct stuff in deploy.yml:

  • amd64 is the target server architecture
  • ssh://[email protected] is the SSH access to the builder server, where docker is the user Kamal will use to log in via ssh to the machine (if you configured your server differently, it may be ubuntu, root or something else), and y.y.y.y is the IP address of the remote build server. Needless to say, your local development computer has to have the right ssh key configured and loaded to make the SSH connection to the remote build server.
  • AWS_ECR_PASSWORD and RAILS_MASTER_KEY are environment variables defined in the .kamal/secrets file, as explained above, that will get passed to the remote build server and built Docker image, like the AWS ECR token for pushing the Docker image to the container registry

Build and deploy your app and accessories

To deploy our Rails app with Kamal, we first need to deploy any accessories, like the PostgreSQL Docker image we’ve just configured, or else the Rails app will fail to boot because the database will not be found.

To deploy all Kamal accessories, run:

kamal accessory boot all

If you only want to deploy the PostgreSQL accessory, named postgres in our case, run:

kamal accessory boot postgres

If for whatever reason an accessory stops working and you need to reboot it, run:

kamal accessory reboot postgres

And if you want to remove the accessory to install it anew or because you no longer need it:

kamal accessory remove postgres

To verify all is working good, you can ssh into the server and run docker ps, it will list your Docker containers running in the host machine. If you only booted the Postgres accessory, it should show:

  • A postgres:15 image running with name servicename-postgres

You can now deploy the full Rails app with Kamal by running:

kamal deploy

If everything went right, you should now see 3 containers running in the Docker host server:

  • A postgres:15 image running with name servicename-postgres (already deployed above with kamal accessory boot postgres)
  • An image containing your Rails app, running with name appname-web-0f123, where 0f123 is a long hash identifying your app version
  • A basecamp/kamal-proxy image running with name kamal-proxy, which is what routes traffic to your app

And if you got here, you should already have a fully deployed Rails 8 app with a dockerized PostgreSQL database using Kamal!

How to back up your PostgreSQL database periodically and automatically with Kamal

When I wrote about how I exited the cloud a few months ago, one of the top objections I got was database backups. Many people were happy to pay the premium of managed databases like RDS just because they have automated backups. The argument was along the lines of: “but how do you recover from disasters if you’re off the cloud?”, implying instance snapshots are not good enough because they’d also go down in the event the datacenter goes down; or “how would you do offsite DB backups if you’re now off the cloud?”

The answer is: this is now extremely simple to do with Kamal! Almost trivial if you have everything else configured. Just add an accessory to back up your database!

You can have your Postgres Rails database backed up to any S3-compatible storage, so the backups are off your instance, and thus suitable for disaster recovery.

You can back up hourly, every minute, every night, every week – up to you and your needs.

To do this we’ll use the kartoza/pg-backup Docker image.

Just add the accessory to deploy.yml, after the PostgreSQL accessory:

pg-backup:
  image: kartoza/pg-backup:latest
  host: 1.2.3.4 # Must run on the same host IP as the postgres accessory
  env:
    clear:
      # Run backups every night
      CRON_SCHEDULE: "@daily"
      REMOVE_BEFORE: 30 # Only keep the n most recent days of backups
      STORAGE_BACKEND: S3
      SSL_SECURE: "True"
      POSTGRES_MAJOR_VERSION: 15 # Match your postgres version
    secret: # These keys are looked up in .kamal/secrets
      - POSTGRES_USER
      - POSTGRES_PASS
      - POSTGRES_HOST
      - POSTGRES_PORT
      - ACCESS_KEY_ID
      - SECRET_ACCESS_KEY
      - BUCKET
      - HOST_BUCKET
      - HOST_BASE
      - DEFAULT_REGION

Make sure to:

  • Set the host IP to the same IP you’re running the Postgres accessory on.
  • Set POSTGRES_MAJOR_VERSION to the same Postgres version you’re using in the Kamal accessory.
  • Set the CRON_SCHEDULE to your needs. Do something like "0 2 * * *" if you want to back up every night at 2am (check out this great website for all available cron options) You can also use cron shorthands like @hourly, @daily, @midnight, etc.
  • Set all the necessary secret ENV vars in the .kamal/secrets file. Especially the S3 connection credentials: ACCESS_KEY_ID, SECRET_ACCESS_KEY, BUCKET, HOST_BUCKET, HOST_BASE, DEFAULT_REGION
  • Also make sure you’ve set aliases for the ENV vars pg-backup is expecting for the database connection: POSTGRES_USER, POSTGRES_PASS, POSTGRES_HOST, POSTGRES_PORT (for example, the Postgres accessory expects POSTGRES_PASSWORD but pg-backup expects POSTGRES_PASS, so you would just make an alias in the secrets file, like: POSTGRES_PASS=$POSTGRES_PASSWORD)

If you just want a working .kamal/secrets file, you can just use mine, it will work out with pg-backup, provided you edit it with your own credentials and names, of course:

# Secrets defined here are available for reference under registry/password, env/secret, builder/secrets,
# and accessories/*/env/secret in config/deploy.yml. All secrets should be pulled from either
# password manager, ENV, or a file. DO NOT ENTER RAW CREDENTIALS HERE! This file needs to be safe for git.

APP_NAME_BASE="yourappname" # Single source of truth for the base name, must be the same as your `service: ` name in deploy.yml

# Example of extracting secrets from 1password (or another compatible pw manager)
# SECRETS=$(kamal secrets fetch --adapter 1password --account your-account --from Vault/Item KAMAL_REGISTRY_PASSWORD RAILS_MASTER_KEY)
# KAMAL_REGISTRY_PASSWORD=$(kamal secrets extract KAMAL_REGISTRY_PASSWORD ${SECRETS})
# RAILS_MASTER_KEY=$(kamal secrets extract RAILS_MASTER_KEY ${SECRETS})

# Use a GITHUB_TOKEN if private repositories are needed for the image
# GITHUB_TOKEN=$(gh config get -h github.com oauth_token)

# Grab the registry password from ENV
# KAMAL_REGISTRY_PASSWORD=$KAMAL_REGISTRY_PASSWORD

# Improve security by using a password manager. Never check config/master.key into git!
RAILS_MASTER_KEY=$(cat config/master.key)

# Pasword to our AWS ECR container registry to push Docker images to
AWS_ECR_PASSWORD=$(aws ecr get-login-password --region us-east-1 --profile default)

# Shared Database Credentials
# Used by Rails app (as POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB)
# Used by postgres accessory for initialization (as POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB)
# Used by pg-backup accessory (as POSTGRES_USER, POSTGRES_PASS)
DB_USERNAME_LITERAL=$APP_NAME_BASE
DB_PRIMARY_PASSWORD=$(cat config/db.key)

# Variables for the Rails application and PostgreSQL container initialization
POSTGRES_USER=$DB_USERNAME_LITERAL
POSTGRES_PASSWORD=$DB_PRIMARY_PASSWORD
POSTGRES_DB="${APP_NAME_BASE}_production" # Database name derived from APP_NAME_BASE

# Define the database host string once
DB_HOST_LITERAL="${APP_NAME_BASE}-postgres"

# Variables for the Rails application
# The Rails app will look for an environment variable named DB_HOST
DB_HOST=$DB_HOST_LITERAL

# Variables for pg-backup accessory
# kartoza/pg-backup expects POSTGRES_PASS for the password
POSTGRES_PASS=$DB_PRIMARY_PASSWORD
# kartoza/pg-backup expects POSTGRES_HOST for the hostname
POSTGRES_HOST=$DB_HOST_LITERAL # Use the same literal definition
# pg-backup connects to the postgres accessory's internal port
POSTGRES_PORT="5432"

# Backblaze B2 (S3-compatible storage) secrets for DB backups
ACCESS_KEY_ID=$(cat config/backups/s3_access_key.key)
SECRET_ACCESS_KEY=$(cat config/backups/s3_secret_access_key.key)

# Define the actual root B2 bucket name (e.g., what you see in your B2 console)
B2_ROOT_BUCKET_NAME=$(cat config/backups/s3_bucket.key)
PROJECT_BACKUP_PREFIX=$APP_NAME_BASE # Or your Kamal service name: "$KAMAL_SERVICE"

# kartoza/pg-backup expects BUCKET to be the full path in S3 where backups should go
BUCKET="${B2_ROOT_BUCKET_NAME}/${PROJECT_BACKUP_PREFIX}"

B2_DEFAULT_REGION=$(cat config/backups/s3_region.key) # Internal variable for constructing HOST_BUCKET
DEFAULT_REGION=$B2_DEFAULT_REGION # kartoza/pg-backup expects DEFAULT_REGION

HOST_BUCKET="s3.${B2_DEFAULT_REGION}.backblazeb2.com" # kartoza/pg-backup expects HOST_BUCKET
HOST_BASE=$HOST_BUCKET # kartoza/pg-backup expects HOST_BASE

I use Backblaze B2 for my backups storage, but you can use any S3-compatible service like Cloudflare R2, Hetzner Object Storage, or AWS S3 itself! Just update the secrets file with your service-specific config.

Tip: make sure you extract your backup S3 secrets from 1password (or another Kamal-compatible password manager!) In my config above, for simplicity, I’ve chosen to put them in files à la config/db.key, so, at the very least, DO NOT COMMIT the secrets to git! Add the /config/backups/* folder to your .gitignore

Example of my Backup B2 dashboard showing a recent automatic PostgreSQL backup using Rails’ Kamal accessories

After all is configured, just boot the accessory:

kamal accessory boot pg-backup

To verify all is working, open up a shell terminal into the pg-backup container:

kamal accessory exec pg-backup --interactive --reuse "bash"

Then, inside the pg-backup container, you can check the crontab job is correctly configured:

root@abc123:/backup-scripts# crontab -l

# Run the backups at 11pm each night
0 2 * * * /backup-scripts/backups.sh > /var/log/cron.out 2>&1

# We need a blank line here for it to be a valid cron file

And see the logs of the backup job:

root@abc123:/backup-scripts# cat /var/log/cron.out

/your-bucket-name/yourappname/2025/May ~
Bucket 'your-bucket-name/yourappname' exists.
upload: '<stdin>' -> 's3://your-bucket-name/yourappname/globals.sql' (0 bytes in 0.4 seconds, -1.00 B/s) [1 of 1]
WARNING: Module python-magic is not available. Guessing MIME types based on file extensions.
upload: '/your-bucket-name/yourappname/2025/May/PG_yourappname_production.20-May-2025.dmp.gz' -> 's3://your-bucket-name/yourappname/2025/May/PG_yourappname_production.20-May-2025.dmp.gz' (460363 bytes in 0.0 seconds, 19.12 MB/s) [1 of 1]
Done. Uploaded 460363 bytes in 1.0 seconds, 449.57 KB/s.

If all is good, you’ll see an output like the above after the backup job has been triggered. If something fails (bucket not found, bad credentials, etc.) you’ll see the specific errors there.

Sample output of the pg-backup container logs showing a successful backup uploaded to S3-compatible storage (Backblaze B2, in my case)

This way, you can set up database backups easily. You’ll now be automatically backing up your Rails Postgres database regularly, in a location different than your main production database, to ensure no data loss or minimize data loss in the case of a failure or catastrophe. An easy, fast, cost-effective recovery plan set up in minutes thanks to Kamal!

P.S.: Thanks a lot to Stephen in the comments for the tip re: using Docker images for automatic database backups leveraging Kamal accessories; and to @Jankeesvw for helping me find the pg-backup Docker image and providing me with a working example!

How to operate your production Rails app with Kamal

Now that you have your Rails app up and running, you’ll probably need to operate it in production. Some things you’ll want to do are: check data and change data in the production database, ssh into the Rails Docker image to run Linux commands, and see production logs. Kamal 2 provides easy shortcuts for each of these tasks. Let’s go one by one:

How to run a Rails console with Kamal

This is an easy one. Just run:

kamal console

And you should get an interactive Rails console hooked up to your production database.

How to open a psql console in the Kamal PostgreSQL accessory container

Sometimes you want to execute some SQL directly from a psql client. In that case, we need to access the production postgres accesory container and execute an interactive psql console inside it. For that, run:

kamal dbc

This is a shortcut for kamal app exec --interactive --reuse "bin/rails dbconsole", but you can also launch an interactive psql console for your accessory container with this long-form command:

kamal accessory exec postgres -i "psql -h servicename-postgres -p 5432 -U appname appname_production"

This will prompt you to input your production database password. After that, you’ll get a fully interactive psql console where you can run your usual PostgreSQL commands and SQL queries.

How to get an interactive console inside your Rails app Kamal container

To open up an interactive Linux console inside the Docker image running your Rails app, execute:

kamal shell

Which is just an alias for the longer command:

kamal app exec -i bash

And you’ll get an interactive shell where you’ll be able to run any Linux command. Just remember that any change you make to the Linux system executing your Rails app won’t be preserved across deployments – if you want that, you should make changes in the Rails app’s Dockerfile instead so the Docker image gets built with your new instructions.

How to get an interactive console inside your Postgres accessory container

Just run:

kamal accessory exec postgres --interactive --reuse "bash"

And you’ll get an interactive console to the Postgresql container.

How to check production logs on your Rails app using Kamal

If you want the equivalent of navigating to the logs folder and running tail -f production.log, just run the handy Kamal alias:

kamal logs

And you’ll get a stream of changes in the production log file.

How to get an interactive console to any Docker image inside the server

This may be obvious for those already familiar with Docker, but it was not for me – I’ve been using Capistrano for years and I’m still getting used to Docker containers.

If you’re already ssh‘d into your Docker host server, you can launch a shell console inside any container with:

docker exec -it -u DOCKER_CONTAINER_LINUX_USERNAME DOCKER_CONTAINER_NAME /bin/bash

Where DOCKER_CONTAINER_NAME is the name the container has when you run docker ps, and DOCKER_CONTAINER_LINUX_USERNAME is the Linux user inside the container that will be used to launch the console.

How to migrate Rails Capistrano apps to Kamal

I recently finished migrating all my legacy Capistrano apps to Kamal. I learned a bunch in the process. It’s pretty straightforward, here’s what I do:

  • Migrating to Kamal usually means upgrading to Rails 8 too, so create an aux Rails 8+ project to have as reference with rails new demoapp --database=postgresql
  • Have both the legacy project and the brand new Rails 8 project side by side and go folder by folder and file by file, matching the new to the old. Specifically, you’ll find yourself copying folders and files like .kamal, .dockerignore, config/deploy.yml or Dockerfile; and deleting Capistrano files like config/deploy.rb, config/deploy/production.rb, or Capfile
  • Make sure to have the /up route ready in your routes.rb file: get "up" => "rails/health#show", as: :rails_health_check
  • Make sure you have the Rails 8 and Kamal gems in the Gemfile (specially with the switch to Propshaft for assets, you’ll want basically to use all the default Rails 8 gems + your project-specific gems, and remove all old, stale gems)
  • In config/environments/production.rb, some settings may give you errors while deploying the new Kamal app, specially make sure you have config.assume_ssl = true and config.force_ssl = true — Again, I suggest checking line by line against the brand new Rails 8 project; in case of doubt, favor the new Rails 8 approach
  • Make sure you can boot all Kamal accessories and deploy your Kamal app successfully before importing any database dump!

Once you have removed all Capistrano files, added all new Kamal files, and updated the Gemfile, production.rb and all other relevant files for Kamal to work, and your app now correctly deploys with Kamal, you can dump and import the database:

  • In the old Capistrano server, get a database dump:
    • ssh root@capistrano_server_ip
    • sudo su – postgres
    • pg_dump yourapp_production > /tmp/yourapp_production.sql
    • gzip /tmp/yourapp_production.sql (optional, but gzipping the dump makes the data transfer faster!)
  • From your local development machine, you can now copy the dump with: scp root@capistrano_server_ip:/tmp/yourapp_production.sql.gz .
  • And upload it again to your Kamal Docker host machine with: rsync -e "ssh -i ~/.ssh/your-docker-host-private-ssh-key" yourapp_production.sql.gz docker@docker_host_machine_ip:/tmp/ (you can also use scp if you want, I found it didn’t work with me under my current host machine config)
  • Then, ssh into your Kamal Docker host machine: ssh docker@docker_host_machine_ip
  • From your Docker host machine:
    • docker ps to list all containers and see the name of your app’s postgres accessory container name, say it’s yourapp-postgres
    • Copy the dump from the host machine /tmp directory into the Postgres Docker container (also in the container’s /tmp directory): docker cp /tmp/yourapp_production.sql.gz yourapp-postgres:/tmp/
    • Enter the Postgres Docker container: docker exec -it yourapp-postgres bash
    • Inside the Postgres Docker container, navigate to the /tmp dir: cd /tmp
    • Unzip the database dump: gunzip yourapp_production.sql.gz
    • And finally, import the dump into the database: psql -U yourapp yourapp_production < yourapp_production.sql
    • Done! Now all left is cleanup:
      • Remove the .sql dump in /tmp from the Postgres container
      • Remove the .sql.gz compressed dump from the Docker host machine /tmp dir
      • Verify all is working and then tear down the Capistrano box / app

That’s it! It looks like a lot of steps but it’s actually pretty straightforward if you’re careful. Your mileage may vary of course with your own app details, but these are the general guidelines to migrate a Capistrano Rails app into Kamal!

How to fix the Kamal error: `/cable` not found

If your Rails app is using the Devise gem, chances are you’ll get a cable-related error when deploying it with Kamal. The error looks something like:

Firefox can’t establish a connection to the server at wss://example.com/cable.

wss: ActionController::RoutingError (No route matches "cable")

This error stumped me for a good while, but the solution is as easy as setting this in your config/initializers/devise.rb file:

# config/initializers/devise.rb

config.reload_routes = false

The error is well documented in this GitHub issue.

What’s next

Now that your Rails app is running in production using Kamal, there’s a few things you could look into:

  • Adding good error reporting and logging (using papertrail or similar) – so you log and/or get notified of errors
  • Monitoring your server (memory usage, CPU, disk, etc.) – I use my gem allgood for that, you could add something more advanced
  • Setting up load balancers
  • Setting up job processing instances
  • Setting up real-time PostgreSQL replicas

If you have good ideas on how to do any of the above, please do write a comment below! I do not know what’s the best way of doing many of these things and could use some help.

The post Kamal’s missing tutorial – how to deploy a Rails 8 app with Postgres to your VPS appeared first on @rameerez.

]]>
https://rameerez.com/kamal-tutorial-how-to-deploy-a-postgresql-rails-app/feed/ 17
Send this article to your friend who still thinks the cloud is a good idea https://rameerez.com/send-this-article-to-your-friend-who-still-thinks-the-cloud-is-a-good-idea/ https://rameerez.com/send-this-article-to-your-friend-who-still-thinks-the-cloud-is-a-good-idea/#comments Fri, 04 Oct 2024 16:42:09 +0000 https://rameerez.com/?p=5940 You've been lied to. You don't need the cloud – you can just run servers and save 10x your AWS costs. It's not that difficult.

The post Send this article to your friend who still thinks the cloud is a good idea appeared first on @rameerez.

]]>
I recently took all my projects off the cloud, saving 10x in monthly AWS costs and thousands of dollars:

This tweet got viral, and I found out two things.

One – many developers were tempted to do the same, and therefore curious on how I did it myself, so I wrote a blogpost explaining exactly how I exited the cloud.

And two – the most important one: the majority of people commenting were not only not tempted by the idea, but highly confrontational about it.

Interesting behavior –I thought– because I genuinely believe I did something good from both a technical and business point of view: I managed to decrease costs 10x while getting a 2x performance speedup for free, and freeing myself from vendor lock-in – who wouldn’t want that for their business?

Build and launch your AI startup this weekend

Shameless plug: I've made RailsFast, the template for AI coding. It's a production-ready Ruby on Rails boilerplate that's been heavily optimized for vibe coding, and comes with everything you need wired and working out of the box, so you can literally put up a live site accepting payments in 15 minutes. It contains everything I've learned in the past 10 years from scaling apps to millions of monthly users, and it's a very solid foundation to build your vibe-coded business on top of. Stop rebuilding auth, payments, backups, and admin panels, and turn your idea into reality in literally a couple days.

Full-stack
Database & migrations
Payments & subscriptions
Auth, admin, backups & much more

I have more money in my pocket, I’m more free, and I managed to do so while providing a better service for my users.

Well, turns out many people had strong opinions about it.

I’m sorry, but you’ve been scammed

You’ve been scammed, likely not out of your own money, but your employer’s money – and that’s why you don’t give a crap.

See, I noticed something interesting. Most people complaining about what I did happen to have “devops”, “cloud engineer”, “serverless guy”, “AWS certified”, or something similar in their bio.

None of these people have any skin in the game.

They don’t run their own projects in the cloud, they don’t pay a single dollar of the cloud bill at the end of the month, and they couldn’t care less about their employer’s AWS bill. They don’t feel the pain of being scammed out of thousands and thousands of dollars by cloud providers month after month. With someone else’s money, everyone’s brave.

To them, it’s way too convenient to be on AWS: not only it solves their problem, but it’s also a shiny object. It’s technically complex, it makes them look smart in front of other devs, it creates dependencies and lock-in effects so they’re not easily replaceable as employees, and most importantly – being on the cloud yields them a fat paycheck at the end of the month. They don’t have any incentive to make the most efficient decision for the business they work for, on the contrary – they depend on the business’ infrastructure being as complex and convoluted as possible, or they’ll be out of a job.

So don’t count on any of them telling you the truth – the truth that servers are not actually expensive.

You can just rent servers for cheap

I made my move from AWS to a company called Hetzner. I don’t get paid by them or have any affiliation to them, they just happen to offer cheap servers. I’ve used Digital Ocean in the past, loved them and considered them this time, but Hetzner prices are just better.

How good are the prices? Well, let’s take a look:

You can rent bare-metal servers with 80 cores for under $190 a month. I repeat: eighty cores for one-hundred-ninety dollars a month.

For comparison, compute-heavy instances in AWS of the C5-C6 families with comparable number of vCPUs cost between $2,500 and $3,500 a month – which is between 13x and 18x more expensive. Sure, you can get reserved instances, and that brings the price down to ~$1,300/mo, which is still 7x more expensive, plus you’d need to pay $46k upfront and be locked to a 3-year contract. I don’t know, Rick…

Say you don’t need such a big server. You don’t need, or you don’t want, to pay for the 79EUR one-time setup fee. It’s understandable, you only want to run your little projects, or you want a bit more flexibility. Let’s look at the VPS options:

You still can get a 48-vCPU machine for around $300/mo, without setup fees, without 3-year contracts, and with full flexibility to scale it down if needed.

Or a more-than-enough 8-core, 32GB RAM machine for around $50 a month that will probably be able to run all your projects at once, as long as they’re not getting literal millions of requests per day.

You can buy servers for even cheaper

But say this is still not cheap enough for you.

You’re not worried about monthly costs, you’re looking to save for the long run. Well, turns out buying your own servers is even cheaper in a long enough time frame:

You can buy a decent rack-mounted server, with 44 CPUs, 256GB RAM, 2TB NVMe SSD and a bunch of other features for under $1k. Think about it. You could probably run your app for years – for less than what you probably pay a month in cloud services.

Now, of course, you can buy the server but you still to account for the electricity costs, internet costs, cooling costs, rack costs, etc. I’m not going to get to that level of detail. The bottom line is that good servers are cheap.

You can also choose to rent rack space in a datacenter, and they’ll provide you with reliable electricity, internet, cooling, security, etc. You can look for datacenters in your area using websites like DatacenterMap:

The way it works is: you call the datacenter and they provide you with either shared space or a whole secure room for your servers, called datacenter cage, like this one:

And then you buy and ship your racks, and switches, and cables, and servers to the datacenter, load all the boxes in a little warehouse cart, transport everything into your cage and start building the racks and putting your servers in them:

BUT – all of this is WAY too complex for small developers. You’d probably need to hire an engineer to help you set everything right, you’d need to be in sales calls with the datacenter to negotiate the price and all that – it’s way too cumbersome. Not worth it.

I’m just documenting it so you get a notion of how things actually work. I’ve never done this myself, it’s usually aimed at medium-to-big companies and enterprises that want to build their own infrastructure, and it’s pretty unusual that small teams do this.

Datacenter operations are quite interesting, I recommend you go watch some videos to get a better understanding of how the internet actually works. This is literally how AWS works under the hood. It’s all datacenters. The whole internet is just cold, noisy rooms filled with metal boxes. Always has been.

Now, instead of renting an entire datacenter cage, you can just rent some available rack space in a shared rack, and then place your server there.

But you’d still need to physically go and install your server – and the end result is in practice THE SAME as just renting an already mounted server off a company like Hetzner, as I already described. And Hetzner takes care of replacing server parts when they go faulty, and they take all that hardware weight off your shoulders, quite literally.

bUt ISn’T tHat sTilL tHe clOUD

One of the most common critiques I got while I was trying to make the points above was something along the lines of: “but isn’t that still the cloud?”, “you didn’t actually exit the cloud, you just changed cloud providers”

Look, first of all, you’re as unique as the other 1000 peanut gallery enjoyers that have made the same astute observation before you. Congratulations. But you’re absolutely missing the point.

The point here is that there’s value in managing your own servers VS just accepting the cloud as a given truth. The point is you can start paying 10x-100x less money by running a little Linux machine instead of using managed AWS services. The point is most developers are scared of servers, and they just need a little push and encouragement to realize they can just set up their own servers for cheap to replace money-burners like RDS. The point is almost no one in the real world needs the cloud’s expensive managed services, and can do just fine with regular software running on a couple Linux boxes.

At the end of the day, the only hard truth is whether you managed to keep more dollars in your pocket or you gave them away to Amazon’s stockholders’ pockets.

The whole debate of “is this still the cloud or not” is nonsense to me. You’re just getting lost in naming conventions. VPS, bare metal, on-prem, colo, who cares what you call it. You need to put your servers somewhere. Sure, have a computer running in your mom’s basement if that makes you feel like you’re exiting the cloud more, I’ll have mine in a datacenter and both will be happy.

I don’t care if the server is physically in my building. I don’t need to touch it, I need to ssh into it. In fact, if I had bought a physical server instead of renting one off Hetzner, I would still need to rent rack space to host it. At which point, you’re just doing the exact same thing as renting a server off Hetzner, only more expensive and less convenient if you’re a small developer.

It seems to me that people pushing for the “this is still the cloud” mindset are essentially gatekeepers. “You’re not doing it correctly, you need to purchase your own switches, build your own rack, hook the ethernet cable yourself…” – boss, how far do you wanna take this argument? Do you etch your own circuits too? This whole thing is like saying “I’m the only one who knows how to do it right and you’re not puritan enough to belong in this exclusive club”. It’s not only toxic, but it’s also the most lazy argumentation one could make. It’s choosing to get nuclear over a superficial nuance, instead of trying to refute the central argument.

The central argument is servers are not actually expensive, and whoever is telling you otherwise is probably trying to sell you a cloud managed service.

Companies like AWS or Vercel are charging you a 10x to 100x markup.

You’re not using the cloud wrong, it’s just expensive

They will try to gaslight you.

They will not only try to convince you you’re not exiting the cloud, but they’ll go as far as gaslighting you. They will make you believe you were not smart enough to get the cloud.

“You’re using the cloud wrong”, “It’s expensive because you’re doing it poorly”, “You just need to know how to use the cloud”.

You will hear a bunch of crap from people that have literally never tried the alternative. People with no real hands-on experience managing servers for their own projects for any sustained period of time. People trying to offer expert-level advice but that end up just spewing out generic, bland, off-the-shelve clichés and vague notions about how they think the cloud should work. People not only without skin in the game, but whose first job was straight into the cloud. People that go literally silent when you ask them: “so, what have you personally built lately, how many users does it serve, and how much are you paying for it?” They just don’t know better, and they’ll try to save face by defending themselves like a cat with its back against the wall – even if that means gaslighting you.

I’m definitely not an expert but I know my way around AWS. Hell, I’ve even studied AWS certs. I made sure my infra was not overprovisioned. I made sure I was not paying for services I was not using in regions I might have used only once or twice. I had already spent countless hours optimizing AWS costs, and even had some success in doing so (I even managed to cut my monthly AWS bill in more than half last year – it was north of $5k/mo before!)

I already did all that. I do know about serverless computing. I do know about reserved instances. I had reserved instances, in fact. (Don’t purchase reserved instances, they only make the problem worse: they create vendor lock-in, and they essentially go against everything I’ve been trying to argue. The least thing you want when you’re considering getting off the cloud because it keeps getting more and more expensive is to lock yourself into it with a 3-year contract. Yes, I also do know you can resell RIs, thanks, my argument still stands).

I tried all that, I tried as hard as I could, and the only conclusion I arrived to after many, many frustrations was that the cloud is simply way too expensive.

You can try yourself, by all means be my guest and try to prove me wrong, but I’ve already been there, done that, and I’m pretty sure of what I’m saying. So I’d suggest you just don’t listen to the fearmongering cloud cult folks that keep repeating gaslighting mantras like a broken record.

You won’t make friends proposing all this

All this backlash was interesting. Why do all these people care if I save more money or not?

I arrived at two main conclusions: 1) their livelihood depends on it; and 2) because of this fear, the conversation turns irrational.

One – their livelihoods depend on it.

If they’re wrong, and if I and more people like me manage to convince enough people that they’re wrong, they may be out of a job soon.

It’s as simple as that.

We come from a decade-long trend where the cool thing was to build things in the cloud, which in turn created thousands if not millions of “devops” and “cloud engineers”; and we’re now switching to a trend where the cool thing is to keep things off the cloud, which may terminate the careers of many cloud experts. It’s just another cycle, but people get understandably very defensive about it.

I’m sure many developers secretly know the cloud is not as good as they initially promised, and they hold that conflicting thought in their head day in and day out as they go about their job. There’s just no way those bright engineers look at their employer’s AWS spending realizing it’s 10x what it should be and go like: “ah, this is fine”.

But no one wants to do the work, and risk getting their managers upset and getting thrown under the bus. They don’t want to risk the political cost of not being in the same page as the most vocal person in the team. Or they just don’t know better. Many entered the industry after the cloud was already mainstream. People used to run their own servers, it used to be absolutely normal and just the thing to do, but Amazon’s marketing team managed to flip the market, so newcomers haven’t touched anything but cloud in their entire careers – and AWS evangelists convinced whoever seniors were left.

Two – it’s not a rational discussion. As a result, developers that are currently balls deep into this whole cloud thing have developed some sort of Stockholm syndrome about the cloud. It’s essentially sunk cost fallacy, but it turns them into very irrational creatures.

AWS has a strong cult-like following. They teach you the doctrine via certifications where they make you memorize actual sales pages and product offerings, they have literal evangelists, they instruct you to stop listening to the rational voices around you that push for pragmatism instead of dogmatism, they instill fear of the outside world in you (servers are dangerous! things don’t scale!), they make you adopt “cloud engineer” as your whole new identity, they make it really easy to get in but really difficult to get out, etc. I’m not saying it’s an actual cult, of course, just that things get irrational pretty quick. More so when people’s livelihoods are on the line.

The end result is AWS followers, whenever confronted, get caught up in dogma and just start throwing irrational arguments left and right, repeating the AWS sales landing pages’ talking points one by one, and don’t even stop to think about what they really need or if those things are even of use to them. They got tricked into believing something, and once you touch upon belief systems, people get irrational.

I could never win this irrational discussion with rational arguments. It doesn’t matter how good my optimizations were. I could have cut costs 100x instead of just 10x – or I could have claimed something outrageous like I got to run all my infrastructure for just $1. It just doesn’t matter.

These people would still be ranting and arguing that I’m doomed because now I don’t have things like “infinite scalability capabilities” or “automated failovers with automated replica recovery”. These are things that I’ve never needed or used, things that I’m sure 99% of people in the thread never needed or used either, but that they throw at you in a vain attempt to build an argument.

When people are cornered, arguments quickly turn into dogma – and fear:

Hackers will break in. Your servers will get full of malware. Your hardware will fail and you won’t be able to restore it. Your switches will break and your customers will leave while your server is down. You will need to pay someone to maintain and upgrade your server, there’s no way around it! And you need a plethora of busywork to “do it properly”: failure scenarios! Recovery plans! Managing availability! Infosec! Monsters, spiders and zombies! All of them, coming for you! Be afraid, very afraid! How dare you not be afraid of all this scary stuff!

Well, either the last 15 years of my life –and the lives of most webmasters on the internet– have been a lie, or you don’t actually need any of that to run a server online.

How did we get here?

The majority of devs are clueless, or have forgotten, about how we got here.

Everyone used to run their own servers. Either VPSs, or hosting services, or bare metal in datacenters, or in a dark room in their companies, or at home. Everyone was familiar and comfortable sshing into machines.

I remember very clearly how the cloud marketing psyops campaign started in the early 2010s. It was a deliberate move by companies to try to shill their enterprise technology to early-stage startups, trying to get them locked in as early as possible so they could milk them as they raised rounds.

I remember when AWS started to give out credits specifically for startups only. They would literally make the rounds, going from startup accelerator to startup accelerator, trying to get everyone on board.

The trick is easy: you make it extremely cheap (free!) for startups to build on your infrastructure, then make everything extremely expensive as they grow, and enjoy the show because they’re so locked in most will struggle to escape the ecosystem by them.

AWS was not the only one. I remember attending an IBM cloud event in 2014. I was the CTO of a small startup at the time. They were very specifically targeting startups; in fact, we got the invitation via our startup accelerator.

We ran everything on Heroku at the time, and it worked just fine. I remember thinking: “what the hell is all this cloud stuff and how do I use it?” I vividly remember feeling like they were trying to sell us something that was not designed for us. I spent some time looking into it and just couldn’t wrap my head around this whole cloud thing. All of it sounded so alien to us.

But all these companies poured literal millions upon millions of dollars into this cloud shilling campaign over the following years, tricking early startups into adopting enterprise technology.

They ended up being successful at it – and the aftermath is the current state of web development in 2024. Zero interest rates through most of the last decade definitely helped in getting us here.

There is now a counterculture movement, mainly led by @dhh and the Rails community, and this feels like something fundamentally fresh, right, and aligned with the reality of MOST software businesses on Earth.

You don’t need the cloud

Some people are absolutely out of touch with what most software businesses look like in the real world.

They think in terms of Fortune 500; they truly believe enterprise is the norm. They think the average business needs all the bells and whistles the cloud has to offer: high availability, multi-zone replication, automatic failovers, distributed Kubernetes clusters…

The reality is only a teeny tiny fraction of all software businesses need something like this.

Most businesses are and will always be small, by a simple rule of power law.

Representation of a power law distribution. Actual phenomenon depicted is mostly unrelated, but it shows what a power law is: a very small number of companies are actually big – while the vast majority of companies in the long tail are small. In the United States, small businesses account for 99.9% of all businesses. In the European Union, SMEs (defined as having fewer than 250 employees) represent 99% of all businesses. Similar patterns are observed in many other countries around the world. Your little app is (most probably) not part of that 0.1%.

Most business are small, and the ones that need actual computing power can do incredibly well without the cloud up until a very high point. Scaling vertically can get you very, very far nowadays.

Most devs wildly overestimate scaling requirements. They have such a low bar for what “high traffic” means.

Here’s a reference point: my current two-server setup serves millions of requests a day for millions of monthly visitors. So is the case for many other indie makers, like @levelsio, who even managed to get everything down to one single server. Most devs have never tried running a project of their own, with actual users and actual production traffic, on a single server – and it shows.

Devs also wildly overestimate other technical requirements. Again, only a tiny fraction of software businesses need the bells and whistles. Of course they exist, but they’re rare, and they usually have very good reasons for their technical decisions.

Like Netflix, needing to transcode and stream enormous amounts of video to customers all over the world. That’s where you need distributed systems, CDNs, edge computing, all of that stuff. Your little app with one thousand users that just sends some JSON objects around does definitely not need that.

I feel like most devs have this magical notion in their heads that their project is something like Netflix. It’s wishful thinking, and I get it – you want to be as successful as Netflix. But it makes you make the wrong technical decisions, and all of a sudden they think they need to have distributed servers all over the world because their users will somehow notice a few milliseconds difference in latency when they tap a button. It’s wild.

I remember a random conversation I had with a young entrepreneur a couple years ago. He ran a mobile app. I don’t remember what exactly it did, but it was of the “upload things and follow people” category of apps. I asked: “what’s the biggest challenge your facing in your startup?”, and he replied: “well, that’d be estimating monthly AWS costs. They’re high and unpredictable”. I held my breath and took a step back, as one does when someone makes a claim bold enough to make you reconsider if you might be in front of a billionaire or a super-successful entrepreneur you’ve never heard about, and respectfully asked: “how many users does your app have?”. “Oh, about a thousand now” – he replied.

Bro, just get a server. You don’t need the cloud.

Your servers are going to be okay

Something I discovered is that a lot of people have magical ideas about how datacenters actually work.

They think servers in datacenters are fragile and volatile. Like things that can just vanish into thin air.

Someone even thought a lightning strike can take down an entire datacenter and nuke your business out of existence.

The reality is modern datacenters already account for all these problems and are equipped with many protections: not only against things as mundane as lightning, but against pretty much anything that can compromise uptime.

They have plenty of redundant systems: redundant power sources, redundant cooling, redundant internet connections, redundant fire suppresion systems, redundant security sustems and tons of physical security… Everything in a datacenter is designed with resiliency and redundancy in mind (N+1 redundancy at minimum, sometimes 2N) to guarantee uptime.

These are mostly fear-driven opinions, the result of a successful cloud marketing and psyops campaign. Where do you think AWS stores their machines, in a magical place under the rainbow? And how exactly would AWS machines be the only ones magically protected against problems that other datacenters also have?

Disasters can happen (OVH 2021), sure, and you should have backups to recover from them – but in my experience of ~15 years running servers I think they’re rare, and I’ve never had any downtime of more than a few minutes.

Your server is probably going to be okay.

You won’t have to spend your days managing servers

Anyone who has managed servers for long enough knows you spend most time in the initial setup; then servers tend to be relatively stable.

Hardware failures are relatively rare, and once a server is up and running it usually runs flawlessly for years without much intervention.

Managing your own servers is not a full-time job.

You don’t need to employ a 5-person devops team. You don’t even need to hire a server guy: you can just do things yourself! It’s not that difficult.

Claude and ChatGPT usually have a good understanding of Linux systems and how to manage them, ask them for help.

When I posted the tweet, people thought this was my first time running servers and claimed I was overly optimistic in what running a server actually means.

It’s difficult to say these things without coming across as arrogant, but I’ve been managing servers since 2006.

I started, as many did, editing PHP scripts and uploading them to my FTP server. I first had to learn how to install WordPress, then ventured a bit and started editing WP templates, then everything else followed.

It was an invaluable experience for me. It taught me the basics.

It taught me what Linux was, how to navigate it, and by 2007 I was requesting Canonical for Ubuntu CD-ROMs that would arrive in the mail and that I would use to install in a partition in my parents’ computer to learn more about Linux.

Those early experiences taught me the basics of web development; everything else is built on top of it. Which leads me to my next point:

You will learn how to use Linux, and that’s a good thing

I think the new generations of devs (genz devs, alpha devs, etc.) are absolutely out of touch with the hardware that runs their software.

They lack these kinds of foundational experiences.

They were born in an era where a random guy on Youtube shilled them one specific vendor and taught them to run one very specific command that magically solved all their infrastructure problems. It’s only reasonable they have magical assumptions about what servers are and how they work.

They rant and rant about how you can just do things “serverless” without realizing they’re just running their code in many different boxes. Of course, many of them go on to learn more about Linux and servers, but the average bootcamp grad, let’s say, lacks the hands-on Linux experience that FTP hackers would have had 20 years ago.

I’m not making moral judgements about this: I’m not arguing it’s good or bad – it is what it is. The current state of web dev.

But the result is companies like Vercel are making literal millions of dollars by capitalizing on this new generation of developers that generally don’t know what they’re doing and have never ran a server of their own in their life.

Ignorance has a double price: being ignorant in itself; and the price you pay for people exploiting that ignorance of yours. Not knowing how things work will actually cost you money.

You’ll be fine

Even if you’ve never managed your own server and you’re scared of everything that smells of backend, you’ll be fine.

In fact, there has never been a better time to get good at servers. Claude and ChatGPT are both extremely knowledgeable about Linux, and can guide your steps like it’s never been possible before in the history of technology. Not only to set things up and understand how they work, but whenever you need to make a change you can just ask them, and follow the steps without needing to hire anyone. It’s not as scary as it seems, and you won’t have to do it that often.

Plus, in the time of AI where code generation is the norm and code might even become a commodity, knowing how to put that code in cheap production servers, and make it actually useful to end users might be a key differentiator for you as a developer.

You will now need to worry about things like security, sure. Don’t listen to those arguing that running your own server is somehow less secure than running AWS’s servers, as if EC2 instances were magically protected against hackers or something.

The reality is it’s not that difficult to set things up right, just follow my guide and setup scripts for example. There are many devs, more experienced than you, doing things in production way worse than what you could do when equiped with AI. Ask ChatGPT how to harden your Linux server and follow best security practices (like: don’t use password auth, only strong ssh keys) and you’re 90% there. Just take the plunge and go for it.

Something like Cloudflare can get you really far, too.

After locking your Linux box you can run Cloudflare on top of everything for an extra layer of protection: proxy the IP of your server on their DNS so you don’t expose it and you’re golden. And you get DDoS protection, edge caching, and a top-tier DNS for essentially free.

You’ll be fine.

The post Send this article to your friend who still thinks the cloud is a good idea appeared first on @rameerez.

]]>
https://rameerez.com/send-this-article-to-your-friend-who-still-thinks-the-cloud-is-a-good-idea/feed/ 8
How I exited the cloud https://rameerez.com/how-i-exited-the-cloud/ https://rameerez.com/how-i-exited-the-cloud/#comments Wed, 02 Oct 2024 17:42:42 +0000 https://rameerez.com/?p=5921 You've been tricked into thinking servers are expensive and the cloud is the only solution. That's just not true. I migrated everything off the cloud into my own servers, and saved 10x by doing so.

The post How I exited the cloud appeared first on @rameerez.

]]>
I recently posted on X about how I saved 10x in monthly infrastructure costs by getting off the cloud and migrating all my infrastructure away from AWS and into a few self-managed servers.

My monthly bill went down from $1,400 a month to just under $120 a month.

That’s over $15k a year in savings. $150k over 10 years. How many things can you buy with $150k?

The tweet got some attention, and many people started reporting similar cost savings by migrating off the cloud. Lots of similar success stories: [1] [2] [3] [4] [5] [6] [7]

I also wrote about why the cloud is a bad idea.

Many other folks were interested in doing the same, but were concerned about three main things:

  • How much time did it take to migrate?
  • How much time does it take to maintain self-maintained infra vs hosted services?
  • What does it actually take to migrate off AWS and exit the cloud?

And that’s exactly why I’m writing this blogpost.

Build and launch your AI startup this weekend

Shameless plug: I've made RailsFast, the template for AI coding. It's a production-ready Ruby on Rails boilerplate that's been heavily optimized for vibe coding, and comes with everything you need wired and working out of the box, so you can literally put up a live site accepting payments in 15 minutes. It contains everything I've learned in the past 10 years from scaling apps to millions of monthly users, and it's a very solid foundation to build your vibe-coded business on top of. Stop rebuilding auth, payments, backups, and admin panels, and turn your idea into reality in literally a couple days.

Full-stack
Database & migrations
Payments & subscriptions
Auth, admin, backups & much more

How much time did it take to migrate off the cloud?

The quick answer is that I migrated production in under an hour, once I had everything figured out.

The long answer is it took me several days, if not weeks, worth of testing and figuring things out until I found the exact steps I needed to take.

But don’t worry, you don’t have to go through that. I documented everything and made scripts to automate all the work, so you don’t have to waste that time. You can find everything here: ☁ How I got off the cloud and migrated everything from AWS to a VPS in Hetzner.

It’s a deeply technical guide with step-to-step instructions. Assuming you’re starting from scratch and need some time to read it and understand it first, it should take a developer 1-2 days to go through it and implement it. You can either stop reading this now and get straight to it, or keep reading this blogpost for more context on what we’re dealing with here.

How much time does it take to maintain self-maintained infrastructure vs hosted services?

People keep making the argument that managing your own servers is almost a full-time job – but I’ve been managing production servers for the past ~10 years and couldn’t disagree more.

Running my own servers has always been the default for me. I rented my first hobby server in 2006 (under my mom’s name, in fact, because I was just a teenager and legally unable to get it myself at the time), and then started running and managing servers professionally circa 2012-2013. I started out with OVH iirc, then went through a bunch of white-label providers, then tried Heroku for a couple years, then moved into Digital Ocean and stayed there for the most part.

I only made the move to AWS last year, when I got tricked into it with promises of infinite flexibility, scalability, reliability and availability. All those cloud buzzwords that mean close to nothing to small business owners, like me, that at the end of the day just see their bank accounts getting depleted month after month. Dollars going from my pocket to Amazon shareholders, getting nothing in return.

As for time spent managing your own servers vs the cloud – the reality is I don’t see much difference, honestly. It’s all machines you ssh into. I had to do server admin work in my AWS servers too. Things would break, or the server would get an update and would need a restart, or something along those lines.

I consider this admin work to be part of my job, and I’ve never managed to not do it – despise deeply wanting to avoid it, and despise having used AWS, Heroku, and some other PaaS providers.

Why are servers so cheap and why is the cloud so expensive? What’s the trick?

The quick answer is: servers are just cheap. You’ve been tricked into thinking they’re expensive.

Technology has evolved a lot, especially over the last 10-15 years, and many things have been commoditized. Everything, from storage (you can get tons of storage for cheap) to compute, is a commodity now. In fact, you can buy your own entire server for under $1k:

There’s just no trick.

It’s not that servers are expensive – it’s that services like AWS and Vercel are charging you a 10x – 100x markup.

Why?

Well, first of all because it’s a great business. Buy cheap, sell expensive, pocket the profits. But the real answer is: all these platforms were designed for the enterprise, not for you.

AWS is complex. It’s meant to be complex. Enterprises have strict requirements. They need to comply with many regulations, they need to ensure uptime and reliability to comply with their SLAs, they need to distribute their huge workloads, etc.

That’s just not the case for small to medium businesses. Much less for hobby projects.

But let’s make sure we’re on the same page here when I say “small businesses”. I’m not talking about websites serving 10 or 20 users. I’m talking about web applications, like mine, processing and serving millions of requests a day for millions of monthly visitors. That’s small in the grand scheme of things, but it’s a significant amount of traffic that needs to be managed.

The cloud only makes sense for extremely large projects, say millions of requests per minute, or for very compute-heavy workloads like transcoding / streaming video and such. If you don’t have such requirements, you’re probably getting nothing out of the cloud.

The problem with the cloud started circa 10 years ago. AWS and other companies started a big marketing and psyops campaign dedicated to convince small developers they definitely needed the cloud for their little businesses. Scaring the shit out of developers, telling them that if they didn’t have things like “automated failovers with automated replica recovery” their whole business would be in danger of being automatically nuked out of existence. Convincing them that running your own servers was somehow more dangerous than using AWS’s servers. They shilled the same thing for the last ~10 years, and in the process they managed to convince many small startups and makers, who like me, fell in the trap.

But the reality is AWS is unnecessarily complex for 99% of users. 99% of users are overpaying for something they don’t need and they’re not even using. You’re better off just renting a beefy Hetzer server.

Ok, so, what does it actually take to migrate off AWS and exit the cloud?

In a nutshell: you need to replicate whatever you had on AWS.

For me, that meant:

  • RDS for the PostgreSQL database (my biggest monthly cost, in fact)
  • EC2 for the web server (my 2nd biggest monthly cost)
  • Elasticache for Redis

But most apps don’t need different servers for each service. In fact, unless you’re getting crazy amounts of traffic or you actually know you’ll need to support heavy production loads, you can get away with having everything in one single server. It’s not only cheaper, but more desirable to do. It reduces complexity, config, time, risk surface, and just about everyhting else you can think about.

If you start growing, you can just scale vertically, meaning you can just upgrade the specs of your server. You can get pretty beefy servers on Hetzner for cheap. For example, you can get a 48-vCPU, 192GB RAM, 960GB NVMe for under $300/mo. That’s more than enough to run 99% of the apps I’ve ever come across.

Me, personally, I went for a two-server setup:

  • A web server to run Rails, nginx, Redis, etc.
  • A dedicated server to PostgreSQL

Why?

I have tested it with my own production workloads, and having PostgreSQL running in the same machine as my Rails server tends to take up too many resources and makes the app slow. Separating the DB into its own beefy server solved the problem. But again, this is only required if you can’t manage to get everything running smoothly in the same server (which should be the case for 99% of the apps)

To get started, you just need to spin up a new server:

Choose your preferred location (always better close to your users), and choose Ubuntu Server as your base image.

Make sure you create a ed25519 ssh key and configure your new Hetzner server to use it – we won’t be accessing the server with any password, only ssh for security purposes.

You can also add automatic backups for cheap.

Finish configuring it and click “Create and buy”, the server will spin up in under a minute.

Once you have ssh access to the server, we’ll need to configure it:

You can just ssh as root into the machine wget the script, chmod +x it to make it runnable, and run it.

Both scripts try to follow best security practices to harden the instance and make it actually production-ready. But I recommend you do your due dilligence and read through them carefully and/or ask Claude or ChatGPT to read them for you and explain what they do. Never run scripts from random people on the internet (like me) without checking them first and making sure they do exactly what you want, and nothing more.

Just those two scripts should get you 90% of the way. They get you machines ready to deploy apps to and support production workloads. It takes an hour or so to get both machines set up.

If you happen to also use Ruby on Rails like me, I made a much more detailed technical guide with step-by-step explanations on how to migrate all your data off the cloud and into a server: ☁ How I got off the cloud and migrated everything from AWS to a VPS in Hetzner

Once you have your production machine(s) set up, you should be able to get all data migrated in a couple hours just by following the steps and running the PostgreSQL commands described to dump and re-import the data.

And that’s it. There’s not much more to it.


All of this works for me and is exactly how I do things for my own businesses. This is the current iteration of everything I’ve learned on how to run production apps over the years.

But I don’t have everything figured out.

People have been raising claims about reliability, recovering from disasters, automating backups, that kind of stuff. I think those are valid claims, I just don’t think they’re worth paying 10x more in monthly costs. I do backups; and if things out of my control break (like datacenter failures, which are pretty rare but I agree they can happen once every… few years?) then I guess can assume a little downtime to fix things up and restore a backup. I’m okay with that and I think it’s worth the savings.

But in any case, I’m sure there’s better ways of doing things, and I’m sure there things I’m not even considering that I should look into. I could always benefit from good feedback, so if you have any good ideas or constructive criticism on how to do things better, please comment or reach out on X.

The post How I exited the cloud appeared first on @rameerez.

]]>
https://rameerez.com/how-i-exited-the-cloud/feed/ 5
Does the American dream still make sense? https://rameerez.com/does-the-american-dream-still-make-sense/ https://rameerez.com/does-the-american-dream-still-make-sense/#comments Wed, 16 Aug 2023 17:10:00 +0000 https://rameerez.com/?p=5122 I unexpectedly won a green card in the green card lottery. As a consequence, I need to scratch my current life plans and move to the US on short notice. I've always had this vague desire to pursue the American dream, but now that it's really happening I can't stop thinking: why am I doing this again?

The post Does the American dream still make sense? appeared first on @rameerez.

]]>
I unexpectedly won a green card in the green card lottery. As a consequence, I need to scratch my current life plans and move to the US on short notice. I’ve always had this vague desire to pursue the American dream, but now that it’s really happening I can’t stop thinking: why am I doing this again?

Don’t get me wrong, I’ve wanted to live in the US for as long as I can remember. That’s why I applied for the green card lottery in the first place. But by the time I actually got it, I was already disenchanted with the whole idea, and I’m no longer so sure about it – the US doesn’t seem that good of a place anymore.

What the heck is that “green card” you keep talking about?

For those of you unfamiliar, a green card is a residence permit that allows someone to live and work in the US permanently. It’s incredibly difficult to get for most immigrants, which makes it a wildly sought-after item, and to alleviate the problem the US government holds once a year a lottery where they give away a small number of green cards to applicants chosen at random.

The US Permanent Resident Card, also known as “green card” because of its predominant green color

With a green card you become a US resident: for most practical purposes, you get the same residency rights as any other American, you’re just not a citizen yet (you don’t get an American passport, you’re not able to vote, you can’t do government jobs, etc.) What it gets you is rights to get in and out the country when you like, work high-paying US jobs, and live an otherwise normal American life.

There’s a caveat, though – you can lose your green card if you don’t use it. If you don’t actually move to the US and live there, or if you leave the country for many months, they’ll take it away from you and you’ll lose all residency rights (they won’t let you enter the country, you won’t be able to work US jobs, etc.) That’s why in a few weeks I’ll be packing things up and taking a plane – I’m moving to the US permanently.

I’m going to pursue my American dream. So I wanted to explore this one question that I can’t get out of my head: does the American dream still make sense in 2023?

Why USA?

Take a look at the map below:

Immigration by country, 2020. Source: United Nations via World Population Review

It highlights the countries that get (and keep) the most immigrants in the world. Which one particular country, out of the almost 200 represented on that map, immediately got your attention?

USA has consistently been the #1 choice by immigrants of all nationalities. It hosts some 50 million immigrants – far from the #2 on the list, Germany, with only 15 million. Think about it: the US attracts not 10% more, not 50% more, not even twice as many, but more than three times more immigrants than the second most attractive country in the world. To put it in perspective: it’s as if you win the NYC Marathon in 2 hours, and the next best participant takes 6 hours to complete it.

The amount of immigrants a country receives can be thought of as a good proxy to measure country attractiveness. The more immigrants a country receives (and keeps), the more attractive it is, because everyone wants to live there. On the other hand, the more migrants a country sends, the less attractive it is, because everyone wants to leave.

I think it’s fair to say that the US is the most attractive country there is. It’s so popular that people either risk their lives or go to great lengths to get a residency permit for themselves. Entire shows like 90 Day Fiancé are based on the single premise that some people will do pretty much anything to get a green card.

But what does the US have that attracts so many people, from so many different backgrounds – and how is it different to what other countries have to offer? The answer might be The American Dream.

What does the American dream mean?

The American dream is this idea that with hard work and dedication, everyone can build a better life for themselves in the US. The interesting bit is that subconsciously, everyone knows what it is. We’ve been taught the concept through years and years of exposure to imported American culture.

The average American is probably not aware of how much culture their own country exports to the rest of the world.

«It’s crazy to me that that concept, the American dream, you hear about that all the way in Germany»

– An American Youtuber named Ryan Wuzer, in one of his videos

Movies, books, youtubers, food chains, influencers, streamers… most of the culture we consume in the West is made in the US. Most music we listen to in clubs is made in the US. Most Netflix shows we watch are made in the US. It’s everywhere. It’s become –in some way– part of our own foreign cultures, too. So much so that for an American-born person living abroad it’s often difficult to differentiate which parts of their own culture are US-only (like Walgreens), and which are known internationally (like Dunkin’ Donuts).

US culture permeates everyone, everywhere, in all age cohorts: my Spanish parents included. They know what the American dream is, even if they’ve never been told explicitly, and even if they’ve never set a foot in America or speak a word of the language.

When I told them I was moving to the US, their reaction was nothing like when I told them I was traveling to Thailand, for example. Thailand provoked frowning and confusion, USA smiles and hope. They don’t know Thailand, but they do know USA. And they know it’s a place where one can find success and prosperity – and they were happy I was going there, almost no questions asked.

They get the American dream. They get that notion that if you go to the US and put in the work, you can get a better life. Which is a beautiful concept in theory, but it’s way too dreamy and abstract to tackle it properly.

What does the American dream actually mean?

There’s this YouTube channel I’ve started watching recently. The algorithm has been feeding it to me nonstop lately, probably as a result of me doing one or two searches about US immigration.

It’s about this Guatemalan guy called Jorge, he’s now living in the US and makes videos with tips and tricks for new immigrants (in Spanish). I don’t think I’m his target audience, because he aims the message mainly at Latin-American immigrants looking for (mostly) unskilled jobs, but I’ve been watching him because it heps me understand the actualities of the American dream for the average immigrant.

This friendly looking guy is Jorge, a Guatemalan immigrant in the US sharing his story and immigration tips with his over half a million YouTube subscribers. Source

What does the American dream actually mean for actual people arriving to the US today? Based off his videos, here are some verbatim things he recommends that caught my attention:

His messages always come with the promise of improvement over time and a better future:

In my country, I was a bartender, and here in the US, I came to shovel, pick, hoe, dig trenches, plant flowers, and mow lawns. That’s what I came to do. (…) I had a debt to pay. Like me, many of you also came this way. There’s no time, you have to grab whatever comes your way. With time and money in your pocket, you can do whatever you want, but for now, go with the flow and take what comes your way.

«call me jorge» Youtube channel

Now, of course, if you’re reading this blogpost his words won’t probably resonate with you. If I had to guess, you’re probably a software developer like me, or some sort of information worker. I get it. But the reason why I included his story is because this is what the American dream looks like for millions of immigrants. Jorge’s is probably the most common version of the American dream there is.

Most immigrants in the US are like Jorge. Over 60% come from LatAm, and the second biggest group is Asians, amounting to just about a quarter of all immigration. Source: Migration Policy Institute analysis of 2021 American Community Survey data via CNN

What this means is the average immigrant likely arrives to the US with nothing, grabs the worst jobs and survives how he or she can until things get better. Their end goal is to be able to afford a life similar to the one you and I likely already have in the West: a decent home, food in the table, and some degree of comfort. They don’t dream of getting rich (although with time and effort they may), they initially just fight to get the life you already live.

I think those who enjoy the American dream the most are those who need it the most. If –like many Latin American immigrants– you come from a country devastated by communist tyrants where supermarkets are literally empty and buying meat is considered a luxury, then yeah, as long as you have good work ethic, you’ll see the US as pretty much paradise on Earth. And that’s the ideal you’ll project onto others when you talk about the American dream.

This is the ration card still in use to this day in countries like Cuba, which prevents you from obtaining more than your government-allocated ration of basic goods like rice, beans, salt, matches, etc. Meat is either unheard of or a luxury good, and most of the population is just malnourished. The power grid is not properly maintained and it’s highly unstable, and it’s usual for people to spend hours and up to entire days without electricity, which of course renders fridges pointless. They wouldn’t even have the dollars to purchase them, anyways. This dystopian-sounding story is the daily reality for millions of Cubans, and it’s happening right now as we speak, only 100 miles away from the coasts of Florida. Source: Anita Mateu (YouTube)

For us westerns, the American dream may not be as nice as it is for an immigrant like Jorge. We may want to own a home in the US and ride a big American car (fun fact: the US government issues a guide for new immigrants on how to pursue the American dream, which covers some of these topics) – but those are things we can already do in our home countries, one way or the other. It’s not something fundamentally new for us. The expected outcome of the average westerner pursuing the American dream might be a bit dissappointing, if we take the whole immigration context into consideration. We often forget how well off we are, especially in Europe.

In fact, many Americans are now living their “European dream” here in the old continent. Americans that, having a first row seat at how their empire is falling apart in real time, decided to cross the pond and try the Mediterranean wonders and the laid-back lifestyle they’ve been hearing so much about. Again, the YouTube algorithm doing its magic, but lately I’ve also been watching this Texan youtuber called Rachel Anne that moved to my hometown Madrid some 5 years ago and swears by our lifestyle.

Listening to her makes me realize how well we’ve integrated work into an already healthy lifestyle. As some people put it: we work to live – we don’t live to work.

We like having a “third place” to hang out with friends after work on a regular basis, which not surprisingly keeps us mentally sane and fairly happy. Plus, as I said, we’re a farly healthy society: we eat well (for starters, we eat actual food and not processed junk), we keep our bodies in a good shape (we exercise, we don’t have a morbidly obese population, and here you don’t suddenly die if you happen not to have enough money to pay for hospital bills). And our healthcare systems don’t have perverse incentives and lobby groups of dubious intentions to keep us addicted to opioids.

There are plenty of Americans that, like Rachel, are sharing on YouTube their journey of immigrating to Europe, and I suggest listening to some of them because it really puts things in perspective. No one like them to talk about America with an international perspective.

Our notion of the American dream might be extremely idealized, biased by a handful of extreme success stories coming from the top 0.0001% of immigrants, like Arnold Schwarzenegger or Elon Musk. We, the average immigrant, may never enjoy it to the extent people like Jorge have enjoyed it, nor to the extent we might be imagining in our heads.

I guess the main point I’m trying to make is: when you hear about the American dream, be skeptical. The American dream means very different things for different people. It’s not a concept with a consistent meaning across demographics, and since most immigrants are like Jorge, the most generalized perception of it will be biased towards Jorge’s version of the story. While for us westerns it may mean going to the US to “make it” (become wealthy, own expensive things, live a high status lifestyle) for most people it just means getting to square one and making ends meet – and our dreamy expectations might be just statistical anomalies rather than the average outcome.

One thing I know for sure, though: my idea of the American dream has always been very different to Jorge’s.

My American dream

I’ve always loved computers, and since I was a kid I’ve always dreamed of studying in the best tech universities, move to Silicon Valley, and work in the best tech companies of my time. I’ve always wanted to follow the steps of notable US immigrants like Nikola Tesla or Albert Einstein.

Why?

Well, open up your phone and go to your home screen. For every app icon you see, try guessing where the app was made. Apart from a few exceptions like Spotify and TikTok, I’d guess most of the apps in your phone come from the US.

Random “iOS home screenshot” image I found online – but I think it resembles the average iOS home screen for most of us. For each app or group, I’ve added a flag where the app was made. Not exact / exhaustive by any means, but you get the idea

The US has always meant “the tech center of the world” for me. More specifically: Silicon Valley. The place we all reference, on a daily basis, when we talk about technology. The undisputed number one. Where the best of the best is made, and where the best of the best go do their best work. The place to be if you aim high, and more so if you’re technically inclined. Where else would it be?

Silicon Valley: home of all cool companies ever existed and that will ever exist. A place where the most interesting people in the world lived and worked. Where everyone is and where everything happens.

For years, talking to peers and friends did nothing for me but reaffirm this notion. The US –and Silicon Valley in particular– were seen as very high status in Spain. If someone introduced themselves as “Hi, I’m X and I work for Apple in San Francisco”, everyone dropped their jaws. “Wow, you’ve made it” would probably be the most common thought going through everyone’s mind. They were not only earning several times the average tech salary in Spain (where ~$20-$30k/yr is still considered a very reasonable salary), but they also managed to escape mediocrity and play amongst the best. An irrefutable triumph.

Where is the most exciting artificial intelligence being created? Where is the one place in the world where humans are pushing technology to its limits to make life interplanetary? Where can someone work on connecting actual human brains with computers? Silicon Valley.

Characterization of my idealistic naive idea of Silicon Valley: a magical place where cool things just happen. Living in the future. Self-driving cars, AI-powered stores, delivery robots, bleeding-edge technology everywhere. A tech paradise.

I wanted that. I wanted to be there. I wanted to live in the bleeding edge of tech. I wanted to pursue that American dream.

Then everything went downhill, and sentences like this became commonplace:

Please don’t let hating SF stop you from applying to OpenAI! I don’t like the open air fentanyl markets either.

Sam Altman, CEO of OpenAI, the hottest AI company in the world right now
This is not a still frame from a “The Waking Dead” episode – this is what San Francisco streets actually look today. Source

Silicon Valley went from technology mecca to unlivable shithole in the past 10 years or so. The quote above is from just a couple of months ago: the CEO of the arguably most important AI company of our time trying to keep the spirits up by downplaying the state the city is in. He’s referring to this:

The home of most US billionaires now looks like straight out of a post-apocalyptic zombie movie. The city became full of homeless people abusing substances. Full of crime and insecurity. And contrary to what most non-US people I’ve talked to seem to believe, it’s not happening in some isolated marginal neighborhood in the outskirts of the city. This takes place everywhere, especially downtown, on a daily basis. A couple of streets away –for example– from Twitter HQ.

It’s complete nonsense. Fentanyl is not the only ugly thing going on in the Valley: you can’t leave your car parked on the streets without getting the passenger window smashed, and if you try to fix it you’ll come across a glass shortage in repair shops. All across the board you’ll find the place as lawless as it can get, where shoplifting is not only legal but breaking all-time highs.

If you ask the average San Franciscan living in this city today: “Is crime in the uptake?”, he’s going to look at you and think you’re crazy. It’s gone wild, to the point where the average person is now afraid to go downtown. So yeah, crime is out of control. This isn’t the Tenderloin or the ghetto anymore. You could be downtown in Union Square, some of the most wealthy districts, and get mugged. You can be accosted by people on the street that are either on drugs, on alcohol, or mentally unbalanced. It’s just too commonplace. All you have to do is drive downtown and look at the storefronts that are boarded up. It’s astonishing. It’s alarming. If we don’t turn things around we’re going to become another Detroit. And had you ever mentioned that to a San Francisco 20 years ago, they’d say it’s impossible – but we’re on our way. We’re on our way to becoming a ghost city unless the policy makers start waking up and doing what needs to be done.

– San Francisco resident, March 2023. Source: YouTube

According to every single input I’ve gotten in the past few years, San Francisco is not a safe nor a desirable city to work and live in anymore. California is a failed state. Even Paul Graham, founder of Y Combinator and one of the fathers of modern Silicon Valley, moved to Europe to raise his kids. Actions talk louder than words. My American dream as I had it pictured in my head is no longer possible. It’s simply not a thing anymore.

In addition, my interests shifted over the last few years. I once wanted to work for big tech companies like Apple or Google, and moving to SF made sense within that mental frame, but that’s no longer the case. I now own and run my own startups, and I’m happy doing that. This version of the American dream relied heavily on the assumption I’d need a company to sponsor my H1B visa so I could work and live in the US. But now that I got a green card, and since I’m self employed (and happy doing so)… there’s no longer a why.

I can run my startups from anywhere in the world. I make money, and I have no employees, no offices and no schedule. Nothing ties me up to any place in particular.

If it’s not Silicon Valley, then where?

Where to live in the US

If you could live anywhere in the US, where would you live and why?

To even start considering the question, let’s see what’s on the menu.

According to immigration law, aside from the continental US, green card holders can live and work from Alaska, Hawaii, Puerto Rico, Guam, the Virgin Islands of the United States, and the Commonwealth of the Northern Mariana Islands.

Territories of the US. The US actually has a few more territories than what’s shown here, but they are mainly uninhabited atolls in the Pacific, most of them containing only an airstrip and pretty much used only for military purposes. This map shows everywhere in the world where green card holders can travel to and live in. Swains Island and American Samoa, though pictured, are explicitly disallowed by law. Source: Immigration and Nationality Act section 101(a)(38)

Although I’ve entertained the idea of living on an American tropical island, and although from what I’ve seen in a few videos, islands like Guam look beautiful like the rest of Southeast Asia minus the shabby infrastructure characteristic of developing countries, I think I already had my fair share of the tropics after spending almost a year in Koh Samui, Thailand and even making a week-long trip to the ER in a hospital in the middle of nowhere. I also learned these places tend to become pleasure islands in the long term, and all in all I just don’t think it’s my cup of tea.

The paradisiac island of Guam – aerial view over Tumon Bay. Image credit: Guam Visitors Bureau

Which leaves us back with the continental US. Every person will have their own different reasons to choose where to live, but me personally I’m just looking for:

  • Good weather (lots of sun – cloudy places make me depressed)
  • Fair taxes (I’d like to build wealth and I’d rather not have most of my income taken away)
  • Interesting people (meaningful, stimulating social interactions – makers, builders, people actually changing things, no bs)

To address the first point, the US has this concept of the “Sun Belt” – a loosely defined region comprising all states south of parallel 36. It’s somewhat correlated with the sunshine duration in hours per year: places in orange are similar to Spain, what I’m already familiar with.

Amount of yearly sunshine duration in hours, comparing Europe vs USA. Source: Reddit

Tax-wise, there are states that are simply too expensive, like California or New York:

All US residents need to pay federal income tax (around 22-24% for ~$100k-$180k/yr, only 12% if you make below $45k/yr) On top of that, states may charge an additional income tax. Some states like Nevada, Texas or Florida don’t, so you only pay federal tax. Other states like California charge you up to almost 15% on top of your federal taxes.

As for interesting people, you would expect to find them where interesting stuff is happening on a regular basis. That used to be California, but the situation is now so bad residents are literally fleeing the Bay Area in what the press calls the Silicon Valley exodus. Where are those people moving? Two cities always come up when searching for that answer: Austin, Texas and Miami, Florida.

Cities like Miami, Chicago, Denver – and states like Texas are picking up what Silicon Valley is repelling. Source: The Washington Post

After considering the above, and after asking a few friends, I shortlisted some cities that kept repeating conversation after conversation: Austin, TX; Miami, FL and Denver, CO.

Denver gets way too cold in winter, and most tech companies seem to be migrating to Austin instead of Miami, so that’d be my best bet right now. Time to find housing.

The reality of living in the US

Picture this: you’re looking for apartments to rent in a city everyone says is where the cool kids hang. Entire companies like Oracle and big names like Elon Musk have already moved here. Everyone mentions it, both in conversations and in the press. It’s trendy and desirable. A city full of life and opportunities. Everyone talks wonders about it. You start checking out nice apartments to live in, and start reading the reviews:

A couple reviews on a random apartment complex I was looking into

“You just looked into a bad part of town” – some would say. Okay, fair enough. I don’t know the city and I might have inadvertently searched in the worst of areas. Let’s look elsewhere:

Another review from an apartment complex in a completely different part of town

“You’re cherrypicking reviews” would be an argument most people would throw now. Right. Let’s read reviews from a few more apartments scattered all around the city, in no particular neighborhood:

What. The. Actual. Fuck.

All of the above are reviews from very different apartments, in wildly different parts of the city – literally all over the map, almost in every neighborhood. And it’s not like I had to dig through hundreds of properties and reviews to find them: they were literally among the first things I encountered minutes after starting my search.

“Yeah, but Austin is a big city. Insecurity is expected. This is what you get when you move to a big city.”

No. This is absolutely not true.

I’ve lived most of my life in Madrid, Spain – a city that’s 3x-5x the population of Austin or San Francisco. Gunshots are literally unheard of. If they happen, they’d be all over the news – national news. “Occasional shootings” is something that no one, not in a million years, would casually say when talking about any neighborhood in the city.

Madrid, Spain is 3-5x larger than Austin, TX. Source

I’ve also lived in Bangkok, Thailand – a city more than 10 times the size of Austin or SF, larger even than NYC. And I didn’t live in a fancy part of town precisely, I lived in the heart of the infamous Nana, the sex district (that was the best I could afford at the time) Streets full of bars, drunk foreigners and prostitutes. Never, not even once, did I feel unsafe walking down the street even after midnight. People would leave their motorbikes parked on the street and would rest their helmet on the seat or hang it from the handlebar. No locks, no chains, no nothing. Never did I see a single helmet or bike stolen, including mine. In addition, I got plenty of packages delivered to my apartment, including a new Macbook, and the mere thought that my package could get stolen before reaching my apartment never even crossed my mind. Not to mention someone breaking into my apartment.

Aerial view of Bangkok, capital of Thailand – an Asian megacity with over 10 million residents (for reference: that’s 2 million more than NYC)

So, no – this is not a problem that comes with big cities. This is a problem that comes with the US.

Is the US a safe place? With over 400 mass shootings so far in 2023 (and we still have 5 more months to go), it looks like gun violence in USA is going to reach an all-time high this year. Source: Gun Violence Archive via BBC

Plus, Austin was supposed to be a nice city to live in. The city everyone talks about. Where every clue has been pointing us to. Insecurity is the very reason we discarded San Francisco earlier on – and the very reason people started fleeing SF for Austin. This was supposed to be a law-abiding state, not lawless California.

This is probably the worst place to live I’ve ever had to look into. I’ve never seen so many bad reviews containing such life-threatening dangers in such a consistent manner – and they’re present in apartments scattered ALL over the city, no matter the overall apartment rating.

Other mindblowingly consistent reviews, by the way, are roaches infestations and poor to inexistent garbage management.

Plus – rents have gone through the roof. $1.500+ for single rooms or tiny studios. Places that don’t even look good, or that could be handed in literally full of bugs and trash.

For reference, here’s a comparison of housing in Austin vs housing in Thailand:

This is what $1.500/mo gets you in Austin, TX: a run-down apartment full of roaches that looks like straight out of a zombie videogame, where you’ll hear gunshots regularly
This is what $500/mo gets you in Thailand: a luxurious apartment in paradise, comfortable, spotless clean, and safe enough to even leave your door open at night

Cities like NYC are not much better off, anyways. In New York, people live in apartments that are literally smaller than my bathroom – and you can tell how difficult life there gets by the way they romanticize paying way too much for places that are literally unlivable unless you’re delusional. Safety-wise, they’re also starting to get their fair deal of apocalypse:

But let’s suppose you’re crazy enough to ignore the reviews and the obvious red flags that pop up literally everywhere you look. Let’s try to rent one of these apartments in Austin. You go on the apartment’s website and see this:

This is just the start of a 11-step application process for them to even start considering you as a possible tenant. Right out of the start they ask you for a non-refundable $50 application fee. Fifty bucks you need to pay them to not even start doing business together. Given the many safety concerns and the quality of the average apartment we’ve seen, this fee feels like getting spat in the face.

This is apparently pretty standard, because I’ve been seeing a version of this form in almost every apartment complex I check out. For comparison, for the last 3 years I’ve been living off either Airbnbs, hotels, or apartments that just took my money and let me live there. Here’s money, give me apartment – what’s so difficult?

The rest of the application is not better. The whole process includes things like providing a detailed history of where you’ve lived in the last 3 years including landlords’ contact details and reasons for leaving, connecting the application’s website to your bank account, stating if you’ve ever filed a suit against a previous landlord, or providing your Social Security Number (SSN) so they can run credit and background checks on you.

Let’s focus on that last part for a minute: providing your SSN so they can run a credit check on you. This is something that I learned recently, because even though it’s apparently a common practice in USA, it’s absolutely not a thing outside of the States:

First – providing your SSN. In the US, your Social Security Number is one of the most valuable and private pieces of personal information you have. Leaking it is a big risk – someone who knows your full legal name and SSN could potentially impersonate you, open bank accounts in your name, open credit lines to your name (therefore getting you in debt) and commit a long list of fraudulent activities. Giving one’s SSN over the internet to a random company that –by the way– seems to offer roach-infested apartments with blatant security flaws does not seem like the most intelligent of decisions. It’s a privacy concern at the very least, and a security risk and vector attack if someone were to hack and steal their database of applicants.

Second – running credit checks on you. In the US, you need to have a credit score. You get a credit score by opening a credit line to your name (even if you don’t need it) – and you need to build your credit score by spending and getting into credit debt every month (again, even if you absolutely don’t have any need for it whatsoever) and paying it off later. If you pay your debt on time, they give you credit points. It’s like a little debt game they have going on there. The more points you have, the better you are seen by banks at managing your money. Random companies can (and often do) run credit scores on you, meaning they ask banks about your credit score, and they decide whether you’re trustworthy or not based on that number. This system, by the way, is a major privacy threat and a very concerning vector attack for malicious actors. This is standard when applying for apartments, and they can (and absolutely will) deny your application if you have a low credit score.

I, as a new immigrant, don’t even have a credit score. It’s not that I have a low credit score, it’s that I literally have no credit score. Zero, zilch, zip, nada. I don’t even have a US bank account – how am I supposed to pass a credit check? Building a good credit score from scratch could take me months to years – Americans often start building their credit score early, in their late teens, and some do it even earlier by becoming an authorized user on a parent’s credit card. Am I prevented from renting apartments until I spend money that I don’t need to spend and go into debt I don’t need to have in order to make a random number go up?

This is probably my biggest culture shock so far – you’re literally forced to get into debt to even live in the US. It’s an absolutely idiotic behavior. Why would you go into debt when you don’t need to?

There’s a very dangerous debt culture going on in the whole country. People are unwillingly pushed into massive debt from a really early age. The aftermath of this debt culture is heartbreaking: 29 year olds with ~1 million dollars in debt on the brink of filing for bankruptcy, just as a natural consequence of living life like the system forced them to.

And it’s not only the apartment I would need the credit score for.

See, American cities tend to be big in size. Things are not usually within walking distance, and public transport tends to be either unsafe, unconvenient or straight nonexistent if you’re outside cities like NYC, Boston and the like. The point is: you need a car. Us Europeans think we can keep our healthy, lively, walk-everywhere lifestyle in the US, and American cities are just not built for that. This is a country where there are even drive-thru ATMs so you can withdraw money without stepping out of your car. American cities are designed for cars. You can’t even go grocery shopping without a car – the closest supermarket might be a whole hour walk away, especially if you’re in the suburbs. And you don’t want to end up like this guy:

So I’d need a vehicle to move around. And how would I purchase it? Exactly – with debt. And I wouldn’t get approved for a car loan without a good credit score. I wouldn’t even be able to lease a car without credit score, or if I do, I’ll get higher monthly payments. See where I’m going?

I don’t even like cars, to begin with. I don’t want to drive a car, I don’t want to buy a car, I don’t want a car loan, I don’t want to get into debt to build my credit score to get a car loan, I don’t want any of that. It’s bullshit. I like walking everywhere, taking the public transport or a bike if the distance is too long. Why does the US seem to force everyone into things that just seem… not good for you?

This is the reality of living in the US, apparently. A constant cognitive dissonance and counterintuitiveness. Spending the most I’ve ever spent in rent in exchange for the worst quality of life I’ve ever experienced, where my home, my property and even my own life will be threatened on a daily basis with rampant crime. Being forced to open a credit line and take on debt when I absolutely don’t want or need to, in order to fit the profile for an application for an apartment that if I get will likely be infested with roaches and where I’ll hear gunshots on a regular basis.

Is this really the American dream? For real?

So… why go US, again?

The short answer is: I need to go to the US anyways to activate my green card and get it mailed in. Might as well try living there for few months and see how I actually like it. One can always renounce to it later.

I get the feeling, though, that there’s something I’m missing in my analysis. This can’t be the full picture of the American dream. The US is home to most of the world’s billionaires – so it has to be attractive enough for them to live there. There’s something I’m not seeing. Maybe I’m just missing a couple billion dollars in the bank, maybe all these problems are solvable if you throw money at them. Or maybe Austin just happens to have very bad neighborhoods, and a remote and unknown city in the Midwest is orders of magnitude safer and more livable than any trendy city. Or maybe the reality is more nuanced than what one gets to see on the internet, and cities are actually not that bad. In any case, I’ll need to travel there and experience it in first person to discover it.

To be 100% fair, I’ve already lived in the US before. I stayed in Boston for a few months, and loved it. But that was almost 10 years ago, and in a completely different part of the country than the one we’ve been discussing so far. Things have changed, and Boston feels more like Europe than the US.

It’s not all negatives, though: there are still good objective reasons to live in the US.

The first one would be to build wealth. Salaries are ~3x higher in the US than in Europe. Doing the exact same job, a software engineer in the US would be making $150k whereas in Europe the salary would be closer to $40k.

Building wealth in the US is just much easier than in Europe. Not only because you would be making 3x as much money as back in Europe, but because the government wouldn’t be taking ~half of what you’re making. Honestly, I don’t know how people become rich in Europe (do they?) – it looks like European states are way too greedy with taxes:

Another way of thinking about it is to have a safety net if things go wrong. I’m now living off my companies, but if that suddently stops working I might have to get a job – and I’d rather get a high-paying job in the US where I get to keep most of my money after taxes, than to get a low-paying job in Europe where on top of that the government will take away half of what I make.

With the same salary, someone in Spain would be paying an effective tax rate on their income closer to 40%, whereas someone in the United States would be closer to 20%. Source.

The second good reason to move to the US would be to have easier access to better business opportunities and to renowned venture capital funds. Again, this is something that I’m not needing right now (after all, I like running my companies the indie way and have decided not to raise any money for now), but just as earlier, being in the US vs anywhere else in the world would be an advantage in case I needed it at some point. Another safety net.

A third reason would be to create serendipity: who knows what could happen if I manage to put myself in the right place, surrounded by the right people and opportunities. Artists often get discovered and reach success after moving to LA, and similar stuff has been happening in tech within the Bay Area for decades. I don’t like this line of reasoning that much, because it feels like magical thinking and relies heavily on luck, but I’m open to the possibility that such things can happen under the right circumstances.

The last reason would be to get an US passport: the US allows dual citizenship. It may make sense to spend the necessary 5 years in the country in order to get naturalized and obtain a second passport. Not because American passports are better than European passports (they aren’t), just to diversify country risk. If Spain as a country fails, like Argentina, Venezuela or Cuba (which I see increasingly likely with every passing day) I would always have a second passport to live and travel on. Same goes for the US – if the country collapses and US passports become worthless, I’d always have an European passport to keep going on. The American passport comes with a few nuances (like worldwide taxation), but could overall work as part of a risk allocation strategy. Any kids born on American soil would also get both passports: the American one, by jus soli; and the parents’ one(s), by jus sanguinis.

Conclusion

Is the American dream still a valuable thing to pursue in 2023, or are there better uses of one’s time and resources?

I think it made clear sense until some 10-15 years ago. Back then there would have been no decision process on my part, just an automatic “hell yeah”. It was a radically different country then. Now the American empire is hitting a turning point, and there are much more things to weigh in.

I think pursuing the American dream may still make sense under the right mindset. For example – it makes sense if you want to go 100% in your career for 5-10 years to make a lot of money and then retire early. Something like moving to SF or NYC to play the corporate game as hard as you can for a while, and then retire with a big fat bag of cash under the arm. Or take a high-paying US-based remote job and save even more by living somewhere cheap in the Midwest. Make enough to live the rest of your life without worrying too much about money – that would justify pursuing the American dream, I think.

It may also make sense if your home country is not doing particularly good. If you live in Somalia, then yeah, there’s not much of a decision to make: living in the US will likely be better in almost every aspect. But I’d argue it could even be a good idea if you’re living in a country like Spain and the life that awaits you doesn’t match your level of ambition. If you live in a place where the economy is fragile, unemployment is too high, opportunities are mediocre, jobs pay pennies, the government’s fiscal policy strangles you, there’s political instability, and at best you’re just getting by – then moving abroad is probably your best option, and the US is a solid candidate.

As for whether the US is a good country to settle down and build a long-term life in, I’m not so sure.

For one, I wouldn’t send my kids (if I had them) to school in the US. I think I’d be fine with it until age 5-10, but schools are not a safe place for kids in the US (no kid should ever have to learn how to protect themselves against an AK-47), and the quality of the education is far from good anyways. One can see on the internet the end product of the American education system, and it’s concerning: grown adults that are clueless about practically everything. Citizens unable to name a single country other than USA. People that spent years “studying Spanish” in high school not being able to utter a single sentence in the language. In my opinion, Europe (Switzerland, maybe?) or Singapore would be much better options for schooling.

Also, the American way of life is broken. Not only for kids, but also for us adults. Americans are (on average) chronically unhealthy: they don’t know how to eat, and they don’t walk places or have exercise naturally integrated into their daily lives. If you’re surrounded by people that spend their days eating trans fats and sugar, and sitting on a car to go from place to place, you’ll eventually start gravitating towards that. You become the average of the people you’re surrounded with. Everyone I know put on some weight after traveling to the US, me included. It requires an extra effort to go against the culture of a whole country on a daily basis, with every decision you make.

What many people do, and it’s also allowed while on a green card, is to spend half the year in the US, and the other half in a place with a lifestyle you like. Which would bring the best of both worlds, and sounds more doable, provided your works allows you to do it.

All in all, I think if the American dream still makes sense, is only if it’s limited in time and with a clear goal in mind. Either getting to a certain level of wealth, or spending enough time in the country to obtain a new passport, or something like that. And once you’ve achieved your goals, I think there are better places in the world to settle and live in, like Spain or Portugal. Places where you’re not constantly worrying about getting killed in a shooting, places where the food is real and healthy, and where life is enjoyable. They’re just, unfortunately, not the best places in the world to seek opportunities or build wealth from scratch.

The post Does the American dream still make sense? appeared first on @rameerez.

]]>
https://rameerez.com/does-the-american-dream-still-make-sense/feed/ 18
Try this free newsletter service (free Mailchimp alternative) https://rameerez.com/free-newsletter-service/ https://rameerez.com/free-newsletter-service/#comments Thu, 23 Feb 2023 20:31:19 +0000 https://rameerez.com/?p=4941 Run your email marketing campaigns for free (or for really, really cheap), no matter the size of your newsletter.

The post Try this free newsletter service (free Mailchimp alternative) appeared first on @rameerez.

]]>
Popular newsletter services like Mailchimp are now charging lots of money for sending emails, and people are –understandably so– looking for free alternatives. I already went down this rabbit hole, and I already wrote a blogpost comparing the best options out there, and I found out Listmonk to be the best free newsletter service out there.

Listmonk is a free, open source and self-hosted newsletter & mailing list manager.

Essentially, it’s free software you can use to manage and publish your newsletter and send transactional emails to your users. It works, it’s beautiful, and it’s powerful.

Listmonk main dashboard

You can try a live Listmonk demo here.

Listmonk is an ideal free alternative to Mailchimp – but it’s self-hosted, meaning you need your own server and need to follow a few technical steps to get it up and running. But once you do, you can run your email marketing for cheap or free, no matter the size of your newsletter. You will only pay at-cost for the amount of emails you send using a mailing service like Postmark or AWS SES (roughly, $1 for every 10k emails)

(Note: I’m not affiliated to Listmonk in any way. This post is not paid promotion. I just found about Listmonk while searching for free email newsletter services, and fell in love with it. I found it difficult to get everything up and running, that’s why I made this tutorial so I can remember how to do it for the next time I have to setup a Listmonk instance, and it may help others in my same situation too)

Let’s set up a fully-functional, production-ready Listmonk instance:

Time needed: 1 hour and 30 minutes.

Heads up: this guide will get quite technical. If you’re not a developer yourself, you’ll probably need help from one to set everything up. You can email this guide to your developer.

  1. Get a server

    Any VPS running Ubuntu Server will do. I recommend using Hetzner or Digital Ocean. The cheapest, most basic instance will do. You can run this on something as low as 500Mb RAM, 1vCPU.

    Another popular option is AWS Lightsail. AWS Lightsail offers cheap servers (instances) for as low as $3.5/mo. They have a few more locations than Hetzner or Digital Ocean, and the account creation process is slightly faster and simpler, so we’ll use that – but again, any server running Ubuntu Server 22.04 LTS will do.

    To start, head to AWS Lightsail. Click on “Create instance” and choose a Linux/Unix machine. Select “Operating System (OS) only”. Select Ubuntu 22.04 LTS.

    Pick a plan (the $3.5/mo or $5/mo should be enough) and hit “Create instance”.

    Make sure to review your instance details so it runs in the region / location you want (rule of thumb: keep your servers closest to where the majority of your users are), and make sure it uses the correct SSH key pair so you can log into the machine.

  2. Attach a public static IP address to your instance

    By default, your AWS Lightsail instance comes with a dynamic IP address. This means every time your server gets rebooted it will pick up a new IP address. This is not ideal, as you’ll always need to type a different IP address if you want to connect to your instance.

    Click on your new instance and you’ll get to the instance management page. Navigate to the “Networking” tab and click on “Attach static IP” under its Public IP address box. Follow the steps to attach the static IP. At the end, you’ll see how your instance’s IP address has been fixed to the new static IP address. This IP will now remain unchanged no matter how many times you reboot your server.

  3. Allow HTTPS traffic to your instance

    We’ll be installing an SSL certificate and accessing our Listmonk installation via HTTPS. To do that, we need to add a firewall rule on our Lightsail instance so it accepts HTTPS traffic.

    Head to the “Networking” tab of your instance, and under “IPv4 Firewall”, click “Add rule”. In the Application field, choose “HTTPS” and click “Create”. The instance will now allow HTTPS traffic.

  4. Connect via ssh to your instance

    Let’s ssh into your instance so we can start messing around.

    The default user for Ubuntu Server instances is ubuntu, so let’s log in as that:

    ssh ubuntu@your-static-public-ip

    Make sure to replace your-static-public-ip with the IP you’ve just created and make sure you’re using the same SSH key pair you used while launching the instance – and you should be in!

  5. Set up the server to run Docker containers in production

    I’ve created a shell script that takes a fresh Ubuntu Server image and makes it into a production-ready machine to run Docker containers securely. It hardens the security of the machine and follows best practices to run containers in production with real internet traffic.

    Note: you shouldn’t just run random scripts that random people you don’t know (like me) have posted on the internet: it’s a good practice to always examine them (here) – one trick is to run them by an LLM like ChatGPT or Claude to quickly check if they’re safe to run or not, if you’re not really sure of what they do.

    To run it, just run the following commands:

    wget https://gist.githubusercontent.com/rameerez/f92ada0c83c2ecf9654cbadbc6adbbca/raw/21e74ad93740df363f344a3c40ca54a59a9b5168/docker-host-production-setup-ubuntu-server.sh

    chmod +x ./docker-host-production-setup-ubuntu-server.sh

    sudo ./docker-host-production-setup-ubuntu-server.sh

    After running, it should show you a successful message:

  6. Configure your DNS to link your domain to your instance so we can install Listmonk

    Our instance is now represented by just an IP. Sure, we could connect to Listmonk using the IP alone, but since we’re configuring this for production, and we’ll be adding an SSL certificate to make everything secure – we need to link our instance to a domain name or subdomain.

    Head to your DNS server settings (I’m using Cloudflare) and point a subdomain (usually something like newsletter.example.com) to your instance’s IP address using an A record.

    The exact steps will vary depending on what service you’re using for DNS (Cloudflare, Namecheap, Name.com, etc.), but it will look something like this. Save and exit.

  7. Install Listmonk

    I’ve also created another handy script to install Listmonk using Docker to our freshly configured Ubuntu Server instance. Just run it:

    wget https://gist.githubusercontent.com/rameerez/6bf916df597f0e663fbb21816c8a1b90/raw/93180f406218c902583c6b4b97dd0942c84b6dcf/listmonk-setup.sh

    chmod +x ./listmonk-setup.sh

    sudo ./listmonk-setup.sh

    It will ask you for the domain where you want to install Listmonk. This is the domain or subdomain we’ve configured in the previous step, let’s assume it’s newsletter.mydomain.com

    Write your domain when the script asks for it and press enter. The script will then start installing Listmonk in the machine.

    Follow the steps you will see on screen and Listmonk should be installed:

  8. Access the Listmonk web interface

    Open your favorite web browser and head to your domain newsletter.mydomain.com

    You should see the Listmonk login screen. If you click “Login”, a popup will ask for your credentials.

    Your Listmonk credentials were shown in the last few messages after running the Listmonk installation script (see the step above), but if you’ve missed it, they can always be found and changed in the config.toml file under /opt/listmonk/config.toml

    Enter your credentials and you should be logged in to the Listmonk admin dashboard

  9. Configure Listmonk basics

    Log in to Listmonk, navigate to the Settings panel and set up the newsletter general info.

    In particular, make sure to set up the Root URL to https://newsletter.mydomain.com or your links and all email tracking will be broken (make sure to include the https://)

    Make sure to change the default ‘from’ email too, and set it to an address under the domain where you intend to send mails from.

    Since you’re at it, also set up the public appearance of your newsletter by providing a newsletter name and logo your users will see on public pages like signup forms, archive and unsubscribe page.

  10. Create SMTP credentials to send emails using AWS SES

    Amazon Simple Email Service (SES) is an Amazon AWS service that allows you to send email using Amazon AWS’s email servers. This is important because email servers need to have a good reputation to be able to actually deliver emails, and using your own server as your email server will probably not work.

    You can also use Mailgun, Mailjet, Sendgrid or Postmark to send emails, but since we’re already using Amazon for Lightsail, we’ll just use SES.

    It’s quite cheap: you’ll pay $1 for every 10k emails you send ($10 for 100k emails; $100 for 1M emails, etc.)

    Head to AWS SES, select the region from which you want to send emails and follow the steps to create an identity. A verified identity is a domain, subdomain, or email address you use to send email through Amazon SES. Identity type would be “Domain”, and this would be mail.example.com in our example.

    In “Advanced DKIM settings”, select “Easy DKIM” and follow their steps to set up the right DNS records. It might be a bit cumbersome, but it’s pretty straightforward.

    Once you’re done setting up your domain in AWS SES, head to the AWS SES left panel, where it says “SMTP settings”, and click the button “Create SMTP credentials”.

    Follow the steps and you’ll get your SMTP Security Credentials. Don’t close this page, as you’ll need to copy these credentials in a second.

  11. Configure Listmonk to send email through AWS SES

    Now, back in Listmonk, head to the “SMTP” tab in Settings to configure AWS SES.

    Click on “Amazon SES” as indicated below, so the necessary fields get pre-filled.

    Modify the “Host” with your AWS SES region (mine is us-east-1, you can see it in your AWS url, like: https://us-east-1.console.aws.amazon.com)

    And paste the username and password from the AWS SES Credentials page.

    Make sure to use port 2465 for SMTP. The default port for SMTP is 465, but some server providers like Hetzner simply block port 465 on their whole network to prevent email spam and email abuse; and AWS SES accepts SMTP on port 2465, so let’s just use that.

    Click “Test Connection” and everything should work just fine!

  12. Increase your AWS SES sending quota

    If you’re using this in a production setting (that is, you’ll be actually sending hundreds or thousands of emails), you’ll probably want to ask AWS to raise your SES sending quota.

    By default, you can only send 200 emails per day on SES. This can be raised for free after AWS examines your case and authorizes you to send more emails (they do this to prevent spam).

    You need to follow these steps to use their Service Quotas Console to open a case and explain your request. They’ll demand to know a few details about the content and nature of your emails and how you’re collecting addresses and users’ consent to be messaged.

  13. [Optional] Configure Listmonk to store attachments in AWS S3

    Attatchments can be stored in the same server you’re running Listmonk on, but we can do better. Let’s store them on AWS S3 for better availability, replication and to avoid overloading our Listmonk server.

    Amazon Simple Storage Service (S3) is an AWS service that allows you to store files. It’s kind of like Dropbox: you have “folders” (buckets), you upload files to them and they are stored in the AWS cloud so you can access them from anywhere. Some of these buckets can be public, so anyone in the world can access the files you upload (ideal for storing things like images in your newsletter attachments).

    Head to AWS S3 and create a new bucket. Set “ACLs enabled” with “Bucket owner preferred” and disable the “Block all public access” checkbox.

    Now, we need a different AWS user for the Listmonk app to access our S3 bucket. We’ll only grant this new user programmatic access via an access key, and we’ll create a strict policy so it only can access the S3 bucket we’ve just created.

    Head to AWS IAM, and create a new user. Name it something like listmonk-s3. Do not “Provide user access to the AWS Management Console”. In permissions, click “Attach policies directly” and click on the “Create policy” button.

    Instead of using the Visual Editor, you can just copy and paste the JSON policy I’ve just created for this purpose. Make sure to edit it and replace listmonk-bucket to the exact name you’ve given to your S3 bucket.

    Create the policy, attach it to your new user, finish creating the user and open their user page in IAM. Navigate to their “Security credentials” tab, scroll down a bit to where it says “Access keys” and create a new access key for the user. Select “Application running outside AWS” and hit next until you can create and get your access key.

    Once you have your Access key and Secret access key, don’t close the window – open the Listmonk settings in a new window and navigate to the “Media upload” tab. Fill up the information as shown below, make sure to edit your own region, and your own bucket name.

  14. Send a test email campaign

    Make sure everything is working by creating a test campaign with an image and sending it to yourself. If you’ve followed the steps correctly, a new test email from your newsletter should have arrived in your inbox!

  15. [Optional] Configure bounces and blocklist bad emails

    Handling bounces and complaints is key if you don’t want your mail-sending account banned. Services like AWS SES take bounces and complaints very seriously, and require you to stay below a certain threshold of complaints, or they’ll stop you from sending emails.

    You get bounced emails when you send emails to addresses that don’t accept any emails (like fake addresses, mistyped addresses, or addresses that have blocked incoming email). You get complaints when users report your email as spam.

    If you don’t react to this and keep sending emails to addresses that either bounce or complain about your emails, your percentage of bounced and complained emails over total emails sent will keep increasing, and your account will get banned.

    The best way to react to bounces and complaints is to add conflictive email addresses to the blocklist, so you don’t send them any more emails in the future.

    This is a feature that comes with Listmonk, but it requires us to set it up correctly in Amazon AWS so that AWS SES knows how to notify our Listmonk instance when there’s a bounce or complaint.

    The first thing we want to do is to go to the “Bounces” tab of our Listmonk settings and toggle on “Enable bounce processing”, “Enable bounce webhooks”, and “Enable SES”. Click “Save”.

    Then, we need to do a few cumbersome, but easy, steps to link AWS SES to Listmonk. The official Listmonk docs explain in good detail how to do it, please follow their steps now. In a nutshell: you need to create a SNS “Standard” topic, create a HTTPS subscription to that topic with endpoint https://newsletter.mydomain.com/webhooks/service/ses, and add that subscription to SES under “Feedback notifications” both for “Bounce feedback” and “Complaint feedback”.

    If you’ve set it right, bounce and complain addresses will get added to the blocklist and unsubscribed from your mailing lists.

    One way to test it is to manually add [email protected] and [email protected] to your mailing list and send them a test email campaign (or campaign preview test). If everything is working, you’ll see the bounces in Listmonk under Subscribers > Bounces, and you’ll see the offending emails being automatically added to the blocklist in the subscribers list under Subscribers > All subscribers

And that’s it!

You are now able to use Listmonk as a Mailchimp replacement to manage your email marketing campaigns and send emails to thousands of addresses for pennies.

The total cost of this setup is around $5/mo for the server and $1 for every 10k emails sent, which means you can run the whole thing for less than a cup of coffee a month if you don’t send many emails. This makes Listmonk on AWS a great Mailchimp alternative for nonprofits, for example – or any other kind of project running on a tight budget. You can send transactional emails, marketing emails, create and grow a newsletter – and even send SMS / texts, Whatsapp messages, and more!

Please let me know in the comments if you got it up and running! It’s nice to hear this tutorial was useful to other people, and your feedback will make this guide even better!

The post Try this free newsletter service (free Mailchimp alternative) appeared first on @rameerez.

]]>
https://rameerez.com/free-newsletter-service/feed/ 18
Mailchimp pricing is out of control https://rameerez.com/mailchimp-pricing/ https://rameerez.com/mailchimp-pricing/#respond Wed, 22 Feb 2023 16:26:00 +0000 https://rameerez.com/?p=5813 Mailchimp pricing is out of control. It may be okay when you're starting out, but if your project picks up any traction at all, you're in for a bad (and expensive) ride.

The post Mailchimp pricing is out of control appeared first on @rameerez.

]]>
When someone says newsletter my mind immediately goes to Mailchimp, because it’s what I’ve been using forever. One of my projects recently underwent very quick growth, so when I had to set up a newsletter for it I obviously thought about Mailchimp first. It’s always served me good: it’s clean, fast, and it gets the job done every time. Now, previous to this project I had never have to manage a newsletter this big. I always had amounts of subscribers in the hundreds or low thousands, always well within the range of the free tier, so this idea of having to pay for marketing software came as a surprise to me. Especially when I saw what the total amounted to: thousands of dollars a month.

Mailchimp is free, sure, but only up to a point. The free tier nowadays covers only 500 contacts. It used to be 5k contacts, which was more than enough for me and many – but they lowered it 10x, and probably lots of people that were happy with the free tier had to start paying to keep their newsletters alive.

You look at things a whole lot differently when instead of 500 people you now need to blast emails to hundreds of thousands of subscribers – and hopefully many more eventually. Things don’t just become a bit more expensive; things 10x or 100x their cost. To give you an idea, this is what happens the moment you exceed 100k email contacts in Mailchimp:

Sending emails to 100k contacts costs $1,075/month in Mailchimp, and you need to negotiate with their sales team if you have more than that

After 100k or so contacts, all Mailchimp plans become greyed out with the message “Contact limit exceeded”, leaving you with their most expensive plan as only option, at over $1k a month. I don’t know about you, but paying more for a newsletter tool than what I pay for rent feels a bit much.

Why is Mailchimp so expensive?

Well, turns out email marketing is a really difficult problem. And Mailchimp does a damn good job at solving it.

There are a lot of problems Mailchimp is dealing with for you. A lot of problems you don’t notice, because they’re so good at making everything work like magic. Here are just some of those problems:

  • Offer a simple way for users to unsubscribe from your newsletter: people become really angry (understandably so) if you send emails without an “Unsubscribe” button. They report your emails as spam, email clients like Gmail pick up the complaints and you might become absolutely invisible to everyone. You need a website where users can self-manage their subscription status, with a unique and private URL per user.
  • Handle bounced emails: sending emails to addresses that bounce your messages hurts your reputation as a sender and can get you banned from sending emails altogether. Your emails bounce when an address is not able to receive messages. This may happen because the destination address doesn’t exist (as in: the user entered a fake email, or mistyped their email); or when the destination server rejects some or all email. This is called a hard bounce, and your email sending service gets notified of those. The worst case of this is when an user *does* receive your email, but they tag it as spam. This raises a complaint, which is then forwarded to your email sending server, which really, really hurts your reputation as a sender. Too many complaints, and any decent email sending server will ban your account. It’s only understandable – they do this to prevent spam and abuse. The conclusion is you need a system in place to detect bounces & complaints, and remove bad addresses from your mailing list so you don’t hit them again in the future.
  • Email deliverability and technical details: you can’t just send emails from your own server, because other email servers won’t trust yours, and will label your messages as spam. You need to send emails from a well-known, reputable email server – or your messages will simply not arrive. People will complain they never got your message, or they’ll be delivered straight to the spam folder. A lot of things have to be in place for your emails to be correctly sent and delivered. Your DNS server needs to be set up right, your DKIM signature has to be valid, same goes for your SPF and DMARC records, your MAIL FROM has to be configured, your email server’s IP can’t be listed in any of the dozens of email blacklists out there, your email server has to have a good reputation, your emails need to have appropriate headers, ideally a List-Unsubscribe header, etc. It’s a lot of little things and I going over all of them in detail escapes the scope of this blogpost, but the absolute best tool I’ve found to test all this is mail-tester.com, which generates reports like the one below and gives you very itemized, detailed feedback on what you need to do to get your email deliverability just right:
Getting a 10/10 email deliverability is a lot of work, but it’s so worth it
  • Hosting images and assets: your emails will sometimes include images, and those images need to be stored somewhere. When you attach something in Gmail, like a picture, you’re uploading it to Google’s servers and what gets attached to the email is a link to the picture hosted at Google’s servers, not the picture itself. When you’re sending email newsletters, you need to think about where are you going to upload your email attachments. Mailchimp also manages that for you.
  • Managing multiple lists: one single user can be subscribed to more than one mailing list. You might have a list for important platform notifications, another one for transactional emails, and another one for marketing purposes, and you want to allow users to belong to them and manage them independently. Some of them might be opt-in, increasing complexity.
  • Emails don’t support standard HTML or CSS. Emails, like websites, use HTML and CSS code to display their content. But if you try to use in emails the same code you use for websites, it won’t work. I learned this the hard way. Emails only support a tiny, specific subset of HTML/CSS, and if you use a visual editor it needs to account for it or your messages will be broken. In short: you should never write the HTML / CSS for your own emails, because it likely won’t work even if you’re good at HTML / CSS. A good trick I learned a few years ago is that some companies, like Mailgun, have published their own HTML email templates you can use and adapt to your own needs. They work wonderfully every single time.
  • Tracking marketing metrics: open rates and click-through rates are important metrics for a newsletter, especially if you want to monetize it – your metrics are essentially what you advertise and charge for to advertisers. Tracking these metrics (implementing tracking pixels in each email, tracking each link inside your newsletter, knowing what country the person opening the email is at, etc.) requires a whole different system on top of everything we’ve already covered.
  • Deal with spam and abuse: a mail-sending service needs to constantly be checking for abuse. Email servers have been used for bulk spamming since the beginning of the internet, and are problably the biggest problem all newsletter services have. Identifying spammers and banning them before they do lots of harm is probably one of their top priorities.

In short, email is hard. It’s not as simply as hitting “send email”. There are a thousand of tiny little problems, and platforms like Mailchimp take care of all of them.

Is this worth $1k+/mo? Apparently it is, because Mailchimp is a big company with many customers, but I was not willing to pay the price at this moment.

As a programmer, I obviously considered coding my own newsletter system, but the list of problems I would have needed to tackle kept growing as I kept thinking about it. “Not worth it”, I thought, and like any other lazy programmer I looked for people that had already faced this problem before, hoping they already came with a solution and posted it online.

Free alternatives to Mailchimp

$1k+ in emails a month is simply too much.

I searched and searched for alternatives to Mailchimp, until I found a solution.

I ended up setting up my own free newsletter service for about $5 (five dollars) a month, which sends emails to several hundred thousands users for $10 (ten dollars) every 100k emails. Total cost of blasting an email to 100k people = $15, one time. To put things in perspective, sending an email to 100k contacts in Mailchimp costs between $800 and $1000 a month – that’s a ~10x factor in cost increase over the alternative, plus a recurrent vs a usage-based cost.

How did I do it? With free mailing list software. As it turns out, there are a bunch of free alternatives to Mailchimp – most of which are open software. Programmers like me have faced this same problem, and some of them decided to spin up open source projects to tackle this problem. Some of them have gained a lot of traction recently, and are nowadays fully-fledged solutions that serve as great alternatives to Mailchimp.

I ended up shortlisting 4 of them:

  • Sendy: honestly, it looks great. It’s not free nor open software, though. The only reason I did not go for it is because I was looking for free software exclusively and Sendy comes with a $69 price tag (one-time fee per domain). But I thought it’d be worth mentioning because if my current setup ends up not working out for me, Sendy is what I’ll try next, even though it’s not free.
  • Mautic [6.9k stars]: free and open source. Looked very complete at first glance, but as I kept watching videos of people actually using it, it became really obvious that it was an unnecessarily complex product. Matic feels as if it had been designed by management consultants and enterprise enjoyers rather than marketers.
  • Mailtrain [5.5k stars]: free and open source, but it felt a bit more immature / half-baked than the rest IMHO. It’s still an option, but not one inviting to try out.
  • Listmonk [14.2k stars]: free and open source, and the most professional-looking one out of all. The interface looked clean and modern, and it felt like it had everything I needed. And at more than 2x the amount of stars on GitHub than its competitors, it seemed to be the most popular of all.

I ended up going for the last one: Listmonk.

Listmonk is the only one out of all free, open-source alternatives to Mailchimp that has had a real, sustained growth ever since its launch – even though it’s more recent than the competitors

Now, none of these are hosted services like Mailchimp. You can’t just sign up for them on their website and use them. That’s not how they work. You need to download their code and install it in your own web server. It’s a bit cumbersome and requires some technical skills, but if you’re willing to do it I’ve written a simple tutorial on how to set up your free newsletter service using Listmonk.

The post Mailchimp pricing is out of control appeared first on @rameerez.

]]>
https://rameerez.com/mailchimp-pricing/feed/ 0
People saying they like your startup is not market validation https://rameerez.com/startup-market-validation/ https://rameerez.com/startup-market-validation/#respond Tue, 31 Jan 2023 05:07:13 +0000 https://rameerez.com/?p=4831 When building startups, only listen to people that HAVE ALREADY PAID for your product. All the rest is noise, and it's dangerous.

The post People saying they like your startup is not market validation appeared first on @rameerez.

]]>
When building startups, only listen to people that HAVE ALREADY PAID for your product. All the rest is noise, and it’s dangerous.

If you’ve built something minimally useful, you will attract some eyeballs (especially after launching), and you may get bombarded by a wide variety of characters shouting a wide variety of messages at you. You may mistake this sudden interest in your product for market validation, but IT’S NOT. It’s 100% pure noise, and it’s –most of the time– utter bullshit.

The only validation that matters is money in your bank account. Follow the money trail and you’ll find market validation. The rest are red herrings.

You may attract a lot of attention with your startup, and yet that won’t necessarily mean market validation. A product that is good at getting attention is not necessarily a product people are willing to pay for. You might go viral and still have a failing startup:

In addition to these obvious sources of external validation you might get (going viral, getting lots of traffic from popular websites, people commenting on your idea, etc.), here are some other examples of things that are NOT market validation. All of the following look like validation, but are not. They’re just distractions. I’ve fell for each one of them at least once, and I’ve been reached out dozens of times more for each category:

  • Investors wanting to set up calls to invest in your company. They sound like they’re really interested in your startup.

    Why is this not market validation?

    The reality is they’re just exploratory calls, this is the very first step of their funnel. They’ll do this with any startup. They do this with thousands of startups, in fact. They probably haven’t even read your landing page (not until 5 minutes before the actual call, at least), and they’re obviously not ready to invest in you.

    Many times they’re just bullshitting altogether, and they would only invest in you (if any) if you are already raising a round (translated: if others have already taken the risk of investing in you before them)

    These calls will almost always make you lose your time, you’ll get absolutely nothing of value out of them, and both the call and required preparation (deck, pitch, etc.) will kill your productivity for the day.

    You may be tempted to take these calls because they namedrop some big VC or some big startup they’ve invested in, or because they’ll say things like “we’re reaching out from our VC office in San Francisco” and you want to feel like a cool kid taking calls from investors in SF. An almost guaranteed way of losing productive hours of actual work.

    If you’re already actively raising a round, though, you may want to act differently.
  • Advisors: people wanting to sit on your board or become external advisors for your company. They often introduce themselves as senior executives, retired executives or otherwise experts, having a lot of experience in corporate or in your industry. They reach out to give you free advice on your company and “explore collaboration opportunities”.

    Why is this not market validation?

    What they really want is stock in your company – for free, essentially. They’ll ask for something between 1% to 20% of your company, sometimes even more: and yes, you read that right, for absolutely no money in return. They propose this to dozens of companies until one falls for it and they get free equity. If the startup works out, it’s free money for them.

    They’ll try to justify their play with things like: “I have experience in this industry and can advise you on how to do things right”; or the one I personally like the most: “I know many people that would be interested in this and I could open you many doors and get you customers”. If you hear that one, use this trick: switch the message on them and say “oh, you can introduce me to potential customers interested in my product? Sure, sounds good, but instead of equity I’ll give you 20% of every sale you close for me” – and look how fast they run away 😉

    You would be surprised at how many people want a stake in your company in exchange for essentially nothing. Fuck those people. I’ve never seen anyone getting anything of value out of people like this. They’re nothing but leeches.
  • FAANG companies: from time to time, a big name company might reach out asking about your startup. You’ll see the email address ending in @faang.com and you’ll be like “Holy shit, I’m getting contacted by <FAANG>!” You’ll think you’ve made it: you’ll sell your startup to them for billions and retire and swim in your money like Uncle Scrooge.

    Why is this not market validation?

    I’m sorry to break your dreams, but this is not what’s probably going to happen. Unless you’ve done something absolutely remarkable, like getting A LOT of attention (think millions of users), a technically impossible feat of engineering, or have done something equally extraordinary, this is not likely why they’re contacting you.

    Why then? It may be multiple things. Some of these big companies run marketing campaigns specifically targeted to startups – they try to catch early startups right after they’ve raised a big chunk of money from investors, and will try to get some of their VC dollars. Their emails often sound like “Congratulations! We’ve just pre-selected your startup for this exclusive opportunity. We’ve assigned you a dedicated account manager and would love to have a call to kick things off”. What that actually means is “we’re trying to get you to use our advertising platform – at first for free, then paid of course”.

    It may also be them trying to get you to join one of their startup programs. Some of those are actually useful (they give away computing credits that would cost actual money, or they give you any other valuable resource like office space for free) – but they’re rare, and it’s highly unlikely they reach out to you instead of the other way around.

    Some other programs for startups are more bullshit-y, you’ll need to tread with caution.

    TL;DR: don’t get captivated by the big names and examine carefully what they’re saying, it’s likely not as valuable as you think it is.
  • Potential cofounders: people reaching out because they’ve seen your startup and want to join the team no matter what.

    Why is this not market validation?

    The kind of people that send these messages are usually wannabees incapable of building a business by themselves, looking to tag along in an already working project as their only and last hope to get into startups. They usually lack any actual skills (hence their inability to build a business by themselves) and will most likely bring nothing of value to the table. It’s not that they’re not technical or don’t know how to code (non-technical founders are valuable, too) – it’s that they are literally skilled in nothing that will help you build a profitable business.

    Sometimes you may get tricked because they have an impeccable-looking corporate career in something like a big consultancy company, but don’t be fooled: their only skill is wasting their day taking meaningless meetings and confusing customers with twisted rhetoric and undecipherable corporate bullshit.

    I’ve never met anyone who has met a valuable cofounder this way – on the contrary, I’ve heard true horror stories of people who fell for this trap. Bullshit cofounders that joined the company and once inside proved themselves to be absolutely useless, causing thousands of dollars worth of lawsuits and compensations to get everything fixed and back to what it was.

    If you need a cofounder, you’d likely be better off scouting for one yourself, probably someone already close to your social circles, and not just taking in the first random guy that writes to you on the internet.

    The most dangerous variation of the cofounder thing is when they approach you because they want you to join them instead. They’ll say something like “I was already working on something related and I think we should join forces”. In reality, they expect you to drop your project and join theirs. It usually means they’re looking for a free developer – someone that will code their thing for free. They’re often non-technical people that have failed attracting technical cofounders in the past, they don’t have the money to pay for development either, and have resorted to reaching out to those who actually get stuff out there to try and convince them to drop their promising project in order to work on their crap.

    I say block and run away as fast as you can.
  • Partners: people wanting to partner up with you. Instead of being cofounders, they may offer you something more transactional, like being a distributor of your product, integrating with your product or becoming providers.

    Why is this not market validation?

    These are usually non-serious offers.

    One option is they’re just straight out salesmen trying to get you to purchase their service. Examine them on a case-by-case basis, but as always… it’s highly unlikely that something of value knocks on your door instead of the other way around.

    As for people that want to distribute your products, they’re often discount/deals websites and what they get you is terrible: they’ll sell your product, but they’ll take most of the revenue (80-90%) and they’ll only bring low-quality customers that will complain about everything and will double your customer support workload.

    Another option is getting messages from people proposing you to become their provider: they might be interested in purchasing your product at scale or with a deeper integration, but they’ll claim it needs some modifications before it’s useful for them. Once things are changed so your product works with their existing systems –they say– they’ll use you as a provider.

    This is a trap. To prove it, put them through the credit card test: if they’re so serious about you becoming a big provider of theirs, they might as well spend just $100-$500 on doing a pilot project to finance a small-scale test to try things out. You’d be surprised at how many people back off after suggesting a small upfront payment. I’d say I’ve never seen anyone accepting it. Meaning: no one was really serious about partnering up – they just wanted someone that would develop free features for them (and sending emails is also free, so they might as well try it)
  • Journalists, blog owners and PR agencies: watch out! Some legit journalists from big media outlets may definitely reach out, make sure to look them up and do your research first!

    Why is this not market validation?

    Many of the emails you’ll get will be “fake” journalists. They’ll identify themselves as running “big websites” with lots of traffic, and they’ll offer you the “opportunity” to get a piece written about your startup on their website or blog, for a fee.

    The reality is: no one reads their blog. No one relevant to your business, anyways. If it was a relevant blog or website for your industry, you’d already have heard of it.

    As a general rule of thumb, don’t pay for people to write about you. If what you’ve built is good enough, they’ll gladly write about it for free. If they don’t, maybe what you’ve built is not good enough.

    There are also PR agencies that will claim they can get you featured on extremely well-known media outlets, magazines, and websites. It’s yet another trap: they cost a lot of money and don’t work as well as they promise. You might get one feature out of it, but I doubt it’d be worth the money.

    Then there’s also the shady fuckers. I remember one email, he introduced himself as a journalist for some TV channel, he said they wanted to run a piece about my startup on national TV. I had just had a very successful launch and I had actually been the whole day on the phone with actual legit journalists that worked for legit media, so I just assumed this guy was also good as well, and scheduled a call with him later that day. He not only forgot about the call and only called me back after I shot him an email, but when I picked up he started rambling on and on for (I kid you not) 20 straight minutes before he even let me get a word in. In reality he was no journalist, he didn’t even work for a TV channel. He had an online show no one ever heard of and he was asking something like $20k for me to get featured on it. Absolutely delusional.

Nothing of the above is market validation. Not even legit messages.

No amount of emails in your inbox will make up for lack of money in your bank account. Emails are not a substitute for revenue. A business is money in, not emails in.

Some of these messages might end up leading you to something marginally valuable, but 99% of the time you’ll waste your time. They’re nothing but a distraction. You’d be better off muting all these emails and just talking with actual customers. Nothing speaks louder than people giving you money – or lack thereof.

If you’ve just launched something and you’re all getting hyped up because emails are piling in and everyone seems to be noticing you and you think you’ve finally made it, look at your startup’s bank account. If your bank account is still at 0, you don’t have market validation. You just have a bunch of leechers annoying you, making you waste time and stopping you from actually building something you can charge for.

The post People saying they like your startup is not market validation appeared first on @rameerez.

]]>
https://rameerez.com/startup-market-validation/feed/ 0
2022 recap https://rameerez.com/2022-recap/ https://rameerez.com/2022-recap/#respond Sat, 31 Dec 2022 21:59:00 +0000 https://rameerez.com/?p=4708 2022 had a first hectic half of the year full of travel and excitement, a burnout that made me go back to the drawing board, and regaining focus in Portugal.

The post 2022 recap appeared first on @rameerez.

]]>
My last few yearly recaps have been rather prophetic. I always end with a short paragraph about what I roughly want the following year to be, and so far they have been pretty spot on.

I ended 2020 hoping I’d get to travel to Asia and do the nomad thing. And I did exactly that: I spent almost the whole year in Thailand.

Similarly, I ended my 2021 recap writing this about 2022:

I can’t know for sure what’s going to happen in the next 12 months, but everyone in my tech-related environment is talking about Lisbon in one way or another. It seems like it’s going to be a great tech hub in the upcoming months (…) I’m hoping that, somehow, I’ll end up living there in 2022, hopefully surrounded at some point with many of my internet friends – and any IRL friends that get tempted.

Who knows, I might be getting good at predicting the future.

Q1: Escaping pleasure island and coming back home

The year started off as we left it in the 2021 recap: barefoot and wearing just my swimming pants and a T-shirt, welcoming 2022 in one of Koh Samui’s very warm and beautiful beaches.

NYE from a tropical beach

Back then I was just starting to recover from my leg surgery, making daily trips to the hospital on my black Honda Click 125cc motorbike, in order to get my wound cleaned and looked at. Luckily it ended up healing well, and one year later the only thing I have left is an ugly scar in the leg (almost in the shape of Koh Samui, coincidentially) – a weird souvenir from my time in the island. A patch of skin in which no single hair grows and where I feel nothing at all, but that ocasionally serves as a good enough conversation starter.

Loved that bike

I kicked off the first leg of the year (get it?) by building and shipping LooksMutable (a web app to raise awareness about some technical issues and misconceptions about NFTs) from my favorite cafe on the island, surrounded by friends:

My tropical island office views

While the project itself got some attention on launch day, it was my two writeups on the matter (one technical, the other one more high-level) that really got the eyes of many people, including some working on the company developing IPFS, the very technology I was writing about.

A few days after that we got the bad news that Russia started invading Ukraine, and I made some open-source software called Embargoed that got mildly viral:

https://twitter.com/rameerez/status/1497522706274996224

By the end of February, a few things were going on:

  • The Covid situation in Thailand got better, allowing for more travel (I had been stuck in Samui for almost a year at this point)
  • I was starting to get bored of Samui. The island is not that big, and I already had time to even get familiar with the hospital – enough of the island for me
  • Some friends started leaving for Bangkok already
  • It was about time I headed back home to see my girlfriend and family

So I started planning the trip back to Spain. Not without a much needed month-long stop in Bangkok, though, because all I wanted to do before heading back was to live in an Asian megacity for the first time in my life.

So I bought a plane ticket, packed all my stuff, went to a nice viewpoint to reflect on the Samui experience and say my goodbyes to the island, and got all melancholic seeing planes land and take off from USM. I had a small farewell dinner with my friend Cam and his girlfriend, who both stayed there, and the very next morning I took the plane that would fly me to Bangkok.

Bangkok was amazing.

Out of this world. A truly eye-opening experience, especially after spending so many months in the islands and thinking I already had a rough idea what Thailand was about.

Bangkok is a city of intense contrasts. It’s multiple cities in one. If you stick to the ground level you’ll experience the heat, the roaches and the rats, the street food and the traffic, the smells and the noise. But it’s a radically different experience if you go from rooftop to rooftop, hailing a Grab only to go from one building to the next one. Life in the heights of Bangkok is the most futuristic, sophisticated, luxurious and mindblowing thing I’ve ever lived.

My friend Pieter, who together with Andrey and Marc were pretty much my mentors during my time in Asia, recorded my reaction when I first saw the Bangkok skyline:

I couldn’t stop smiling

My experience from that moment on only became better and better. I have so many good memories and anecdotes from those weeks. I lived so many things in just a month. I met Leo from Plutio, Marty from Poolsuite and a bunch of really interesting people. I can’t thank my friends enough for helping me and showing me what Thailand was really all about.

Coding with BKK’s skyline in the background
One of Bangkok’s many lively streets at night
The Bangkok crew

And just like that, it was time to pack things up in Bangkok and head back to Spain!

Q2: Online becomes real in Lisbon; burnout

I arrived in Spain like I left the year prior: carrying just a backpack and a small cabin suitcase.

Minimalism: this is everything I’ve owned for 2+ years living in Portugal and Thailand.

I had a pretty weird feeling the first few days after landing back in Europe. I was aware it would happen, so it didn’t caught me by surprise. It’s called “reverse cultural shock“.

It just means something inside you changed while being abroad, and the place you once considered home now feels unfamiliar and even hostile at times. This time specifically, after having spent so much time in Asia, the thing that struck me the most was the unfriendliness and rigidity of the average customer-facing person in Europe. Asian customer service is just so much better.

Another thing was how strict and organized everything was here, especially when driving. Traffic rules in Thailand are more of general guidelines / recommendations than anything else, and it took me a while to get used to traffic rules actually being enforced here in Europe (people wearing helmets, people actually yielding to incoming traffic and pedestrians, not seeing pickup trucks full of loose goods and/or full of standing people, not seeing entire families on top of speeding motorbikes, etc.)

I wouldn’t be in Spain for long, though.

After a few days in the country I headed out again to do a road trip across the southwest of France, and at my arrival I had just enough days to get ready to take a plane again, this time to Lisbon!

I flew to Lisbon for three reasons:

  1. I already had the intention of living there long-term (it was one of my resolutions for this year!)
  2. My friends Lenilson and Marc-Antoine were already living there.
  3. More internet friends were coming. In fact, we had this big meetup planned for May where we were going to gather all of our internet friends in person for the first time ever.

And so, it happened!

Happiest moment of the year

Everyone flew in from everywhere in the world and we all put everything else on pause so we could share a few days together. After speaking daily for years, this was the first time ever most of us got to hang out in person at the same time. It was more than amazing.

This was hands down the craziest moment of the year, and the blurriness of the photo shows. Oskar (orange cap) literally flew across the world to us without any of us knowing and showed up unannounced out of nowhere, just as the rest of us were greeting each other and were already excited as it was the very first time we all got together in person. It felt unreal and we just couldn’t stop shouting and jumping.
We spent a few amazing days together

After our meetup some people left, and things got a bit more relaxed for a while.

Some other people started to arrive in Lisbon for the summer, and I kept meeting new very interesting people on a pretty regular basis. It was very stimulating.

One of those who just arrived was my friend Dan, who I met the previous year in Samui, and with whom I shared the whole Thailand experience. We lived in the same building for almost a year, and we liked to have really long and deep convos late at night – quite a bonding experience. It was amazing to see him again and share some weeks in Portugal, and it was pretty sad when we had to part ways.

Like every year, my girlfriend was organizing a TEDx talk in Madrid, and I flew back for a few days to help her with the event. Miguel, who is also a long-term internet friend of mine (and was one of my first Hustl customers!), was coincidentially giving a talk, so I met him in person for the first time and let him scan my iris with his Worldcoin orb. Like straight out of a sci-fi movie!

After the event we drove back to Lisbon, hoping to extend our stay a few more months. However, by the end of June, a few things started to pile up:

  • There was no viable flexible rental option in Lisbon. Unless you have a Portuguese ID card, a Portuguese guarantor, ~$5-10k in cash for deposits, pre-paid months and fees, and are willing to commit to a property for 1+ year, the local lease market is either completely out of reach for a foreigner, or just too impractical to be worth the effort. This left us with very few options: short and medium-term rentals like Airbnb, touristic apartments, hotels, and the few websites that usually operate flexible accomodation for students (all of which rejected us systematically, because we were not commiting to a full academic year)
  • Rent prices starting soaring in Lisbon after Covid. It happened for everyone, but it got way worse for short and medium-term rentals, as Jun-Sep is peak tourist season in the country. Our Airbnb ~5x its price for the summer, and it was difficult to find any clean, decent apartment for less than, say, $3k/mo (which, for Portugal is quite A LOT – the minimum wage in the country is $740/mo)
  • Burnout. My 2022 up to this point had been pretty hectic. I didn’t feel like I was able to concentrate at any point since I left Samui. I lacked focus, a routine, and direction. It had been months since I last felt the tiniest bit of creative energy within me, which is quite the thing to say for a deeply creative person. I was literally unable to sit down and get stuff done most of the time. Long months of travel, excitement, distractions and hedonism were starting to take a toll on my ability to work. Not to mention the 2022 crypto crash (which, yes, affected me) and the economic downturn that started to reflect on the business’ revenue figures as early as May. I didn’t know how to turn around the situation. I was effectively burned out, and the pressure of having to find an apartment in record time was not helping at all.
My 2022 in Git commits

Q2 ended with a rough decision: to come back home for a few months to regain focus and plan the next step.

Q3: PromptHero

July started off in Madrid, and the midpoint of the year caught me with newfound strength and a clearer mind after stopping to worry about the apartment issue. I slowly started being able to do more and more work, and I only lost momentum due to of a short trip to London I did with my girlfriend – but regained it pretty quickly afterwards.

Short trip to London, paid a visit to my childhood friend Javi Requejo, who’s living and working in the city as a developer! It had been years since we last saw each other

By August, I was already full steam into the new approach. I had regained a lot of creative energy, and new ideas started flowing nonstop. I was back at it again: I was writing down my ideas, evaluating them, shortlisting the best and prototyping them at the speed of light.

I was in the middle of building my fifth or sixth prototype when Stable Diffusion launched, changing the generative AI landscape forever. I was so excited with this new tech, and the hype was also over the roof on Twitter, so I knew I had to do something. I dropped everything I was doing and started making a new thing:

I started building what would end up being PromptHero, and launched it within under a week of starting it.

The website started picking up traction quickly after launch, and this technological change seemed bigger than anything I’ve ever seen before, certainly bigger than anything I could take on by myself.

So I called my friend Javi (yes, we share names lol), who was starting to move away from the day-to-day of running his company Tot-em, and asked him if he was interested in working together on the idea.

He was, we started working right away, and it was not long until we started working out of Google for Startups Madrid:

Q4: A quiet and remote life near the sea

The last quarter of the year was way more relaxed and work-oriented than the previous months.

We kept working on PromptHero out of Google Campus until I eventually found a nice house in Portugal and moved back near Lisbon with my girlfriend.

I tried to keep distractions to a minimum, and focused just on work. Went back to the gym, started consciously allocating weekends for hiking and hanging out with friends to keep a healthy work-life balance, and that was pretty much it.

Nature and friends

The new approach started paying off: we launched Openjourney, a custom image generation model, and it got absolutely viral in the AI community. It has now close to a million downloads on HuggingFace, and a similar number of runs on Replicate. We started making a name for ourselves, and even got featured in Fast Company!

PromptHero started growing exponentially, and as of now I’m still dealing with the technical problems derived from the massive flood of new users and endless traffic pouring into the website.

I also got featured in the Wall Street Journal almost by accident, because another revolutionary AI called ChatGPT launched, I started excitedly talking about it on Twitter and someone at WSJ saw my tweets:

https://twitter.com/rameerez/status/1600534738653044736

In the last week of the year, Javi came visit me and we built and launched VisualHound, a custom AI to generate fashion design images!

https://twitter.com/rameerez/status/1605933748855492610

I finished off the year by getting into the habit of making fire and coding in front of the fireplace every night:

Closing down

5 countries, a lot of cities and way too many planes – I kept doing the nomad thing well into 2022: it’s been exciting and hectic. However, all of that has taken a toll on me, and I think it’s time to slow down a little, and start settling down if I want to have any chance of being truly productive and making something of impact.

It’s been a chaotic year. While I’m happy with what I’ve ended up achieving professionally, I don’t think it’s enough. 2022 ends on a high note with the promise of opportunity and the responsibility of having to make it work. This new AI wave is promising, but if we fail to capitalize on it then all our efforts will be in vain.

As for what 2023 will bring me, I’m as clueless as always. I’m going to be in Portugal for now, but something in my crystal ball makes me believe a big trip awaits for me next year, one that involves crossing entire oceans. Work-wise, I’m just crossing fingers that any AI thing we build works as a sustainable business.

The post 2022 recap appeared first on @rameerez.

]]>
https://rameerez.com/2022-recap/feed/ 0
The curse of creativity https://rameerez.com/creativity/ https://rameerez.com/creativity/#comments Fri, 26 Aug 2022 19:03:05 +0000 https://rameerez.com/?p=4504 Creativity can be both a curse and a blessing. Without discipline it's just raw power, like a wild garden hose. Well directed, it can change the world. It does come at a price, though, one that you’re going to pay whether you're willing to or not. But what is creativity, anyways?

The post The curse of creativity appeared first on @rameerez.

]]>
.shameless-plug-container { display: none !important; } .wp-block-quote { margin: 4em 0; }

Creative people usually get nothing done.

They’re so attracted to novelty, and they see so many opportunities at all times, that everything they do is jump from rabbit hole to rabbit hole without finishing anything first, in an involuntary but very effective act of self-sabotaging.

I think I’m one of those people.

Can creativity really be that bad?

To answer that, we need to understand what creativity is. [1]

First of all, creativity seems to be a measurable phenomenon. And that’s important, because it means science can study it fairly accurately, and thus we can know what it is and how it works. More particularly, creativity seems to be a phenomenon tightly associated with personality.

Personality theory is a complex field. Many have tried defining what personality is and how to measure it, mostly unsuccessfully. You may have heard of things like the MBTI test before. What you may not know is the MBTI is essentially pseudoscience: it doesn’t work, it has significant scientific deficiencies, and researchers in the field not only don’t use it – they despise it.

What works, and what’s actually used in psychological research, are modern models rooted in statistics and science. The most widely used model of personality nowadays is called the Big Five – it states that personality is made up of five different main traits: Extraversion, Agreeableness, Neuroticism, Conscientiousness and Openness to Experience. We’ll mainly focus on the latter.

Two of the Big Five personality traits

Creative people are high in trait Openness, and it’s not clear if that’s even two separate phenomena. It may be just two different words to refer to the same thing. One of the two subcomponents of Openness is trait Intellect – which essentially measures how interested one is in ideas and in discussing ideas. We can extract our first take away from creativity:

Creative people like to talk about ideas.

It’s no surprise then that creativity is also high IQ related – people with higher IQs are likely to be creative.

Why do you need to be smart to be creative? Well, because creativity means getting where no one has gotten before, and if you are not smart you are going to get where everyone else has already gotten – and that’s not creative by definition. This makes us understand yet another thing about creativity:

Creativity means being at the front of things.

In fact, creative people are defined by their high motivation to experience novelty. Novelty can come in many forms:

→ exploring new ideas
→ learning new things, becoming multidisciplinary, cultivating polymathy
→ listening to barely known, unconventional music
→ finding, using and creating indie startups
→ playing indie games

Almost always, creativity involves ideas and exploring the unbeaten path.

The good side of creativity

What are creators good for? Well, creating. Making something out of nothing. They’re the first ones to go into unexplored territory and set ground for others to build upon. They’re constantly putting a foot into the unknown and then making sense of it.

They’re explorers. They go into where nobody goes and discover what’s possible, and set the path for others to follow. They’re pioneers. If you ever wondered if something was even possible and later found out about someone’s work and felt like “Aha! This is it, this proves the thing I wanted to do is in fact possible”, that someone was probably a highly creative person.

You can think of creative people as the kind of people that constantly revitalize cities. Say there’s a poor and rather undesirable area of town nobody really wants to go to. An artist may go there and make artwork based on it, putting the area in the spotlight and making it somewhat known. Then maybe the first exhibitions happen, which attract the first batch of creativity-oriented people into the neighborhood, and expand its popularity. Then maybe the area becomes known enough between those early adopters that another creative entrepreneur opens up the first hipster café, making the area now trendy. Which, in turn, attracts the non-creative but career-oriented people that jump in trying to develop the area.

And when the area is no longer unknown territory, then creatives go and rejuvenate some other area, where they can explore yet another unbeaten path. Because that’s what creatives do, they transform chaos into order. And that’s precisely where they live, they live on that edge between known and unknown: always with a foot above the abyss. And it’s a very difficult place to live, because you can fall into chaos at any time.

It’s hard, but the flip side is creators tend to produce exceptional and lasting works. Why? Because creativity can be defined as novelty –if it weren’t novel it wouldn’t be creative– and what’s novel is original and authentic. Authentic novelty is usually exceptional and enduring – because no one has done it before and because you’re the first one to do it.

That’s also why the worst thing a creator can do is feel like a sell-out or a copycat (if you’re creative, you may have a rough time copying/following strategies that work, or feel like you need to discover your own strategies in order for the process to be “worthy”).

Creative flow

Creativity can also be defined as the proclivity to engage in creative thought. But what does it mean to think creatively?

It means that if you get tossed out an idea, there’s some probability that that idea triggers off other ideas in your imagination. If you’re not very creative, when you’re thrown an idea hardly any other ideas will be triggered, and the ones that will be triggered are going to be closely associated with that initial idea. But if you’re creative, just an initial idea is enough to generate a vast array of completely different ideas.

This is called divergent thinking, and the amount of derivative ideas you can generate is called fluency.

If you’re fluent in divergent thinking, sitting down to work feels like being in the middle of a nuclear chain reaction. Every single step you take sparks a new idea, and that new idea sparks a myriad of other new ideas – and those also have the potential to generate new ideas, and you want to write them all down so you can go explore them later, but there are so many of them and they come so quickly you barely have time to write them all down, let alone to act upon them. The amount of ideas you need to keep in memory grows exponentially. Most of the time, you just forget most of them because you start daydreaming and exploring one of the ramifications and get so lost in it you can’t backtrack.

It’s like when you’re playing a videogame and you’re faced with a crossroads or a labyrinth — you wanna keep a mental track of every unexplored path so you can go back and explore them later, but you can only do so much.

I associate this feeling of creating ideas effortlessly with being in a state of flow. It’s a very distinct feeling, and the best way to tell if you’re in this state or not is to have experienced what it feels not to be in it.

When you’re not in creative flow, you just sit in front of the computer hoping the day goes by as quickly as possible. Maybe you scroll mindlessly for hours, binge watch YouTube videos, or just do anything that’s not intrinsically productive. It feels like the days pass without getting anything done, as if everything had been a big waste of time just to justify your time in front of a screen.

It feels tremendously different when you’re in creative flow. It feels engaging. When I’m in creative flow, I don’t have enough hours in the day to get done everything I need to do, and yet every time I put my head down to work I generate 1000 new ideas I want to explore and act on. I’m flooded with new things to do and explore, and my idea pad grows substantially every single day because I write down so many ideas and thoughts. It’s such a strong force that I need to turn off my phone and stop answering messages for days at a time, because distractions completely break the process for me.

Creative flow doesn’t always occur, of course. There are many creativity killers, the most deadly in my experience is a structured environment. This means if I happen to have to work within an already designed system (like a rigid company) and I get assigned a task to do, there’s almost a zero chance creative flow will happen. I need a blank canvas and full creative freedom as preconditions to unleash this process – creativity doesn’t happen on command.

The price for creativity

There’s an increasing price to pay as you deviate from the average, and creativity can quickly turn from virtue to pathology.

The price for creativity is that it’s hard to catalyze an identity, because you’re interested in everything, and your interests will flip from one thing to another.

For a creative person the fun resides in exploring new things. It’s not fun to deep dive into what you’ve already explored. The motivation is in going into the unknown and then coming back with new information, not in staying and improving what’s already known and stable. You always want to jump boats, chase the next shiny object and go explore the next thing.

Creatives are professional jacks of all trades, masters of none.

Creative people lack focus. They’re constantly creating so many possibilities that none can be acted upon fully.

It can become pathological, because when you’re just exploring everything around you is unrealized potential, and unrealized potential is not real nor tangible. As a creator you fear everything is an illusion, so you need to seek to prove reality outside of your mind, and materialize things.

The creative process

Exploring obviously needs to be part of every creative process, but convergence is just as necessary to make sense out of chaos. And this process needs to be cyclical, a creative person always needs to be alternating between the “divergence” and the “convergence” phases. If all you do is diverging without ever converging, because that’s what you like doing the most, you will never get anything actually done.

As an entrepreneur, I often fall into this trap. I often have a bunch of new business ideas I want to quickly explore, so I’d build a quick Proof Of Concept (POC) for each of them to understand the market and get a sense of the kind of problems I would face if I decided to pursue the idea. But once that’s done, the fun is over – and they often just remain POCs without me really delving into any in any substantial depth.

Creative people get easily lost into rabbit holes.

It’s not uncommon for creative people to go through frenzy periods of time characterized by an obsession with one single topic. For me, this has historically materialized in things like obsessing over solving the Rubik’s cube under a certain time (I was consumed by it for weeks, and I wouldn’t stop until I had learned how to solve it sub-one minute, which is not even that fast, and by that time I had even considered signing up for speedcubing competitions). I’ve also had other more practical obsessions, typically related to learning about bleeding edge technologies like AI or Brain-Computer Interfaces.

I had never been aware of this behavior of mine until both my girlfriend and one good friend put it into words: “You’re always getting lost into rabbit holes. This is your biggest weakness. We have to keep you out or you’ll never do anything relevant”. If you’re jumping from one rabbit hole to the next one, you get nothing done.

There’s such a thing as being “too creative”. If you’re too creative, you’ll see patterns everywhere, even when they’re not there – and that’s not helpful in any sense. It only leads to overthinking and overanalysis.

Another price to pay for creativity is that life often feels incomplete.

Creative people often feel unfulfilled.

You don’t feel fulfilled even when you’ve met all basic needs. Even if you’re good on most important dimensions of life (you have friends, you have a healthy relationship with your partner, you have a loving family, you are as educated as you are intelligent, you have an occupation that gives you stability and something productive to do, and you’re not doing anything self-harming) – that’s not going to be enough. If you’re creative, you’re going to have to pick another domain where you’re working on something that’s both positive and somewhat revolutionary – or you’ll feel emptiness even if you’re good on the other dimensions.

I’ve recently been through a pretty intense burnout, and I think this is in part why. I felt burned out because I was no longer being creative, and even though I was working on my own business I felt like I had created my own corporate job – because my day to day ended up requiring zero creativity.

Creative people crave being at the frontier of what’s possible – so work options shrink significantly. If a company is not doing something somewhat revolutionary, it’s likely a creative person will be not interested at all in working with them. The problem is most companies are not revolutionary. And this is yet another high price to pay for creativity:

Creative people have a rough time at work.

Making a living as a creative person

Creativity is high risk, high return.

It’s a gambling strategy. Like playing the lottery. It can turn out tremendously good, but the most likely outcome is that you’ll play the lottery your entire life without winning the prize.

If you’re pursuing anything creative, the overwhelming probability is that you will fail, but the upside is that a small proportion of creative people succeed spectacularly. This is why creatives are overrepresented in both stories of failure and stories about extremely successful people. And this is yet another price to pay: creatives are so much more likely to be homeless and starve than people without creative inclinations.

Creative people have a hard time monetizing their creativity.

Although it’s very foolish to be creative (because failure is almost guaranteed), it’s creative people who lead the vanguard forward into the unknown and change the world. So if you want to be the kind of person that moves the needle forward and has a shot at changing the world, you’re going to have to pursue a creative path.

Now, be aware: statistics are not on your side. In fact, almost all creative endeavors follow a Pareto distribution. This means only a tiny, tiny percentage of all people make almost all the money, and most people make close to nothing. This is a distribution that happens naturally across all creative domains: think book authors, singers, music producers, movie makers, actors, comedians, game makers, influencers, entrepreneurs… And it happens mainly because talent and creativity is unequally distributed, so only creators really at the top of their game succeed.

A year or so ago, Twitch leaked a pretty interesting piece of information. It was a dataset that included a relation of all streamers in the platform along with how much money they had made streaming. I analyzed the data of the top 10k streamers on Twitch, and this is what it looks like:

Distribution of Twitch streamers and their average monthly income. In the y aixs: "Monthly average payouts (USD)"; in the x axis: "Number of Twitch streamers". The chart shows a pareto distribution following a power law.
Data source: Twitch.tv (leaked)

What this means is:

  • There are only four (!) extremely successful streamers that make more than $200k a month.
  • The distribution goes down very steeply, revealing the next biggest performers earn “only” about $100k/mo.
  • Once we’re past the top 600 or so streamers, payouts start being below $10k/mo, and from there it only drops dramatically.
  • The median payout is $1.7k/mo, and to earn more than $5k/mo you’d have to be better than 85% of all streamers.
  • The top 10% of streamers make 50% of all money. The remaining 50% needs to be split among thousands, if not millions of other streamers.

Now, bear in mind, this analysis is extremely biased because it only considers the top 10k streamers (out of about 9.2 million total active streamers), so these are streamers that are already in the top 0.01% of their field – if we actually took into consideration all streamers, the results would be much, much more discouraging. The average streamer could probably expect a payout of close to $0.

What’s interesting is this distribution replicates itself across platforms. I don’t have the data at hand now, but I remember OnlyFans data reveals a very similar pattern – most creators make close to nothing, only a tiny fraction makes real bank.

As an entrepreneur, this distribution is also likely to apply to you – with a few added problems.

Entrepreneurs are constantly exploring new ideas at the frontier of what’s known and possible. But as an entrepreneur, you may come up with ideas that are way too novel. Like, imagine you create something so new it doesn’t even compare to anything that existed before. How are you gonna market something that’s so new it doesn’t have a category and you don’t have the lexicon to describe yet? You’ll probably need like 10 failed entrepreneurs before you that have educated the market enough so your product can be successful by the time you launch it.

Pursuing creativity is most likely to make you poor and unsuccessful.

Jobs for creatives

If creative people have such a hard time making money by doing creative things, and if they absolutely need to do creative things in order not to be miserable, what’s the solution? How do we integrate creative people in the workplace?

The answer might be just to be willing to suck it up and then do your thing on the side. Find a way to make money and then practice your craft after work, or you may starve otherwise.

Of course it’s better if you can find a job that’s somewhat creative, but companies don’t usually hire creative people. What a company wants is stability, not creativity. As a company, you above all want to keep things running. You need what’s already been built to keep functioning – you don’t want creative forces so big that question and threaten what’s already working. You want your new hires to blend in and average out the work your team does, not to stand out significantly, because that’s too risky and stimulates instability.

This is a funny contradiction, because we live in a world where the non-creative people are increasingly being replaced with machines. Anything that’s not creative can and will eventually be turned into an algorithm – so ironically those that aren’t creative are the ones that are at risk in the long run.

For the time being, it is what it is. Creatives that need to get a job better aim for one that lets them be at least somewhat creative. It’s not a black or white thing – it’s more like a spectrum. Some jobs require zero creativity, some require more. There are clues we can point at as to which kind of jobs are creativity friendly.

Managers, for example, are the opposite of creatives. They need to work like machines, like well-oiled gears in an industrial setup. Any managerial and administrative position is generally low creative and will require you to behave more like a robot than like Van Gogh.

“Implementer” jobs will probably won’t cut it, either. If you want something that’s already been invented implemented and then turned into a reliable, well-functioning machine, you don’t get someone creative to do that. Creative people want to be off to do the next thing. They aren’t even interested in that, they’d get bored to death replicating what’s already been done over and over again.

What kind of jobs can creative types get, then?

Well, creative people are problem solvers – if you have business problems you want creative people, because they can think laterally and find unconventional solutions to tough problems. Where others get stumped, creatives shine.

Think about it: there’s no reason to be creative unless you have a problem to solve. That’s why traumatic childhoods often lead to creative people, because under those circumstances you need to put yourself together in a creative manner. Early negative experiences aligned with high intelligence and high openness is one of the things that fosters creativity.

Creativity emerges when you put serious constraints on things.

In order to have someone be creative you have to set them a difficult problem. So it might very well be the case that jobs where you need complicated problems solved are a good match for creative people. Think maybe business consultants or engineers working in bleeding edge fields like robotics.

There’s another problem regarding creative people and the workplace, and that’s the problem of entry jobs. Creative people are useless at the bottom of the hierarchy, because at the bottom you should only do what you’re told to do. You’re not there to think outside the box: you’re there to learn what you’re supposed to do, and then implement it.

This contrasts with what’s going on at the top of the hierarchy. People at the top are the entrepreneurial ones, the ones who can communicate well and bring in new business – and those tend to be creative in nature. But it’s very difficult to get them from the system itself, because systems don’t nurture creativity. They’re the antithesis of creativity. In fact, the artist is the person that always stands outside the structure, or builds a structure of their own: artists are not likely to be already part of an existing structure. So, it may be that creative people belong more in the top of hierarchies, but to get there they either need to endure through a long and painful path through an existing system, or create outstanding success of their own outside the system (which, as we’ve seen, it’s extremely difficult) and then join at the top as a “superstar”.

In any case, creative people are a pain to manage and organize. Unless they’re willfully constraining their own nature and biting their tongue, telling them exactly what to do isn’t going to work, and putting them in a box is completely counterproductive. So they’re very annoying, even though they’re extremely necessary – and even more necessary in the upcoming future.

Creativity through school and academia

I mentioned earlier that creative people would probably enjoy solving difficult problems, but this might not be the case if you’re a researcher.

Academic and scientific success is negatively correlated with creativity. The more creative you are, the less likely you are going to be successful in science and academia.

It makes sense: science is actually an algorithmic machine, and that’s why it’s so powerful. In science, you can get people who aren’t creative but are willing to work hard – and you crank the levers and out comes knowledge. Science is an extraordinarily powerful technology.

But you can’t get creative things published. What you can get published is incrementally better things. If you tried to publish creative ideas, no one would have any idea what to do with them, and non creative people will think it’s just rubbish.

This is also why it’s so hard for a creative person to go through the education system. It should be no news to anyone reading that the educational system cripples creativity at every level – and it should even be fairly obvious why that is the case this deep into the blog post.

The education system was created to mass produce workforce for the industries. And the system replicates an industry itself: a conveyor belt where you get the student from grade to grade until it’s a finished product, desks lined up in a grid to enforce order and discipline, a high number of students per class to mass-produce output at a lower cost, enforced silence and stillness in class, a bell that strangely resembles a factory bell… it’s all there to create highly compliant people – people that could follow orders to the T, and perform well in a factory. An artist’s nightmare.

It’s 100 years later now, but we still use the same system with almost no substantial changes.

Thinking with perspective, I think this is probably why I hated Math through High School, but have a rather healthy relationship with it nowadays: back then they made me behave like a robot and follow mathematical algorithms I needed to memorize without questioning. Ruffini’s rule comes to mind: today I would be absolutely unable to outline the steps of the algorithm or even say what it was used for, but I remember getting heavy penalties for misplacing just one number or not giving an exact result. In contrast, these days I use Math on a fairly regular basis, but I don’t get penalized for miscalculating or not following an algorithm like a robot. Instead, I offload all computation and algorithms to an actual robot, my computer, who does a way better job than me at calculating things, so I can focus on the higher level abstractions and reasonings. Today I see Math as one more tool in my toolkit I can use in my creative process, and not as a judge that will sentence me to death if I happen to misplace a digit.

On top of that, it’s impossible to evaluate or grade creative people. You can’t, because if they’re operating within the confines of the system, which has a structure, they’re not creative.

Not very long ago I had the opportunity to confirm this with my own eyes. The following story proved to me it is, in fact, impossible to grade creative people in an academic setting.

For my Bachelor’s of Business final thesis I was supposed to write a paper in Spanish between 20 and 30 pages long, in a very strict academic format, on a fairly constrained array of topics (to give you an idea: the most common kind of thesis among my peers was just an analysis of the business plan of any well-known company).

Instead, I ignored all rules and wrote and handed in a 250 pages book on how to build digital products. In English. With chapters, downloadables and everything. After finishing defending my thesis in a language I was not even supposed to use, the jury confessed they had never seen anything like that before and that they had no idea how to even start grading me. While I had proved some degree of skill and knowledge –they said– I didn’t fit into any category or structure they could measure, like they measure the rest of students. They looked perplexed for a good 10 seconds without speaking a word before asking me to leave the room so they could speak in private. I have to confess I was extremely lucky that day: when I came back in, they were friendly, and said that since I came from a background in startups and this didn’t really fit any structure, they were just going to give me one minute to pitch them why I should get a good grade on my work. I did, and it had to be a pretty good pitch, because they gave my thesis a perfect score on the spot. I guess creativity truly is a high risk, high return strategy after all.

Am I creative?

If you’re reading this post and made it this far, you probably are.

But being creative is rare. Extremely rare, I would say. Most people score 0 on some creativity tests. Not just low, but zero. Now, with regards to temperament and personality, trait Openness can easily be graded on a curve, which can give you a pretty good idea about how creativity-inclined you are.

If you haven’t already, and are curious, I would encourage you to take a personality test based on the Big Five model. It can be eye opening.

Personally, I’ve recently found out two interesting things about me.

The first one I found three years ago, before I was even aware of what the Big Five personality model was. I unknowingly took a Big Five test, and got my results on the five dimensions. Turns out I’m in the top 5% of all population in trait Openness, which by itself alone would mean I’m pretty inclined to creativity.

The second bit of information I discovered at about the same time, but for completely unrelated reasons. A couple of friends were in Mensa at the time and encouraged me to take a proper IQ test. I did, and I happened to qualify for Mensa, so that also puts me in a rather high IQ percentile. These numbers are worthless in real life, and meaningless without context – but they’ve been immensely helpful in my quest to understand myself. It helps explain why I usually do the things I do. High Openness plus high IQ means I’m likely to be a highly creative person – and suffer from the creative curse.

You’re complicating your life unnecessarily, just stop being creative

«For the creator who seeks to make something new, something better, something important, everywhere you look is something unsatisfying.

The dissatisfaction is fuel. Knowing you can improve it, realizing that you can and will make things better—the side effect is that today isn’t what it could be.

You can’t ignore the dissatisfaction, can’t pretend the situation doesn’t exist, not if you want to improve things.

Living in dissatisfaction today is the price we pay for the obligation to improve things tomorrow.»

Seth Godin

Being creative comes with so many problems. Can’t you just stop being so creative?

I would argue not. You can’t kill creativity. It’s like shouting to a kid: “stop daydreaming!” – it’s not only not gonna happen, but it’s also probably not what you should be doing.

Discussing creativity with a non-creative person is like discussing color with someone who’s color blind. If you’re reading this blogpost and you’re not like “holy damn, this is me”, you’ll probably have a very hard time understanding creativity. And that’s going to be a problem if you need to be around creative people: for example if you need to work with someone creative, manage creative people, deal with your creative partner or even raise a creative kid. I don’t know what you can do to handle it better, but whatever you do, please try not to shut down their creativity.

Traits like creativity are deeply rooted in biology, they’re not just a surface trait. You can’t get rid of them. It’s likely that your whole brain is configured around the fact that you’re creative, and it’s likely that this has some biological and evolutionary meaning. Maybe creative people were necessary at some point, because they’re the ones more prone to go out and explore and come back with new valuable information about the environment, while others would stay in the cave and protect the tribe, generating stability. I don’t know for sure.

What we do know is creative people that don’t engage in creative endeavors tend to be miserable. It’s their life blood – if you’re a creative person and you’re not engaging in a creative enterprise, you’re like a tree that has had its vitality amputated. Like a fruit tree that’s bearing fruit, you can’t just suppress it.

And the bad news is that if you’re also smart, it’s likely that you are your biggest enemy:

«I had one client, he was a brilliant architect. His rational mind was his worst enemy, he was hyper rational, because it just criticized everything in a dark way, and effectively. If I got him to not think, and just create, he was a complete genius. That’s where all of the vitality in his life was, that’s where the sap rose up inside the dead tree that was sort of embedded inside of him.»

Dr. Jordan Peterson

Open people, especially if they’re smart, sometimes have a very nihilistic intelligence. They are really self critical and brutal – but smart. They criticize themselves out of existence. What a therapist often does is have them quit listening to their own critical over rationalization and force them to go out and create something. And as long as they’re doing that, they’re engaged in the world and happy as hell, but as soon as that self critical rationality comes in it shuts down the creativity – and they’re just like walking corpses.

How to be less miserable as a creative person

What can you do if you’re highly creative and want life to be easier for you? The consensus seems to be that you should deliberately work on improving your conscientiousness.

Conscientiousness is another personality trait (remember the Big Five?) that has almost nothing to do with creativity.

Conscientiousness, however, is a good predictor of long term life success.

Conscientiousness is associated with stability and reliability. Conscientious people are self-supporting and ambitious. They’re work oriented. They need to have a duty, they need to carry a load. They can’t stand just sitting there doing nothing, they need to do something all the time. If they were left alone in a forest they’d just pick up an ax and start chopping trees down, because they just can’t stand inactivity. Conscientious people make good managers and good administrators.

If conscientiousness sounds somewhat rigid – that’s exactly right. It’s precisely what we creatives need most, it’s the antidote to our creative chaos, the only thing that can set us straight. You may need to build up your conscientiousness over a number of years, but it’s worth doing. If you manage to mix both creativity and conscientiousness in harmony, you have a pretty damn good chance at being unstoppable.

Conscientiousness breaks down into orderliness and industriousness. The most important trait for us creatives is going to be the latter, but just so we get a better picture of what conscientiousness is, we’ll briefly cover both:

  • Orderliness is associated with disgust sensitivity, the kind of gut feeling that you get when two things that shouldn’t be touching are touching. It’s what makes people believe things are out of place, because they get that visceral feeling that they shouldn’t be in that particular spot.

    Orderly people judge themselves quite harshly, probably because they would be disgusted by the possibility that they might count among the failures.

    Orderly individuals don’t leave their belongings around. They keep things tidy. They’re bothered by messy people and disorder. They follow a schedule. They like routine. They admire willpower. They are driven by dutifulness: they do things because it’s what needs to be done, no questions asked. They are good at following processes and making sure processes are followed. Orderly people also are very concerned with doing whatever needs to be done in the particular way it should be done.

    The problem with that is if you’re creative, things change all the time: there are a lot of transformations as you move towards the end – and that’s not something an orderly person is going to particularly appreciate. Orderly people are too likely to obey rules to be creative. Higher levels of orderliness aren’t associated with entrepreneurial capacity.
  • Industriousness is associated with plan execution. An industrious person carries out their plans. They take plans that are well formulated and then they implement them into behavior. They finish what they start. They’re really good at planning the use of their time to make things happen. They don’t waste time, they’re fans of efficiency and they careful choose the things they do, so they don’t waste time and get the thing done. They don’t postpone decisions. They’re not easily distracted. They don’t find it difficult to get down to work. They stay focused on their goal, or at least they continue acting in relationship to the goal. They want to win within a defined framework. They always know what they’re doing.

Conscientiousness is the cure for creative chaos, but since you’re (probably) pretty creative, in order to become more conscientious, you’re going to have to pick a domain that you’re suited to and that motivates you and follow the following advice in relation to that.

Here’s how to become more conscientious:

  • Lay down a vision for the future (3-4 years from now) and set a goal you want to achieve.
  • Make a plan to reach the goal and write it down.
  • Use a calendar: break down the plan into years, months, weeks and days. Think: what needs to happen in the next 3 years in order for me to achieve this, and when? Then, what needs to happen in the next 6 months? Then into the next 4 weeks. And then plan and set tasks for the current week and the current day.
  • Follow a schedule: wake up and go to sleep at the same time every day, define a strict work schedule.
  • Discipline yourself: eat at regular times, hit the gym, get yourself back on track when you deviate from the plan.

Me personally – I’m already quite conscientious, but that’s only driven by the fact that I’m industrious. However, I rank pretty low on orderliness, almost on the opposite side of the spectrum. My personal hell, and the thing I need to keep doing very consciously to avoid falling into chaotic creative hell, is to implement more orderly behavior into my life, namely: creating and following routines and schedules, and committing to strict deadlines, as well as cultivating willpower and dutifulness. And even though I happen to have a natural tendency towards industriousness, I always need to keep an eye on that, because I can feel my industriousness levels vary wildly, especially if I’m feeling down or burned out.

Conclusion

It seems to me that creativity without discipline is just raw power, like a wild garden hose. Brute force without any aim or direction.

It is discipline that channels creativity into something of value. Without discipline, a creative person will likely amount to nothing: they’ll keep chasing shiny objects their whole life without getting anything done.

Discipline trumps creativity every day of the week.

To become more disciplined, creative people can work on developing their conscientiousness. Things like setting a goal, making a plan, following a schedule to implement it are really good ideas.

No matter the improvement, though, pursuing a creative enterprise is extremely difficult and likely to fail. But if you’re creative and you don’t do anything creative, your soul dies.

Damned if you do, damned if you don’t.

The upside is that creative flow feels deeply engaging and meaningful. And the ability to make things out of nowhere, to consistently turn chaos into order – I think it’s completely worth it.

But it does come at a price, one that you’re going to pay whether you’re willing to or not, and you better have a plan to keep chaos at bay, or it will consume you.

Creativity is a curse, but you can make it into a great asset once you know how it works and what countermeasures you need to deploy.


[1] As I researched this topic I kept coming across a number of lectures by Dr. Jordan B. Peterson (Canadian clinical psychologist, former professor of psychology at Harvard and Toronto). He’s done a fair amount of research in the field of personality and psychometrics, and has posted many hours worth of his lectures online. He happens to have a focus on studying the personality and psychological aspects of creativity, and I found his material remarkably useful. Some parts of his lectures were so enlightening I’ve transcribed them almost verbatim through this post – after all, he’s the one that knows about creativity, not me. I’ve credited all sources I’ve used below.

Sources (YouTube list of 12 videos):

The post The curse of creativity appeared first on @rameerez.

]]>
https://rameerez.com/creativity/feed/ 1
How to choose a domain name: my experience after buying dozens of domains for 15+ years https://rameerez.com/how-to-choose-domain-name/ https://rameerez.com/how-to-choose-domain-name/#comments Fri, 19 Aug 2022 01:25:31 +0000 https://rameerez.com/?p=4388 I've spent the past 15 years choosing domain names for my business, products and startups. I've bought dozens of domain names of very different TLDs and this has been my experience.

The post How to choose a domain name: my experience after buying dozens of domains for 15+ years appeared first on @rameerez.

]]>
It was 2007 when I bought my first domain name on the internet. Since then, I’ve bought dozens of domain names for my businesses, products and startups. Every time I launch a new project (of which there are currently 30+) I need to choose a good domain name for it – a domain name that not only sounds good, but that also goes with the brand I’m trying to create and that customers will find appealing and easy to remember.

My main takeaway after all this time choosing domain names: there’s no golden rule.

Build and launch your AI startup this weekend

Shameless plug: I've made RailsFast, the template for AI coding. It's a production-ready Ruby on Rails boilerplate that's been heavily optimized for vibe coding, and comes with everything you need wired and working out of the box, so you can literally put up a live site accepting payments in 15 minutes. It contains everything I've learned in the past 10 years from scaling apps to millions of monthly users, and it's a very solid foundation to build your vibe-coded business on top of. Stop rebuilding auth, payments, backups, and admin panels, and turn your idea into reality in literally a couple days.

Full-stack
Database & migrations
Payments & subscriptions
Auth, admin, backups & much more

There’s no one-size-fits-all. Every project is different, and creativity is still a big part of the process when choosing a domain name. Every once in a while, someone comes up with a play on words that works great as a domain – and there’s no rule or algorithm capable of generating such a thing yet.

BUT.

There are a few patterns I’ve spotted through the years that help substantially narrow the options. To talk about them, first we need to understand what a TLD is.

What is a Top-Level Domain (TLD)?

Without getting into complex, technical definitions: the TLD is the right side part of a domain name. Some people call it the “domain extension”. Whatever goes after the dot. In Google.com, the TLD is “com”.

There are over 1.400 TLDs available. The most common ones you’re probably familiar with are .com, .net, .io or .uk – but there are also plenty of new ones like .pizza or .xyz.

What TLD should I choose?

If we look at the data, it’s clear that .com is the most used TLD on the internet, and the next biggest TLD (.net) is staggeringly far from it in terms of usage.

Most used domain TLDs on the internet: com, net, uk, org, de, ru, xyz
Data source: zonefiles.io

.com has been the king of TLDs pretty much since the web started, and not even the combination of the remaining 1400 TLDs can outrank it.

What this means, practically, is the vast majority of people will default to .com when writing a domain name. We’re just so used to it.

Although it’s slowly happening, especially among younger generations, it’s going to be difficult to get people familiar with newer TLDs.

To give you a sense of the numbers:

  • There are over 260 million total registered domains on the whole internet
  • 160 million (more than 60%) are .com domains
  • The .io TLD, popular in the tech industry, only has slightly over 225k registered domains (barely over 1% the number of .com domains)
  • The new .xyz TLD, of which you may never heard before, already has well over 4 million registered domains, almost 20 times more than .io domains

While .com is the default go-to TLD, there are definitely really good domains that make use of other TLDs.

Country Code TLDs (ccTLDs)

Examples: twitch.tv, lever.co, notion.so, codepen.io, people.ai

Each country gets their own TLD. For the US, that will be – you guessed it – the .us TLD. For Italy, that’s .it. But there are a few countries whose country code makes for an especially good brandable TLD.

.tv (Tuvalu, an island nation in the Polynesia), .co (Colombia), .io (British Indian Ocean Territory), .so (Somalia), .ai (Anguilla) are only of the few ones that are somewhat popular nowadays.

Why? Because .tv looks like it has to do with television and video, .co looks like .com and sounds business-oriented, .io is relevant in the tech industry because IO is the acronym for Input/Output, .so sounds exciting and marketing-y, and .ai stands for Artificial Intelligence.

It’s just a coincidence that these countries share acronyms with relevant keywords, but people seem to like it and these countries are making good money selling their domain names to interested parties.

It’s useful to know options like these exist – they also come in handy when you’re deciding how to choose a domain name.

Plus, there are fun play on words that can be made out of some ccTLDs. A good one is del.icio.us (“delicious”, a news sharing website that was popular in the mid-2000s).

There are a couple of problems with this, though. A nice and short domain like notion.so might be available while notion.com is not – but the branding effort it’s gonna take you to outrank the dictionary word on Google is going to cost a lot of money. A similar amount of money than that a .com single word would have required.

Another problem is: how are you gonna brand it? Notionso? Just Notion? How are customers going to know whether “so” is part of the “official name” or not? Every one of these branding decisions is going to cost extra money and/or marketing resources to make it stick.

But the main problem with non-.com domains is SEO. It’s a widespread fact that .com domains just rank better on Google than any other alternative. Google has tried several times to deny this fact in official statements, but empirical results do not support their statements and the SEO industry is still in favor of using .com over any other TLD. As a friend of mine puts it: “not using .com is a great way to get stuck on page 500 of Google”.

New Generic TLDs (ngTLDs)

Examples: proof.xyz, traits.xyz, web3.career

ngTLDs (New Generic Top Level Domains) came into play to solve the problem ccTLDs (Country Code TLDs) were already inadvertently solving: the lack of available quality .com domains and the need for expressing meaning with the second part of the domain name. If .ai means Artificial Intelligence, they thought, why not also have .game, .jobs or .cool?

ngTLDs are starting to take over (.xyz is already way bigger than almost all country TLDs), and others like .online, .top, .shop or .site are headed in the same direction.

We get the same branding problems as ccTLDs, though: is the ngTLD part of the name? Think, for example, something like “garden.tools”. Are you gonna name your startup just “garden”? Or “Gardentools”? And if so, are you OK with people saying and typing gardentools .com instead? Because that’s what most people are going to default to.

My rule of thumb for ngTLDs: they’re overall good if your product is aimed at a predominantly GenZ audience (ages 18-25) – because they are the most familiar with them. They may also work if your audience is mostly made out of tech people. The .xyz TLD, for instance, I’ve seen used for a lot of new crypto and web3 projects.

But, in my humble opinion, you will get nowhere using ngTLDs with older folks or non-tech savvy audiences – to them, a TLD like .xyz is just noise. They’re so unfamiliar with them.

Other generic TLDs

Examples: wikipedia.org, mozilla.org, ghost.org, wordpress.org

The remaining TLDs are not as used:

  • .org is usually used by nonprofits, though it’s not a requirement to be one
  • .edu is reserved for accredited educational institutions
  • .gov is reserved for US governmental organizations

Others like .net or .info just sound old and obsolete, but they can make for a great domain name if you’re going for that aesthetic, like poolsuite.net


Naming strategies

We’ve talked about the right hand side part of the domain name, the TLD – but what about the left side? That’d be the name itself, arguably the most important part.

We all know the basics:

  • Keep it short (ideally under 10-11 characters, not including the .com part)
  • It should be pronounceable (if you say it out loud, other people should understand what you mean and type it exactly as you intend)
  • It should be memorable (you and other people should be able to recall what the name was after one or two days)
  • No negative connotations

But what about coming up with name ideas that fit this criteria?

I’ve analyzed the most successful domain names on the internet, and I’ve found around 10 naming strategies patterns that consistently yield great names.

I’ve analyzed the naming strategies behind the top 100 most popular websites on the internet and made my analysis publicly available on a public Google Spreadsheet – feel free to duplicate it and tweak it! (please cite back if you use it!)

Let’s dive deeper into these strategies.

Dictionary words

Examples: Amazon.com, Stripe.com, Square.com, Amplitude.com

Stripe, Square, Amazon, Amplitude – they’re all dictionary words, words that were already used in the English language long before their respective companies came along and gave them a different meaning.

Dictionary word domain names are the most valuable domain names. I’d say there’s not a single one available anymore – and there hasn’t been one for a long time. If you want a dictionary word, you’ll have to buy it off its previous owner, who will predictably ask for a lot of money (think hundreds of thousands of dollars, likely millions) A famous recent example is Friend.com, which sold for 1.8 million.

Patrick Collison (@patrickc), Stripe cofounder, answers how much did the Stripe.com domain name cost. Source: Quora

Not all dictionary words are equally valuable, though. What you want to take into consideration is if the word is already being used to describe a high-value product with a high purchase intent. “Cars” are pricey products, and people are buying and selling cars all the time, so a domain like “cars.com” is probably going to cost an obscene amount of money. The most expensive domain names in history include dictionary words like “insurance”, “hotels”, “beer”, “toys” or “clothes”. They’re all keywords for which people are already spending money on search ads.

On the other hand, words that are not associated with existing products that people are already buying and selling tend to fall into the lower end of the price distribution. People were not buying and selling stripes or squares before the respective .com domain names were purchased.

The problem with single dictionary words: they require burning through piles and piles of dollars in branding efforts + in acquiring the .com itself. It’s going to take you a lot of money to position the brand, because the word is already being used by literally everyone. On the flip side, owning a single dictionary word .com domain signals to the entire market you’re serious about your startup, you’re absolutely all-in. It makes customers trust your business immediately. That being said, I’d say it’s an undoable endeavor unless you have plenty of VC money to go acquire the name and go big on branding and marketing. If you’re just starting out, or if you’re planning on creating something small and don’t want to raise money, single dictionary words are probably not a good fit for you.

> Special case: plural dictionary words

Examples: restaurants.com, cars.com, hotels.com

Plural dictionary words belong to category-defining companies. Think restaurants.com, defining the whole restaurant industry. Compare it to more task-oriented companies, which tend to use singular words in their domain names (it’s Notion and not Notions; it’s Amazon and not Amazons)

> Special case: names and surnames

Examples: forbes.com, reuters.com

From time to time domains are chosen after the founder’s name or surname. While names and surnames are not strictly dictionary words, they pretty much behave as such: they form part of the common body of words people use and they had a meaning of their own before someone came and associated the word with a company.

Joining two dictionary words

Examples: FaceBook.com, DropBox.com, MailChimp.com, YouTube.com

Since all dictionary words are already taken, the next best thing is to join two dictionary words, which opens the possibility space significantly.

This is the most popular naming strategy used in the top websites on the internet, followed only by using single dictionary words. Between the two they account for more than 60% of all domain names in the top positions.

It goes without saying, but the most successful two-word domains are usually two very short words. Two syllables total, maybe three: face-book, drop-box, ru-by-gems. Long words with a lot of syllables don’t have much punch.

This is unsurprisingly the go-to naming strategy for many new startups. Most startups you know have names that follow this structure. Think: PayPal, SoundCloud, GitHub, CloudFlare, BlogSpot, CoinBase, DoorDash, SendGrid… the list goes on and on.

The end result, culturally, is that joining two dictionary words now sounds cool and startup-y – you can probably make a good business name joining any two words. Although the most used ones tend to be short words, usually action verbs, like “send” or “pay”. There’s also a recent trend of using animal words in combination with a word describing the product: MailChimp, FoodPanda, RevenueCat, SendBird…

And sometimes, one particular wildcard word becomes trendy and all new startups seem to use it. Think about the word “flow”, which has been used by lots of startups recently: Webflow, Upflow, Lendflow, Payflow, Zenflow, Eduflow… these are all real startups whose name is just the mix of a dictionary word + “flow”.

Trends come and go, but the underlying mechanics tend to remain stable across time. Mixing and mingling two words will always be a naming strategy: it’s only a matter of which two kind of words are the most trendy to join in a particular point in time.

My mental model when deciding what words to use is that the best names are usually the ones that sound like two “claps”, as in: drop-box, mail-chimp, web-flow, send-grid. This of course just means the resulting names have only two syllables, but I do like clapping along. Three syllables are also okay.

When considering an available two-word domain name, look for the number of results for that particular combination in Google search. Say you’re considering “bluetowel”. Type “bluetowel” in Google and hit search. Look in between the search bar and the first result, where it says “About 2,140,000 results (0.44 seconds)”.

If you get a low number of results (hundreds or thousands, even tens of thousands), you’ll likely rank very quickly for your brand name, and branding will be easier than if you need to take over other projects with similar names. If you get a lot of results (like millions, in our example), it means people are already using these two words to refer to something else and getting your domain to work as a recognizable brand will be more costly.

> Special case: one of the two words is plural

Examples: RottenTomatoes.com, GoodReads.com

For the longest time, I thought you should only join two singular words if you wanted to follow this strategy – but there’s plenty of good websites to prove me wrong. This is not the same case as a singular dictionary word being plural (category-defining strategy). When you have two words, one of them being plural is often a matter of branding, availability, or simply choosing the name that sounds better.

Adding prefixes

Examples: getDropbox.com, useGuard.com, goCardless.com

Even two good dictionary word domains are so hard to come by these days that sometimes you need to add a prefix to make your domain name unique enough so it’s available.

The most prominent example is probably Dropbox, who started out in 2006 as getdropbox.com before they acquired the current, cleaner and more expensive dropbox.com

When adding prefixes like go- or get-, you’re going to get similar problems to the ones I mentioned when we were talking about ccTLDs and ngTLDs, namely: people will start calling your startup by the domain name instead of the intended name. This has happened to me with useguard.com – the project is named Guard but people would write to me like: “Hey – I’ve seen your project Useguard and (…)”.

You’re also probably going to get mistaken with other projects that share the same name, since your name is so common. Mine might be useguard.com, but there’s also probably getguard.com, goguard.com, etc.

Think of gocardless.com, for instance – they ended up incorporating the “go” in the official name. Whether this was a conscious branding decision right from the start or a reaction to the fact that most people were confusing the domain name with the official name I do not know for sure, but my gut tells me it was the latter. In any case, it works both as a brand and as a domain.

There’s a case to be made for prefixed domains as a temporary solution, though. Lots of startups like Dropbox started as prefix+name and then switched to the plain name .com when they had enough money to purchase it – but this only happens when the startup is either extremely successful or extremely well funded.

In any case, rule of thumb: whatever goes on the domain name, people are going to call your business that. If you add a prefix, expect a good chunk of people to think your full name includes the prefix.

Adding suffixes

Examples: Grammarly.com, Weebly.com, Shopify.com, Wakefy.com, Optimizely.com

Same story as with prefixes, but slightly different vibe.

For a few years in the mid-to-late 2000s the most startup thing to do was to have your startup name end in “-ly” or “-fy”, leading to a lot of domains ending in “ly” or “fy”, among other common suffixes. Shopify, Weebly, Optimizely, Grammarly are all instances of this phenomenon.

The trend is not as strong now, but you still see startups named following this convention every once in a while. Common suffixes include “-ly”, “-fy”, “-ier”, “-al”, “-os”, “-in”, “-db”, “-hq”, “-er” or “-ry”.

I’ve used this technique before to create Wakefy.com – and I think it yielded a fairly decent name.

Suggestive names

Examples: Twitter.com, Google.com, Figma.com

If dictionary words are all taken up and adding suffixes or prefixes doesn’t quite cut it, you can still get innovative by dropping a sublte hint of what your company does in the name.

“Twitter” comes from the sound birds make: “tweet, tweet”. An onomatopeia that is suggestive of the fact that there are many people talking (“tweeting”) in the platform.

“Google” comes from the mathematical term “googol”, meaning a very large number. It hints at the massive scale of data the company operates on.

“Figma” contains “fig” in the name – a hint subtle enough to suggest the product is about manipulating figures.

Brandable names & entirely made up words

Examples: Kaggle.com, Momoise.com

Sometimes none of the strategies we’ve discussed up until now will get you a nice domain name for your startup. Sometimes you need to make up entirely new words that mean nothing but that sound good as a brand name.

That’s the case of Kaggle, for example – a name that didn’t mean anything before the company came along and filled the name with meaning.

Words can convey meaning without meaning anything in particular. Sounds weird, but it’s true. There’s a well-known effect in linguistics called the bouba/kiki effect. If you had to say which one of the following two shapes is called “bouba” and which one is called “kiki”, what would you choose?

It was found, as you’ve probably guessed, that almost all people would name the left shape “kiki” and the right shape “bouba”.

Why? Do “bouba” and “kiki” have an explicit meaning we all somehow know about? Nope. It’s just sound symbolism. The sounds used in “kiki” remind us of spikes, and the sounds used in “bouba” are “softer” and make us think of other things that are rounded, just like the word “ding” makes us think of a bell.

If you want to create an aggressive brand name, it better sound something like “kiki” – if you want to create a caring, delicate brand, it better sound something like “bouba”.

“Kaggle” sounds more no-bullshit and straight to the point; “Momoise” sounds more delicate, soft and caring.

Using unique branded words for your domain name is a great option. You get a brand new blank canvas to paint on. You’re almost guaranteed no one was using that name prior to you – so you’ll be unique and you’ll rank #1 on Google easily for your company name.

But, of course, this strategy comes with a drawback: made up names don’t usually contain any relevant keywords in them. If you’re creating a new design tool and you call it Figma, the name contains neither “design” nor “tool”. “Fig” kinda hints at what the product does, but that’s about it. There’s nothing in the name to help a newcomer understand what your website is about – even though Figma ended up working great as a name.

Without a keyword, the name doesn’t create a mental image about what your product does in your customers’ mind, and people often use just fractions of a second to figure out what a website is about.

One good test to check if your made up name is good enough is to say it out loud to friends and family. Like: “I’m starting a company, it’s named ___”. If they ask “sounds cool, why that name?” or “what’s the meaning of the name?”, that’s usually a polite way of saying “I have no clue how the name relates in any way whatsoever to what your company does, and your multiple-levels-deep explanation of why this name kind of hints at it is so unhinged that I’m currently speechless”

On top of that, without keywords in the domain name Google might need a bit more time and effort to understand what your site is about (if you have “garden” in your name, Google will take it as a signal that it’s likely that your site is about gardening). If you can, it’d be a good heuristic to prefer at least a semantically related word in your name. If you’re talking about gardening, it’s okay if “gardening” is not in the domain name, but maybe consider words like “plant” or “shovel”, to hint both your users and Google what the site is about. Or don’t – others have done it without this and it worked well for them. Test things and figure out what works for you!

Words in another language

Examples: Ubuntu.com

Some words in other languages sound surprisignly cool for English-speaking audiences. Take “Ubuntu”, for example, an African word meaning “humanity to others”. It’s the name of a company that makes free, open software for the masses. While the name doesn’t directly tie to the core of the business, it has a positive meaning that’s tangentially related to the company – and sounds very cool.

Play on words

Examples: WhatsApp.com, Reddit.com

Much like brandable names, but they use a witty play on words like WhatsApp (sounds like “what’s up”) or Reddit (sounds like “[I’ve] read it”). If you’re a creative person, you may be good at generating great play on words domains.

> Special case: portmanteaus

Example: instagram.com, vimeo.com, gravatar.com, yandex.com, pinterest.com, ultralytics.com

A special case of playing on words are portmanteaus. A portmanteau is a mix of words where some parts of several words are mixed into one single word. Portmanteau domain names are fairly common across top websites:

  • instagram = “instant camera” + “telegram”
  • vimeo = “video” + “me”
  • gravatar = “Globally Recognized” + “avatar”
  • yandex = “Yet Another” + “iNDEXer”
  • pinterest = “pin” + “interest”
  • neuralink = “neural” + “link”
  • jobician = “job” + “magician”

Misspelled words

Examples: dribbble.com, fiverr.com, canva.com, carrd.co, disqus.com, scribd.com

Misspelling a word is a great way of creating uniqueness in a world where every single good domain name is taken. Canvas.com might have not been available for purchase, but Canva.com was.

The problem is 90% of people are still going to spell your name correctly. When you say “dribbble” out loud, most people are going to understand “dribble”, and most are never going to spell it with a third “b”.

Misspelling a word is kind of a hit or miss: it may be a great way of differentiating your domain name, but it may also ruin the brand if it’s really difficult to spell and remember.

I like to think of misspelled domains names more like the exception to the rule: they’re not really memorable, and it’s difficult to tell other people about them.

So, again, the same rule of thumb applies: everything that’s not the default an average person would type when they first hear the name, it’s going to require extra marketing efforts/resources to make it stick. If you have the resources and the budget, go ahead. If not, you might want to reconsider.

Numbers in the domain

Examples: 9gag.com, 1password.com, deadmau5.com, chess24.com, a16z.com, w3.org

Again, I think they’re an exception to the rule. I’m personally not a big fan of numbers in the domain name. They might work out sometimes, but they’re usually outliers.

To give you an idea of how rare they are: there’s only one domain containing a number in the top 100 websites on the internet.

Exact Match Domains (EMDs)

Examples: MechanicalKeyboards.com, HowToPlanAndSellABusiness.com, MelbournePersonalTrainers.com

Exact Match Domains (EMDs) are domains that exactly match a given keyword. If the keyword is “how to build a business”, its EMD would be howtobuildabusiness.com

If you’re doing a SEO-oriented project, an Exact Match Domain (EMD) might be the perfect fit for you. When building exclusively for SEO, you’re not looking for a beautiful-sounding name – what you’re looking for is Google ranking your website #1 for your target keyword.

Say you want to become the #1 site to come up when people search for “melbourne personal trainers”. Google is probably more likely to understand your website is a perfect fit for that search if it’s named melbournepersonaltrainers.com than if it’s named enterprisefitness.com

In fact, this is a playbook that many local business follow. Local SEO is a subset of SEO whose main goal is to rank for keywords of the form “[service] in [location]”, like for example “plumber in London” – and they tend to use EMDs a lot.

Of course, this is not a one-size-fits all, and a keyword-related domain is just one of many signals Google may take into consideration when ranking your website, but again: if you’re building almost exclusively for Google and want Google to easily understand what your website is about, you may have a shot making your domain name stupidly obvious.

EMDs are a bit more obscure and belong deep into the SEO realm, although there are a few good ones that are well branded and look like a “normal” domain name. A personal favorite of mine is MechanicalKeyboards.com, which ranks #1 for… you’ve guessed it: “mechanical keyboards”. A high-traffic keyword with a high purchase intent for a product that’s rather expensive. Well done.

I don’t personally like EMDs that much – honestly, most are terrifically ugly and almost unbrandable (no one is gonna be like “hello, I’m the CEO of HowToCreateAProfessionalResume.com and we’re in the latest Y Combinator batch”). An EMD doesn’t sound clean nor startup-y. But hey, if it works it works.

Now, don’t choose an EMD that’s too narrow in meaning – or you might be unable to grow it past a certain point.

Long, descriptive names

Examples: BuyMeACoffee.com, HousingAnywhere.com, GoFuckingDoIt.com, ThePixelChallenge.com, YourOnlineChoices.com, HaveIBeenPwned.com, WoodworkingForMereMortals.com

These are domain names that are long (like, longer than 11-12 characters) but don’t necessarily match any particular target keyword (although they may contain a keyword in the name). They’re just extremely descriptive about what they are.

I think they work great for really narrow and single-task products. If your product just does one tiny thing, but it does it really well and you don’t plan on expanding to other related functionality, then a long, descriptive name might be for you.

Take for example this indie game titled “The one who pulls out the sword will be crowned king“. It’s not strictly a domain name, but if it were: would you have any trouble understanding what the game is about just by reading the name? That’s the goal of long, descriptive names: they’re different and memorable just because of how long and descriptive they are. They’re almost like practical jokes.

Another example. There was not a whole lot of people searching on Google for “have I been pwned” before they launched, but HaveIBeenPwned.com has nonetheless been able to make a well-known brand for themselves using a rather long domain name that pretty much says exactly what it does.

Upsides? Lots of available domains. Downsides? They’re long, usually unbrandable domain names that users won’t easily remember exactly as they are written. The longer the domain name, the more things a user needs to remember, and the less likely they are to recall it correctly in its entirety.

Another downside is sometimes the domain name doesn’t even contain any kewyord related to the project. Take ThePixelChallenge.com for example – it’s a habit tracker, but it doesn’t contain neither “habit” nor “tracker” in the name. Is the upside of differentiation through a long name worth the downsides that come along with them?

Something to think about: if you’re already going for a long domain name, have you considered going for an EMD instead? You may have a better chance at ranking.

A case can be made for these kind of domain names, though: I feel like they would make good domain names for TV or radio commercials: they’re so specific it’s almost impossible to write them down wrong immediately after hearing them.

Acronyms

Examples: imdb.com, cnn.com, bbc.com, msn.com, vk.com, wsj.com

Acronym domain names usually belong to already established, strong brands that just map their traditional business to a website.

You can also use acronym domain names as a shortened version of a long-descriptive domain name, like: ThisHouseDoesNotExist.orgTHDNE.com

At almost 14% of the top 100 domain names on the internet, this is the third most widely used naming strategy for domain names out there after dictionary keywords.

  • IMBD = Internet Movie DataBase
  • MSN = MicroSoft Network
  • VK = V Kontakte (Russian for “In Contact”)

The downside is obvious: it’s going to take a lot of work to make your users remember your acronym and associate it with its meaning.


How to mix naming strategies with a TLD

Rule of thumb: most people will remember just one piece of information about your domain name. At most, they’ll remember two. Almost no one will remember three or more pieces of information about your domain.

What do I mean by that?

If they remember only one piece of information, that’s gonna be your name before the .TLD – they’ll just assume you own a .com. That’s why, by default, .com is the way to go. If part of your name is a new TLD, as in best.garden, people will often just remember your name is “BestGarden” and assume your domain is “BestGarden.com”.

If they remember two pieces of information, that might be your name along with the TLD. So if you have a non-.com TLD, they might remember both the left and the right part of the name.

If you need them to remember three or more pieces of information, you’ll lose 90% of the people along the way.

Made-up example: mybest3frens.social

  1. The name is made up of several dictionary words: “my” + “best” + “friends”. Let’s just count that as one piece of information for the sake of the argument.
  2. “Friends” is misspelled. To remember it as “frens” is going to take yet another piece of information.
  3. What was the number in the name? 2? 3? 42? 77? Another thing to remember.
  4. The order of number within the words: “mybest3frens” is not the same as “my3bestfrens”.
  5. Non-.com TLD: social. That’s gonna need another piece of information as well.

5 pieces of information? Way too complex. People won’t remember a thing about your domain name. At best, they’ll remember something about “best friends”, but will fail to remember how many friends, how was the word misspelled, and the .social at the end.

Source: completely made up on the spot – there’s no research whatsoever to back up these numbers. I’m just trying to visually convey an intuition about this issue.

Don’t mix up multiple naming strategies. For example, don’t mix adding numbers, misspelled words, prefixes and obscure TLDs. No one is going to remember your project if it’s named “get1plantrr.social”. It looks and sounds more like a tongue twister than anything else.

Stick to one single naming strategy and keep it so simple that no one asks for clarifications when you say the domain out loud.

The loud bar test

Whatever naming strategy and TLD you choose, your domain name needs to pass the loud bar test.

I don’t know who coined this test name, but I’ve heard it a few times now and I think it’s great. Here’s the test:

It’s Friday night and you’re having a beer with a few friends in a bar. The music is playing loud and the bar is packed, so the chatter only adds to the overall background noise. Between drinks and laughs, a friend asks you: “so what’s that project you’re working on called again?”.

You yell the name. There are two only possible responses:

  • “Ah, [project name], yes!”
  • “Come again? Did you say X or Y?”

If they get the name right and they can repeat it, your domain name passes the loud bar test. If they need to ask for further clarification, it doesn’t.

It’s even worse if it’s performed in a silent setting. If the first reaction when people hear the name out loud is confusion (“sorry, what did you say?”, “can you repeat that?”) or they need further clarification, instead of an immediate “gotcha” reaction that doesn’t interrupt the conversation flow, you might be in trouble. Your word-of-mouth is going to be affected drastically.

Conclusion

TL;DR: Get a .com of 11 characters or less, that’s either a single dictionary word or two dictionary words. Avoid numbers, symbols and anything that’s not a real word.

https://twitter.com/searchbound/status/1610372836442374149

Most people browse the web by clicking on links, not by typing – so one might think domain names are not that important nowadays.

But people do talk about you, and when they do your domain name better be pronounceable and memorable.

A bad domain name may not kill your growth altogether, but it may reduce your Word of Mouth (WoM) potential reach by a factor of 10 or 100 – it’d spread much more organically if your name was easier.

That’s why you should KISS: Keep It Simple Stupid.

You want to keep your domain names so simple that even a half-drunk friend in the middle of a noisy bar can understand what you’re saying – and remember it the following day.

How to choose a good domain name then? Try to balance branding, a good TLD, having the right keywords in the name, pronounceability, memorability… it’s not easy. It’s more of an art than a science, and creativity is heavily involved in the process.

In any case, data shows the best websites tend to use a .com TLD and either a dictionary word or a mix of two dictionary words. That might be a good starting point – you can always try other naming strategies later on if that approach yields subpar results.

Before purchasing a domain name, though, try and test a few names out loud with other people until you find one that resonates. What you want to avoid is people asking for clarifications after you say your domain name out loud.

One thing to keep in mind, though: outliers exist. You will always be able to find a counterexample to debunk every single guideline you may extract from this blogpost. Exceptions do not disprove the rule. Take the contents of this post as a general recommendation.

The post How to choose a domain name: my experience after buying dozens of domains for 15+ years appeared first on @rameerez.

]]>
https://rameerez.com/how-to-choose-domain-name/feed/ 1