# Engineering Articles

Content about software engineering, and how to build maintainable teams and systems.

- **[How to Debug Code You Didn’t Write (your AI did)](/content/blog/how-to-debug-code-you-didnt-write/index.html)**  
  AI-generated code looks great in the diff and breaks on the first edge case. Here’s how to debug JavaScript you didn’t write without reverse-engineering someone else’s bad assumptions.  
    
  Todd H. Gardner  
  February 26, 2026

- **[Who Watches the Vibe Coder?](/content/blog/who-watches-the-vibe-coder/index.html)**  
  AI is shipping JavaScript faster than humans can review it. And a lot of it is “looks fine to me” code that explodes in production. You can’t code review vibes, so you need production visibility.  
    
  Todd H. Gardner  
  February 19, 2026

- **[AI Wrote Your Bugs, AI Will Fix Your Bugs](/content/blog/ai-code-debugger/index.html)**  
  GitHub Copilot wrote it. ChatGPT reviewed it. And now TrackJS's AI Debugger will fix it. Welcome to 2025, where humans are just the middleware between AIs. Introducing the world's first Vibe Debugger for your vibe-coded JavaScript.  
    
  Todd H. Gardner  
  September 10, 2025

- **[How to Monitor JavaScript Memory Leaks in Production](/content/blog/monitoring-javascript-memory/index.html)**  
  JavaScript memory leaks are like that friend who never leaves the party. While most advice says 'just use Chrome DevTools,' your users aren't debugging for you. Learn how to catch memory leaks in production using performance.memory (despite it being deprecated) and track real symptoms of memory b...  
    
  Todd H. Gardner  
  July 22, 2025

- **[Hard-Won Lessons Building Maintainable Web Applications](/content/blog/hard-won-lessons-maintainable-javascript/index.html)**  
  15 hard-won lessons from 15 years building web apps: write as little JavaScript as possible, use progressive enhancement, monitor everything, and keep it simple. Most valuable apps are under 10,000 lines of code - complexity kills maintainability.  
    
  Todd H. Gardner  
  October 06, 2020

- **[What is Developer Time Worth?](/content/blog/what-is-developer-time-worth/index.html)**  
  Developers often undervalue their time, saying "I could build that" about tools like TrackJS. With web developers earning $56-1500/hour, building your own monitoring tool costs $9,000+ in time for a worse version of a $100 product. Focus your precious 2,150 working weeks on creating real value, n...  
    
  Todd H. Gardner  
  October 15, 2019

- **[3 Tips to Reduce JavaScript Size](/content/blog/best-practices-javascript-page-weight/index.html)**  
  Three strategies to reduce JavaScript bloat: Use less JavaScript by extracting only needed code from libraries or using CSS-only solutions, load scripts conditionally per page with async bundling, and optimize delivery through combining files, enabling HTTP/2, and bundling external libraries via ...  
    
  Todd H. Gardner  
  September 03, 2019

- **[How to Correctly Wrap a JavaScript Function](/content/blog/how-to-wrap-javascript-functions/index.html)**  
  Master JavaScript function wrapping to add instrumentation or modify external libraries without changing source code. Handle arguments with apply(this, arguments), preserve function names and properties, use try/catch for error handling, and maintain the original function's arity for professional...  
    
  Todd H. Gardner  
  August 27, 2019

- **[Separate Your Monitoring From Infrastructure](/content/blog/separate-monitoring/index.html)**  
  Separate your monitoring from your primary infrastructure to avoid dangerous blind spots. Cloud providers' internal monitoring fails when their infrastructure fails, leaving you debugging outages without visibility. TrackJS hosts on dedicated hardware separate from major cloud providers for true ...  
    
  Todd H. Gardner  
  July 30, 2019

- **[When to Fix Your JavaScript Errors](/content/blog/prioritizing-javascript-errors/index.html)**  
  Cut through web "background radiation" with strategic JavaScript error monitoring: ignore known noisy errors, set up targeted alerts (new/trending/rate/daily), focus on user impact and critical pages, track versions for releases, and use status filtering to manage bug workflows effectively.  
    
  Todd H. Gardner  
  May 30, 2019

- **[Building TrackJS Filters: React without the SPA](/content/blog/building-filters-react-no-spa/index.html)**  
  TrackJS built React components within their existing server-rendered PJAX architecture using "dirty tricks" - mounting/unmounting components on page loads and creating a custom singleton FilterStore instead of Redux. They chose larger class components over micro-components and traditional CSS ove...  
    
  Eric Brandes  
  May 21, 2019

- **[Site Search with JavaScript - Part 2](/content/blog/site-search-with-javascript-part-2/index.html)**  
  Learn to enhance client-side JavaScript search with intelligent snippets that show search terms in context and automatic highlighting on result pages. Uses simple DOM manipulation to create relevant 280-character previews and scroll users directly to highlighted matches without server-side code.  
    
  Todd H. Gardner  
  March 31, 2019

