Reading - April 2021

Articles and blog posts I saved to read later:

The Architecture Behind A One-Person Tech Startup

An article by Anthony Najjar Simon about how he runs his one-man SaaS using Django.

  • Low stress, one-person company, run from a flat.
  • Self-funded, taking things slow - he likes taking things slow.
  • Grateful to be standing on the shoulders of the open source giants who went ahead and made the OSS stack we all enjoy and benefit from.
  • Your own context matters when choosing a tech stack. There is no "holy grail". I guess this means that you should use what you're familiar with and what is boring for you.
  • Uses K8s on AWS. He says "dont fall into the trap of thinking you need to use it too" - expertise with these tools was learnt over several years fighting fires on the day job.
  • Productive because he used the tools he is most familiar with and he can focus on shipping.
  • Django, Celery, PostgreSQL, Python, AWS, Redis. - same as MoneyBar and PipPip.

Boring tech behind a one person SaaS

  • The tech-stack keeps evolving
  • "Boring" means "what I'm familiar with so that I can focus on the business"
  • Most of his time is spent talking to people and thinking. He spends 15% of his time on engineering. Probably it was more when he was setting stuff up.
  • The methods described in the post are definitely not the best way. It's just one way of doing engineering in a very specific type of business. It's not the only way.
  • Django, Celery, PostgreSQL, Python, AWS, Redis. - same as MoneyBar and PipPip.
  • Uses Ansible for provisioning machines. - YAML files. Should look into this.
  • "Good enough for now"
  • Doesn't use CI tools, he uses Ansible with a shell script he wrote.
  • Uses Datadog for monitoring and alerting, and PagerDuty.
  • Uses Rollbar, which seems similar to Sentry.
  • Uses Slack, not to talk with humans, but integrations with Rollbar and Datadog, and also slack incoming webhooks to be notified when someone signs up or does something interesting like deletes a thing.
  • Make a "ding" sound whenever someone signs up.
  • He's always very careful about operational stuff to prevent downtime and outages. Servers are over-provisioned to protect against spikes caused by sudden media interest.
  • Avoids working from home or cafe cos its more productive in an office. Productivity is important - make every minute count. He doesn't often work more than 8 hours/day.
  • He optimizes for spending less time and making money instead of more time and saving money.
  • Uses Vagrant and virtualbox on an MBP so that dev work is on the same systems as prod infra.
  • Uses 1 monolithic repo. Likes this approach.
  • He uses contractors!!
  • Usually, the biggest obstacle to building and shipping things is overthinking. What if this, what if that. You are not important at all and no one cares. No one sees. Even if you screw up the initial product launch, no one will care because they're not looking. Only when you've proved that you deserve their attention will you have any attention and visibility.
  • Think big, start small, act fast.
  • Use boring technology, or whatever tech you want. Just make sure you're solving an actual problem.
  • Ignore the cargo cult people and ignore the noise. Keep calm and carry on.

Django's place in a web development world

  • Not everything needs to be an SPA
  • Django is a back-end framework, it'll work with an front-end framework, because separation of concerns.
  • To use Django with an SPA, you could use DRF, or just normal views that return JSON.
  • Reading this makes me want to check out React to see what all the fuss is about.

Cache invalidation

Vim abbreviations

  • Cool and all, but not as powerful as snippets I think.
  • Auto correcting typos: teh -> the
  • Expanding phrases: kr -> kind regards
  • Multi-line text expansion.
  • It really seems similar to what I'm using UltiSnips for.
  • I found this question on SO comparing abbreviations and snippets. TLDR: It's easier to add and maintain snippets than abbreviations, and you have less boilerplate with snippets than abbreviations, especially in complex cases.

To fix the social sciences, look to the “dark ages” of medicine

Emotional resilience in leadership report

3 virtues of a programmer

  • Laziness - The quality that makes you go to great effort to reduce overall energy expenditure. It makes you write labor-saving programs that other people will find useful and document what you wrote so you don't have to answer so many questions about it.
  • Impatience - The anger you feel when the computer is being lazy. This makes you write programs that don't just react to your needs, but actually anticipate them. Or at least pretend to.
  • Hubris - The quality that makes you write (and maintain) programs that other people won't want to say bad things about.
  • Also, I read a quote somewhere saying the mark of a great program is having people use it in ways you didn't expect, or something like that.

Is WebAssembly magic performance pixie dust?

Yamauchi No.10 Family Office

  • A beautifully designed website.

Improve and Extend Your Text Objects With targets.vim

A Vim Guide for Adept Users

  • How to manipulate multiple quickfix and location lists.
  • What are digraphs and how to use them.
  • Useful keystrokes in INSERT mode.
  • Useful keystrokes in VISUAL mode.
  • Vim regular expressions.
  • Using shell commands in Vim.
  • Folding content.

Deep dive in CORS

The TTY demystified

  • ps 1 - see which processes are running or sleeping. WCHAN tells you which kernel event a waiting processing is awaiting.