← Back to work
UX Case Study · Individual Contributor

Redesigning an AI
engineering workflow
nobody could finish

Four user observations shaped four design decisions. Each decision has a rejected alternative alongside it. One thing shipped and performed differently than expected.

GenWizard Portal Homepage
MY ROLE
UX Designer
(IC)
End-to-end RE workflow design
Visual designs & prototyping
Moderated usability testing
Design handoff & QA
Heuristic evaluation
Post-launch observation
Business Challenge
How can we redesign the Reverse Engineering archetype so delivery teams can complete an AI-driven analysis run without a walkthrough session, while preserving the multi-session, collaborative way they actually work?
Platform
Accenture GenWizard
Team
1 PM · 3 Eng · 1 UX Lead
Scope
Reverse Engineering
Duration
6 months · 2024
Product Context
Accenture's platform for
AI-driven IT modernisation

GenWizard is an internal platform that helps delivery teams accelerate code analysis, document generation, and test automation. The Reverse Engineering archetype lets teams upload legacy codebases and receive structured documentation generated by a multi-agent AI pipeline.

I was the sole designer for the RE archetype — responsible for every screen from file upload through generated document output.

0/5
Participants completed a RE job unaided in round-zero testing
12
Steps in the old wizard with no re-entry path
2hrs
Median wait with a single spinner and zero status feedback
43
Files in the flat zip export with no hierarchy or role guidance
Discovery
The automation users couldn't figure out

The previous version had been built by engineers for engineers. A twelve-step wizard with no re-entry path, no progress memory, and no status during a two-hour AI run.

In an informal round-zero test at the start of the project, I asked five delivery team members to complete a basic RE job. The results were immediate.

0 / 5
completed the workflow unaided. Three gave up before step six.
Old Flow — Reconstructed from Heuristic Evaluation
Step 1 asked questions the file could answer — but file upload wasn't until Step 3. Users guessed blindly.
No session memory. A returning user on Day 2 saw Step 1 with all previous input gone.
Any error reset the job to Step 1. A 2-hour AI run that failed at Step 11 required restarting completely.
Single spinner. No status. Median wait 2 hours. No indication of which agent ran or whether it failed silently.
Insights From the Field
Collecting user pain points: four observations that changed everything

I attended four of eight contextual inquiry sessions and ran two independent usability testing rounds. Before those sessions I assumed the core problem was step count. After them, I wasn't sure step count was even in the top three.

Observation 01
Users don't know which step is causing their problem
"When it fails I have no idea if I did something wrong or if the system just broke. I usually just restart everything and hope for the best."
Delivery lead · Session 2 · 3 months on GenWizard
→ Decision 3: Dependency Graph
Observation 02
Users return mid-task. The wizard assumed they wouldn't.
"I started the upload on Monday, got pulled into a client call, came back Wednesday and literally couldn't find where I was. I ended up starting again."
Business analyst · Session 4 · New to GenWizard
→ Decision 1: Document Canvas
Observation 03
The generated output was a destination with no navigation
"I ran the analysis, it said 'complete', I downloaded the zip, and there were forty-three files. I genuinely didn't know which one to open first."
Solutions architect · Session 3 · First completed RE run
→ Decision 4: Document Hierarchy
Observation 04
AI features were invisible to the people who needed them most
"I didn't know there was an AI assistant in this tool. I've been manually writing goal descriptions for every run. Nobody told me there was a way to get help."
Project manager · Session 5 · 4 runs without ever using the Advisor
→ Decision 2: Advisor Side Panel
Design Contribution

My Contribution:
Reverse Engineering
Archetype

I owned every screen from file upload through generated document output — interaction model, usability testing, design reviews, and engineering handoff.

  • Document CanvasPersistent session history replacing the stateless wizard. Inputs accumulate as artefacts the user can return to at any point.
  • Advisor Side PanelContextual AI assistance surfaced at three high-uncertainty decision points — not a floating icon in the corner.
  • Context SettingsAim selection, NFR challenge tagging, and open-text input replace generic form fields. Chip-based UI reduces decision time.
  • Dependency GraphDeliverable prerequisite logic made visible before a user attempts to run, eliminating the "I don't know what I did wrong" restart pattern.
  • Document HierarchyThree-level navigable library replacing the flat 43-file zip export. Role-appropriate activation toggles. No download required.
