Role
Full Stack Product Engineer
Scope
Full-stack implementation, product UX, data visualization
Team
Engineering Manager + me
Developer tooling · full stack

Making performance problems easier to find.

Performance Insights gave developers function-level visibility into where their backend was spending time—so they could find the slow part without digging through everything else first.

Annotated Performance Insights interface explaining its range controls, function filters, slowest-first sorting, and performance columns.
12 minmedian from profiler selection to function-stack edit
48%made an edit within 10 minutes of selecting a profiler result
697profiler selections led to function-stack edits in 90 days

01 / THE PROBLEM

When a request is slow, where did the time go?

We could report the total runtime of an API request, query, or task. Individual functions were much harder to see across request history, so developers had to work backward from the overall runtime and debug the function stack themselves.

For a request with a lot going on, the path from “this is slow” to “this is the thing making it slow” had too much noise in between.

02 / THE IDEA

Analyze what actually impacts performance.

My engineering manager loved profiling our own application and wanted to give Xano developers some of that same visibility. The technical direction was intentionally lightweight: collect profiling data in Redis for functions where performance could vary meaningfully, tracking total runtime and executions over time.

We didn’t need to profile everything. Simple utility functions weren’t especially interesting. The goal was to capture enough information around database operations, custom functions, tasks, and other variable workloads to point developers toward the places worth investigating.

He defined the technical direction and handed the feature to me to build full stack. My job was to turn that data into something useful.

03 / THE PRODUCT FIX

See what’s most important first.

Runtime statistics alone still left developers with a lot to interpret. I designed the interface around the next useful step.

Performance Insights dashboard showing response-time chart and functions ranked by efficiency

Functions were automatically sorted from least efficient to most efficient, so the biggest potential problems appeared at the top. From there, developers could compare total runtime, average runtime, total usage, and repeated function calls.

They could also filter and drill down by function type. If database operations looked suspicious, for example, they could narrow the view to database functions and investigate whether a query or index might be the culprit.

I turned profiling data into a place to start investigating.

04 / ITERATIONS

Insights you can act on immediately.

Performance Insights started as a dedicated experience. It became foundational enough that we brought a summary onto the dashboard, so developers could see usage and performance signals as soon as they opened their workspace.

We also added inline Performance Insights to the function stack. While building or debugging an API, developers could see function-level runtime and usage stats right beside the work: average runtime, total runtime, execution count, and the time range behind the data.

Inline Performance Insights popover showing average runtime, total runtime, count, and interval controls.
Runtime and usage, without leaving the stack.
Function stack showing inline runtime values next to individual function steps.
See which steps are taking longer while editing.

The progression

Dedicated view: Find a performance problem.
Dashboard: Spot the signal when you open a workspace.
Function stack: See the relevant data while you edit.

THE RESULT

Make the slow part easier to see—and easier to fix.

In the last 90 days, 697 profiler selections led to a function-stack edit. Nearly half of those edits happened within 10 minutes, with a median time to edit of 12 minutes. The feature also kept earning a place closer to the work: first as a dedicated view, then on the dashboard, and finally inline in the function stack.