designer/engineer

Wicked good design for wicked problems.

Featured Work

PROJECT FELINES

PROJECT FELINES

The Alzheimer’s field spent billions clearing amyloid plaques from brains that kept declining. FELINES is what happened when I stopped accepting that narrative and started tracing upstream: iron dysregulation, ferroptosis, vascular failure, across six neurodegenerative diseases that enter through different doors but break down the same way.

GOINVO WEBSITE

GOINVO WEBSITE

Migrating a healthcare UX studio off aging Gatsby infrastructure onto Sanity CMS, animated page transitions, and accessibility-first architecture. Nine document types, card-morph transitions, and a content pipeline that lets non-technical editors publish without touching code.

WRITROSPECT

WRITROSPECT

An AI-assisted journaling tool that solves the blank-page problem. Built on neuroscience research about why people abandon commitments to themselves, with a prompt architecture that adapts to what you actually need rather than loading everything at once.

RENDOMAT

RENDOMAT

A programmatic video studio built at GoInvo. Turns structured content into multi-platform video with professional motion design, replacing a manual production pipeline that took a full day per video with an automated system that renders in minutes.

PHYLACTORY

PHYLACTORY

100,000+ concurrent units in a fantasy game that fuses factory management with real-time strategy. Built a custom Entity-Component-Space system from scratch in Godot 4 with C++ and GDExtension, hand-crafted every sprite and tileset in Aseprite, and designed twelve interconnected game systems such as energy grids, trains, pipes, and formation AI.

Case Study

The barriers
no one maps.

A healthcare client needed to understand why people struggle to connect with mental health services. Working with two other designers, we interviewed a subset of 79 participants across three rounds, synthesized their experiences into 24 themes, and built two interactive prototypes that make systemic barriers visceral enough to drive policy action.

Client engagement generalized under NDA.

Password: ShirleyXuPortfolio2026

Five composite personas representing patients and providers facing mental health service barriers

Five composite personas built from interviews with healthcare professionals, advocates, and individuals with lived experience.

79

Participants

3

Interview rounds

24

Themes identified

3

Designers

01

The Problem

Nearly half of Americans with mental illness receive no treatment. The reasons aren’t mysterious: stigma prevents people from seeking help, provider shortages leave rural and low-income communities underserved, insurance coverage gaps make care unaffordable, and administrative complexity drives providers out of public programs entirely. The data existed in policy reports, but decision-makers needed to experience these barriers as interconnected and human, not as isolated line items in a spreadsheet.

Our team of three designers collaborated on research synthesis, concept ideation, and prototype design across three rounds of interviews with healthcare professionals, state representatives, advocates, clinicians, and individuals with lived experience.

02

Research

The broader engagement reached 79 participants across 37 interviews, generating 1,177 data points. Our team conducted a subset of these interviews, speaking with psychiatrists, social workers, state Medicaid directors, clinicians, patient advocates, and individuals with lived experience. The conversations surfaced four categories of barriers that compound each other: a patient facing stigma in a rural area with no nearby providers and inadequate insurance doesn’t experience four separate problems. They experience one interlocking system of failure.

Stigma & Fear

Stigma around mental health especially within certain cultures, religions, and among older adults. Fear of involuntary treatment or legal consequences like loss of custody or job security.

Access & Workforce

Severe provider shortages in rural and low-income communities, long wait times, transportation barriers, and patients who don’t know where to seek help or how to navigate the system.

Insurance & Financial

High out-of-pocket costs, inadequate coverage under Medicare Advantage, out-of-network expenses, and providers opting out of Medicaid due to low reimbursement rates.

Administrative & Systemic

Complex enrollment paperwork, cumbersome billing processes, fragmented care coordination between mental health, substance abuse, and primary care services.

What we heard

Advocate · Workforce attrition

The administrative burden has reached a level that they just can’t deal with anymore. Folks that are treating patients all day are then charting for four or five hours afterwards. That’s a big piece of why people are leaving the system.

State representative · Policy trade-offs

You can’t regulate your way out of a workforce shortage. If you can’t meet the requirements, one way to do that is just turn away people. My concern is that it may actually limit member access to care unintentionally.

Individual with lived experience · Continuity of care

I’ve had four different therapists and five different peer specialists, and I’m not starting over from scratch telling somebody everything about me. You think about all your deepest, darkest secrets that you tell someone, and then you have to tell someone new. You’re not going to be open after a while.

Clinician · Transportation barriers

Our families here in West Baltimore — transportation is always a barrier. If they use medical assistance transportation, you need a two-hour window before and after. Nobody has that time, especially with children receiving treatment after school.

Administrative staff · Awareness gaps

Even though we don’t turn people away ever, there are still people who either just don’t believe that’s how it is, or they don’t know. Because they don’t have insurance, they stay in the community and they just suffer.

Psychiatrist · Waitlist consequences

