Skip to main content
OTTL Editor

Data Transformation.Rethought

// This was a design exploration. No team, no production constraints, no shipping deadline. What follows is how I think through a problem when the only constraint is the problem itself.

Aboutthe project

[ 01 ]

Context

OTTL — the OpenTelemetry Transformation Language — is how telemetry data gets shaped before it hits storage and gets useful.

The lack of usability of OTTL is bad for the ecosystem, because OTTL is the right, standard solution for an important set of problems: how to make telemetry look and cost right.

[ 02 ]

Challenge

Devise an intuitive, tactile User Experience to transform telemetry.

[ 03 ]

What I did

  • Received a brief. Questioned it. Reframed around what expert users actually need.
  • Prototyped in code, twice. No research panel, I stress-tested my own assumptions. Then used expert feedback to push further into the visual UI.

DesignBets

[ 04 ]

The reframe

The obvious design question: How do I make OTTL easier?

It leads to a form-based UI: dropdowns, hidden code, abstracted syntax. Fine for users who don't know what they're doing. These users do. So I asked a different question:

What does someone who already knows what to do need from a UI?

A shorter path to say it.

I translated that into several design bets.

An example of another data transformation playground — ottl.run
An example of another data transformation playground — ottl.run
Graph wireframe of the form UI for data transformation
Wireframe of a Scratch-style form UI for data transformation. Discarded

1. Telemetry preview

The default data format is JSON. Developers don't read JSON, they scan it. Looking for a specific attribute, spotting a pattern, checking whether a value landed where it should.

I grouped and rearranged input data into a table view. Most important data first. Attribute keys on the left, values on the right. The structure matches how engineers actually parse this data: find the attribute, check the value, move on.

JSON default vs structured table view
JSON default vs structured table view

2. Verbs over syntax

Instead of writing OTTL statements, users pick from quick actions directly on the attribute. Click a field, see what you can do to it. No syntax to recall.

The tool translates each action into the correct OTTL behind the scenes. Users operate on their data, not on code.

Raw OTTL is still one step away for anything the quick actions don't cover. No one gets trapped inside the abstraction.

Quick actions for OTTL transformations
Quick actions: pick an action, the tool writes the OTTL

3. Inline and keyboard

Most transformation tools put the action in a separate panel. That split forces constant context-switching between the data and the operation.

I kept everything inline. The user operates directly on the input data. No round trip.

Keyboard access runs throughout. These are developers. The mouse is the slower path.

Adding an attribute directly on the data
Inline editing. Adding new static attribute
Renaming an attribute directly on the data
Inline editing. Renaming an attribute
Masking an attribute value directly on the data
Inline editing. Masking an attribute value

4. Layout

Early on I considered hiding transformation queue entirely and showing only input and output. Cleaner. Less noise.

It didn't hold up. Users need to see what's queued, in what order. Reordering and raw OTTL input fit naturally in the queue.

Wireframes: layout without queue vs layout with queue
Hiding vs showing transformation queue. Visibility won
[ 05 ]

Deliberate cuts

  • OTTL transformations
    Quick actions include only the most commonly used ones: adding attribute using static value or subsring from another attribute, mask, and remove. The rest lives in raw OTTL.
  • Keyboard shortcuts
    Partly in, only to validate some interactions.
  • Validation
    Draft-level. Just enough to mark where guardrails will live, not fully designed.
  • Smart suggestions
    Data normalization, common format detection, and similar assists. Noted as future scope, not prototyped.

PrototypeArc

[ 06 ]

v1. the wrong assumptions

I started with a vibe-coded prototype in Cursor to validate the mental model and interactions.

The first version hid transformations from the user. Drag-and-drop let users move any attribute, implying the transformation order changed. The tool handled the rest behind the scenes.

Both choices were mistakes. They reduced transparency, introduced ambiguity, and broke trust.

Vibe-coded prototype v1 — try it live
[ 07 ]

v2. make it legible

Users didn't trust what they couldn't see. v2 made the invisible visible.

  • Showed transformations in a dedicated Transformations panel
  • Moved raw OTTL editing and reordering into that same panel
  • Kept drag-n-drop only for moving attributes between sections
Vibe-coded prototype v2 — try it live

Better. But v2 exposed new cracks.

  • Attribute drag-and-drop felt ambiguous → replaced with explicit Move to Resource / Span actions
  • Text-editor-style diffs didn't match how developers actually read changes → switched to IDE-native diff patterns
  • Transformations had misplaced visual weight → iterated on hierarchy and accents

ExecutionUp close

[ 09 ]

Main view

Full view of the OTel Bin working surface
The full working surface
[ 10 ]

Input data and quick actions

Input data displayed as a structured table — attributes on the left, values on the right. Click any field to see what you can do to it: add, rename, delete, mask. No syntax to recall.

Quick actions menu on an attribute
Quick actions on an attribute
Adding a new attribute
Adding a new attribute
Renaming an attribute
Renaming an attribute
[ 11 ]

Transformations

Every transformation lands in the queue. Raw OTTL sits alongside quick actions. Run-till-point lets user review intermediate result.

The transformation panel
The transformation panel