- **[You Own Your Dependencies](/content/blog/event-stream/index.html)**  
  The event-stream NPM malware incident exposes JavaScript's dependency crisis: 418 packages for a simple React app versus 40 for a massive .NET application. The culture of micropackages, automatic upgrades with ^ operators, and anonymous maintainers creates security nightmares compared to vendorin...  
    
  Eric Brandes  
  December 05, 2018

- **[Moving to Mailgun](/content/blog/moving-to-mailgun/index.html)**  
  TrackJS switched from failing Mandrill to Mailgun after years of increasing email delivery problems. Key lessons: make failures visible through chat alerts, avoid abstractions until you need them, and sometimes big changes become unavoidable when dependencies deteriorate.  
    
  Eric Brandes  
  October 09, 2018

- **[Thriving Small](/content/blog/thriving-small/index.html)**  
  Small teams outperform large ones through better communication, shared incentives, and forced prioritization. Growing employees creates expensive overhead and specialized silos. Success isn't about headcount - it's about building sustainable, profitable products with minimal maintenance needs.  
    
  Todd H. Gardner  
  September 25, 2018

- **[Adding Value to Software Development](/content/blog/adding-value/index.html)**  
  Real business value comes from choosing boring, proven technology over exciting new frameworks. The best code is no code - sometimes waiting solves problems automatically. Every line written has maintenance costs, so prioritize shipping features over perfect abstractions and endless refactoring.  
    
  Eric Brandes  
  September 13, 2018

- **[The Siren Song of Component Libraries](/content/blog/component-library/index.html)**  
  UI component libraries sound perfect for large teams but become nightmares of competing requirements, compatibility issues, and feature bloat. Skip the complexity - use documented style guides with colors and fonts instead. Developers love spending 40 hours on "fun" work to avoid 20 minutes of bo...  
    
  Eric Brandes  
  August 21, 2018

- **[Impermanent UIs: the Fleeting Frontend](/content/blog/fleeting-frontend/index.html)**  
  Frontend development has become needlessly complex with frameworks requiring massive toolchains for apps destined to be rewritten every 2-3 years. Instead of building cathedrals, focus on speed-to-market with simpler solutions that deliver value quickly.  
    
  Eric Brandes  
  August 07, 2018

- **[Backwards Compatibility](/content/blog/backwards-compatability/index.html)**  
  Eric Brandes argues modern JavaScript frameworks abandon backwards compatibility unlike the web's foundational success. While jQuery maintains stable APIs for years, Angular breaks compatibility every 6 months, creating developer fatigue and wasted money on constant upgrades.  
    
  Eric Brandes  
  July 23, 2018

- **[Learning from GitLab: Making Production Obvious](/content/blog/learning-from-gitlab-making-production-obvious/index.html)**  
  Learn from GitLab's outage by making production environments visually obvious. TrackJS shares Ansible snippets to turn Linux command prompts and Windows UI chrome bright red in production, preventing dangerous "wrong server" mistakes.  
    
  Jordan Griffin  
  March 27, 2017

- **[Highly-Effective JavaScript Developers by Jon Mills](/content/blog/highly-effective-javascript-developers/index.html)**  
  Jonathan Mills delivers practical JavaScript effectiveness tips at NDC Oslo, covering debugging, testing, and maintainable code practices. Perfect for developers wanting to level up their JS skills, whether it's their primary language or not.  
    
  Todd H. Gardner  
  July 12, 2016

- **[Monitoring for Unhandled Promise Rejections](/content/blog/unhandled-promises/index.html)**  
  Unhandled promise rejections silently break applications without triggering traditional error handlers. Learn how modern browsers now provide standardized events to catch these elusive errors and why proper promise error handling is crucial for robust applications.  
    
  Eric Brandes  
  June 20, 2016

- **[Fast and Resilient Web Apps by Ilya Grigorik](/content/blog/fast-and-resilient-webapps/index.html)**  
  Ilya Grigorik's Google I/O talk reveals shocking mobile Chrome network failure statistics, emphasizing the critical need for resilient web applications. Essential viewing for understanding real-world performance challenges and planning better user experiences when networks fail.  
    
  Todd H. Gardner  
  May 25, 2016

- **[The Dangers of Loading External JavaScript](/content/blog/perils-loading-external-javascript/index.html)**  
  External JavaScript loading can fail catastrophically, breaking functionality and user experience. Learn why mobile networks cause third-party script failures and discover simple defensive coding techniques to gracefully handle missing dependencies and protect your applications.  
    
  Todd H. Gardner  
  April 25, 2016

- **[Outages and Our Way Forward](/content/blog/outages-and-our-way-forward/index.html)**  
  TrackJS has experienced unacceptable infrastructure problems due to Azure instability. We're migrating to dedicated hardware with automated infrastructure to improve availability and performance in the coming weeks.  
    
  Todd H. Gardner  
  April 29, 2015

- **[Todd Gardner from TrackJS on STL Code Cast Show](/content/blog/trackjs-stl-code-cast/index.html)**  
  TrackJS co-founder Todd Gardner joins the STL Code Cast to discuss JavaScript error monitoring, the evolution of web development, native app trends, and surprisingly deep thoughts on building with Legos.  
    
  Todd H. Gardner  
  October 06, 2014
