FURPS: Learning a New Language for Software Requirements

Note that I understand this is only a persuasive argument and doesn’t give clarity on exactly how we within Insights are planning to do this work with projects (don’t worry, that’s coming), I wanted to start by explaining why we’ve chosen to go about doing FURPS. It’s clear projects and core contributors want clarity, so we’re going to make a helluva effort to provide it. So here goes…

Imagine learning a new language. At first, you fumble with vocabulary, struggle with grammar, and constantly translate in your head. Every conversation is an exercise in concentration and patience. But gradually, something remarkable happens: the language becomes second nature. You find yourself thinking in the new language, expressing ideas naturally, and even dreaming in it. What once felt like a formal, structured process becomes an effortless flow of communication.

This same journey applies to adopting a universal language for software requirements. While the initial learning curve might seem daunting, the end goal is not to create a rigid, formal process, but rather to develop a natural, intuitive way for all stakeholders to understand each other.

The Current Tower of Babel

In the complex landscape of the IFT and its associated projects, we currently find ourselves in a Tower of Babel situation. Each team speaks its own dialect, formed through years of internal practices and traditions:

  • Project A discusses requirements in terms of user stories
  • Project B focuses on technical specifications
  • Project C emphasizes business outcomes
  • Project D prioritizes operational metrics

Like travelers in a foreign land trying to order dinner with phrase books and hand gestures, we manage to communicate, but not efficiently or effectively. The result? Misunderstandings, missed expectations, and missed opportunities.

FURPS: A Common Language, Not Just Another Process

The FURPS model isn’t merely a process to be followed—it’s a language to be learned and internalized. Like any language, it provides the building blocks for clear communication:

Functionality: The Verbs of Our Language

Just as verbs describe actions in natural language, functionality requirements describe what the system does. Initially, you might need to consciously think about categorizing features, but eventually, thinking in terms of system behaviors becomes natural.

Usability: The Adjectives of User Experience

These are the descriptive elements that qualify how users interact with the system. Like learning to express emotions in a new language, understanding usability requirements becomes an intuitive way to describe the user’s experience.

Reliability: The Promises We Make

Every language has ways to express commitments and guarantees. In FURPS, reliability requirements become our way of making and understanding promises about system behavior.

Performance: The Metrics of Success

Just as languages have ways to express quantities and qualities, performance requirements give us a vocabulary for describing system capabilities and limitations.

Supportability: The Lifecycle Vocabulary

Like discussing future plans in a new language, supportability requirements help us express how the system will grow and adapt over time.

The Language Learning Journey

Phase 1: The Beginner Stage

  • Initially, everyone will need to consciously think about FURPS categories
  • Teams might need “translation guides” and reference materials
  • Communication might feel slow and deliberate
  • Regular practice sessions and workshops help build familiarity

Phase 2: Building Fluency

  • Teams start thinking in FURPS naturally
  • References become less necessary
  • Conversations flow more smoothly
  • Requirements discussions become more nuanced

Phase 3: Natural Communication

  • FURPS categories become second nature
  • Teams naturally organize thoughts in this framework
  • Communication becomes effortless
  • The formal process fades into the background

Benefits of Language Fluency

When a team becomes fluent in FURPS:

  • Requirements discussions flow naturally
  • Misunderstandings decrease dramatically
  • Project scope becomes clearer
  • Resource allocation decisions become more intuitive
  • Cross-team collaboration improves

The End Goal: Natural Communication

The ultimate goal isn’t to create another formal process that teams must follow. Instead, we’re developing a shared way of thinking and communicating about requirements that becomes so natural, the formal structure fades into the background. Like a fluent speaker no longer thinks about grammar rules, teams will naturally express and understand requirements in a clear, consistent way.

2 Likes

Some questions I haven’t yet figured out:

Milestones

Milestones seems to be a snapshots of a given set of FURPS reaching a stage.

Due to the research nature of our projects, it is unrealistically to expect every FURPS to reach “production” within a 6 months timeframe.

How does one group FURPS? May make sense to have them per domain (reliability vs incentivization vs RLN for Waku) and then define milestones as

  • F1 reaches POC
  • F2 reaches Prod
  • etc

Steps (right to left)

Defining the right-to-left criteria seems difficult. For Waku, it could be purely from a Status integration basis (from PoC outside status codebase to being shipped by default in status app). But this may not be always applicable.

WDYT?

Another note. In terms of Ps (and possibly Rs but still need to wrap my head around it).

We are proposing to use this as a driver for Waku to Vac requirements.

For any given P/R item, we would express whether a Tasks is expected from:

  • Waku Research Test (within Waku team): a small scale simulation has run to test the likelihood of P/R to be fulfilled. Might not fully allow to assert completion.
  • Vac/QA: by having a test under unstable network condition that affirms Fs and Rs are as expected
  • Vac/DST: a simulation that assert whether the P is fullfilled.

Given the we have a high level roadmap, its possible to carve out scope and as those chunks of scope S1 (or value), the scope could be delivered we group those ‘F-U-R-P-S’ against a tag or milestone(M1); as we progress its possible the next Scope (S2) then we could create ‘additional FURPS’ linked to the M2 milestone. Its important not to lose the ‘high level roadmap’ but would like to see how tags and issue types could help in this.

One more comment, in terms of Supportability I am not clear how we track.

For Waku, it could be:

  • mobile/desktop (ie, Status app)
  • Web apps/Browser

For a given set of F/Us. Then having

  • S1: Status app
  • S2: Browser

Would lead to two clearly different streams of work.

If F1 and F2 are done for S1, but nothing is done for S2. Then how does it look like in the final diagram?

Or should all the “S” be set to be feasible together, meaning having a different diagram for status app and browser?

I think this goes in the right direction but would need to see an example to wrap my head around it.

Would you be able to produce some simple examples?

Im working on concrete examples to pull from.

Also I dont want to be too caught up on the eventual diagrams. The priority is clear definition of work planned. We can build from there.

Not too worry about the diagram per se, more about defining F-U-R-P-S and being clear on:

  • what “stage” we commit for each F-U-R-P(-S) within given date (left to right). By stage I mean PoC vs MVP vs private dogfooding etc (let me know if there’s a better word for it @hegaleon
  • How to handle “Supportability” as getting it down for status app vs browser.

in broader terms i could propose ‘private testnet’ (Private Dogfooding) and ‘public testnet’ (Public Dogfooding)

Where there are different targets with different code bases, then I would target those separately. This makes all things achievable albeit more granular. The most import outcome is the high level narrative is achieved. So applying a SMART Objective approach the target of a milestone “Waku protocol 2.3.1 will deliver optimised message processing to enable a more responsive experience in the 2.3.5 mobile app by Q1 2025”; whilst this is also targeting the Desktop the variable work could merit a different milestone.

1 Like

Thanks for that and will try to organize Waku FURPS this way.