← Back to the problem

The builder's path

Five steps from a problem to its solution.

For: Screen-reader users in JupyterLab aren't told when things happen on screen, because the app has no shared way to announce them.

“The true creator is necessity, which is the mother of our invention.”
Plato · Republic II, 369c (tr. B. Jowett)

Routes to a solution

Six ways to take this forward

Each route is a different kind of journey, with real people and organisations to contact at each step, starting with those in every country.

  1. Step 1

    Build in the open

    Publish the code and invite contributors from the community.

  2. Step 2

    Fund the maintainers

    Sponsors, collectives and open source grants.

  3. Step 3

    Get it adopted

    Civic tech groups and public bodies take it up.

What this problem needs

Ideas, sources and tools for this problem, from first interviews to funding.

  • Accessibility
  • Web
  • Design

Ideas to explore

  • Idea 1Announcer serviceOne hidden live region managed by a plugin, with polite and assertive levels and a queue so messages aren't lost.
  • Idea 2First user: cell finishedAnnounce ‘cell finished’ or ‘cell failed’ when execution ends, as a test case for the API.

Specific to this problem

Talk to first

Starter prompt

Built from this problem's brief. Paste it into Claude or any AI assistant.

Help me design and build a first working prototype for this problem in Anywhere.

Problem: Screen-reader users in JupyterLab aren't told when things happen on screen, because the app has no shared way to announce them.
Who it hurts: Students, researchers and data scientists who use JupyterLab with a screen reader.
The moment it hurts: When a cell finishes running or a status changes and nothing is read out.
What people do today: Earlier pull requests, still open, each wrote directly to the page to trigger announcements.
Why it is still unsolved: Reviewers want one shared, configurable service rather than repeated one-off code.
What solved looks like: A JupyterLab plugin with a public announce() function and settings to turn announcements off and set a delay, old messages cleared automatically, and at least one real feature using it. Tested with NVDA and VoiceOver.
Where: Anywhere

First, list what you would need to learn from the people affected before building, as interview questions.
Then propose the simplest version that would help, the screens or messages it needs, and the data it would use.
Keep it cheap to run, accessible, and respectful of people's privacy. Flag anything you are unsure about instead of guessing.
  1. Understand it

    Talk to the people who live it before you build.

    “Arise, awake; seek out the wise and learn.”

    उत्तिष्ठत जाग्रत प्राप्य वरान्निबोधत

    uttiṣṭhata jāgrata prāpya varān nibodhata

    Kaṭha Upaniṣad · 1.3.14
  2. Prototype with AI

    Get a working version in front of people fast.

    Using AI is not cheating. Every tool carries the work of the people who made it, and using it well is how knowledge has always moved forward. The thinking, the care for the people who live the problem, and the judgement are still yours.

    “The Analytical Engine weaves algebraical patterns just as the Jacquard-loom weaves flowers and leaves.”
    Ada Lovelace · Notes on Menabrea's Sketch of the Analytical Engine, Note A (1843)
  3. Find the data

    Open data that fits this problem.

    “The first principle is that you must not fool yourself, and you are the easiest person to fool.”
    Richard Feynman · Cargo Cult Science, Caltech commencement address (1974)
  4. Build it

    Tools matched to what this problem needs.

    “That which is an obstacle on the road helps us on this road.”
    Marcus Aurelius · Meditations 5.20 (tr. G. Long)
  5. Launch and get support

    Ship it responsibly, and find help and funding.

    “While we teach, we learn.”

    Homines dum docent discunt.

    Seneca · Letters to Lucilius 7.8

Kit written for this problem from its brief; every link was checked. Links go to each provider's own site. Zetema is not paid for any listing.