Design Decisions
Decision 01 / 04
Document Canvas — replacing the wizard nobody could re-enter

The brief specified a streamlined wizard. Engineering had already scoped one. When I mapped the RE workflow against the re-entry finding from Session 4, a wizard would fail for the same reason the old one did: no memory, no context, no re-entry path.

Option A — Rejected
Step Wizard
5-step linear form. Standard pattern. Engineering had scoped it.
Returns Day 2: all input gone. Error at Step 11 resets to Step 1. Step 1 asks questions the file could answer, but upload is Step 3.
Option B — Chosen
Document Canvas
Persistent canvas accumulates confirmed inputs as artefact cards. Three-tab sidebar: Local / Server / Repository.
Full history intact on return. Each file gets a semantic "Tag File to:" selector (Business / Architecture / API Documents / Business workflow) so the AI understands file purpose.
Why This Mattered
File tagging was not in the original brief — I added it after observing that engineers, architects, and business analysts were uploading different document types and expecting different AI treatment. Once both files are tagged, the canvas confirms: "Awesome, we have prepared the content! Let's proceed to context setting." The confirmation message is the pivot point from input to AI processing.
Local tab with deliverables selection
Local tab — Select Deliverables + drag-and-drop upload
File tagged as Business
File uploaded and tagged as 'Business'
Two files tagged, confirmation message
"Awesome, we have prepared the content!" — both files tagged, canvas confirms
Decision 02 / 04
Advisor Side Panel — present without being available

The Advisor brief arrived with a design decision already embedded: full-screen modal. Engineering had scoped it. Observation 4 made the real problem clear: experienced users weren't struggling with the modal — they didn't know the Advisor existed at all.

Option A — Rejected
Full-Screen Modal
Standard AI chat pattern. Already scoped. Treats AI assistance as a task you interrupt the workflow to access.
Workflow completely hidden. Checking progress forces closing the Advisor. "I'd have to close this to check what step I'm on."
Option B — Chosen
Contextual Side Panel
Same capability, occupying the right third of the screen alongside the canvas. Workflow always visible.
Advisor opens proactively at three high-uncertainty decision points with a scoped, contextual offer — not a generic "How can I help?" It knows what screen you're on.
The Proactive Trigger in Action
The most critical trigger: when a user reaches the Context Settings aim-selection step, the Advisor opens automatically with: "Can I help you choose your aim(s) based on the context?" — a scoped, contextual offer tied to exactly what they're deciding. This is the moment an experienced user would have made an uninformed choice alone. Post-launch, Advisor interactions were 3.1× the old floating-button baseline.
Context Settings — aim selection
Context Settings: "Please state the aim after RE" — 5 aim chips + "Take more informed choices with AI" trigger
Advisor opens proactively during aim selection
Advisor opens alongside aim selection: "Can I help you choose your aim(s) based on the context?" — scoped, not generic
Decision 03 / 04
Dependency Graph — surfacing logic the checklist was hiding

The engineering spec said: checklist. When I reviewed the backend logic, I discovered the entire deliverables model had a hard prerequisite structure — none of which had ever been surfaced to users. A flat checklist would hide this entirely.

Option A — Rejected
Flat Checklist
Seven items, select which to generate, click run. Simple. What engineering had scoped.
Ticking "Test Script" first gives an error with no explanation. Exactly the "I don't know what I did wrong" pattern from Session 2.
Option B — Chosen
Directed Dependency Graph
Seven types rendered as a directed graph. Generation order visible. Locked nodes show prerequisite logic before a run.
Per-node play buttons for targeted re-generation without restarting. Engineering flagged complexity — I made the prototype high-fidelity enough for the PM to see the value before deciding.
Deliverables · Dependency Graph · Shipped Design
📄 Code Explanation
Root · Must complete first
🌐 Wiki
📄 Design Doc
🕸 Knowledge Graph
📝 Backlog
🏗 Architecture
✅ Test Case
⚡ Test Script
Deepest dependency

In 3 of 4 post-launch observation sessions, teams pulled up the graph at session start. One team called it "the brief." A planning artefact I hadn't designed for.

Decision 04 / 04
Document Hierarchy — a library, not a zip file

