惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
Netflix TechBlog - Medium
Microsoft Azure Blog
Microsoft Azure Blog
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
aimingoo的专栏
aimingoo的专栏
B
Blog RSS Feed
V
Visual Studio Blog
P
Proofpoint News Feed
云风的 BLOG
云风的 BLOG
博客园 - 【当耐特】
大猫的无限游戏
大猫的无限游戏
Application and Cybersecurity Blog
Application and Cybersecurity Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
The Cloudflare Blog
B
Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Apple Machine Learning Research
Apple Machine Learning Research
M
MIT News - Artificial intelligence
Know Your Adversary
Know Your Adversary
I
InfoQ
T
The Exploit Database - CXSecurity.com
V
Vulnerabilities – Threatpost
C
Cisco Blogs
Spread Privacy
Spread Privacy
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Palo Alto Networks Blog
Simon Willison's Weblog
Simon Willison's Weblog
月光博客
月光博客
博客园 - Franky
Project Zero
Project Zero
G
Google Developers Blog
S
SegmentFault 最新的问题
博客园 - 聂微东
P
Privacy & Cybersecurity Law Blog
The GitHub Blog
The GitHub Blog
阮一峰的网络日志
阮一峰的网络日志
P
Privacy International News Feed
T
Threat Research - Cisco Blogs
S
Schneier on Security
Microsoft Security Blog
Microsoft Security Blog
G
GRAHAM CLULEY
S
Security @ Cisco Blogs
Martin Fowler
Martin Fowler
A
Arctic Wolf
T
Tenable Blog
L
LINUX DO - 最新话题
TaoSecurity Blog
TaoSecurity Blog
Hugging Face - Blog
Hugging Face - Blog
有赞技术团队
有赞技术团队
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python) The Hidden Cost of AI Systems Nobody Talks About. undefined vs undeclared, and how typeof behaves Switching from file-based jobs to NATS/Kafka in Rust without changing code io_uring Adventures: Rust Servers That Love Syscalls Why Agentic AI is Killing the Traditional Database The POUR principles of web accessibility for developers and designers Quantum Neural Network 3D — A Deep Dive into Interactive WebGL Visualization How To Install Caveman In Codex On macOS And Windows Automation Pipeline Reliability: Why Your Workflow Breaks When Nobody Is Watching I Built an 'Open World' AI Coding Agent — It Works From ANY Folder From Freelancing to Product: A Tech Service Company's SaaS Transformation China's AI Giants: Adding Tencent Hunyuan & ByteDance Doubao to AI University (74 Providers) On the Vibe Coders and Their Lies clerk: Auto-Summarize Your Claude Code Sessions AI Weekly — 2026/04/10–04/17 | The Model Lockdown Is Here, but the Toolchain Is the Real Battleground AI 週報 — 2026/04/10–2026/04/17 模型封鎖潮來了,但工具鏈才是真戰場 Maybe this is how Open-Source apps are born... 🚀 Fine-Tune LLMs with LoRA and QLoRA: 2026 Guide tRPC v11 + Next.js App Router: End-to-End Type Safety Without the Boilerplate ShadCN UI in 2026: Why I Stopped Installing Component Libraries and Started Owning My Components SaaS Billing in React Server Components: Stripe + Supabase Without a Single `useEffect` Join our DEV Weekend Challenge — $1,000 in Prizes Across TEN winners! Submissions Due April 20 at 6:59 AM UTC. Implementing FSRS Spaced Repetition in Flutter + Supabase — Adding Memory Science to an AI Learning App "I Texted My Localhost From the Train — Claude Code Fixed the Bug Before I Got Home" I Built a Sales Prep AI and It Went Deeper Than Expected Design to Code #2: One JSON, Eleven Outputs Solving the 100M-Row Problem: A Summary Table Pattern for High-Volume Push Notification Logs Flutter Web With Wasm: What Actually Changes For Developers I Built 50 Royalty-Free Soundtracks for My Side Project in a Weekend Using AI Music Generation The Vibe Coding Security Checklist: 7 Things to Check Before You Ship Stop Letting Googlebot Guess Fix Your React App's SEO Right Desconstruindo o Streaming do LinkedIn: Como Criar um Engine de Extração de Vídeo de Alta Performance com HLS e FFmpeg (EDA Part-1) EDA (Exploratory Data Analysis) Explained With Real Life — Why Looking at Your Data Is the Most Important Step in Machine Learning Brand Relationship Management at Scale: Our 4-Touch Outreach System for 200+ Brands Why String.fromEnvironment() Might Return an Empty String in Dart JGuardrails 1.0.0 — Hardening Java LLM Apps Against Jailbreaks, Toxicity, and Prompt Injection Plan and Schedule a Full Week of Threads Content From One Claude Conversation Coding Cat Oran Ep3, Five Tables Changed Everything Updated: BFF Pattern I'm done watching freelancers get buried by 200 proposals. So I'm building the alternative. This is my first post BFS Algorithm in Java Step by Step Tutorial with Examples Tracking LLM Pricing Monthly: An Open Dataset for 22 AI Models How We Measure Content ROI on a Comparison Site: Revenue Attribution Without Perfect Data Introducing Nova AI Ops: The AI-Native Operating System for SRE Teams I built a free desktop video downloader for Windows — Grabbit How Talkie OCR Helps Vision-Impaired & Dyslexic Users Read the World Around Them VRCFaceTracking安装和iPhone面捕配置教程,有bug Even CrowdStrike Can't See Your Agents The Automation Gold Rush: What n8n Workflows and Claude Are Opening Up for Developers Right Now
The Bug That Took 10 Minutes to Fix and 3 Days to Find
Harsh · 2026-06-03 · via DEV Community

