FURPS+ Requirements with Executable Specifications

A comprehensive guide to specification-driven documentation for decentralized systems


Overview

This framework integrates two powerful approaches to technical specification:

  1. FURPS+ — A structured requirements classification ensuring comprehensive coverage
  2. Executable Specifications — Code-as-specification enabling precise behavior definition and automated test generation

Together, they create a documentation ecosystem where specifications are simultaneously complete (covering all requirement domains), precise (expressed as runnable code), testable (generating verification fixtures), and traceable (linking requirements through to compliance evidence).


Framework Structure

Requirements Layer (FURPS+)

These categories ensure no requirement domain is overlooked:

DocumentDescription
FunctionalityCore protocol operations, features, security mechanisms
UsabilityDeveloper experience, API ergonomics, error clarity
ReliabilityAvailability, recovery, safety guarantees, liveness
PerformanceThroughput, latency, gas costs, finality time
SupportabilityUpgradability, monitoring, fork management
Constraints (+)Consensus, decentralization, interface requirements

Canonical Specification Layer

The dual-specification model that enables both human understanding and machine precision:

DocumentDescription
Prose SpecificationHuman-readable requirements with rationale and FURPS+ structure
Executable SpecificationCode-as-spec defining exact behavior, generating tests

Generated Artifacts Layer

Artifacts produced directly from the executable specification:

DocumentDescription
Test FixturesJSON test vectors generated from executable spec
Reference ImplementationCanonical implementation derived from executable spec

Implementation Layer

Multiple independent implementations achieving consensus through shared specification:

DocumentDescription
Client ImplementationsIndependent clients deriving from executable spec

Integration Layer

Documents enabling system integration per specification:

DocumentDescription
API DocumentationProgrammatic interfaces from spec-defined contracts
Protocol DocumentationWire formats and communication contracts
Data SchemasFormal structure definitions (SSZ, RLP, etc.)

Consumer Layer

Documents helping developers build on the system:

DocumentDescription
SDK GuidesLanguage-specific bindings for spec-defined interfaces
Developer GuidesTask-oriented guidance for building applications
TutorialsHands-on learning experiences
Reference ManualsComprehensive lookup with spec traceability

Validation Layer

Documents verifying and evidencing specification compliance:

DocumentDescription
Conformance TestsExecutable verification against spec-generated fixtures
Compliance MatrixSystematic mapping of requirements to verification
Audit TrailsEvidence of compliance over time

Community Layer

Documents governing participation and evolution:

DocumentDescription
EIPs and RFCsProposals with executable spec implementations
Contribution GuidelinesHow to participate while maintaining compliance
ChangelogsFork history and specification evolution

The Dependency Flow

┌─────────────────────────────────────────────────────────────┐
│                    FURPS+ REQUIREMENTS                       │
│  Functionality │ Usability │ Reliability │ Performance │ +  │
└─────────────────────────────┬───────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│              CANONICAL SPECIFICATION LAYER                   │
│                                                              │
│   ┌─────────────────┐         ┌─────────────────┐           │
│   │  PROSE SPEC     │◄───────►│ EXECUTABLE SPEC │           │
│   │  Requirements   │         │  Python Code    │           │
│   │  Rationale      │         │  State Machines │           │
│   │  Constraints    │         │  Fork Snapshots │           │
│   └─────────────────┘         └────────┬────────┘           │
└────────────────────────────────────────┼────────────────────┘
                                         │
                    ┌────────────────────┼────────────────────┐
                    │                    │                    │
                    ▼                    ▼                    ▼
             ┌───────────┐        ┌───────────┐        ┌───────────┐
             │   Test    │        │ Reference │        │  Client   │
             │ Fixtures  │        │   Impl    │        │  Impls    │
             └─────┬─────┘        └───────────┘        └───────────┘
                   │                                         ▲
                   └──────────── validates ──────────────────┘

Key Principles

  1. Dual Specification: Prose for humans, executable for machines—kept in sync
  2. Generated Tests: Test fixtures flow from executable spec, not written manually
  3. Multi-Client Consensus: Multiple implementations validate against same fixtures
  4. FURPS+ Completeness: Structured categories prevent requirement blindspots
  5. Blockchain Augmentation: Safety, liveness, finality, consensus as first-class concerns
  6. Proposal = Implementation: EIPs/RFCs require executable spec code, not just prose

25 items under this folder.