Decision 3 solved generation order. Decision 4 solved what came after: forty-three files in a flat archive with no navigation, no role labels, no starting point. Different team roles needed entirely different subsets — the flat download treated all forty-three as equivalent.

Option A — Rejected
Flat Zip Export
All 43 files in a single download. The spec called it "download ready."
No role labels. An architect, a PM, and a QA engineer all see the same list with no indication of relevance.
Option B — Chosen
Three-Level Hierarchy
Category → Sub-type → Named file. On/off toggles per category. Files open in the editor — no download.
Every team role sees only what's relevant. Post-launch, toggle selections became team conventions applied consistently across sessions.
Document Library · Three-Level Hierarchy · Shipped Design
📁 Functional Document
Functional Specifications
Ecart_FRS_v2.3.docxEcart_Module_Specs.pdfEcart_Functional_Document_v1.0.docx
🏗 Technical Documentation
Architecture Document
Ecart_Architecture.docxEcart_SystemDiagram_v1.pdf
API Document
Ecart_API_Reference.json
✅ Test Suites
📋 Agile Artefacts
Full Application Overview panel
Application Overview — AI-generated codebase analysis: language distribution, system architecture diagram, code metrics (150 files, 25K lines, application coupling, code complexity), and "Result of my understanding" narrative
Final Design
The complete RE workflow — from upload to insight

Seven screens that tell the story of one RE job: from the moment a user decides to run an analysis to the moment they have a structured, role-appropriate document library. Every screen is a decision I made — and most of them replace something that previously didn't exist at all.

01
Upload source files · Select deliverables · Tag each file by type
→
02
Multiple files tagged · Canvas confirms: "Awesome, let's proceed to context setting!"
→
03
Context Settings: choose aim (Modernise / Migrate / Knowledge Transition…) · AI help available
→
04
Advisor proactively opens: "Can I help you choose your aim(s) based on the context?"
→
05
NFR challenges: Performance, Scalability, Reliability… — select all that apply as chip tags
→
06
Free-text context → Submit · "I will generate the best possible artefacts. Please hold while I analyse."
→
07
Application Overview: language breakdown, architecture diagram, code metrics, AI narrative
Execution Monitoring
The run dashboard that solved Observation 1

The old platform had a single spinner with a 2-hour median wait and no indication of what was happening. This directly caused the "I have no idea if I did something wrong or if the system just broke" pattern from Session 2. The Initiate Run dashboard replaced it entirely — but this surface is separate from the dependency graph (Decision 3). Together, they close the loop on error blindness from both ends: before the run, and during it.

Before
⟳
Single spinner. No status. 2 hours.
Any failure required restarting the entire job from Step 1. Users couldn't tell if the system failed or if they'd done something wrong. The universal response: restart and hope.
After
✓
Per-agent accordion. Per-step status. Time remaining.
Users see exactly which agent is running and which step failed. A "Regenerate" button appears at the failed step — no restart needed. Zero full-run restarts observed across 4 post-launch sessions.
Initiate Run — execution in progress at 20%
Execution in progress: "Fetching details... (20%) · Time remaining 1hrs 55min left" — per-agent accordion with expandable step details and real-time progress
Step-level error with Regenerate button
Step 4 fails: "Process interrupted. Please retry" + inline Regenerate button — users fix at the step level without restarting the full run
Multi-agent execution view at 60%
60% — multiple agents running in parallel: Agent network manager ✅, User Story Generation Agent ✅, Text Extraction Agent ✅, DSA Knowledge Agent in progress
All agents complete — Fetched details successfully
"Fetched details successfully" — all four agents complete with green checks. The run that used to be a black box is now a transparent, navigable process.
Assembled Agents Visualisation

The Assembled Agents graph was the surface I designed to let users inspect and modify their agent network before running. Post-launch observation showed 4.1 minute median dwell — the highest of any surface in the platform. Users weren't just reviewing it before running — they were understanding their system through it. One team returned to it mid-run to cross-reference which agent was handling which step.

Assembled Agents hierarchy graph — full view
Assembled Agents: Orchestrator Agent → Test Manager → 3 Super Agents → Utility Agents → specialist agents (YAML Parsing, YAML Generation, Agent Network Manager, Test Case Management, Text Extraction, User Story Generation). Right panel: editable agent list with Add New Agent.
User Journey — Step 1
Where users actually start:
the project entry point

