Rollen voor meerdere marktpartijen

Op basis van de interviews, workshops en bedrijfszekerheidsdoelen, schetst dit document een visie voor de community, de repository-structuur en de relaties tussen marktpartijen.

Het doel is om voor te bereiden dat meerdere marktpartijen kunnen bijdragen, indien en wanneer dit gewenst of vereist is door de G4 en/of landelijke regie.

Daarbij is het belangrijk om op te merken dat OpenZaak niet op zichzelf staat, maar onderdeel is van het Common Ground landschap van componenten én partijen. De regiepartij heeft een belangrijke rol in het bewaken van de planning van en samenhang tussen deze componenten en het over en weer inzetten van partijen die aan meerdere componenten bijdragen.

graph LR
    %% Nodes
    Regie["Regiepartij stuurt ontwikkeling en release management in samenhang"]
    Impl["Implementatiepartij implementeert oplossing bij gemeente"]
    subgraph CommonGround["Common Ground"]
        %% Nodes
        Comp1["Component 1 codebase en ecosysteem"]
        Comp2["Component 2 codebase en ecosysteem"]
        Comp3["Component 3 codebase en ecosysteem"]
        More["..."]

        classDef ellipsis fill:#ffffff,stroke-dasharray: 5 5,color:#666;
        class More ellipsis
    end

    %% Connections
    Regie --> Comp1
    Regie --> Comp2
    Regie --> Comp3
    Regie --> More
    Comp1 --> Impl
    Comp2 --> Impl
    Comp3 --> Impl
    More --> Impl

Inhoudsopgave

Inleiding: huidige governance- en werkafspraken

De huidige OpenZaak community werkt goed voor snel en informeel werken.

Er is veel informele samenwerking binnen de community, inclusief documentatie met een informeel karakter. Rollen en verantwoordelijkheden zijn niet altijd duidelijk belegd en meerdere rollen worden door dezelfde partij vervuld, waardoor het niet altijd duidelijk is welke activiteiten en beslissingen onder welke rol vallen. De G4 vervult een aansturende rol. Er is veel goodwill en de meeste betrokken partijen zijn tevreden.

Naarmate OpenZaak groeit en breder wordt ingezet, kan de community veranderen.

Gezien de ambitie om van OpenZaak een kerncomponent te maken die op landelijk niveau onder centrale regie wordt geëxploiteerd, kunnen stappen worden gezet om de bedrijfszekerheid van de community te versterken.

Voorstel: rollen & verantwoordelijkheden

Uit de gesprekken komen een aantal rollen naar voren die we van elkaar kunnen scheiden, om deze in een later stadium aan verschillende marktpartijen te kunnen toewijzen, indien gewenst of vereist, te weten:

  • Regiepartij (voorheen Ecosysteem/codebase steward),
  • Ontwikkelpartij (voorheen Development),
  • Reviewpartij (voorheen Reviewen),
  • Uitgever,
  • Onderhoudspartij (voorheen Maintenance/onderhoud),
  • SaaS aanbieder (voorheen Leveren (SaaS)),
  • Implementatiepartij (voorheen Implementeren).
graph LR
    subgraph OpenZaak
    %% Nodes
        Dev["Ontwikkelpartij ontwikkelt feature in eigen repo"]
        Rev["Review partij reviewt feature branch in upstream repo"]
        Up["Uitgever beheert versie branches in upstream repo"]
        Maint["Onderhoudspartij onderhoudt stable release branches in upstream repo"]
        SaaS["SaaS aanbieder levert draaiende instantie (vanuit eigen repo)"]

        %% Connections
        Dev --"push naar feature branch"--> Rev
        Rev --> Up
        Maint --> Up
        Up --> SaaS
    end

    %% Nodes
    Regie["Regiepartij stuurt ontwikkeling en release management, faciliteert samenwerking tussen marktpartijen, en houdt toezicht op de kwaliteit van de codebase en het ecosysteem"]
    Impl["Implementatiepartij implementeert OpenZaak bij gemeente"]

    %% Connections
    Regie --> OpenZaak
    OpenZaak --> Impl

Hieronder lichten we per rol toe wat de rol inhoudt, welke taken daarbij horen, en waarom we deze rol gescheiden hebben van andere rollen.


Regiepartij

Nu: G4 overleg