One major barrier is the lack of providers. I have a waitlist of three, six, or nine months, especially if you’re looking at child psychiatry. Duration of untreated psychosis predicts long-term trajectory of illness.

03

Synthesis

We distilled the research into five named insights and two actionable opportunities for the client. Each insight captures a systemic pattern, not just individual anecdotes: themes that appeared across interviews regardless of the participant’s role or geography.

Bewildering Barriers

Significant obstacles hindering access and utilization of mental health services — from workforce shortages and coverage limitations to fragmented coordination between providers.

Worn Out Workforce

Staff shortages, burnout, inadequate compensation, and administrative burdens driving high attrition rates and impacting the delivery of care.

Individualized Implications

Cultural background, physical environment, and situational factors that either facilitate or impede access to care and its effectiveness.

Insurance Exodus

Low reimbursement rates and slow payment procedures driving providers toward private payers, creating downstream access barriers for patients.

Revolutionary Reforms

Multi-faceted initiatives already yielding positive outcomes — eliminating barriers for special populations, fostering partnerships, integrating services, and cultivating a more adaptive workforce.

Reports get skimmed. A person telling you about their day gets listened to.

04

Prototype A: Conversations

The first prototype puts the user in conversation with five composite personas, each representing a distinct barrier. Click a character card, and you enter a guided Q&A, asking about their experience, hearing specific scenarios from their perspective, and surfacing the solutions being attempted.

Each persona’s dialogue was written directly from interview data, preserving the emotional specificity of real stories while generalizing identifying details. Audio narration accompanies each response. Hearing a voice changes how you process information.

Dr. Elaine Carter

Psychiatrist, Vermont

Fragmented care

Brook Miller

Social worker, rural Ohio

Paperwork

Maria Reed

Indigenous elder, New Mexico

Internet access

Daniel Shea

Single dad, Connecticut

Food & housing insecurity

Jordan Nguyen

Student, New Jersey

Stigma & culture

Interaction model: Home grid of character cards with hover scaling → click opens a chat interface with the selected persona → suggested questions branch into conversational trees → profile sidebar shows demographics, barrier type, and proposed solutions.

05

Prototype B: Systems View

The second prototype uses a building metaphor: each window in the facade represents one of twelve barriers, and clicking one reveals the policy initiative being implemented to address it. Where the persona prototype builds empathy, this one builds understanding of the policy landscape.

The building implies structure, interconnection, and the possibility of renovation. Each window is a point of intervention, not an isolated problem, but part of an inhabited system. Barriers span patient-facing issues (access, cost, stigma) and provider-facing issues (administrative burden, low reimbursement, provider shortage). On desktop, clicking a window opens a full-screen detail modal. On mobile, each window navigates to a dedicated detail page.

Access barrier window illustration from the systems view prototype

Access

Cost barrier window illustration from the systems view prototype

Cost

Administrative Burden barrier window illustration from the systems view prototype

Administrative Burden

Provider Shortage barrier window illustration from the systems view prototype

Provider Shortage

Paperwork barrier window illustration from the systems view prototype

Paperwork

Care Coordination barrier window illustration from the systems view prototype

Care Coordination

06

Two Framings, One System

The two prototypes are deliberately complementary. Stakeholders who encountered the persona conversations first arrived at the systems view with more context for why each window matters. Those who started with the systems view sought out the persona stories to understand the human cost behind each barrier label.

AspectConversationsSystems View
MetaphorPersona conversationsBuilding with windows
User roleLearning from lived experiencesUnderstanding systemic barriers
InteractionDeep Q&A conversation treesQuick initiative browsing
Scale5 personas, one barrier each12 barriers, system-wide view
PurposeEmpathy buildingPolicy understanding

“Don’t say vulnerable populations. Nobody considers themselves vulnerable or a population.”

A participant’s feedback that reshaped how we framed every barrier in both prototypes. Language that centers the institution alienates the people it claims to serve.

07

Testing with Experts

We tested three mid-fidelity design concepts (a healthcare pipeline with animated reels, an illustrated vignette, and a quilt view) with healthcare professionals across multiple sessions. Their feedback reshaped the prototypes fundamentally.

Solutions, not just problems.

Every participant asked where the solutions were. Depicting barriers without pathways forward felt incomplete — stakeholders wanted to see what existing initiatives already address each issue.

Language matters more than visuals.

“Vulnerable populations,” “socioeconomically disadvantaged,” “low health literacy” — participants pushed back on institutional jargon. People don’t see themselves in those labels. Plain language builds trust.

Empathy without victimization.

The line between depicting systemic problems and making people feel “pathetic” is thin. Participants wanted depictions that validate frustrations without stripping away agency.

08

Implementation

Both prototypes were designed in Figma and exported to Vite using the Anima plugin, which generated a static React + TypeScript codebase with Tailwind CSS styling. Storybook documents the component libraries.