Before a user ever reaches the canvas or the agent graph, they land on a project page that organises their work across archetypes — SDLC, Reverse Engineering, Forward Engineering, and AMS. This entry-point screen was a key design decision: the archetype tab structure sets the mental model for everything downstream. Each application card surfaces two primary actions: Manage Deliverables and Analyse Application.

Project Zoro — Manage Deliverables entry point
Manage Deliverables path: user enters the dependency graph to configure what the RE run will produce. "Analyse Application" is disabled until deliverables are configured — a sequencing constraint that prevents incomplete runs.
Project Zoro — Analyse Application enabled
Once deliverables are configured, "Analyse Application" activates. The progression from grey to clickable is the system's way of confirming readiness — removing a full class of errors from the old wizard where users could trigger analysis without valid inputs.
Design Decision — Entry Point Sequencing

The two-step card (Manage Deliverables → Analyse Application) replaced the old linear wizard's first screen, which asked configuration questions before the user had uploaded any files. By making the dependency graph the mandatory first step, users arrive at analysis with a clear intent — and the system has the inputs it needs to run without silent failures.

User Journey — Step 2
The AI reads the codebase:
Application → Language → Code → Explanation

Before any document can be generated, the platform analyses the uploaded codebase. The Analyse Application screen visualises this process as a four-column hierarchy: Application version → detected Languages → individual Code files → AI-generated Explanations. Each file is scored for extraction accuracy — 94% in this run.

This is what produces the "Code Explanation: Completed" node in the dependency graph. Users can see exactly which files were analysed, which languages were detected, and how confident the AI was about each extraction — information that was entirely invisible in the old wizard's single spinner.