Toekomst: Intern vanuit landelijke regie, of gedelegeerd

graph LR
    subgraph OpenZaak
    %% Nodes
        Dev["Ontwikkelpartij ontwikkelt feature in eigen repo"]
        Rev["Review partij reviewt feature branch in upstream repo"]
        Up["Uitgever beheert versie branches in upstream repo"]
        Maint["Onderhoudspartij onderhoudt stable release branches in upstream repo"]
        SaaS["SaaS aanbieder levert draaiende instantie (vanuit eigen repo)"]

        %% Connections
        Dev --"push naar feature branch"--> Rev
        Rev --> Up
        Maint --> Up
        Up --> SaaS
    end

    %% Nodes
    Regie["Regiepartij stuurt ontwikkeling en release management, faciliteert samenwerking tussen marktpartijen, en houdt toezicht op de kwaliteit van de codebase en het ecosysteem"]
    Impl["Implementatiepartij implementeert OpenZaak bij gemeente"]

    %% Connections
    Regie --> OpenZaak
    OpenZaak --> Impl

    %% Styling
    classDef grey fill:#eeeeee,stroke:#bbbbbb,color:#777777;
    class Dev,Rev,Up,Maint,SaaS,Impl,OpenZaak grey;

Rolbeschrijving

Het ophalen van problemen en wensen met betrekking tot de doorontwikkeling van de component en het coördineren van de doorontwikkeling op basis van de afgesproken governance, om de verschillende belangen in balans te houden: tussen aanbieders en afnemers, en tussen bijv. grote en kleine gemeenten, etc.

  • Collectief product ownerschap met duidelijke roadmap, doel & scope, architectuurprincipes, standaarden, lifecycle and compatibility etc.
  • Portfolio management over alle componenten heen, inclusief samenhang en configuratie tussen versies daarvan.
  • Regie over marktpartijen en samenwerking tussen marktpartijen.
  • Community management, inclusief open-source governance, bijdrageprocessen, besluitvorming, rolzuiverheid, kenniscontinuïteit en bedrijfszekerheid.
  • Ecosysteem management, inclusief afweging tussen stabiliteit, innovatie, onafhankelijkheid en beheerkosten.
  • Financiering en opdrachtgeverschap.

Overwegingen

  • Dit is een landschap met meerdere componenten, dus er moet vanuit landelijke regie toezicht zijn op de onderlinge afhankelijkheden tussen de verschillende componenten.

Uitgever

Nu: Maykin

Toekomst: Intern vanuit landelijke regie, of gedelegeerd

graph LR
    subgraph OpenZaak
    %% Nodes
        Dev["Ontwikkelpartij ontwikkelt feature in eigen repo"]
        Rev["Review partij reviewt feature branch in upstream repo"]
        Up["Uitgever beheert versie branches in upstream repo"]
        Maint["Onderhoudspartij onderhoudt stable release branches in upstream repo"]
        SaaS["SaaS aanbieder levert draaiende instantie (vanuit eigen repo)"]

        %% Connections
        Dev --"push naar feature branch"--> Rev
        Rev --> Up
        Maint --> Up
        Up --> SaaS
    end

    %% Nodes
    Regie["Regiepartij stuurt ontwikkeling en release management, faciliteert samenwerking tussen marktpartijen, en houdt toezicht op de kwaliteit van de codebase en het ecosysteem"]
    Impl["Implementatiepartij implementeert OpenZaak bij gemeente"]

    %% Connections
    Regie --> OpenZaak
    OpenZaak --> Impl

    %% Styling
    classDef grey fill:#eeeeee,stroke:#bbbbbb,color:#777777;
    class Dev,Regie,Rev,Maint,SaaS,Impl,OpenZaak grey;

Rolbeschrijving

Langetermijn beschikbaar stellen van component(versies). Op orde en compliant houden van de opensourcecode van de component(versies).

  • Upstream repository met publicatie en archief van alle (stable) releases van code
  • Central issue en bug tracker, acceptatie van feature pull request
  • Product release management met documentatie
    • communicatie van release dates, breaking changes, critical issues
    • change log, dependency graph
    • installatie-, beheers, en gebruiks-handleiding

