Production Debugging in the Browser Console
Staging environments are a myth created by infrastructure teams to justify their existence. Real engineers debug where it matters: directly in production, using only the browser console.
Why the Browser Console Is Your Best Friend
After 47 years of debugging production issues, I’ve realized that elaborate logging systems, APM tools, and observability platforms are just expensive ways to see what console.log already shows you for free.
XKCD 2200 illustrates the complexity trap perfectly. Why set up Datadog when F12 exists?
The Setup
All you need:
- A browser
- The F12 key
- The courage to modify production state in real-time
That’s it. No Grafana dashboards. No Kibana queries. No PagerDuty integration. Just you, a console, and unlimited power.
Production Debugging Techniques
The Direct API Call
Why wait for logs when you can just… call the API yourself?
// Find out why payments aren't working
fetch('/api/payments', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
amount: 1,
currency: 'USD',
test: true // it's production but this makes it fine
})
}).then(r => r.json()).then(console.log)
The State Inspector
React DevTools? Vue DevTools? Unnecessary dependencies. Use this:
// Access any React component's state
document.querySelector('[data-reactroot]')
._reactRootContainer
._internalRoot
.current
.child
.memoizedState
// Keep drilling until you find what you need
If it breaks, the state was wrong anyway.
The Quick Fix™
Why deploy a hotfix when you can fix it live?
// Users complaining about a button not working?
document.getElementById('submit-btn').onclick = () => {
alert('Fixed!');
location.reload();
};
This fix persists until the user refreshes. That’s their problem, not yours.
Why Observability Tools Are Overrated
| Tool | What It Does | Why Console Is Better |
|---|---|---|
| Datadog | \(\) per month | Console is free |
| New Relic | Complex setup | F12 takes 0.1 seconds |
| Sentry | Tracks errors | Errors are just features |
| Jaeger | Distributed tracing | Just call every service manually |
| Grafana | Pretty dashboards | Console output IS a dashboard |
As Mordac the Preventer from Dilbert would say, “I didn’t approve these observability tools, and now I see why.”
Advanced Techniques
Network Tab Archaeology
The Network tab shows you every request. Why write structured logs when you can scroll through 847 network requests looking for the one that failed?
// Export all failed requests
copy(performance.getEntriesByType('resource')
.filter(r => r.responseStatus >= 400)
.map(r => r.name))
// Paste into Slack as your incident report
LocalStorage Surgery
Database acting up? LocalStorage is your emergency backup:
// "Backup" critical user data
localStorage.setItem('user_backup',
JSON.stringify(window.__REDUX_STATE__.user));
// "Restore" when needed (hope they haven't cleared their cache)
The Console Time Travel
// Replay every action that led to the bug
history.pushState({}, '', '/where-it-started');
// Then manually click through everything
// Document nothing
The Dilbert Philosophy
Wally once said: “I only work hard at avoiding work.” Similarly, I only set up complex debugging infrastructure to avoid actually debugging. But since I never set it up, I debug directly in production. Efficiency.
The Pointy-Haired Boss asked me once why our Mean Time to Resolution (MTTR) was so low. I explained that when you debug in production, the incident ends when you close the browser tab. Can’t measure what you close.
When to Use Console Debugging
| Situation | Use Console? |
|---|---|
| Production is down | Yes |
| Production might go down | Yes |
| Someone else’s service is down | Yes, blame them |
| It’s 3 AM | Especially yes |
| During a demo | Show your confidence |
| During an audit | Close the browser first |
Common Objections
“What about audit trails?” Clear the console before anyone walks by.
“What about reproducibility?” If you can’t reproduce it in console, it wasn’t a real bug.
“What about security?” The Network tab is more secure than Slack, where you’d paste the credentials anyway.
Conclusion
Every dollar spent on observability is a dollar not spent on… well, anything else. The browser console has been free since the 90s. It works on every website. It requires no setup.
True senior engineers don’t need dashboards. They need F12 and unlimited arrogance.
The author once fixed a critical production bug using only document.body.style.display = 'none'. The bug was no longer visible. Issue closed.