Principles

Roles & personas

Many different roles & personas have an interest in project style.

  • Curious person
    • Student

    • Academic researcher

    • Professional in industry

  • Researcher
    • Academic researcher

  • User
    • Student

    • Academic researcher

    • Professional in industry

  • Contributor
    • Student

    • Academic researcher

    • Professional in industry

  • Platform maintainer
    • Coq Platform maintainers

    • Nix package maintainers

    • Academic researcher

  • Upstream maintainer
    • Coq maintainers

    • Academic researcher

    • Professional in industry

Use cases

Project style impacts several frequent use cases.

  • Browsing the code (in a browser)
    • Curious person

    • Researcher

    • User

    • Contributor

    • Platform maintainer

    • Upstream maintainer

  • Browsing the code (in a proof assistant)
    • Curious person

    • Researcher

    • User

    • Contributor

    • Platform maintainer

    • Upstream maintainer

  • Isolating & resolving build issues
    • User

    • Contributor

    • Platform maintainer

    • Upstream maintainer

  • Exploring undocumented features
    • Researcher

    • User

    • Contributor

  • Understanding the architecture
    • Researcher

    • User

    • Contributor

  • Shipping new features
    • Contributor

  • Refactoring
    • Contributor

    • Platform maintainer

    • Upstream maintainer

Desired outcomes

This style guide seeks to drive the following outcomes:

Mitigate bike-shedding & reduce cognitive load

  • Browsing the code (in a browser)

  • Understanding the architecture

  • Shipping new features

  • Refactoring

Style is enforcable by a linter

  • Shipping new features

  • Refactoring

Find & replace work as expected

  • Browsing the code (in a browser)

  • Browsing the code (in a proof assistant)

  • Isolating & resolving build issues

  • Exploring undocumented features

  • Understanding the architecture

  • Shipping new features

  • Refactoring

Separate things are separate; dependencies are easy to trace

  • Browsing the code (in a browser)

  • Exploring undocumented features

  • Understanding the architecture

  • Refactoring

Project is robust against changes to the Coq engine

  • Isolating & resolving build issues

Project is minimally impacted by changes in upstream components

  • Isolating & resolving build issues

Upstream maintainers are not punished for offering to help

  • Isolating & resolving build issues

Project changes have minimal impact on downstream users

  • Isolating & resolving build issues