Overwegingen

  • Een centrale repository, in eigendom en beheer van de landelijke regie, met alle (stabiele) versies van alle componenten, maakt beter toezicht en betere regie mogelijk.
  • Dit vereist dat de landelijke regie hiervoor verantwoordelijkheid neemt en over de relevante expertise beschikt of deze inhuurt.

Ontwikkelpartij

Nu: Maykin

Toekomst: Mogelijk tweede marktpartij met een feature development contract, indien nodig/gewenst

graph LR
    subgraph OpenZaak
    %% Nodes
        Dev["Ontwikkelpartij ontwikkelt feature in eigen repo"]
        Rev["Review partij reviewt feature branch in upstream repo"]
        Up["Uitgever beheert versie branches in upstream repo"]
        Maint["Onderhoudspartij onderhoudt stable release branches in upstream repo"]
        SaaS["SaaS aanbieder levert draaiende instantie (vanuit eigen repo)"]

        %% Connections
        Dev --"push naar feature branch"--> Rev
        Rev --> Up
        Maint --> Up
        Up --> SaaS
    end

    %% Nodes
    Regie["Regiepartij stuurt ontwikkeling en release management, faciliteert samenwerking tussen marktpartijen, en houdt toezicht op de kwaliteit van de codebase en het ecosysteem"]
    Impl["Implementatiepartij implementeert OpenZaak bij gemeente"]

    %% Connections
    Regie --> OpenZaak
    OpenZaak --> Impl

    %% Styling
    classDef grey fill:#eeeeee,stroke:#bbbbbb,color:#777777;
    class Regie,Rev,Up,Maint,SaaS,Impl,OpenZaak grey;

Rolbeschrijving

Projectmatig ontwikkelen van een component of een feature van een component.

  • Code contributies (new features of patches) met alle bijhorende documentatie en tests
  • Aanbieden aan beheerder als pull request
  • Werkt mogelijk samen met een review party

Overwegingen

  • Levering aan de centrale repository, onder toezicht van de steward, maakt een duidelijke definitie van “done” en het beheer van features/versies mogelijk.
  • Dit kan enige complexiteit in het ontwikkelproces introduceren, waardoor enkele iteraties in de workflow nodig zijn.

Reviewpartij

Nu: Maykin

Toekomst: Mogelijk tweede marktpartij met een review contract

graph LR
    subgraph OpenZaak
    %% Nodes
        Dev["Ontwikkelpartij ontwikkelt feature in eigen repo"]
        Rev["Review partij reviewt feature branch in upstream repo"]
        Up["Uitgever beheert versie branches in upstream repo"]
        Maint["Onderhoudspartij onderhoudt stable release branches in upstream repo"]
        SaaS["SaaS aanbieder levert draaiende instantie (vanuit eigen repo)"]

        %% Connections
        Dev --"push naar feature branch"--> Rev
        Rev --> Up
        Maint --> Up
        Up --> SaaS
    end

    %% Nodes
    Regie["Regiepartij stuurt ontwikkeling en release management, faciliteert samenwerking tussen marktpartijen, en houdt toezicht op de kwaliteit van de codebase en het ecosysteem"]
    Impl["Implementatiepartij implementeert OpenZaak bij gemeente"]

    %% Connections
    Regie --> OpenZaak
    OpenZaak --> Impl

    %% Styling
    classDef grey fill:#eeeeee,stroke:#bbbbbb,color:#777777;
    class Dev,Regie,Up,Maint,SaaS,Impl,OpenZaak grey;

Rolbeschrijving

Samenwerken met de development partij door contributies naar de publicatie repo te reviewen. Dit in het kader van vier ogen principe én warme kennis bij meer dan één partij.

  • Onafhankelijke review (code, security, documentatie, herbruikbaarheid, etc)

Overwegingen

  • De introductie van een tweede reviewpartij zorgt voor meer veerkracht in het ecosysteem, waarbij een tweede partij over warme kennis van de codebase beschikt.
  • Dit zal extra kosten en vertraging in de workflow introduceren, in verhouding tot de ambitie, diepgang en kwaliteit van de review. Dit moet een bewuste keuze zijn.

Onderhoudspartij

Nu: Maykin, als onderdeel van een featurecontract

Toekomst: Maykin met een specifiek onderhoudscontract, mogelijk tweede marktpartij met een specifiek onderhoudscontract

