Developer Gotchas
The subtle quirks that trip up even senior engineers — across 9 of the most-used languages, frameworks, and platforms.
Most production bugs aren't exotic — they're someone hitting a default they didn't know existed, or trusting a coercion rule that does something unexpected. This series catalogs the gotchas that catch even experienced engineers off guard, with code examples and the fix for each.
- 1JavaScript9 min read
JavaScript Gotchas: Equality, Hoisting, and `this` Surprises
Why typeof null is object, why == coerces in weird ways, why var-in-a-loop captures the wrong value, and a dozen other JavaScript quirks that bite even senior devs.
Read part 1→
- 2Python8 min read
Python Gotchas: Mutable Defaults, `is` vs `==`, and Surprises
The mutable default argument trap, integer caching, late binding in closures, slicing edge cases, and the other Python gotchas that catch experienced devs.
Read part 2→
- 3PHP8 min read
PHP Gotchas: Equality, Type Coercion, and PHP 8 Changes
PHP's loose equality has caused security bugs for two decades. The == vs === rules, isset vs empty vs is_null, and how PHP 8 quietly fixed some of the worst behaviors.
Read part 3→
- 4CSS9 min read
CSS Gotchas: Specificity, Box Model, Flexbox, and Position
Why your !important rule isn't winning, the difference between box-sizing values that breaks layouts, flexbox alignment surprises, and the position: sticky requirements nobody mentions.
Read part 4→
- 5SQL9 min read
SQL Gotchas: JOIN Types, NULL Behavior, and WHERE vs HAVING
Why your LEFT JOIN returns fewer rows after adding a WHERE clause, why NULL never equals anything (including itself), and other SQL gotchas that produce silent wrong answers.
Read part 5→
- 6MySQL8 min read
MySQL Gotchas: InnoDB vs MyISAM, Charsets, and AUTO_INCREMENT
Why utf8 isn't actually UTF-8 in MySQL, AUTO_INCREMENT gaps after rollback, why InnoDB is the only sane choice, and the charset bug that broke emojis worldwide.
Read part 6→
- 7AWS9 min read
AWS Gotchas: S3 Naming, Lambda Limits, and Region Surprises
Why your S3 bucket name has to be globally unique, what Lambda's 15-minute timeout actually means, the IAM role vs user distinction, and the free tier traps that show up on your bill.
Read part 7→
- 8WordPress9 min read
WordPress Gotchas: Hooks, Template Hierarchy, and Enqueue Bugs
Why your filter doesn't fire, why custom post types disappear, the jQuery noConflict trap, and the template hierarchy details that decide which file actually renders.
Read part 8→
- 9AI/ML9 min read
AI/ML Gotchas: Overfitting, Bias-Variance, and Precision vs Recall
Why high accuracy on imbalanced data is meaningless, the difference between bias and variance errors, when to use precision vs recall, and the train/test split mistakes that fool everyone.
Read part 9→
Stuck on a gotcha that's eating your day?
Most production bugs come down to one of these subtle quirks plus a deadline. We've debugged JavaScript closures in legacy React, PHP type coercion in WooCommerce checkout, MySQL charset mismatches in customer databases, and AWS IAM policies that locked teams out of their own infrastructure. If you're stuck on something quirky, we can help.
Get senior-dev eyes on your code →