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)
    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?
    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
    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
    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
    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?
    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
    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
    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
    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
    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
    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
    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
    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
    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
    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
    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
    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
    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
    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
    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
    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
    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
    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
    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
    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
    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