Aug. 12, 2026
Every Django project I have worked on reaches the same moment. A request is too slow, someone moves the slow part into a Celery task, and the page gets fast. Quietly, the function has stopped being a function. It became a message, handed to a broker you do not control, to be run by a worker that might die halfway through. This post is my study guide for everything that can go wrong in that handoff, and what to do about each case.
Oct. 1, 2019
When I started at my new job, the first task was: reports. It was a good way to learn the codebase, but when I opened the file that generated the PDFs, I found something really messed up. Every element (columns, rows, title…) had its position defined by hand, in centimeters. So a task that should have been quick was going to take much longer.
Sep. 30, 2019
GitHub Actions was introduced last year, and it’s an API for cause and effect on GitHub. You can orchestrate any workflow, based on any event, you can have your workflow run on push events to master and release branches, or only run on pull_request events that target the master branch, or run every day of the week at Friday 02:00. The workflows are code in a repository, as you will see in this project, so you can create, share, reuse, and fork.