From individual cases to support systems
My role began with complicated customer cases involving CI behavior, monorepos, Storybook extraction, resource loading, account access, and build limits. As the same kinds of problems kept coming back, I started working on the systems around the cases: how requests enter the queue, what context follows them, which operations are safe to delegate, and how a useful answer becomes shared knowledge.
That shift’s taken my role well past individual casework. I have authored 300+ merged pull requests across product fixes, documentation, infrastructure, tooling, automation, and migration work.
Owning the support platform
I proposed moving from Intercom to Plain after seeing gaps in our omnichannel support, particularly for Slack-based customer work. I completed the organization-wide migration, including authentication, data imports, cutover, and post-launch monitoring. Plain is now fully live, and I remain its point person and administrator.

Making day-to-day administration safer
I built a Go administration system that runs as both a CLI and an MCP server. Support & Solutions Engineering use it for day-to-day administration without changing every task into an engineering request or relying on cumbersome raw GraphQL operations. It redacts PII by default and requires confirmation before destructive actions. The system posts weekly anonymous telemetry summaries to Linear, so I can find and fix failures like GraphQL schema drift, and internal users rarely have to encounter and report them.

Turning repeated work into shared knowledge
Support snippets live in version control, sync to Plain, and can be proposed through Slack with review gates.
I packaged our reusable support workflows as an agent plugin with one maintained source and generated packages for OpenAI, Claude, and Cursor. I migrated 18 canonical workflows covering triage, reproduction, escalation, QA, reporting, documentation, and safe handling. The plugin surfaces 19 skills alongside five MCP servers, including a documentation MCP with full-text search across product docs.

One of those workflows uses resolved support cases to find gaps in customer-facing documentation, support snippets, and the internal knowledge base, then recommends and drafts the missing material for human review. Together, these systems make the knowledge from one case easier to find and reuse in the next.
Making incident communication more reliable
During incidents, customer impact and engineering context were scattered across Slack and Plain threads, slowing status-page updates and increasing the risk of overclaiming. I built a skill that separates confirmed facts from working theories and drafts stage-appropriate updates for human review. Across four test scenarios, it met every assertion, compared with 75% without the skill.
Using operational data to improve routing
When thread assignment felt uneven, I analyzed 30 days of routing data rather than treating the anecdote as the conclusion. The data showed that one engineer’s two-week absence had temporarily concentrated assignments on another teammate. It also exposed an opportunity to improve distribution through regional routing. I ran a 30-day pilot measured against assignment distribution, unassigned duration, response time, SLA breaches, and capacity pressure. It met the success criteria, and regional routing is now the permanent model.