Learn
Backend
APIs, databases, scraping, background jobs, and auth.
Batch email sends before rate limits look like caps
A newsletter send to 13 people reported 5 accepted and 8 failed. It looked like a hidden recipient cap. The real problem was parallel API calls hitting a provider rate limit.
2026-05-08
Separate the editorial date from the publish timestamp, they mean different things
Content systems routinely conflate two different concepts: the date the author wrote something, and when it was actually published. Treating them as one field causes sorting bugs, broken date displays, and incorrect analytics. They need to be separate from the start.
2026-04-25
The data isolation audit: every endpoint must be scoped to the requesting user
The most common multi-tenant security bug is an endpoint that returns the right data for the right user, most of the time. A systematic audit ensures user_id filtering is never accidentally omitted.
2026-04-18
Never use Promise.all() with the GitHub Contents API
The GitHub Contents API requires each file commit to complete before the next one starts. Parallel commits produce 409 conflicts, and the error message doesn't make it obvious why.
2026-04-18
APScheduler vs Celery: choosing the right background job tool
APScheduler is the right tool for one background job on a fixed schedule. It becomes the wrong tool the moment you need per-user workloads, priority queues, or retry logic.
2026-04-18
Why parallelising your scraper will get you silently banned
Anti-bot systems don't always return 403s. Sometimes they return empty results, and your logs look clean. Here's why sequential requests are the architecture, not a workaround.
2026-04-18
Scheduled publishing without a cron: runtime-evaluated date filters
You don't need a cron job to make content appear on schedule. Evaluate the scheduled date at request time and the content becomes visible automatically, no deployment, no job, no database update required.
2026-04-18
Cache AI API results by content hash to prevent cost explosions
Users upload the same image multiple times. AI APIs charge per call. A cache keyed on SHA-256 of the input bytes ensures you pay for each unique input once, not once per upload.
2026-04-18
Financial data APIs fail silently, design for None, not for errors
Rate-limited financial data APIs don't raise exceptions. They return empty DataFrames and None values while your logs show no errors. Every metric computation must handle this explicitly.
2026-04-18
Layering data sources: accept both APIs as fallback, don't choose one
Financial data from a single free API is unreliable. Layer a secondary source on top, not as a replacement, but as a fallback when the primary returns None. You get resilience without complexity.
2026-04-18