graph LR
    subgraph OpenZaak
    %% Nodes
        Dev["Ontwikkelpartij ontwikkelt feature in eigen repo"]
        Rev["Review partij reviewt feature branch in upstream repo"]
        Up["Uitgever beheert versie branches in upstream repo"]
        Maint["Onderhoudspartij onderhoudt stable release branches in upstream repo"]
        SaaS["SaaS aanbieder levert draaiende instantie (vanuit eigen repo)"]

        %% Connections
        Dev --"push naar feature branch"--> Rev
        Rev --> Up
        Maint --> Up
        Up --> SaaS
    end

    %% Nodes
    Regie["Regiepartij stuurt ontwikkeling en release management, faciliteert samenwerking tussen marktpartijen, en houdt toezicht op de kwaliteit van de codebase en het ecosysteem"]
    Impl["Implementatiepartij implementeert OpenZaak bij gemeente"]

    %% Connections
    Regie --> OpenZaak
    OpenZaak --> Impl

    %% Styling
    classDef grey fill:#eeeeee,stroke:#bbbbbb,color:#777777;
    class Dev,Regie,Rev,Up,SaaS,Impl,OpenZaak grey;

Rolbeschrijving

Onderhoud van een of meerdere stable release versies van de code, inclusief bug fixes, updates en security patches.

  • Monitoren van stable releases op bugs, security en performance issues.
  • Uitvoeren van bug fixes, updates en security patches.
  • Communiceren van onderhoudsactiviteiten naar relevante stakeholders.

Overwegingen

  • Indien gewenst, zou de tweede onderhoudspartij op termijn ook het beheer van de codebase kunnen doen (bijvoorbeeld bij elke andere stabiele release) om zo nog meer kennis van de codebase op te bouwen. Dit ambitieniveau is op dit moment nog niet aan de orde.

SaaS aanbieder

Nu: Verschillende SaaS aanbieders

Toekomst: centrale SaaS aanbieder onder landelijke regie

graph LR
    subgraph OpenZaak
    %% Nodes
        Dev["Ontwikkelpartij ontwikkelt feature in eigen repo"]
        Rev["Review partij reviewt feature branch in upstream repo"]
        Up["Uitgever beheert versie branches in upstream repo"]
        Maint["Onderhoudspartij onderhoudt stable release branches in upstream repo"]
        SaaS["SaaS aanbieder levert draaiende instantie (vanuit eigen repo)"]

        %% Connections
        Dev --"push naar feature branch"--> Rev
        Rev --> Up
        Maint --> Up
        Up --> SaaS
    end

    %% Nodes
    Regie["Regiepartij stuurt ontwikkeling en release management, faciliteert samenwerking tussen marktpartijen, en houdt toezicht op de kwaliteit van de codebase en het ecosysteem"]
    Impl["Implementatiepartij implementeert OpenZaak bij gemeente"]

    %% Connections
    Regie --> OpenZaak
    OpenZaak --> Impl

    %% Styling
    classDef grey fill:#eeeeee,stroke:#bbbbbb,color:#777777;
    class Dev,Regie,Rev,Up,Maint,Impl,OpenZaak grey;

Rolbeschrijving

Het leveren van stable versie(s) uit de publicatie repositorie als een draaiende instantie van de component.

  • Levert eindproducten als SaaS-dienst.
  • Verantwoordelijkheid voor performance, schaalbaarheid, capaciteit van de diensten.
  • Monitoring, incidentmanagement, back-ups, herstel en dagelijkse operationele beveiliging.
  • Inbrengen bugs, issues, requirements terug naar de centrale issue tracker.

Overwegingen

  • Een aparte SaaS-aanbieder om de kwaliteit van de codebase, de uitvoerbaarheid door andere partijen, en daarmee de veerkracht van het ecosysteem te waarborgen.

Implementatiepartij