Analyse Application — four-column code analysis view
Analyse Application: Application (InventoryOrder=Sy.. V2) → Language (C#) → Code files (VendorController.cs, VendorTypeController.cs — Accuracy 94.00%) → Explanation documents. Each code file maps directly to a generated explanation. The accuracy score gives teams a signal on which files may need manual review before proceeding to document generation.
Analyse Application — code component panel with source code
Clicking a code file opens the Code Component panel, showing the actual extracted source alongside the accuracy indicator. Engineers can verify what the AI parsed before committing to a full document generation run — a trust signal that the old platform never offered. The panel is dismissible; the analysis graph stays persistent behind it.
Design Rationale — Showing the Work

Discovery showed users restarting entire runs because they had no idea whether a 2-hour AI job had processed their files correctly. The Analyse Application view surfaces the extraction results before any long-running generation begins. If accuracy is low on a critical file, teams can correct their upload and re-run — avoiding a wasted 2-hour wait on bad inputs.

Design Decision 3 — In Practice
The dependency graph:
not just a selector — a planning tool

The Manage Deliverables screen replaced the flat checklist of 7 deliverables with no ordering logic. The new graph makes dependency relationships explicit: Code Explanation must complete before Backlog (Feature / User Story) can begin; Backlog must complete before Test Case, Architecture, or Design Document. Users can only trigger deliverables the system is ready to produce.

Post-launch, 3 of 4 teams used this screen as a brief at session start — a usage pattern I didn't design for, and the clearest signal that the structure was doing real work.

Manage Deliverables — dependency graph, full view
Manage Deliverables — full dependency graph. Code Explanation (Completed ✓) unlocks the second tier: Backlog, Wiki, and Knowledge Graph. Downstream deliverables (Test Case, Architecture, Design Document, Test Script) unlock only after their dependencies are met. Status indicators update in real time.
Wiki Documents panel
Clicking the Wiki node opens the Wiki Documents panel — a structured list of all generated wiki artefacts including Detailed Technical Specification, Static Dependencies, Functional Requirements, Architecture Document, and more. Replacing the undifferentiated zip download entirely.
Knowledge Graph visualisation
The Knowledge Graph node renders an interactive dependency network — showing entity relationships, file-level dependencies (Payment Handler → Style.css, Checkout Service → Application Pro), and call chains across the uploaded codebase.
Design Document file list from dependency graph
Clicking Design Document from the graph opens the file-level panel. Users can navigate to specific artefacts (Functional Document v1.0, Module Specifications, FRS v2.3, etc.) without touching a file system. The 43-file zip is now a navigable hierarchy.
Knowledge Graph hover state
Hover state on Knowledge Graph node — cursor indicates clickability. Completed status shown inline on the node, removing the need to navigate away to verify run status.
Design Document hover state
Design Document node hover — "Not started" status visible with agent icons indicating which specialist agents will produce this deliverable. Users know what's coming before committing to run it.
The Output Experience
After the AI run:
navigable output, not a zip file

Observation 03 from contextual inquiry was unambiguous: users didn't know what to do with a 43-file flat zip. The redesigned output experience replaces file-system navigation with a structured, hierarchical document viewer — accessible directly from the document canvas without leaving the platform.

The Summary screen confirms completion, surfaces the View Status path for users who want to inspect the agent run, and groups all output into two top-level categories: Documents and Knowledge Graph.

RE Completed — Summary screen
RE Completed state. "Reverse engineering completed. Check status here" with a View Status CTA, followed by the two output tiles: Documents 04 (4 document types generated) and Knowledge Graph. A clear destination — not a file dump.
Documents 04 panel — document type selection
Clicking Documents 04 opens the type-selection panel. Users enable or disable specific document types — Functional Document, Technical Documentation, Test Suites, Agile Artefacts — before accessing individual files. Toggle state persists across sessions.
Functional Document drill-down
Functional Document drill-down: sub-document categories listed with arrow navigation — Design Document, Operational Maintenance Report, Deployment Document, Architecture Document, API Document, Technical Diagrams. Each category groups related outputs, not individual files.
Design Document — individual file list
Design Document file list — 12 individual Ecart documents surfaced with clear filenames and types. Users can identify which version of which spec to open without downloading everything. The file-level navigation that was entirely absent in the original flat export.
Document viewer — full document with Table of Contents
Opening Ecart_Functional_Document_v1.0.docx renders it inline with a structured Table of Contents: Introduction, Intended Audience, Architectural Components, Detailed Design Specification, Entity Relationship Details, UI Design, Data Flow, Security Considerations, Testing Plan, Sequential Actions, Conclusion, Appendix. Read in-platform, no download required.
Full nav context — GenWizard with RE Summary active
Full navigation context: GenWizard left nav with Zoro project expanded showing the RE activity structure — Inputs, Context, Select Agent Arc, Reverse Engineer, Summary (active). The nav panel makes session re-entry trivial. Users can return to any prior step from any state.
In-Platform Editing + Session Re-entry
Documents you can edit.
A session you can always return to.

Two things that weren't possible in the original wizard: editing generated documents in-platform, and returning to a session that was interrupted. Both are solved here.

Observation 02 was a delivery team member who "came back Wednesday and literally couldn't find where I was." The left navigation's persistent activity structure — Inputs, Context, Select Agent Arc, Reverse Engineer, Summary — means re-entry is always one click from anywhere in the platform. The document canvas is the other half of that answer: documents open in an editable full-screen view with a rich text toolbar, so teams can annotate, refine, or update AI-generated content without switching tools.

Full-screen editable document viewer — Document 1 TOC
Full-screen document view: Design Document opens with a rich text editor toolbar — Bold, Italic, Highlight, Colour, Lists, Alignment, Link, History. The Table of Contents renders with all 12 sections navigable. Users can edit AI-generated content inline, compare multiple documents, or annotate before sharing. No download required.
Left nav with Reverse Engineer step active — session re-entry
Left nav with "Reverse Engineer" activity highlighted — showing how users navigate directly to any step from anywhere in the platform. The five-step activity structure (Inputs → Context → Select Agent Arc → Reverse Engineer → Summary) is always visible. A user returning mid-project knows exactly where they left off without hunting through a wizard.
Manage Deliverables — clean view without collapsed nav
The Manage Deliverables dependency graph in its default state — nav panel collapsed to maximise canvas space. The "Navigation & History" tab on the left rail expands on demand. Users working deep in the graph aren't distracted by sidebar context they don't need; it's there when they do.
Agent Assembly — Interaction Detail
Composing and configuring
the agent network

The Assembled Agents screen supported three interaction modes: viewing the hierarchy, adding agents from the right panel, and configuring individual agents inline. Each was designed to feel like editing a document — not operating a pipeline configuration tool.

Agent Assembly — drag DSA Knowledge Agent into graph
Adding the DSA Knowledge Agent: dragged from the right panel into the graph. The dashed drop zone on the canvas indicates where the agent will attach. The right panel highlights the agent being added with an orange accent — showing selection state while maintaining full graph visibility.
Agent Assembly — hover on Agent Network Manager
Hover state on Agent Network Manager reveals a settings icon — the entry point to per-agent configuration. The interaction is intentionally subtle: agents are nodes in a network, not form fields. Configuration is available without dominating the canvas view.
Agent Network Manager configuration panel
Agent Network Manager configuration panel — App / Wiki / Graph tabs let users configure which checkpoints the agent uses per output type. Checkpoint_vectordb_wiki toggled on; Explain_user and Checkpoint_graphdb_explain off. Finish confirms and closes. The tabbed structure groups related configuration without requiring a separate screen — complexity surfaced only when needed.
Design Principles
Using design principles to deliver
impactful solutions for GenWizard users

Each decision mapped to a named principle. Not decoration — these constraints actively shaped every tradeoff.

Miller's Law
Chunking complexity
Before
12-step wizard where each step added sequential cognitive load. Users had to hold all prior context in memory while answering new questions.
→
After
Document canvas chunks inputs into persistent artefact cards. Users only process what they're adding now — history is visible, not remembered.
Hick's Law
Reducing decision time
Before
Flat checklist of 7 deliverables with no ordering. Users had no basis for what to select first. Context Settings had a blank text box with no guidance.
→
After
Dependency graph removes invalid options before a user can pick them. Context Settings offers aim chips and NFR tags — structured choices instead of blank prompts.
Jakob's Law
Familiar patterns
Before
Floating AI icon with no contextual signal — an entirely novel interaction with no indication of when or why to use it. 3 of 5 users never found it.
→
After
Side panel mirrors chat patterns users already know. Proactive triggers surface it at exactly the right moment — no discovery required.
Results
Positive results
and much more
to do

Evaluated across 2 usability testing rounds (5 participants each), product analytics (~40 users, 6 weeks post-launch), and 4 structured observation sessions. These are directional indicators, not proven causal outcomes at production scale.

3.1×
Advisor interactions vs. old floating-button baseline
Pre/post with same users · 6 weeks
8/10
Tasks completed without assistance on redesigned nav
vs. 3/10 on legacy
Navigation actions to reach Context Settings
4→1
Literal click-count on both prototypes · same task
4.2/5
Post-task confidence: "system understood what I wanted"
vs. 2.1/5 on legacy · n=5
0
Full-run restarts due to single-step failure
Down from universal pattern in discovery
3/4
Teams used the dependency graph as a planning artefact at session start
One team called it "the brief." Not designed for — emerged from use.
Reflections
What I'd do differently —
and what I'm glad I proposed
🗣
I'd run the vocabulary study in week one
I didn't run it until week six. By then "archetype" and "deliverable" were already in wireframes stakeholders had reviewed. When those words meant different things to architects vs. business analysts, I had to relabel components across two sprints. Avoidable.
📊
I'd bring data to every proposal
Good data for the canvas and Advisor decisions. For smaller choices — the "Tag File to: Select" default state, button weighting — I went with instinct. Some came back as QA questions. Even a brief user quote in a design review shifts the conversation away from opinion.
⚠️
I should have fought harder for empty states
I designed the zero-data states for every activity card and the canvas. Engineering cut them in sprint planning. In post-launch observation, empty-state confusion was the first friction point I saw. I had evidence from round-one testing. I should have brought it to sprint planning, not accepted the cut quietly.
⏭
One thing that shipped but didn't work: "Skip Analysis"
Only 1 of ~40 users used it in the first 6 weeks. Users felt "they should run it even if they didn't need to." The affordance was right; the word "Skip" created anxiety. In v2 I'd rename it "I already know my codebase" — permission, not avoidance.
✅
The dependency graph: the right call, hard-won
Engineering flagged it as implementation-complex. I made the Figma prototype as high-fidelity as I could so the PM could see the value before deciding. The PM approved it. I didn't have authority to override engineering — but I could make the case compelling enough that the people with authority agreed. That's the job.