03. Planning & Scoping

Choose the Platforms Your Open Source Project Will Support

A practical way to choose browsers, devices, operating systems, and offline limits before your Open Source project becomes too wide to build.
Table of Contents
In: 03. Planning & Scoping

Planning is not only about what your project does. It is also about where it works. An Open Source tool can have a clear purpose and still become impossible to finish if you try to support every browser, device, operating system, deployment model, and network condition from day one.

This matters even more for software with public benefit. If you are building for education, accessibility, security, or civic use, your users may be on older phones, shared laptops, locked-down school devices, public library computers, or slow connections. Good planning helps you serve real people without creating a project you cannot maintain.


Why This Stage Matters

Platform scope is a quiet source of project sprawl. You start with a small idea, then add support for Windows, macOS, Linux, iOS, Android, Chrome, Firefox, Safari, offline mode, self-hosting, hosted accounts, screen readers, and low-bandwidth use. Each choice may be reasonable on its own. Together, they can overwhelm a small Open Source project.

The goal is not to exclude people carelessly. The goal is to make honest choices. A focused first version that works well for a specific environment is more useful than a broad promise that works poorly everywhere.

Before you build, decide which platforms are part of the first scope, which are best-effort, and which are intentionally later.


Step 1: Name Where Your Primary Users Actually Are

Start with the people you most want to help, then describe their likely environment. Do not begin with your favorite stack or device. Begin with use.

Ask:

  • Are users on personal devices, shared devices, or organization-managed devices?
  • Are they likely to use phones, tablets, laptops, desktops, or assistive technology?
  • Do they have reliable internet, limited internet, or no internet during use?
  • Can they install software, or must the tool run in a browser?
  • Are they using modern hardware, older hardware, or a mix?

For example, imagine an Open Source reading practice app for adult learners. If many users access it through public library computers and low-cost Android phones, a web app that works in modern browsers may be more useful than a native desktop app. If learners may not have stable internet at home, basic offline behavior may matter more than advanced social features.


Step 2: Choose One Primary Supported Path

Your primary supported path is the environment you will design, build, and document for first. It should be specific enough to guide technical decisions.

Weak scope sounds like this:

  • Works on all devices.
  • Supports every modern browser.
  • Can be self-hosted or used in the cloud.

Stronger scope sounds like this:

  • First version supports web use on current Chrome, Firefox, and Edge desktop browsers.
  • Mobile layout will work on Android Chrome, but native mobile apps are out of scope.
  • The project can run locally with Docker for development, but production hosting guides will come later.

A primary path gives contributors and users a clear expectation. It also gives you a way to say no without being dismissive: not never, just not in the first supported scope.


Step 3: Define Best-Effort and Unsupported Paths

Not every environment needs the same promise. You can separate support into three practical levels:

  • Supported: You intentionally design for it, test against it, document it, and treat breakage as a priority.
  • Best-effort: You expect it may work, but you do not promise full support yet.
  • Unsupported for now: You are not building or accepting major scope changes for it in the first version.

This is especially helpful in Open Source because contributors may arrive with requests from many directions. A clear support level prevents every request from becoming an obligation.

For the reading practice app, the first support decision might look like this:

  • Supported: Current Chrome, Firefox, and Edge on desktop; Android Chrome on phones; keyboard navigation; readable layout at large text sizes.
  • Best-effort: Safari on macOS and iOS; tablets; older Android browsers.
  • Unsupported for now: Native iOS app, native Android app, desktop installers, real-time classroom dashboard.

This plan still cares about access. It simply turns access into a buildable sequence.


Step 4: Set Minimum Versions and Device Limits

Version support can become vague fast. If you do not define it, you may accidentally commit to years of compatibility work.

Decide what minimums matter for your project:

  • Browser versions
  • Operating system versions
  • Runtime versions, such as Node, Python, or Java
  • Database versions
  • Screen sizes
  • Memory or storage limits
  • Offline or low-bandwidth behavior

You do not need a perfect answer. You need a written starting point. For example: the first version supports Node LTS, PostgreSQL 16 or newer, and screens at least 360 pixels wide. It should load core lesson content on slow connections, but full offline sync is out of scope.

These details protect your time. They also help other developers reproduce your environment instead of guessing.


Step 5: Match Platform Scope to Your Capacity

Every supported platform adds work. It affects development, documentation, bug reports, accessibility checks, security updates, and release decisions. A solo maintainer should not accept the same platform scope as a staffed team.

Before you commit, ask:

  • Can I personally test this environment?
  • Do I have access to the device, browser, operating system, or assistive technology?
  • Will supporting this platform change the architecture?
  • Will it slow down the first useful release?
  • Is this platform essential for the people the project is meant to serve?

If an environment is important but you cannot support it yet, name that honestly. You can invite future contributors without making a promise you cannot keep.


Step 6: Write a Small Support Matrix

A support matrix does not need to be complicated. Add a short table-like section to your planning notes or early README using plain text bullets.

Use this structure:

  • Primary users: Who the first version is mainly for.
  • Supported platforms: The environments you will actively design and fix for.
  • Best-effort platforms: The environments that may work but are not guaranteed.
  • Unsupported for now: The environments you are intentionally not building for yet.
  • Minimum versions: Runtime, browser, database, or OS minimums.
  • Access assumptions: Keyboard use, screen size, connectivity, language, or assistive technology assumptions.

This small document can prevent weeks of confusion. It tells users what to expect and tells contributors where help is welcome.


A Simple Planning Checklist

  • Name the primary user group and their likely devices.
  • Choose one primary supported path for the first version.
  • Separate supported, best-effort, and unsupported environments.
  • Write minimum browser, runtime, database, or operating system versions.
  • Decide what offline or low-bandwidth behavior is in scope.
  • Check whether you can actually test what you promise to support.
  • Document the decision before building major features.

TL;DR

Platform scope is part of project scope. If you try to support every environment from the start, your Open Source project can become too large to finish. Choose a primary supported path, name best-effort and unsupported platforms, set minimum versions, and match those promises to your capacity. Clear platform planning helps you build sustainable software that can reach the people who need it without overpromising before the project is ready.

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.