graph LR
    subgraph OpenZaak
    %% Nodes
        Dev["Ontwikkelpartij ontwikkelt feature in eigen repo"]
        Rev["Review partij reviewt feature branch in upstream repo"]
        Up["Uitgever beheert versie branches in upstream repo"]
        Maint["Onderhoudspartij onderhoudt stable release branches in upstream repo"]
        SaaS["SaaS aanbieder levert draaiende instantie (vanuit eigen repo)"]

        %% Connections
        Dev --"push naar feature branch"--> Rev
        Rev --> Up
        Maint --> Up
        Up --> SaaS
    end

    %% Nodes
    Regie["Regiepartij stuurt ontwikkeling en release management, faciliteert samenwerking tussen marktpartijen, en houdt toezicht op de kwaliteit van de codebase en het ecosysteem"]
    Impl["Implementatiepartij implementeert OpenZaak bij gemeente"]

    %% Connections
    Regie --> OpenZaak
    OpenZaak --> Impl

    %% Styling
    classDef grey fill:#eeeeee,stroke:#bbbbbb,color:#777777;
    class Dev,Regie,Rev,Up,Maint,SaaS,OpenZaak grey;

Rolbeschrijving

Het inrichten van de instantie van de component voor specifiek gebruik bij een gemeente, het trainen van medewerkers en het beantwoorden van vragen.

  • Aanpassen van werkprocessen, configuraties en werkwijzen zodat de SaaS-diensten aansluiten op de dagelijkse praktijk.
  • Brengen ervaringen, knelpunten en behoeften van gebruikers terug naar het ecosysteem ter verbetering van productdefinitie, adoptie en dienstverlening.

Voorstelvisie ecosysteem van componenten

De wens is om een ecosysteem te hebben waarin componenten in samenhang worden gepland en ontwikkeld, en waarin een groep leveranciers in verschillende ecosystemen in verschillende rollen bijdragen, zodat ze een zekere mate van overlap hebben in kennis van en betrokkenheid bij de verschillende componenten; op die manier kunnen we de veerkracht van het ecosysteem vergroten, en kunnen we ook de regie over en samenhang van het ecosysteem versterken.

graph LR
    subgraph Component1
    %% Nodes
        Dev1["Ontwikkelpartij A ontwikkelt feature in eigen repo"]
        Rev1["Ontwikkelpartij B reviewt feature branch in upstream repo"]
        Maint1["Onderhoudspartij onderhoudt stable release branches in upstream repo"]

        %% Connections
        Dev1 --"push naar feature branch"--> Rev1
    end

    subgraph Component2
    %% Nodes
        Dev2["Ontwikkelpartij B ontwikkelt feature in eigen repo"]
        Rev2["Ontwikkelpartij C reviewt feature branch in upstream repo"]
        Maint2["Onderhoudspartij onderhoudt stable release branches in upstream repo"]

        %% Connections
        Dev2 --"push naar feature branch"--> Rev2
    end

    subgraph Component3
    %% Nodes
        Dev3["Ontwikkelpartij C ontwikkelt feature in eigen repo"]
        Rev3["Ontwikkelpartij A reviewt feature branch in upstream repo"]
        Maint3["Onderhoudspartij onderhoudt stable release branches in upstream repo"]

        %% Connections
        Dev3 --"push naar feature branch"--> Rev3
    end

    subgraph Landelijke-regie
    %% Nodes
    Up["Uitgever beheert versie branches in upstream repo"]

    end

    %% Nodes
    Regie["Regiepartij stuurt ontwikkeling en release management, faciliteert samenwerking tussen marktpartijen, en houdt toezicht op de kwaliteit van de codebase en het ecosysteem"]
    Impl["Implementatiepartij implementeert OpenZaak bij gemeente"]
    Up["Uitgever beheert versie en stable release branches in upstream repo"]
    SaaS["SaaS aanbieder levert draaiende instantie van stable release branches vanuit eigen repo"]

    %% Connections
    Regie --> Component1
    Regie --> Component2
    Regie --> Component3
    Rev1 --"merge into versie branch"--> Up
    Rev2 --"merge into versie branch"--> Up
    Rev3 --"merge into versie branch"--> Up
    Maint1 --> Up
    Maint2 --> Up
    Maint3 --> Up
    Up --> SaaS
    Up --> Impl

    %% Styling
    classDef softBlue fill:#e3f2fd,stroke:#90caf9,color:#0d47a1;
    class Dev1,Rev3 softBlue;

    classDef softGreen fill:#e8f5e9,stroke:#a5d6a7,color:#1b5e20;
    class Dev2,Rev1 softGreen;

    classDef softRed fill:#fdecea,stroke:#f5b7b1,color:#7f1d1d;
    class Dev3,Rev2 softRed;


OpenZaak Governance pilot. Distributed by an EUPL.

This site uses Just the Docs, a documentation theme for Jekyll.