Suunnittelijan ja kehittäjän välinen käsikirjoitus epäonnistuu saavutettavuudessa
tutkimus 50 Figma-tiedostosta
Pyysimme katseluoikeuden 50 tuotanto-Figma-tiedostoon 28 tuotantotiimiltä — luvalla ja täydellä anonymisoinnilla — ja kävimme jokaisen läpi yhdellä kysymyksellä: kun kehittäjä avaa tämän tiedoston ja aloittaa toteutuksen, mitä saavutettavuuspäätöksiä suunnittelija on jo tehnyt — ja mitkä jäävät kehittäjälle keksittäväksi perjantai-iltapäivänä kello 16? Vastaus tiedostosta toiseen on, että useimmat niistä keksitään edelleen kello 16.
1. Miten 50 tiedostoa auditoitiin
Otos koostuu 50 Figma-tiedostosta 28 tuotantotiimiltä SaaS-, vähittäiskauppa-, fintech-, julkishallinto- ja koulutustekniikka-aloilta. Neuvottelimme katseluoikeuden ei-nimeämisperiaatteella: mikään tässä artikkelissa ei tunnista brändiä, tiimiä tai suunnittelijaa. Tiedostot valittiin kuvaamaan sitä, mitä kehittäjä todellisuudessa vastaanottaisi käsikirjoituksessa — ei portfoliosivuston kiillotettua tapaustutkimusta — joten pyysimme kutakin tiimiä jakamaan tiedoston, josta viimeisin ominaisuus oli toimitettu, ei tiedoston, josta he olivat ylpeimpiä. Kaksitoista tiedostoista oli tiimeiltä, joilla on erillinen design-system-käytäntö; loput 38 olivat tuotetason tiedostoja, jotka toivat kirjastosta komponentteja tai rakensivat niitä suoraan tiedostoon.
Kävimme jokaisen tiedoston läpi etsimällä viittä saavutettavuusominaisuutta: kohdistustilan suunnittelu jokaisessa interaktiivisessa komponentissa, alt-tekstimerkinnät kaikissa kuvissa tai ei-koristeellisissa kuvakkeissa, lukemisjärjestyksen dokumentaatio layoutin yli, liikeasetusten käsittely animoiduille tai siirtyville elementeille, sekä tummaväriteeman kontrastispesifikaatio kaikille molempiin valoihin ja pimeisiin teemoihin toimitetuille komponenteille. Kullekin ominaisuudelle tiedosto sai pisteen “dokumentoitu” vain jos pätevä kehittäjä pystyisi toteuttamaan suunnitelman ilman vastauksen keksimistä itse. “Mainittu muistilapussa” ei kelvannut. “Heksadesimaaliksi määritelty yhdessä hover-tilassa” ei kelvannut. Vaatimus oli: onko päätös tiedostossa muodossa, jonka kehittäjä pystyy toteuttamaan kysymättä?
Päätutkimustulos on, että käsikirjoituksesta puuttuvat saavutettavuuspäätökset paljon useammin kuin ne sisältyvät siihen. Kohdistustilan suunnittelu esiintyi noin 40 %:ssa interaktiivisista komponenteista koko aineistossa. Alt-tekstimerkinnät esiintyivät noin 22 %:ssa kuvista, jotka niitä tarvitsivat. Lukemisjärjestys oli eksplisiittisesti dokumentoitu 16 %:ssa tiedostoista. Liikeasetusten käsittely mainittiin 10 %:ssa. Tummaväriteeman kontrasti — 31:lle tiedostolle, jotka toimittivat molemmat teemat — oli määritelty 30 %:ssa komponenteista. Aukko ei ole missään yksittäisessä ominaisuudessa. Se on kaikissa viidessä, ja kehittäjä jää sulkemaan sen yksi harkintapäätös kerrallaan.
Käytimme kehittäjä-lukee-ja-toteuttaa-vaatimusta. Kohdistustila lasketaan dokumentoiduksi, jos tiedosto näyttää visuaalisen spesifikaation — ääriviivan väri, leveys, siirtymä, kontrasti kohdistetun elementin taustaa vasten — muodossa, jonka kehittäjä voi kartoittaa CSS-tokeniksi. Lähellä oleva Slack-viesti, jossa lukee “käytä brändin sinistä”, ei kelpaa, koska Slack-viestit eivät selviä käsikirjoituksesta. Tiedoston on kannettava päätös yksinään.
”Käsikirjoitus ei epäonnistu siksi, etteivät suunnittelijat välitä saavutettavuudesta. Se epäonnistuu, koska tiedostoformaatti kohtelee saavutettavuutta kommenttimerkintänä, kun sen pitäisi olla jokaisen komponentin ensisijainen ominaisuus.”
2. Kohdistustilan suunnittelu: 60 %:n aukko
Aineiston noin 1 800 interaktiivisesta komponentista — painikkeista, linkeistä, syöttökentistä, valintaruuduista, kytkimistä, välilehdistä, yhdistelmälaatikoista, valikkokohdista, korttipohjaisista painikkeista, kaikesta, mitä näppäimistön käyttäjä voi saavuttaa — noin 40 % toimitti suunnitellun kohdistustilan. Loput 60 % toimittivat oletustilan, aktiivisen tilan ja hover-tilan, ja sitten pysähtyivät. Kehittäjä, joka rakentaa komponentin, valitsee kohdistuksen ääriviivan toteutushetkellä — yleensä kopioimalla selaimen oletuksen — yleensä tarkistamatta, onko oletuksella 3:1 kontrasti komponentin pintaa vasten sekä vaaleassa että tummassa teemassa, jotka tiedosto toimittaa.
Miltä “ei kohdistustilan suunnittelua” näyttää käytännössä? Se näyttää painike-komponentilta, jossa on kolme varianttia kankaalla — lepotila, hover, painettu — ilman neljättä varianttia. Se näyttää syöttökentältä, jossa on tyylitelty reunus eikä toista reunustyyliä kohdistettuun tilaan. Se näyttää valintaruutu-primitiiviltä, jossa on kohdistusrengas vain lepotilavariantissa, ja kehittäjälle jätetään arvattavaksi, pitäisikö sama rengas esiintyä valitussa tai epämääräisessä tilassa. Kuvio toistuu komponenteista toisiin, tiimistä tiimiin, sektorista sektoriin. Se on aineiston suurin saavutettavuusaukko ja helpoin suunnitella sisälle.
Tiimeillä, jotka suunnittelivat kohdistustilat hyvin, oli toinen kahdesta asiasta. Ensimmäinen oli eksplisiittinen design-system-sääntö: jokaisen interaktiivisen komponentin on toimitettava variantti, jonka nimi alkaa focus-:lla, eikä komponenttia julkaista kirjastoon ennen kuin variantti on olemassa. Toinen oli Figma-komponentin ominaisuus nimeltä state, jossa focus, focus-visible ja focus-within ovat lueteltuja arvoja, joten tiedoston komponenttiselain tuo puuttuvat variantit visuaalisesti esiin. Tiimeillä, joilla ei ollut kumpaakaan rakennetta, kohdistustila jäi kehittäjälle noin yhdeksän kertaa kymmenestä.
Painike-komponentti, neljä varianttia: state=default, state=hover, state=pressed, state=focus-visible. Focus-visible-variantti näyttää 2 px ääriviivan, 2 px siirtymän, väri-tokenin —focus-ring (joka itsessään on kartoitettu heksakoodiksi, joka läpäisee 3:1 painikkeen pintaa vasten molemmissa teemoissa). Kehittäjä lukee tarkastuspaneelin ja kopioi token-viittauksen; mitään ei tarvitse keksiä.
Sama painike-komponentti, kolme varianttia: default, hover, pressed. Ei focus-varianttia kankaalla. Suunnittelijan muistilappu sanoo “käytä järjestelmän kohdistusrengasta.” Kehittäjä etsii design-system-kirjastosta, löytää kaksi kohdistusrengas-ehdokasta (yksi painikkeista, yksi syöttökentistä, hieman eri leveyksiä), valitsee toisen, toimittaa sen, ja laadunvarmistusajo kolme viikkoa myöhemmin liputtaa sen, koska valittu rengas alittaa 3:1 poistetun mutta edelleen kohdistettavissa olevan toissijaisen painikkeen pinnalla.
Kun kohdistustila ei ole tiedostossa, kehittäjät toimittavat usein selaimen oletuksen — ja selaimen oletuksen ohittaa globaali *:focus { outline: none } useimmissa CSS-nollauksissa, jonka sama kehittäjä lisäsi kuusi kuukautta aiemmin eri tarkistuskommentin vuoksi. Tuloksena on komponentti, joka näyttää hyvältä Figma-esikatselmassa, näyttää hyvältä kehitysympäristössä nollaus poistettuna, ja toimitetaan ilman näkyvää kohdistusilmaisinta.
3. Alt-tekstimerkinnät: lähes tyhjiä
Aineiston tiedostoista, jotka sisälsivät sisältökuvia — tuotekuvia, hero-illustraatioita, kuvake-painikkeita, infograafikuvia — 78 %:lla ei ollut alt-tekstimerkintöjä kuvakerrostumilla. Kuva oli sijoitettu, mitoitettu ja tyylitelty; tekstivastine, jonka kehittäjän odotettiin asettavan renderöityyn <img>-elementtiin, ei ollut tiedostossa. Kahdeksalla 50:stä tiedostosta oli alt-teksti joissain kuvissa muttei kaikissa — yleensä hero-illustraatio oli merkitty ja sisältökuvat olivat tyhjiä. Kolmella tiedostolla oli alt-teksti kaikissa kuvissa. Kehittäjän odotettiin 47:ssä tiedostossa 50:stä keksivän alt-teksti itse — ja käytännössä se usein periytyi tiedostonimestä, kuvatekstistä tai merkkijonosta, joka sopi visuaaliseen rytmiin.
Aukko on rakenteellinen Figma:n kuvaprimiitiivissä. Kuvatäytöllä tai kuvakerrostumalla ei ole natiivista “alt”-ominaisuutta; alt-teksti täytyy kuljettaa kerrostuman nimenä, kommenttina, muistilapuna, erillisenä spesifikaatioasiakirjana tai liitännäisen lisäämänä kenttänä. Mikään näistä ei kulje tarkastuspaneelin kautta oletuksena, joten tiedoston tarkastusnäkymässä lukeva kehittäjä ei näe alt-tekstiä vaikka suunnittelija olisi kirjoittanut sen muualle. Tiimit, jotka sulkivat aukon johdonmukaisesti, käyttivät yhtä kolmesta kiertoratkaisusta: liitännäisenhallinnoidut alt-tekstikentät jokaisessa kuvavariantissa, dokumentoitu käytäntö, jonka mukaan kerrostuman nimi on alt-teksti, tai erillinen alt-tekstilaskentataulukko kuvanimiä avaimina käyttäen, joka toimitettiin tiedoston rinnalla.
Kuvake-painikkeet olivat alatason epäonnistuminen tässä vikakuviossa. 41:ssä 50:stä tiedostosta kuvake-painikkeilla — haku-suurennuslasilla, hampurilaisvalikolla, sulku-X:llä, jako-nuolella — ei ollut saavutettavaa nimeämismerkintää, jolloin kehittäjälle jäi kirjoittaa aria-label=“Haku” visuaalisesta kontekstista ilman vahvistusta, että “Haku” oli oikea sana brändin äänessä (oliko se “Etsi”? “Selaa”? ei mitään, koska painike avaa muualla nimetyn paneelin?). Kuvakkeiden nimeäminen on täsmälleen sellainen mikrotekstin päätös, josta hyötyisi suunnittelijan kynä, ja täsmälleen se, jonka käsikirjoitus menettää.
Jokainen kuva on joko koristeellinen (alt pitää olla tyhjä, ruudunlukuohjelma ohittaa sen) tai informatiivinen (alt kantaa visuaalin välittämän tiedon). Tämä valinta on sisältöpäätös, ja se kuuluu suunnittelijalle tai kirjoittajalle, ei kehittäjälle, joka arvailee puoliyössä. Tiedosto, joka ei sano mitään kuvien koristeellisuudesta, toimittaa joko liikaa alt-tekstiä (jokainen kuva kuvataan seikkaperäisesti, myös puhdas koriste) tai liian vähän (hero-illustraatio on kuvattu, jokaisessa sisältökuvassa on alt="", koska kehittäjä pelasi varman päälle).
4. Lukemisjärjestys, liike ja tummaväriteeman kontrasti
Kolmella muulla ominaisuudella oli erilaiset epäonnistumismuodot. Lukemisjärjestys — järjestys, jossa ruudunlukuohjelma kertoo sivun, joka modernien responsiivisten layouttien tapauksessa ei enää välttämättä vastaa visuaalista ylhäältä-alas-järjestystä — oli dokumentoitu 16 %:ssa tiedostoista. Dokumentaatio, jos sellainen oli, oli yleensä numeroitu peite kankaalla (1, 2, 3 …) lisättynä liitännäisellä. Muut 84 % jättivät kehittäjälle kartoittaa lukemisjärjestyksen sattumalta kirjoittamastaan DOM-järjestyksestä, joka CSS Grid -layoutissa eksplisiittisellä rivi-ja-sarake-sijoittelulla voi poiketa visuaalisesta layoutista kokonaisen sarakkeen verran.
Liikeasetusten käsittely pärjäsi heikoiten. Kymmenessä prosentissa tiedostoista mainittiin prefers-reduced-motion lainkaan. Loput 90 % määrittelivät animaatioita ja siirtymiä — modaalin sisääntuloja, akkordeonin laajennuksia, väliaikaisten ilmoitusten liukuksia, sivujen siirtymiä — ilman, että määrittelivät, mitä saman komponentin pitäisi tehdä, kun käyttäjä on ottanut käyttöön vähennetyn liikkeen. Kehittäjä joko rakensi vähennetyn liikkeen tapauksen toteutushetkellä (usein ilman visuaalista viitettä) tai toimitti saman animaation kaikille, mikä on oletusarvo ja joka rikkoo 2.3.3 (Animation from Interactions) käyttäjille, jotka asettivat kyseisen asetuksen.
Tummaväriteeman kontrasti oli määritelty 30 %:lle komponenteista tiedostoissa, jotka toimittivat molemmat teemat. Loput 70 % määrittelivät vaalean teeman kontrastin — yleensä Stark- tai kontrastin tarkistus -merkinnällä tiedostossa — ja julkaisivat sitten tumman teeman heksadesimaalien peilatulla paletilla, jolloin kehittäjälle jäi tarkistaa, läpäiseekö käännetty pari edelleen 4,5:1 leipätekstillä ja 3:1 käyttöliittymäkomponenteilla. Noin viidenneksessä 31:stä kaksiteemaisesta tiedostosta ainakin yksi komponentti alitti kontrastitason tummassa teemassa, koska tumma pinta ja tumma teksti oli viritety vaalean teeman kontrastimatemaatikkaan eikä tumman teeman.
Matriisi seuraa kunkin ominaisuuden “täydentymisastetta” koko aineistossa — osuutta tiedostoista, joissa ominaisuus oli dokumentoitu kehittäjä-lukee-ja-toteuttaa-vaatimukseen. Sarakkeet jakavat osuuden sen mukaan, oliko tiedosto tiimiltä, jolla on erillinen design-system-käytäntö, vai tuotetasolta komponentteja itse rakentavilta tiimeiltä; kahden sarakkeen ero on järjestelmä-vs-ei-järjestelmä -delta.
| Saavutettavuusominaisuus | Kaikki 50 tiedostoa | Design-system-tiimit (12) | Tuotantotiimit (38) | Järjestelmä-vs-tuotanto-delta |
|---|---|---|---|---|
| Kohdistustilan suunnittelu (interaktiiviset komponentit) | 40 % | 75 % | 29 % | +46 pp |
| Alt-tekstimerkinnät (sisältökuvat) | 22 % | 50 % | 13 % | +37 pp |
| Lukemisjärjestys (kankaan taso) | 16 % | 42 % | 8 % | +34 pp |
| Liikeasetukset (animoidut elementit) | 10 % | 33 % | 3 % | +30 pp |
| Tummaväriteeman kontrasti (vain kaksiteemaiset tiedostot, n=31) | 30 % | 55 % | 19 % | +36 pp |
”Design-system-tiimit dokumentoivat saavutettavuuspäätökset noin kaksinkertaisella tahdilla verrattuna tuotantotiimeihin — mutta järjestelmätiimitkään eivät läpäise vaatimuksia kuin yhdessä ominaisuudessa viidestä useimpina kertoina.”
5. Stark ja Able: epätasainen käyttöönotto
Kaksi liitännäistä, jotka esiintyvät aineistossa useimmin, ovat Stark ja Able. Molemmat ovat kypsymättömiä, molempia pidetään arvossa, ja molemmat toimittavat ominaisuuksia, jotka sulkevat useita edellä dokumentoituja aukkoja. Stark lisää kontrastin tarkistimen, kohdistusjärjestyksen peittokuvan, vähennetyn liikkeen esikatselun ja alt-tekstimerkintäkentän kuvakerrostumilla. Able lisää värikontrasti-inspektoijan, näkösimulaatioperittokuvan ja kosketusmaalin tarkistimen. Kumpi tahansa liitännäinen, johdonmukaisesti tiedostossa käytettynä, nostaisi sen tiedoston pois aineiston alimmasta neljänneksestä.
Johdonmukaisesti käytettynä on operatiivinen lause. 50:stä tiedostosta Stark oli asennettu ja näkyvästi käytetty 18:ssa ja Able 11:ssä. Tiedostoissa, joissa liitännäistä käytettiin, sitä käytettiin yleensä hero-komponentissa ja ensisijaisessa CTA:ssa — komponenteissa, jotka todennäköisimmin olivat kankaalla, kun suunnittelija avasi liitännäisen — ja muualla vain satunnaisesti. Kuusi tiedostoa käytti Starkia globaaliin läpikäyntiin; yksi käytti Ablea globaaliin läpikäyntiin. Kuvio on: liitännäiset ovat olemassa, suunnittelijat tietävät niistä, ne vedetään esiin pikatarkistuksia varten, ja sitten pikatarkistus pysähtyy komponentteihin, joita suunnittelija sattui katsomaan liitännäisen ollessa auki.
Kaksi tiimiä, jotka sulkivat auditoinnin liitännäisten käytön osalta, tekivät yhden asian toisin: he ajoi liitännäisen auditoiniominaisuuden jokaisella tiedoston sivulla julkaisuportin askeleena ennen kuin tiedosto jaettiin suunnittelutiimille. Auditointi ajettiin tiedostossa, tuotti raportin, ja raportin piti olla tyhjä (tai sen poikkeukset dokumentoitu) ennen kuin tiedosto siirtyi “suunnittelussa” -tilasta “valmis kehitykseen” -tilaan. Tämä on liitännäinen-työnkulkuna eikä liitännäinen-pikatarkistuksena, ja se on ero 80 %:n kattavuuden ja 20 %:n kattavuuden välillä meidän otoksessamme.
Liitännäinen nostaa lattian: kontrastin tarkistin tarttuu ilmeisiin 2,1:1-virheisiin, alt-tekstikenttä antaa suunnittelijalle paikan kirjoittaa. Mikään tästä ei auta, jos liitännäinen ajetaan kolmessa komponentissa eikä jäljellä olevassa 27:ssä. Korjaus on liitännäisen sijoittaminen työnkulkuun — julkaisuportin askel, ennakkokäsikirjoituksen tarkistuslista, Figma-haara, jota ei voi yhdistää ilman tyhjää liitännäisraporttia — eikä suunnittelijan harkintaan sillä hetkellä, kun hän muistaa liitännäisen olemassaolosta.
6. Käsikirjoituksen tarkistuslista ja token-sopimus
Auditointi tuottaa tarkistuslistan ja sopimuksen. Tarkistuslista on se, mitä suunnittelijan pitäisi pystyä rastittamaan ennen kuin tiedosto jaetaan kehitykselle. Sopimus on muoto, jossa design-tokeneja kuljetetaan tiedoston rinnalla, jotta kehittäjä kartoittaa Figma-muuttujat CSS-mukautettuihin ominaisuuksiin keksimättä välittäviä arvoja. Molemmat ovat tarkoituksella lyhyitä: jokainen tarkistuslistan kohta on ominaisuus, jota auditointi mittasi, ja jokainen sopimuksen token on arvo, joka sulki aukon aineistossa.
Jokainen interaktiivinen komponentti toimittaa state=focus-visible -variantin.
Ei “järjestelmässä on kohdistusrengas.” Variantti nimeltä focus-visible komponentissa itsessään, ääriviivan väri, leveys ja siirtymä sidottuna kohdistusrengas-tokeniin. Variantti on se, jonka kehittäjä kopioi toteutukseen; ilman sitä kehittäjä arvailee.
Jokaisessa sisältökuvassa on alt-teksti liitännäisenhallinnoidussa kentässä tai dokumentoidussa kerrostuman nimi -käytännössä.
Valitse yksi sijainti ja pakota se. Starkin alt-tekstikenttä, kerrostuman nimi alt-tekstinä tai sidecar-laskentataulukko — mikä tahansa kolmesta toimii, mutta vain jos jokainen kuva tiedostossa käyttää samaa. Kuvake-painikkeet saavat myös saavutettavan nimeämismerkinnän samassa sijainnissa, tarkalla merkkijonolla, jonka kehittäjä laittaa aria-label:iin.
Lukemisjärjestys on dokumentoitu kaikilla sivuilla, joilla DOM-järjestys poikkeaa visuaalisesta järjestyksestä.
Yksinkertaisin dokumentaatio on numeroitu peite lisättynä liitännäisellä (Starkissa on sellainen, useissa yhteisön liitännäisissä myös). Sivuilla, joiden järjestys on triviaalisesti ylhäältä-alas-vasemmalta-oikealle, peittokuvan voi jättää pois; missä tahansa CSS Grid -sijoittelua, nimettyjä alueita tai absoluuttista sijoittelua käyttävillä sivuilla peittokuva on pakollinen.
Jokaisella animoidulla tai siirtyvällä elementillä on vähennetyn liikkeen variantti kankaalla.
Toinen kehys, toinen variantti tai dokumentoitu “ei animaatiota” -versio. Kehittäjän ei pidä keksiä vähennetyn liikkeen tapausta — suunnittelijan pitää määritellä, hiipuuko modaali liukumisen sijaan, ilmestyykö väliaikainen ilmoitus välittömästi liukumisen sijaan, jätetäänkö sivun siirtymä kokonaan pois.
Kaksiteemaisissa tiedostoissa kontrasti tarkistetaan erikseen tummassa teemassa, ei johdettuna vaaleasta teemasta.
Tummaväriteeman kontrastimatemaatikka on oma ongelmansa; paletin kääntäminen ei riitä. Aja Stark tai Able jokaiselle komponentille tummassa tilassa, ei vain vaaleassa. Dokumentoi kontrastisuhde variantin muistiinpanoihin, jotta kehittäjä voi vahvistaa toteutuksen vastaavan sitä.
Tiedosto toimitetaan token-sopimuksen kanssa: tasainen lista kaikista Figma-muuttujista kartoitettuna CSS-mukautettuihin ominaisuuksiin.
Sopimus on silta tiedoston ja koodipohjauksen välillä. Tyypillinen sopimus näyttää alla olevan taulukon kaltaiselta: jokainen rivi nimeää Figma-muuttujan, CSS-mukautetun ominaisuuden, johon kehittäjän pitäisi sitoa se, arvon vaaleassa teemassa, arvon tummassa teemassa ja WCAG-kriteerin, johon token osallistuu.
| Figma-muuttuja | CSS-mukautettu ominaisuus | Vaalea arvo | Tumma arvo | WCAG-yhteydet |
|---|---|---|---|---|
| color/focus-ring | —focus-ring | #0B57D0 | #A8C7FA | 2.4.7, 1.4.11 |
| color/text/body | —text-body | #1F1F1F | #E3E3E3 | 1.4.3 (4,5:1 pinnalla) |
| color/surface/raised | —surface-raised | #FFFFFF | #1F1F1F | 1.4.11 (3:1 naapuria vasten) |
| size/touch-target/min | —touch-target-min | 44px | 44px | 2.5.5, 2.5.8 |
| motion/duration/standard | —motion-standard | 200ms | 200ms | 2.3.3 (ohita vähennetyn liikkeen tapauksessa) |
| motion/duration/reduced | —motion-reduced | 0ms | 0ms | 2.3.3 |
Kun sopimus on olemassa, kehittäjän työ on mekaanista: sido CSS-mukautettu ominaisuus Figma-muuttujaan, toimita toteutus, auditoi vertaamalla renderöityjä arvoja sopimukseen. Ilman sopimusta jokainen sidonta on harkintapäätös, ja harkintapäätökset kumuloituvat 60 %:n aukoksi. Sopimus on se yksittäinen artefakti, joka siirtää saavutettavuuden “kehittäjä on vastuussa käsikirjoitushetkellä” -tilasta “järjestelmä on vastuussa suunnitteluhetkellä” -tilaan.
Johtopäätös: tiedosto on sopimus
50 tiedoston auditointi päättyy yksinkertaiseen havaintoon. Käsikirjoitus epäonnistuu saavutettavuudessa ei siksi, että suunnittelijat eivät välitä, eikä siksi, että kehittäjät eivät välitä, vaan siksi, että tiedosto — Figma-tiedosto, se yksittäinen artefakti, jota kaikki osapuolet lukevat — ei kanna saavutettavuuspäätöksiä ensisijaisina ominaisuuksina. Kohdistustilat, alt-tekstit, lukemisjärjestys, liikeasetukset, tummaväriteeman kontrasti: jokainen on suunnittelupäätös, jokainen kuuluu tiedostoon, jokainen on tällä hetkellä muualla. Muistilapussa, Slack-viestissä, erillisessä laskentataulukossa, kehittäjän päässä perjantai-iltapäivänä kello 16.
Korjaus ei ole sankarillinen suunnittelija tai sankarillinen kehittäjä. Se on työnkulun muutos tiimitasolla: jokainen interaktiivinen komponentti toimittaa focus-variantin, jokaisessa kuvassa on alt-teksti yhdessä liitännäisenhallinnoidussa sijainnissa, lukemisjärjestys on peitetty ei-triviaalilla sivulla, animaatiot määrittelevät vähennetyn liikkeen vastineensa, tummaväriteeman kontrasti tarkistetaan erikseen vaaleasta, ja tiedosto toimitetaan token-sopimuksen kanssa, joka nimeää jokaisen muuttujan, johon toteutus sitoutuu. Mikään näistä vaiheista ei ole uusi, mikään ei vaadi työkalua, jota meillä ei jo ole, ja mikä tahansa tiimi, joka omaksuu ne julkaisuportin askeleina, sulkee suurimman osan mittaamistamme aukoista yhdessä julkaisukierroksessa.
Syvempi havainto on, että design-system-tiimit tekevät tämän jo noin kaksinkertaisella tahdilla verrattuna tuotantotiimeihin. Nosto, jonka design-system-tiimit tarjoavat, on täsmälleen se nosto, jonka järjestelmän rakentamisen kurinalaisuus pakottaa: komponentit nimetään, ominaisuudet luetellaan, variantit ovat näkyvissä, tokenit ovat eksplisiittisiä. Saman kurinalaisuuden tuominen tuotetason tiedostoihin — edes ilman täydellistä design-järjestelmää alla — sulkee suurimman osan käsikirjoitusaukosta. Se ei ole enää työkaluongelma. Se on työnkulun valinta.
”Tiedoston pitäisi saapua saavutettavuuspäätökset jo tehtyinä. Mikä tahansa muu jättää kehittäjälle niiden keksimisen pahimmalla mahdollisella hetkellä, vähimmällä mahdollisella kontekstilla, tiukimmalla mahdollisella aikataululla.”