The fix was one line.

if not items: return []

That's it Three words a colon and a pair of brackets It took me 10 seconds to type. 10 minutes to test and verify 10 seconds to deploy.

It took me 3 days to find.

Three days of staring at logs that said nothing Adding print statements that confirmed nothing Rewriting code that wasn't broken Blaming the framework Blaming the database Blaming the network Eventually quietly blaming myself.

The bug wasn't complicated It wasn't deep It was hiding in plain sight in a place I hadn't thought to look because I hadn't thought to ask the right question.

The AI had assumed a list would never be empty I had assumed the AI was right. Neither of us checked.

This is the story of how I spent 3 days debugging a bug that took 10 minutes to fix and what I learned about assumptions silent failures and the expensive gap between it works and it always works.

How It Started

The code was simple A function that processed a list of user inputs and returned a summary A small feature, maybe two hundred lines total Nothing that should have taken more than an afternoon.

I'd used AI to write the core logic The prompt was clear The output looked clean - readable, well-structured, sensible variable names I reviewed it The tests passed The PR was approved in the next morning's standup I shipped it on Tuesday.

The feature worked fine for two days Users were using it Logs were quiet I moved on to the next ticket.

Then Thursday happened.

A user with an empty list hit the endpoint No data - just an empty state, the kind that every real application encounters eventually The function received the empty list, processed it, and returned... nothing Not an error Not an empty list Not a helpful message Just silence.

The UI froze waiting for a response that wasn't coming The user was confused Support flagged it I was pulled back into code I thought was done.

The function worked 99% of the time The 1% was invisible And in production invisible is expensive.

Day 1: The Spiral

I started where anyone would the error logs Nothing No exceptions no warnings, no trace The function had been called It had returned The logs had nothing to say about what happened in between.

I added print statements Ran the code locally It worked perfectly Of course it did - I had test data which meant I had a non-empty list which meant I never triggered the bug.

I checked the database The data was there The function was definitely being called - I could see the request in the logs It returned something The UI just couldn't do anything with it.

I blamed the framework Maybe it's a caching issue Maybe the response is getting intercepted somewhere Cleared caches Nothing changed.

I blamed the network Maybe the request is timing out before the response arrives Checked latency Everything was fine.

I blamed the AI-generated code Maybe the logic is wrong in a subtle way I missed in review Rewrote the core function by hand line by line Same behavior.

By 6 PM I had rewritten three functions restarted the server twice added eleven print statements and learned absolutely nothing.

I closed my laptop The bug was still there.

So was I.

Day 2: The Desperation

I came back Friday with fresh eyes and no new ideas - the worst combination.

