Monitors your services, goes looking when something seems off, and pings the right engineer before your users do.
/api/search spiked to 2,103ms. Commit a3f8e21 introduced an N+1 query in findRelatedProducts(). Batching the lookups into a single $in query fixes it.Opens PRs across your services. Once merged, you can follow what's happening in your services back to its source.
Foam works alongside Datadog, Sentry, and whatever else you're already running. Learn how ›
Using your codebase and business context, sets up monitors specific to what your services do. Such as product KPIs, latency, or error rates.
Continuously checks monitors and pings the responsible person when something needs to be looked at.
Sits on top of your highest signal data so you can ask questions such as who is affected, what else to investigate, and what to look at next.
/api/search spiked to 2,103ms (threshold: 500ms). This is happening because your commit a3f8e21 replaced the batched findRelatedProducts() call with a per-item loop, creating an N+1 query (~48 sequential DB round-trips per request).src/handlers/search.ts:142 with a batched $in query.Built for

“Their CEO joined our channel and did not leave us until Foam was helpful.”
“We were getting forty alerts a day. Now we get three a week, and the ones we get are real.”
“Before our users even get to ping us, Foam has already explained the issue and pointed us to the cause.”
“I no longer lose a day checking my code changes in prod.”
“Since frontend and backend apps logs become linked, I get to have the full picture.”
“Their CEO joined our channel and did not leave us until Foam was helpful.”
“We were getting forty alerts a day. Now we get three a week, and the ones we get are real.”
“Before our users even get to ping us, Foam has already explained the issue and pointed us to the cause.”
“I no longer lose a day checking my code changes in prod.”
“Since frontend and backend apps logs become linked, I get to have the full picture.”