Markdown-free editing for Work Management preview
Interaction designFrontend engineeringShipped

Markdown-free editing for Work Management

Overview
In Datadog Work Management, the description is where the real substance of a work item lives, but the field was a markdown input. Writing a heading, link or table took syntax knowledge and a mental translation between what you typed and what readers saw. Internal feedback, my PM and an engineer on my team all wanted something lighter. Engineering didn't have the bandwidth and the change was frontend-only, so I designed it, built it and shipped it myself.
Impact
I led the design and frontend implementation of a new inline description editor, shipped as a stack of six PRs. It's now live for Work Management customers.
Role
Product DesignerFrontend Engineer
Duration
Summer 2026
Team
Roxanne M (PM)Benjamin G (Senior Engineer)Rahul G (Senior Engineer)

The problem

The description field was a markdown input, which caused two problems. You had to know the syntax: tables meant typing pipes, dashes and alignment rows by hand. And you wrote in one mode and read in another, going from read mode to edit mode to save instead of just clicking and typing.

The old description editor: a separate form with raw markdown syntax, including a hand-typed table

The new editor

Slash commands and a selection toolbar replace the syntax, and inline editing replaces the mode split. The interaction model comes from Notebooks. One rule shaped every decision: the editor only offers what markdown can store.

Seeing what changed

Before. The timeline already posted the full description on every save, and autosave multiplied it into walls of flattened markdown. You had to compare them by eye to spot what changed.

The old timeline: a description update shown as one long block of raw markdown

What shipped. Each edit becomes one line, and “View changes” opens a word-level diff right in the timeline.

Opening a word-level diff from a one-line description update in the timeline

What didn’t make it. I explored three versions that opened the history in a modal. The inline diff got most of their value with far less to build and maintain.

Design to production

After a quick Figma pass, I designed most of this in the browser, where details like cursor placement and link edge cases can be tuned by using them. It’s built on ProseMirror through TipTap.

Stacked PRs

I split the work into six stacked PRs, each building on the last, with the final one switching the editor on. About 8,200 lines and 105 tests.

The six stacked PRs in GitHub, from the shared foundation up to switching the editor on

Comments and review

Review shaped the design, not just the code. An engineer showed me a header toggle that didn’t survive a reload, which became the markdown rule. Review also caught bugs that could have lost unsaved edits.

Suggested: one or two cleaned-up review threads, such as the header toggle screenshots

Feature flag

Everything shipped dark behind a flag, and all six PRs merged together so nothing broke mid-stack.

Internal dogfooding

We turned it on internally first, and real use found bugs tests had missed. After a round of fixes, it went live for customers.

Great work on taking up the editor improvements, ironing out the smallest of the wrinkles takes time & I think we should set a similar bar for our UI features.

— Engineer on the Work Management team

I’m in Work Management every day. So my engineer and I realized right away. And the table is working great too.

— Work Management user

What I learned

  • The storage format is a design constraint. “Can markdown store this?” settled most decisions before I’d drawn anything.
  • Make every stacked PR clickable. Reviewers should be able to try a PR without waiting for the end of the stack.
  • Ship to internal users early. Dogfooding found what tests missed.

Thanks to my PM, the engineers who reviewed every PR, and the Notebooks designer and engineer.

Work in progress