05. Testing & Validation

Run Task-Based Usability Tests for Open Source Tools

Learn how to watch real users try real tasks so your Open Source project becomes easier, safer, and more useful beyond your own setup.
Table of Contents
In: 05. Testing & Validation

Passing tests tells you your code behaves as expected. Usability testing tells you whether people can actually use it. For Open Source projects built for education, accessibility, security, civic work, or other public benefit, that difference matters.

A task-based usability test is simple: ask someone to complete a realistic task while you watch where they get stuck. You are not testing the person. You are testing the path your project gives them.


Choose One User and One Real Task

Do not start with a broad question like, Is this easy to use? That is too vague to test. Pick one kind of user and one thing they need to finish.

Good task-based tests are specific:

  • Education tool: A teacher imports a class list and creates a short quiz.
  • Accessibility tool: A screen reader user changes the font size and exports a readable document.
  • Security tool: A small nonprofit admin scans a website and understands the highest priority warning.
  • Civic tool: A volunteer uploads meeting notes and tags them by public issue.

The task should match the promise your project makes. If your project says it helps people do something important, your test should watch someone try to do that thing.


Write a Small Test Script

You do not need a lab, special software, or a long research plan. You do need consistency. A short script helps you avoid leading the tester.

Use a structure like this:

  1. Thank the tester and explain that you are testing the software, not them.
  2. Ask for permission to take notes.
  3. Describe the task without explaining how to do it.
  4. Ask them to think out loud if they are comfortable.
  5. Watch quietly while they try.
  6. Ask a few follow-up questions after the task.

For example, instead of saying, Click the Import button on the left, say, You have a CSV file with your students. Please add those students to the tool and create a quiz for Friday.

Your goal is to learn what the interface, documentation, defaults, and error messages communicate without your help.


Watch for Friction, Not Just Failure

A task does not have to fail completely to reveal a problem. Many users finish tasks only after confusion, repeated guessing, or help from someone nearby. That friction matters, especially for people using your project under real-world constraints.

Take notes when you see:

  • The tester pauses for a long time.
  • They click the wrong place first.
  • They search the README for something that should be obvious in the app.
  • They misunderstand a label, warning, or success message.
  • They recover only because they already know developer tools.
  • They say, I think this worked, but are not sure.

Do not defend the design during the session. If you explain the intended path, you lose the chance to see what happens without you. Most users of an Open Source project will not have the maintainer sitting next to them.


Use a Simple Note Format

Usability notes can get messy fast. Keep them structured so you can turn observations into issues later.

For each problem, write:

  • Task: What the user was trying to do.
  • Observation: What you saw or heard.
  • Impact: What risk or delay it caused.
  • Possible fix: One idea, if you have one.
  • Confidence: Whether you saw it once or repeatedly.

Example:

  • Task: Teacher imports a class list.
  • Observation: The tester did not know the CSV needed a column named email_address.
  • Impact: Import failed three times with a generic error.
  • Possible fix: Add an example CSV download and show the missing column name in the error.
  • Confidence: Seen in two of three sessions.

This format keeps the conversation grounded. You are not arguing about taste. You are describing where the project blocked a real person from completing useful work.


Test With People Outside Your Own Habits

If every tester uses the same operating system, browser, language, screen size, technical background, and internet speed as you, your project may work well only for people like you.

You do not need a large group. Even three to five sessions can reveal patterns. Try to include at least one person who differs from you in an important way for the project:

  • A less technical user.
  • A user on a slower device.
  • A user relying on keyboard navigation or assistive technology.
  • A user working in a noisy, busy, or time-limited environment.
  • A user who understands the problem domain better than the code.

This is where testing connects directly to public benefit. Software that works only for maintainers and power users will not reach many of the people who need free and open tools most.


Turn Findings Into Fixable Issues

After the sessions, do not create one giant issue called Improve usability. Break findings into small, testable changes.

Good issues might be:

  • Add sample CSV file for class import.
  • Replace generic import failure with missing-column error.
  • Move export button into the completed report screen.
  • Add keyboard focus style to the main navigation.
  • Rename security score label to explain what the number means.

Each issue should include the task, the observed problem, and the expected improvement. If possible, add a lightweight validation step, such as A new tester can import the sample CSV without maintainer help.

This makes usability work sustainable. Contributors can pick up focused issues, and maintainers can verify whether the fix actually reduced the problem.


Repeat After Important Changes

Usability testing is not a one-time event. Run a small task-based test when you change a core workflow, add a major feature, rewrite setup instructions, or prepare a release that new users will try.

You can keep it lightweight:

  • One task.
  • Three testers.
  • Thirty minutes each.
  • One page of notes.
  • A short list of issues.

The point is not to slow development down. The point is to avoid building a project that is technically correct but hard to use, hard to trust, or hard to adopt.


TL;DR

Task-based usability testing helps you see whether real people can complete real work with your Open Source project. Pick one user, one important task, and watch without guiding them. Note confusion, delays, wrong turns, unclear errors, and uncertain success. Then turn those observations into small issues that contributors can fix.

Software for Progress Foundation supports Open Source developers working on tools that benefit all people. Usability testing is part of that mission because access is not only about price or license. A free tool still needs to be understandable, reliable, and usable by people beyond the maintainers who built it.

Written By
Cory Fail
Cory Fail leads the Software for Progress Foundation, helping developers build Open Source tools for education, accessibility, and social good through mentorship and community support.
Comments
More From Software for Progress Foundation
Great! You’ve successfully signed up.
Welcome back! You've successfully signed in.
You've successfully subscribed to Software for Progress Foundation.
Your link has expired.
Success! Check your email for magic link to sign-in.
Success! Your billing info has been updated.
Your billing was not updated.