# jola.dev > Personal website of Johanna Larsson, a software engineer, engineering leader, writer, and speaker with many years of experience building products and leading teams. ## Pages - [About](https://jola.dev/about): Background, experience, and expertise - [Blog](https://jola.dev/posts): Technical blog posts on software engineering, Elixir, and leadership - [Projects](https://jola.dev/projects): Open source projects - [Talks](https://jola.dev/talks): Conference presentations and speaking engagements ## Blog Posts - [AI is antithetical to learning](https://jola.dev/posts/ai-antithetical-learning) - [Migrating your Bluesky account the hard way](https://jola.dev/posts/migrating-atproto-account-hard-way) - [Cluster singleton pattern](https://jola.dev/posts/cluster-singleton-pattern) - [cove.town, atproto self-hosted self-hosting](https://jola.dev/posts/cove-town-atproto-self-hosted) - [Speeding up a Phoenix LiveView web app with a CDN](https://jola.dev/posts/speeding-up-phoenix-liveview-cdn) - [Self-hosting an atproto container registry](https://jola.dev/posts/self-hosting-atproto-container-registry) - [Migrating to the new Tangled knot2](https://jola.dev/posts/migrating-tangled-knot2) - [Self-hosting and Tangled](https://jola.dev/posts/self-hosting-and-tangled) - [Self-hosting your PDS](https://jola.dev/posts/self-hosting-your-pds) - [Taking control of your atproto account](https://jola.dev/posts/taking-control-atproto-account) - [No cost, no value](https://jola.dev/posts/no-cost-no-value) - [Latch - an Elixir atproto OAuth library](https://jola.dev/posts/latch-elixir-atproto-oauth-library) - [Limited output is a feature](https://jola.dev/posts/limited-output-is-a-feature) - [Distributed rate limiter with HRW in Elixir](https://jola.dev/posts/distributed-ratelimiter-with-hrw) - [A computer can never be held accountable](https://jola.dev/posts/a-computer-can-never-be-held-accountable) - [Elixir Cluster 101](https://jola.dev/posts/elixir-cluster-101) - [How to stop Claude from saying load-bearing](https://jola.dev/posts/how-to-stop-claude-from-saying-load-bearing) - [Let libraries be libraries](https://jola.dev/posts/let-libraries-be-libraries) - [CI workflows on Tangled for Elixir](https://jola.dev/posts/ci-workflows-on-tangled) - [Automatically syncing your blog to atproto and standard.site](https://jola.dev/posts/automatically-syncing-your-blog-atproto-standard-site) - [Appreciation for the small web](https://jola.dev/posts/appreciation-for-the-small-web) - [Treating LLMs as programming books](https://jola.dev/posts/treating-llms-as-programming-books) - [Publishing your blog to standard.site in Elixir](https://jola.dev/posts/publishing-your-blog) - [Generating OG images in Elixir](https://jola.dev/posts/generating-og-images) - [The social contract of writing](https://jola.dev/posts/the-social-contract-of-writing) - [Highest Random Weight in Elixir](https://jola.dev/posts/highest-random-weight-in-elixir) - [bunnyx: a bunny.net Elixir client library](https://jola.dev/posts/bunnyx-bunny-net-elixir) - [Building for the joy of building](https://jola.dev/posts/building-for-the-joy-of-building) - [Running local models on an M4 with 24GB memory](https://jola.dev/posts/running-local-models-on-m4) - [How to hit your Claude weekly limit so you can go outside and touch grass](https://jola.dev/posts/how-to-run-out-of-usage) - [Dropping Cloudflare for bunny.net](https://jola.dev/posts/dropping-cloudflare) - [Building a blog with Elixir and Phoenix](https://jola.dev/posts/building-a-blog-with-elixir-and-phoenix) - [Stay in the Loop: How I Actually Use Claude Code](https://jola.dev/posts/stay-in-the-loop) - [Ruthless Prioritization: The Path to Delivery](https://jola.dev/posts/ruthless-prioritization) - [Estimates Are More Valuable Than You Think](https://jola.dev/posts/estimates-are-more-valuable) - [When Software Engineers Think They Need More Focus Time](https://jola.dev/posts/enough-focus-time) - [If the Goal is Resiliency, Defensive Programming is Your Enemy](https://jola.dev/posts/defensive-programming-resilience) - [The Magic of Daily Pull Requests: Why Smaller is Better](https://jola.dev/posts/a-pr-a-day) - [Building a Distributed Rate Limiter in Elixir with HashRing](https://jola.dev/posts/distributed-ratelimiter) - [Announcing Hex Diff](https://jola.dev/posts/announcing-hex-diff) - [Building Hex Diff](https://jola.dev/posts/building-hex-diff) - [Push-based GenStage](https://jola.dev/posts/push-based-genstage) - [The Erlang :queue module in Elixir](https://jola.dev/posts/erlang-queue-module-elixir) - [Patterns for managing ETS tables](https://jola.dev/posts/patterns-for-managing-ets-tables) - [Health checks for Plug and Phoenix](https://jola.dev/posts/health-checks-for-plug-and-phoenix) - [The new `Registry.select/2` and what match specs are](https://jola.dev/posts/registry-select-2-and-match-specs) - [Elixir String Processing Optimization](https://jola.dev/posts/elixir-string-processing-optimization)