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:

  1. A browser
  2. The F12 key
  3. 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.