I traced the execution path more carefully this time Line by line watching the data flow through the function The input was received The processing ran The output was generated Everything looked right.

Except the output was wrong.

I started questioning things I hadn't questioned in years Did I actually understand the data structure I was working with? Was Python doing something I wasn't expecting with list references? Was there a mutation happening somewhere that I wasn't seeing?

I added a check to log the exact value of the input list before processing Items were there I added a check after processing The result was empty The logic in between looked correct.

I posted on Stack Overflow No answers for six hours.

I asked an AI assistant It suggested the same approaches I'd already tried, phrased slightly differently.

I pulled a colleague into a Zoom call They looked at the code for ten minutes and said It looks fine to me.

That was the worst moment of the three days Not the frustration not the wasted hours - the moment when someone else looked at it and confirmed that nothing was obviously wrong. Because that meant either I was missing something fundamental or the bug was somewhere I hadn't looked yet.

By Friday night I had genuinely started to wonder if I was going to find it at all.

Day 3: The Breakthrough

Saturday morning. Fresh coffee No notifications I opened the function again with no particular plan - just read it one more time slowly with no assumptions about where the problem was.

Same code. Same behavior But I added one more log I hadn't thought to add before:

print(f"items before processing: {items}")
print(f"items type: {type(items)}, length: {len(items)}")

The list had items. Three of them. Good — confirmed the input was right.

print(f"processed result: {processed}")
print(f"processed length: {len(processed) if processed else 'empty/None'}")

The processed result was empty.

I stared at the screen for a moment Input: three items Output: empty The logic in between: apparently correct.

Then I looked at something I had looked at a dozen times before but never really seen The function I was testing was calling a helper function I had reviewed that helper function I had read it carefully But I had read it assuming the input would always have items - because in my testing it always did.

The helper function wasn't checking It was written assuming the list would have at least one item When it did it worked correctly and returned results. When it didn't when the list was empty it entered a code path that silently returned nothing instead of an empty list.

No exception No warning No log entry Just nothing wrapped up neatly and returned as if nothing was wrong.

if not items: return []

I added the line Ran the test with an empty list The function returned an empty list.

I ran the full test suite Everything passed.

I deployed The UI loaded The user with the empty list finally saw something on their screen: an empty state message exactly what they should have seen three days ago.

The fix took 10 seconds to write and 10 minutes to verify.

Finding it took 3 days.

What the Bug Taught Me

The 99% trap is real. Code that works most of the time is significantly harder to debug than code that fails loudly and immediately The silent failure is the expensive one because it doesn't announce itself and because you'll keep testing with the cases that work and never see the case that doesn't.

Assumptions are invisible debt. The AI assumed a list would never be empty because most of its training examples involved lists that had items. I assumed the AI had handled the edge cases because the code looked complete. Neither assumption was wrong on its own they were just unchecked And unchecked assumptions in production are loans you'll repay with interest.

Works on my machine is a specific kind of lie. It works on my machine because I test with data. The bug lived in the absence of data The happy path works the happy path always works The skill is in finding the unhappy path before your users do.

The fix is almost never the hard part. Finding is hard Fixing is easy I spent 3 days finding a single unhandled edge case I spent 10 minutes fixing it. The value in software development isn't in writing code it's in knowing where to look when the code is wrong.

I should have asked what happens when this gets nothing? Before shipping Before the PR was approved. Before the tests ran That question takes 30 seconds to ask and answer It would have saved three days.

What I'm Doing Differently

Now I ask one question before I ship any function before review before testing before deployment:

What happens when this gets nothing?

Empty list Null input Missing field Zero results The case where the happy path assumption is wrong.

I don't trust AI-generated code to ask that question for me I don't trust myself to remember to ask it spontaneously So I made it a rule part of my personal pre-ship checklist right after does the happy path work.

It takes about 30 seconds to answer It would have saved me 3 days.

That's a trade-off I'll take every single time.


One Question

What's the longest you've spent debugging a bug that turned out to be a one-line fix?

Days? Hours? A week you'd rather forget?

I'll go first in the comments 3 days, one missing edge case, one line of code I still think about every time I ship a new function.

Your turn. 👇