5 comments

  • sgarland 19 minutes ago
    > You "fixed" the incident. You have no idea how.

    If you don’t know how it broke, and you don’t know how you fixed it, what exactly is it you think you understand about your application?

    • tcdent 10 minutes ago
      Agents wrote the code, agents tested the code, agents reviewed the diff, a human reviewed the diff, agents verified it made it to production correctly.

      But when the pipeline fails (bugs happen that's fine) re-running the exact same process may not be the solution.

      Where does the additional intelligence that wasn't there before come from? We ran the pipeline that got it to prod on the same exact models you have access to. So the value prop is that you read the logs automatically instead of a developer directing a debug session?

  • dshubham 48 minutes ago
    Congrats on the launch. You mention probes are read-only by design, which makes sense for debugging. Curious about the flip side: when an agent does make a write that turns out wrong, have you thought about extending the same approach toward capturing state before the write, so it's actually reversible? Seems like similar instrumentation (in-process, no redeploy) could apply, but the reversibility side seems mostly unsolved right now.
    • karanraina 5 minutes ago
      Thanks!

      It could work, the technology isnt the limitation.

      But we were clear from day one that we cant let our sdks change the memory. Even if it helped solve a real problem.. say for example resetting a bad env variable or a feature flag without redeployment.

      I might be biased from my experience, but i would prefer having a bug in my system for longer that i can reliably reason with than having it solved dynamically within the app which adds another thing to keep in my mind.

      for me, bug -> fails -> good bug + dynamic patch -> works -> bad

      also we dont think that we ourselves wont have any downtime ever, so we design for it. we'd not want to become as critical for your app as say your database.

      As of now, your app works even if our servers are down/blocked/slow, adding the ability to change memory on the fly could change this

  • bluelightning2k 55 minutes ago
    This debugging in production thing has always been interesting to me. Rookout, etc.

    How does it work? Using the NodeJs inspector API or other language equivalent to drop breakpoints? Those APIs are unavailable in many serverless environments and are challenging to use alongside bundlers.

    • karanraina 34 minutes ago
      YES!!! for nodejs, inpector API is used. But if you're adding dynamic logs or metrics, we dont even call the inspector completely. we return an expression that will always evaluate to false and safely evaluate our the log/metric. saves time and computations happen in the same cpu cycle

      You're correct inpector API is not available in many non-v8 targets. Bun also has somewhat of a partial support for inpector API but at least has a programmable debugger interface. It's not going to be as fast as native inspector but its better than nothing i guess :P

      for python sys.monitoring. for JVM, we do bytecode manipulation itself.

      bundlers are not an issue because we support sourcemaps. We just need mappings, not code in the sourcemaps and we do sourcemap resolutions out of process so that your app doesnt spend ~200 MB of memory for parsing sourcemaps

      • bluelightning2k 26 minutes ago
        I like your product and team. j think you have something here.
  • MdJasimuddin 1 hour ago
    Congrats on the launch! The ability to drop read-only probes into a live service without triggering a painful redeploy is a massive time-saver. Since my workflow relies heavily on cloud-based development, I am curious—how does your SDK handle serverless environments where the container lifecycle is extremely short? Really great concept!
    • karanraina 47 minutes ago
      Thanks!

      You're correct, serverless is a bit tricky. CPU gets suspended the moment your function returns. The way it works is that you wrap your functions with a wrapper in our sdk.

      that wrapper is supposed to track if there's telemetry to be sent, if so.. it sends it, otherwise, return as usual

      this makes sure that when there's no active probe, there's no latency added. But when there's an active probe.. ~100-200ms could be added in the worst case if the probe is just before the return.

      again, this isnt a problem in non serverless worloads because the CPU is always on.

      but since probes are bounded by time and count, this will go away as soon as the time or count condition meets. beats adding new logs and redeploying in my opinion

      • bluelightning2k 37 minutes ago
        You wrap it but there must be some kind of call you're making to your API. So are you saying that call fires immediately, races the main wrapped execution, and is therefore done when the execution is finished, therefore neglible latency except for cold starts on extremely short functions?

        How does the probe function technically. Inspector API I believe is unavailable on CloudFlare etc.

        I once wrote something like this which could work on serverless platforms without the Inspector API. It used Typescript AST transforms to insert no-op listeners at every line, so they would dynamically eval or dump breakpoint style if a listenToLine parameter equalled their line, otherwise no-op. So trivial but not technically zero runtime cost.

        • karanraina 22 minutes ago
          yup, it races the main wrapped function.

          makes no difference if its cold or warm start. (The latency because of us, not latency in general)

          Using AST, that's clever actually! I thought along somewhat similar lines. User tree-sitter. But it needs a build step! not sure how people feel about that :D It changes your source code itself so we'd need a 2 tiered source resolution. Dirty, but doable.

          And instead of having this at every line, i did this at "lines of interest" before and after every scope ends.

          so at the start/end of an if condition, start/end of fn definiton. it sort of worked, but it slowed down our synthetic benchmarks for "no effect when probes arent there" by more than what i wanted to tolerate and it depended of eval which i thought devs wont accept. and using node-vm slowed it further

          But will give another try again. thanks for sharing this!

          • bluelightning2k 14 minutes ago
            If I was building this for serverless I would transform with two copies of the code: instrumented and not. Then do one single if statement between them.

            If you are transforming anyway you're looking at virtually zero dev time cost and runtime cost when no probe is active of less than 1 ms.

            This approach survives any environment I know of and has almost zero runtime cost.

  • Natalia724 1 hour ago
    The in-process redaction design is the part I would want to evaluate first. Is there a way to audit which values were captured and which redaction rule matched for each probe hit?