Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs: add designer handboek "breaking changes" #1151

Draft
wants to merge 2 commits into
base: main
Choose a base branch
from
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
143 changes: 143 additions & 0 deletions docs/handboek/designer/breaking-changes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
---
matijs marked this conversation as resolved.
Show resolved Hide resolved
title: Versiebeheer voor design tokens
---

## Inleiding

Design tokens komen uiteindelijk terecht in een package. Een package is een pakketje van code dat gebruikt kan worden door ontwikkelaars. Denk daarbij aan CSS variabelen.

Deze packages worden geüpload naar een package registry. Een package registry is een database van alle packages die ooit zijn geüpload.

Alle packages in een registry hebben een versienummer. Als er een nieuwe versie van een package wordt geüpload wordt het versienummer van het package opgehoogd.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ik zou een komma toevoegen na het woord 'wordt' in de 2e zin, dus:

Als er een nieuwe versie van een package wordt geüpload, wordt…


## Semantic versioning in een notendop

Bij NL Design System maken we voor het ophogen van versienummers gebruik van ‘semantic versioning’ ook wel bekend als semver. Binnen semver bestaat een versienummer uit drie delen: `major.minor.patch` (bijvoorbeeld `1.3.2`).

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ik zou de zin veranderen naar:

Bij NL Design System gebruiken we het voor ophogen van versienummers 'semantic versioning', ook wel bekend als semver.

Heb er ook een interpunctie aan toegevoegd.

### Major

