Kokemus projektista, jossa kilpailutettu toimittaja kehittää järjestelmää eräälle virastolle. Kyseessä järjestelmä, jossa virkailijat käsittelevät yhdenlaisia lupahakemuksia:
- Käsittelyn aikana virkailijoiden tulee syöttää aika paljonkin erilaista tietoa järjestelmään: tietoa hakijasta, luvan kohteista, jne.
- Sitten kun kaikki tiedot on syötetty, niin hakemus voidaan käsitellä; ja jos kaikki on ok, luvan tilaksi voidaan antaa myönnetty.
Hakemukseen liittyvä tietojen syöttö voi olla isokin urakka, eikä tapahdu välttämättä yhdellä virkailijan työrupeamalla (esimerkiksi kaikki tarvittava tieto ole heti saatavilla). Sen järjestelmästä tulisi näkyä se, että mitkä tiedot ovat valmiina ja miltä osin tietojen syöttö on kesken. Siis tilatiedot kuvaamaan tietojen syötön tilaa.
Ja nyt se varsinainen juttu: Järjestelmän toimittajalle oli liian iso juttu tehdä kohtuu hintaan/ ajassa sellaista toiminnallisuutta, jossa luvan hyväksyminen edellyttää, että tarvittavat tiedot on syötetty (tietojen syötön tilatiedot = valmis).
Lopputulos on sitten sellainen, että virkailija voi merkitä hyväksytyksi keskeneräiset hakemukset (hyväksymispainike on aktiivinen koko ajan). Ja voi sanoa, että lopputulos on käyttäjän kannata tosi hämäävä.
Ja se kysymys ohjelmistoasiantuntijoille: Miten kahden tilatiedon sitominen toisiinsa voi olla näin vaikeaa? Oman (tosin tosi vanhan) ohjelmointikokemuksen perustella olettaisin, että kyseessä olisi yksinkertainen perusjuttu.
Vaikka tämä onkin jo hieman vanha viesti, niin en malta olla kommentoimatta. Tuosta ongelmasta selvittäisiin yksinkertaisimmillaan ihan pelkällä yhden kokonaisluvun flagilla koodin tasolla, eli 0 = hakemus on uusi, 1 = hakemuksen tietojen täyttö on kesken, 2 = hakemus voidaan käsitellä. Jos tila olisi 2, niin hyväksymisnappi näytettäisiin aktiivisena.
VastaaPoistaPelkistetyssä tilanteessa mitään tämän kummepaa ei tarvittaisi, mutta tietysti erilaiset järjestelmät ja frameworkit voivat asettaa tilanteelle erilaisia esteitä. Tässä kuviossa pitää ottaa huomioon myös konkurrenssi ja siihen liittyvät ongelmat, eli mitä jos vaikka kahdella tai useammalla käyttäjällä on sama hakemus auki samanaikaisesti? Mitä jos käyttäjä A avaa hakemuksen, muokkaa sen tietoja ja tallentaa sen uudella tilalla, mutta juuri ennen tallennusta käyttäjä B avaa hakemuksen ja saa näkymäkseen käyttäjän A lähtötilanteen? Jos B tässä tilantessa tallentaa tiedot A:n jälkeen, niin A:n tallentamat tiedot tuhoutuvat. Tällaiset rajoitteet on aina suurissa järjestelmissä otettava jotenkin huomioon. Käyttöliittymän kannalta yksinkerkertaiset asiat voivat olla joskus todella hankalia koodin tasolla.