From Figma to code: Anima’s initial export was pixel-accurate but static: elements were locked into absolute positions that only worked at a single viewport size. Getting proper responsiveness on mobile meant recoding the layout layer from scratch: replacing fixed coordinates with flexbox, using refs for dynamic measurement, and building scaling logic that adapts to the available space rather than assuming it.

Persona prototype: Conversational data is structured as branching dialogue trees. Each character has suggested questions that lead to narrative responses with audio playback. The chat interface manages state through a dedicated context provider, with character-specific color themes and responsive layouts that required the most rework from Anima’s output. The three-column desktop view needed to collapse gracefully into a single scrollable flow on mobile.

Systems prototype: The building facade auto-scales to the viewport with a positioning algorithm that keeps focal points centered. Each of the twelve windows uses absolute positioning within the building container, one of the few places where Anima’s static output was close to correct, since the building is inherently a fixed composition. Modal detail views on desktop and route-based detail pages on mobile handle the rest, with responsive detection switching between layouts at 768px.

09

What I'd Do Differently

Figma’s own export pipeline exists now.

We used the Anima plugin to go from Figma to Vite, which locked us into a specific framework and produced static output that needed heavy rework. Today, Figma’s Claude MCP server can generate code directly from design nodes — stack-agnostic, responsive-aware, and able to reference a project’s existing components. That tool didn’t exist at the time, but it would have eliminated the Anima-to-flexbox rewrite and let us target any framework from the same source file.

More background research per participant.

We prepared a shared interview guide, but could have gone deeper on each participant’s specific domain before their session. Reviewing their published work, understanding the policies they operate under, and tailoring follow-up questions to their expertise would have pushed conversations past the surface-level barriers everyone agrees on and into the structural details only that person could articulate. The best insights came when we asked questions grounded in their specific practice, not the general script.

Built with

FigmaAnimaReactTypeScriptViteFramer MotionTailwind CSSStorybookReact Router

About

Someone didn't give up on me.
That's why I build.

There is no definitive formulation of a wicked problem.

When I was three months old, I had intestinal volvulus. I wouldn’t stop crying, every doctor had a different explanation, and my parents kept looking until they found one who could see what the others missed.

The choice of explanation determines the resolution.

That persistence saved my life. It also gave me something I’ve carried ever since: the recognition that how you frame a problem determines whether you can solve it at all.

Every wicked problem can be considered a symptom of another problem.

I don’t just say “wicked” because I’m from Massachusetts. In 1973, Horst Rittel and Melvin Webber described wicked problems: the kind where the crying is a symptom of something deeper, and treating the surface never reaches the root.

Every wicked problem is essentially unique.

I started where a lot of CS grads start: writing Perl scripts for an escalation engineering team at Dell EMC, then two jobs in the gaming industry building things that were complex, fast, and fun. But games ship patches. The problems I kept gravitating toward were the ones where you don’t get to patch. I earned a Master’s in bioinformatics because I wanted to bring engineering somewhere the problems don’t repeat: healthcare, government, regulated systems where every deployment is its own context and every patient is their own case.

Wicked problems do not have an enumerable set of potential solutions.

I joined a small studio designing for healthcare and government because the solution space is never closed. There’s no dropdown menu of correct answers. You design, ship, learn, and revise, knowing the next version will be different, not because the last one failed, but because the problem shifted underneath you.

Every solution is a “one-shot operation”; every trial counts.

In regulated environments, every release matters. There are no sandbox deployments when someone’s care depends on the system working. That weight is something I chose, not something I stumbled into.

The planner has no right to be wrong.

When you build software for medical contexts, you carry a specific accountability. The system you ship becomes part of someone’s care, and “move fast and break things” is not an option when the things that break are people.

Wicked problems have no stopping rule.

Over the past several years, that same instinct has pulled me toward problems with no finish line. I started researching neurodegenerative disease on my own, not because I expected to solve it, but because I couldn’t stop looking once I started seeing what others were missing. That’s how I work on everything: once I care about a problem, there is no clean stopping point, only the next question.

There is no immediate and no ultimate test of a solution.

I’ve learned to be comfortable building things I can’t fully validate yet. Whether it’s a healthcare prototype shipping to users whose feedback won’t arrive for months, or a research framework whose predictions won’t be tested for years, the work has to be good enough to act on before you know if it’s right. That uncertainty isn’t a flaw in the process. It is the process.

Solutions are not true-or-false, but good-or-bad.

That’s the lens I bring to everything I build. Not “is this correct” but “is this better.” Better communication, better questions, better tools for the people using them. My independent research on neurodegeneration, Project FELINES, follows the same principle: it doesn’t claim to be the right answer, just a framework that generates better questions than the ones we’ve been asking.

I build software. I design systems. But what drives me is the same thing that’s driven me since before I could talk: someone needs to keep looking until they find what the others missed.

Contact

Let's build something together.

Interested in working together, have a question, or just want to say hello? I'd love to hear from you.