From Code to Connection: How to Deliver Technical Live Demos That Stick¶

Viviana Márquez, AI Developer Relations Engineer @ Prolific¶

January 22, 2026 | The Content Playbook: Smarter Data, AI, Global Docs

Agenda¶

  • Why live demos?
  • Tips for live coding well
  • Live demo
  • Live demo framework
  • Practical tool: RISE

Live demos aren't a replacement for documentation.¶

They're how you make the content stick.¶

You've written beautiful docs. Clear steps, good examples, nice screenshots. And then you watch someone ignore them entirely and ask you to just show them how it works.

Live demos aren't a replacement for documentation. They're a delivery mechanism for it. They're how you make the content stick and drive adoption.

Why live demos?¶

  • They build credibility (the code actually runs)
  • They're flexible to audience questions
  • They teach process, not just outcomes
  • They're memorable

Know when to use a GIF instead: If the setup is fragile, if the audience doesn't need to see execution, or if time is extremely constrained.

Tips for Live Coding Well¶

  • Prepare like it's improvised

Practice the exact sequence (even if you've done it before.) Have recovery points. Seed your randomness.

  • Narrate constantly

Silence while typing is death. Speak your thought process out loud.

  • Fail gracefully and usefully

If something breaks, treat it as a teaching moment. Walk through the error. This is actually where live demos shine over docs.

Live demo¶

“Create a slide explaining cats.”

Below, two AI-generated slides created in response to the prompt above:

No description has been provided for this image Option 1
No description has been provided for this image Option 2

Step 1: Authenticate via Prolific's API¶

In [3]:
# Fetch your Prolific researcher ID
researcher_id = get_researcher_id(headers)
print(f"Authenticated. Researcher ID: {researcher_id}")
Authenticated. Researcher ID: 6866dccc753654157fe0da40

Step 2: Publish task¶

In [5]:
# Prepare study configuration from config.yaml
study_config = {
    "name": config['study']['name'],
    "description": config['study']['description'],
    "privacy_notice": config['study']['privacy_notice'],
    "reward": config['participants']['reward'],
    "participants": config['participants']['total_participants'],
    "estimated_time": config['participants']['estimated_time'],
    "max_time": config['participants']['max_time'],
    "device_compatibility": config['device_compatibility']
}

print(study_config)
{'name': 'Quick & Easy: Choose Between Two Images', 'description': 'This is a very short task. You will see two AI-generated images and answer one multiple-choice question: simply choose the image you prefer. The task takes less than a minute and has no right or wrong answers.', 'privacy_notice': 'Your data will be used for research purposes only and will be kept confidential.', 'reward': 2, 'participants': 10, 'estimated_time': 2, 'max_time': 5, 'device_compatibility': ['desktop', 'tablet', 'mobile']}
In [6]:
# Create study using external study URL
study_id = create_external_study(
    headers=headers,
    external_study_url=external_study_url,
    study_config=study_config,
    project_id=prolific_project
)
print(f"Study created with ID: {study_id}")
Study created with ID: 69718f802306c7c242f82e9e
In [7]:
# Publish study using helper function
status_code = publish_study(headers, study_id)
print(f"Study published with status code: {status_code}")
Study published with status code: 200

Step 3: Get results¶

In [15]:
# Fetch and display study results using helper function and configured timezone
df = show_study_results(study_id, headers, config['timezone'])
✅ Study Name: Quick & Easy: Choose Between Two Images
📊 Status: ACTIVE
👥 Total Places: 10
📩 Total Submissions: 9
⏳ Created at: 21 Jan 2026, 06:46 PM PST
🕒 Last Response At: 21 Jan 2026, 06:53 PM PST
⏱️ Time Lapsed: 7 minutes
In [16]:
# Fetch Prolific data and create visualizations
merged_df, figures = fetch_and_visualize_survey_results(config, df)
================================================================================
All Comments (2 total):
================================================================================

Comment 1: Thank you so much! I love cats very much.

Comment 2: no

Live demo - Framework¶

  • What's the need?

Know your audience. What problem do they wake up thinking about? If you don't know this, your demo is a performance, not a solution.

  • What's the solution?

Show how your thing solves that specific problem. Not every feature. Just: here's your pain, here's relief.

  • What's the next step?

You don't need to show everything. Show the most impressive part, then give them a place to go: GitHub, docs, a follow-up meeting. The demo opens the door; it doesn't need to give the full tour.

Practical tool: RISE¶

  • It turns Jupyter notebooks into interactive slideshows where you can run code live
  • Documentation: https://rise.readthedocs.io/

How does RISE work?¶

Installation:

  • Current (using Jupyter Lab):

conda create -n rise_slides python=3.14 jupyterlab jupyterlab_rise -c conda-forge

  • Deprecated (using Jupyter Notebook):

conda create -n rise_slides python=3.10 notebook=6.5.4 "tinycss2<1.5" rise -c conda-forge

General tips when using RISE¶

  • Build incrementally. Use fragments strategically
  • Put setup code in skipped cells and run it beforehand
  • Use Markdown for cells for text

Let's connect¶

  • 📊 Slides: https://github.com/vivianamarquez/Technical-Live-Demos-That-Stick
  • 💼 LinkedIn: /in/vivianamarquez
  • 🐙 GitHub: @vivianamarquez

Viviana Márquez | AI Developer Relations Engineer @ Prolific