Het ophogen van het major deel van het versienummer gebeurt als er veranderingen zijn doorgevoerd die _niet_ achterwaarts compatibel zijn. Deze veranderingen heten ook wel [breaking changes](#wat-zijn-breaking-changes). Bij het verhogen van het major deel van het versienummer springen het minor en patch deel beide terug naar 0.
matijs marked this conversation as resolved.
Show resolved Hide resolved
matijs marked this conversation as resolved.
Show resolved Hide resolved

### Minor

Het ophogen van het minor deel van het versienummer gebeurt als er veranderingen zijn doorgevoerd die _wel_ achterwaarts compatibel zijn. Denk daarbij aan nieuwe features, of nog specifieker nieuwe design tokens. Bij het verhogen van het minor deel van het versienummer blijft het major deel hetzelfde en springt alleen het patch deel terug naar 0.
matijs marked this conversation as resolved.
Show resolved Hide resolved
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Zou van de laatste zin maken:

Bij het ophogen van het minor deel van het versienummer blijft het major deel hetzelfde en wordt alleen het patch deel teruggezet naar 0.


### Patch

Het ophogen van het patch deel van het versienummer gebeurt in de regel als er bugs zijn opgelost. Deze veranderingen zijn altijd achterwaarts compatibel. Bij het verhogen van het patch deel van het versienummer blijven het major en minor deel hetzelfde.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bedoel je met 'in de regel' doorgaans? Of iets code specifieks?
In het geval van 'doorgaans' zou ik dit letterlijk zo noemen. Of misschien liever 'meestal' (dit is b1).
Ik ging er namelijk vanuit dat je het over een regeltje code had.


matijs marked this conversation as resolved.
Show resolved Hide resolved
### Waarom zijn versienummers belangrijk?

Een versienummer alleen zegt niet zo veel. Door de versienummers met elkaar te vergelijken kun je als afnemer van een package zien wat de impact is van de veranderingen op code die gebruik maakt van het package.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is het een idee om voorafgaand aan deze zin een kopje te plaatsen zodat deze zin 'los' komt te staan van de tekst over 'Patch'? Suggestie:

Wat kun je met een versienummer?
Een versienummer alleen zegt niet zo veel. Maar door versienummers met elkaar te vergelijken...

matijs marked this conversation as resolved.
Show resolved Hide resolved

## Hoe bepaal je het type van je verandering?

### Breaking changes

Breaking changes in design tokens zijn veranderingen die voor afnemers van je package negatieve gevolgen kunnen hebben. Het zijn veranderingen die niet achterwaarts compatibel zijn waardoor bestaande code niet meer werkt zoals voorheen.
matijs marked this conversation as resolved.
Show resolved Hide resolved

Er gaat op de een of andere manier iets kapot. Soms is dit heel duidelijk, bijvoorbeeld spacing die helemaal is verdwenen. Soms is het subtieler en misschien niet meteen zichtbaar.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

'Zoals' toegevoegd:

Soms is dit heel duidelijk, zoals bijvoorbeeld…


Breaking changes zijn zoals [hierboven uitgelegd](#major), veranderingen die ervoor zorgen dat het **major** deel van het versienummer opgehoogd moet worden.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Kunnen we de laatste alinea bovenaan zetten? Ik merk dat die herhaling aan het begin fijner is om de context eronder beter te snappen. Dus:

Breaking changes zijn zoals hierboven uitgelegd, veranderingen die ervoor zorgen dat het major deel van het versienummer moet worden opgehoogd.

Deze veranderingen kunnen negatieve gevolgen hebben voor afnemers van je package. Dit zijn veranderingen die niet achterwaarts compatibel zijn, waardoor bestaande code niet meer werkt zoals voorheen.

Als je deze structuur aanhoudt, kun je mijn comment hierboven over de 1e alinea negeren.


#### Voorbeelden van breaking changes in design tokens
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ik vraag mij nu ineens af: Is een aanpassing in de waarde van een token iets wat we hier ergens willen benoemen?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ja… zouden we voorbeelden van waarde veranderingen voor zowel major, minor, als patch versie bumps kunnen bedenken?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lijkt me heel goed om daar voorbeelden voor te bedenken.

Kunnen we later misschien een tabel of lijst of iets anders opstellen en deze categoriseren op basis van major, minor en patch changes?

Op die manier kunnen gebruikers snel zien welke impact verschillende updates kunnen hebben op hun code.


De eenvoudigste soort breaking change van een design token ontstaat als je een design token verwijdert. Afnemers die dit verwijderde design token in hun code gebruiken zien bij het gebruik van een nieuwe versie dat hun code niet meer werkt zoals voorheen.

**Voorbeeld 1**: Het verwijderen van de design token `example.button.icon.space` zou ervoor zorgen dat de ruimte tussen het icoon en de tekst van een button komt te vervallen. De button gaat door deze verandering kapot.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

'...de ruimte tussen het icoon en de tekst van een button'

Zouden we 'tekst' kunnen inwisselen voor 'label'? Dat is hoe de 'tekst' wordt genoemd in het button component.

Dat gezegd hebbende, we zijn bezig met het noteren van een 'Doel' per componenten. En daar hebben we het ook over 'Knop'. Dus misschien is 'de ruimte tussen het icoon en de tekst van een knop' toch wel weer beter?


Een ander soort breaking change die hier op lijkt is als je de naam van een design token verandert. Dit lijkt misschien een minder grote verandering dan het verwijderen van een design token maar in feite komt het neer op:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Zou een kopje 'Design token van naam veranderen' hier handig zijn?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Het zijn maar voorbeelden, ik denk dat kopjes een eindige lijst zou suggereren en dat is het niet per se.


1. Het verwijderen van een design token.
1. Het toevoegen van een nieuw design token.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nieuwe* design token.


**Voorbeeld 2**: Het hernoemen van de design token `example.button.icon.space` naar `example.button.column-gap` zorgt ervoor dat de design token `example.button.icon.space` niet meer bestaat. Net als in het vorige voorbeeld gaat de button door deze verandering kapot als een afnemer van het package gebruik maakt van de verwijderde design token.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Als we uitgaan van knop i.p.v. button, dan moeten we dat woord hier ook nog aanpassen.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Zou van de laatste zin maken:

Net als in het eerste voorbeeld kan dit ervoor zorgen dat de knop niet meer naar behoren functioneert voor afnemers die de verwijderde design token gebruiken.


**Voorbeeld 3**: Het aanpassen van zelfs maar 1 karakter in de naam van een design token, bijvoorbeeld het corrigeren van een typfout `colour` naar `color`, kan al een breaking change zijn.
matijs marked this conversation as resolved.
Show resolved Hide resolved

Breaking changes zijn, ondanks dat hun naam het doet vermoeden, niet per se erg. Het is alleen heel belangrijk om er duidelijk over te communiceren. Daarover later meer.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Zou hiervan maken:

Breaking changes zijn, ondanks hun naam, niet per se problematisch. Het is echter van groot belang om hier duidelijk over te communiceren. Daarover meer informatie later.


### Nieuwe features

Nieuwe features, bijvoorbeeld nieuwe design tokens of een nieuwe property ‘dismissable‘, zijn veranderingen die ervoor zorgen dat het **minor** deel van het versienummer opgehoogd moet worden.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Zou hiervan maken:

Nieuwe features, zoals nieuwe design tokens of een nieuwe eigenschap ‘dismissable’, zijn veranderingen die ervoor zorgen dat het minor deel van het versienummer moet worden opgehoogd.


**Voorbeeld**: Je maakt een nieuw design token `example.button.box-shadow` aan dat gebruikt kan worden een button een drop shadow te geven.

### Bug fixes

In Tokens Studio kun je aan design tokens beschrijvingen toevoegen. Als je in de beschrijving van een design token een spelfout corrigeert heeft dat geen gevolgen voor afnemers van de design token. Deze veranderingen lijken nog het meest op een bug fix maar zullen waarschijnlijk in de praktijk weinig voorkomen.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Token Studio komt hier een beetje uit de lucht vallen. Misschien kunnen we linken naar een andere pagina in het Handboek voor designers? Bijvoorbeeld hierheen? Mocht iemand dan nog niks van Token Studio weten zijn ze er weer bij.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ik ga vandaag met Robbert praten want blijkbaar is Tokens Studio niet de enige plek waar waarheden over design tokens leven dus ik denk dat er nog wat meer gesleuteld moet worden.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Zou hiervan maken:

In Tokens Studio kun je beschrijvingen aan design tokens toevoegen. Het corrigeren van een spelfout in de beschrijving van een design token heeft geen gevolgen voor de afnemers. Deze veranderingen lijken het meest op een bug fix, maar zullen in de praktijk waarschijnlijk weinig voorkomen.


## Breaking changes uitstellen

Om te voorkomen dat een wijziging meteen een breaking change is kun je ervoor kiezen om een nieuw design token naast een te verwijderen design te laten bestaan. Hierbij wordt het te verwijderen token eerst gemarkeerd als ‘deprecated’ (in het Nederlands ‘achterhaald’) en niet direct verwijderd.

**Voorbeeld**: De naam van de design token `example.button.icon.space` moet veranderen in `example.button.column-gap`.

1. Maak eerst de nieuwe design token `example.button.column-gap` aan.
1. Verander de waarde van de oude design token `example.button.icon.space` naar de naam van de nieuwe design token: `{example.button.column-gap}`.
1. Markeer de oude design token `example.button.icon.space` als ‘deprecated’ door `[deprecated]` aan de beschrijving van de token toe te voegen.

Doordat je de oude token niet verwijdert maar markeert als ‘deprecated’ informeer je afnemers dat ze voor nieuwe code de design token niet meer moeten gebruiken. Ze weten ook dat te op termijn bestaande code zullen moeten aanpassen. Hoe code moet worden aangepast geef je aan in een changelog. Meer daarover hieronder.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Zou hiervan maken:

Door de oude token niet te verwijderen maar te markeren als ‘deprecated’, informeer je afnemers dat ze deze design token niet meer moeten gebruiken. Ze weten ook dat ze op termijn bestaande code zullen moeten aanpassen. Hoe de code moet worden aangepast, geef je aan in een changelog. Meer daarover hieronder.


## Communiceer over je veranderingen
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hier kan misschien nog iets van een intro bij? Voorzet:

Jij weet wat je verandert hebt. De afnemer van de design tokens niet. Het is dus wel zo netjes om afnemers te informeren over veranderingen. We leggen je uit hoe je deze communicatie kan aanpakken.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Goed idee. Zou daarvan maken:

Jij weet wat je hebt veranderd, maar de afnemer van de design tokens niet. Het is dus wel zo netjes om afnemers te informeren over de veranderingen. We leggen je uit hoe je deze communicatie kunt aanpakken.


Je weet zelf het best wat je veranderd hebt. De afnemer van de design tokens weet dit niet. Het is daarom wel zo netjes om afnemers te informeren over de veranderingen. We leggen uit hoe je dat precies kunt doen.

Als je een [pull request hebt aangemaakt](/handboek/designer/stappenplan/#verstuur-aanpassingen-naar-github) geef je daar met een extra commit aan wat je precies veranderd hebt. De beschrijving die je hierbij opgeeft komt terecht in de changelog van het package.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Zou hiervan maken:

Wanneer je een pull request hebt aangemaakt, geef je met een extra commit aan wat je precies hebt veranderd. De beschrijving die je hierbij opgeeft, wordt opgenomen in de changelog van het package.


### Situatie A: in het NL Design System “themes” repository
matijs marked this conversation as resolved.
Show resolved Hide resolved
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Misschien de stappen even introduceren?

Situatie A: NL Design System “themes” repository
Werk je vanuit de NL Design System “themes” repository? Volg dan onderstaande stappen.


Werk je vanuit de NL Design System “themes” repository? Volg dan onderstaande stappen.

Ga naar de lijst met [pull requests](https://github.com/nl-design-system/themes/pulls) en zoek je eigen pull request op.

<!-- screenshot pull requests -->

1. Klik boven in de pagina op de lichtblauwe naam van de branch die je hebt opgegeven.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

bovenaan* de pagina

1. Op de volgende pagina navigeer je naar de folder `.changesets`.
matijs marked this conversation as resolved.
Show resolved Hide resolved
1. Kopieer het sjabloon uit het `README.md` bestand op deze pagina naar je klembord.
1. Klik rechtsboven op ‘Add a file’ en kies voor ‘Create new file’.
1. Geef je bestand een willekeurige naam en de extensie `.md`, bijvoorbeeld `aap-noot-mies.md`.
1. Plak het gekopieerde sjabloon in het veld met ‘Enter file contents here’ en pas de inhoud aan.
1. Gebruik de juiste naam voor het package, namelijk `"@nl-design-system-unstable/{organisatie}-design-tokens"`.
1. Geef het type van je verandering(en) aan `major`, `minor`, of `patch`.
matijs marked this conversation as resolved.
Show resolved Hide resolved
1. Geef een duidelijke beschrijving van je veranderingen.
1. Klik rechtsboven op ‘Commit changes…’.
1. Geef een commit message op, bijvoorbeeld ‘Changeset toegevoegd’.
1. Kies onderaan voor ‘Commit directly to the `{naam-van-je-branch}`’ branch.
1. Klik op ‘Commit changes’. Als je hier een foutmelding krijgt dat het bestand al bestaat kies je een andere willekeurige naam.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Klik op ‘Commit changes’. Als je een foutmelding krijgt dat het bestand al bestaat, kies dan een andere willekeurige naam.


Hieronder een voorbeeld van de inhoud van het bestand met de beschrijving van een verandering met breaking changes voor de ‘voorbeeld’ organisatie.

```markdown
---
"@nl-design-system-unstable/voorbeeld-design-tokens": major
---

Deprecated design token example.button.icon.spacing verwijderd
```

### Situatie B: in je eigen repository
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

En dan hier ook?

Situatie B: Eigen repository
Werk je vanuit een eigen repository? Volg dan onderstaande stappen.


Werk je vanuit een eigen repository? Volg dan onderstaande stappen.

Ga naar de lijst met pull requests en zoek je eigen pull request op.

<!-- screenshot pull requests -->

1. Klik boven in de pagina op de lichtblauwe naam van de branch die je in hebt opgegeven.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dezelfde tekstuele wijzigingen als hierboven :)

1. Op de volgende pagina navigeer je naar de folder `.changesets`.
1. Kopieer het sjabloon uit het `README.md` bestand op deze pagina naar je klembord.
1. Klik rechtsboven op ‘Add a file’ en kies voor ‘Create new file’.
1. Geef je bestand een willekeurige naam en de extensie `.md`, bijvoorbeeld `aap-noot-mies.md`.
1. Plak het gekopieerde sjabloon in het veld met ‘Enter file contents here’ en pas de inhoud aan.
1. Geef het type van je verandering(en) aan `major`, `minor`, of `patch`.
1. Geef een duidelijke beschrijving van je veranderingen.
1. Klik rechtsboven op ‘Commit changes…’.
1. Geef een commit message op, bijvoorbeeld ‘Changeset toegevoegd’.
1. Kies onderaan voor ‘Commit directly to the `{naam-van-je-branch}`’ branch.
1. Klik op ‘Commit changes’. Als je hier een foutmelding krijgt dat het bestand al bestaat kies je een andere willekeurige naam.

## Hoe verder?

Nadat je pull request met veranderingen is goedgekeurd zal er op GitHub een nieuwe pull request worden aangemaakt die ervoor zorgt dat je veranderingen gepublicieerd worden naar het registry.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Zou hiervan maken:

Nadat je pull request met veranderingen is goedgekeurd, wordt er op GitHub een nieuwe pull request aangemaakt die ervoor zorgt dat je veranderingen worden gepubliceerd naar het registry.

Loading