PraceNr 04
Zachować plan podróży, gdy nie udaje się sprawdzić ceny
Wybrany pociąg zgłosił brak miejsc na rower oraz brak dostępnych taryf. Mój projekt pokazuje, jak naprawić ten ślepy zaułek: wyjaśnia użytkownikowi przyczynę błędu, zachowuje wpisane dane podróży i pozwala łatwo porównać inne godziny odjazdów. Prototyp opiera się na fikcyjnych cenach i nie obsługuje prawdziwych rezerwacji ani płatności.
Odjazd o 03:10
Podczas przeglądu mobilnej wersji serwisu wybór pociągu IC 431 z Wrocławia do Krakowa (odjazd 17 października o 03:10) wywołał komunikat zaczynający się od słów „Nieznany kod: 109”. W dalszej części napisano, że dostępne są wyłącznie miejsca dla osób podróżujących z rowerem. System nie był w stanie wyliczyć ceny biletu, a przejście do kolejnego kroku zostało zablokowane.
Pociąg widniał w rozkładzie jazdy, ale pasażer, który go wybrał, nie mógł poznać jego ceny.
Komunikat co prawda cokolwiek wyjaśniał, ale pozostawiał decyzję o dalszym kroku wyłącznie pasażerowi. Osoba podróżująca bez roweru musiała sama szukać alternatywy. Lepsze sformułowanie błędu mogłoby czytelniej wyjaśnić to ograniczenie, ale sam tekst nie zaproponowałby innego odjazdu ani nie zdecydowałby, które wpisane dane powinny zostać zachowane, gdy pasażer zmienia plany.
I właśnie ten moment zmiany planów był przedmiotem mojego projektu. Badanie miało charakter anonimowy i zakończyło się przed etapem rezerwacji. Obejmowało widok mobilny o rozdzielczości 390 × 844, mieszane wyniki wyszukiwania (pociągi i autokary) oraz wybór biletu dla jednego pociągu i jednego autokaru. Na podstawie tej obserwacji nie da się określić, jak często występuje ten błąd ani jak zazwyczaj reagują na niego podróżni. Dlatego punktem wyjścia był jeden konkretny stan interfejsu, wokół którego zaprojektowałam i przygotowałam do testów ścieżkę wyjścia z sytuacji błędu.
Ryc. 1 Eksponat interaktywny
Co wynika z obserwacji
Otwórz wpis, aby zobaczyć, co pokazał przegląd i czego nie da się na jego podstawie stwierdzić.
Ograniczenie na etapie wyboru biletu
Wybór pociągu IC 431 o godzinie 03:10 wywołał błąd o kodzie 109 oraz komunikat o ograniczeniu dotyczącym przewozu rowerów.
- Podstawa
Zrzut ekranu z mobilnej wersji serwisu.
- Decyzja
Wyjaśnić przyczynę ograniczenia, zanim użytkownik otrzyma propozycję innego odjazdu.
Cena pojawiała się na różnych etapach
Wyniki dla autokarów pokazywały ceny dla dorosłych. Z wyniku dla pociągu można było przejść do wyboru biletu bez wyświetlonej ceny.
- Podstawa
Wyniki dla różnych środków transportu na trasie Wrocław–Kraków.
- Decyzja
Wyraźnie oznaczyć tekstem cenę, która nie została potwierdzona.
Dla autokaru można było przejść dalej
Wybrane połączenie FlixBus pokazywało cenę i opłaty, a przycisk kolejnego kroku był aktywny.
- Podstawa
Wybór biletu bez logowania; bez dokonania rezerwacji.
- Decyzja
Uwzględnić korzystanie bez konta. Nie opisywać widocznych opłat jako ukrytych.
Zasady przewoźnika i reakcja pasażerów
Nie było dostępu do API przewoźnika, historii rezerwacji ani sesji z uczestnikami.
- Decyzja
Traktować znaczenie odpowiedzi jako propozycję roboczą; w przyszłym badaniu sprawdzić jej zrozumienie.
Jedno wyświetlone ograniczenie uzasadnia hipotezę dotyczącą dalszego wyboru podróży. Nie pozwala ustalić skali rezygnacji ani ocenić dostępności całej platformy.
Oddzielam wyszukiwanie od odpowiedzi
Podzieliłam podróż na części, których interfejs nie może ze sobą mieszać:
- Wyszukiwanie obejmuje Wrocław, Kraków, datę wyjazdu i liczbę dorosłych.
- Wybrane połączenie to godzina odjazdu, stacje i przewoźnik.
- Cena dotyczy tego konkretnego połączenia i aktualnej konfiguracji pasażerów.
Zmiana jednej z tych części nie może po cichu sprawiać wrażenia, że pozostałe zostały już potwierdzone.
Od tego podziału zależy też język komunikatów, bo każda odpowiedź systemu oznacza coś innego:
- Ograniczenie dotyczące przewozu rowerów to konkretny warunek zwrócony przez system.
- Nieznana dostępność oznacza brak użytecznej odpowiedzi z systemu.
- Błąd pobierania ceny oznacza, że sama operacja zapytania zakończyła się niepowodzeniem.
W dwóch ostatnich przypadkach kwestia dostępności pozostaje nierozstrzygnięta – żaden z nich nie daje podstaw do wyświetlenia etykiety „wyprzedane”. W działającym prototypie można przełączać się między tymi stanami bez konieczności zgadywania ich znaczenia tylko na podstawie koloru czy nieaktywnego przycisku.
Samo uzyskane potwierdzenie ceny nadal nie oznacza rezerwacji miejsca. Scenariusz z dostępną ceną przechodzi do podsumowania, ale nigdzie nie twierdzi, że miejsce zostało zablokowane. Brak tu też licznika czasu, ponieważ na potrzeby tego projektu nie dysponuję wiążącymi danymi o czasie trwania takiej blokady. Rzeczywista integracja z systemem przewoźnika musiałaby precyzyjnie określać, kiedy wycena traci ważność i co się dzieje, jeśli kwota ulegnie zmianie w trakcie przeglądania podsumowania.
Od ograniczenia do innego odjazdu
Oryginalny ekran pokazuje zdarzenie wyzwalające problem. W mojej propozycji wyjaśnienie znajduje się tuż obok wybranej podróży, zapewniając jednocześnie przejście do alternatywnych opcji.
Oryginalny serwis: e-podróżnik. Propozycja: niezależny prototyp w kodzie. Nie zmierzono poprawy użyteczności.
Wyjaśnienie bezpośrednio przy wybranej podróży
Wybrany odjazd pozostaje widoczny nad elementami sterującymi, dzięki czemu podróżny może ponownie sprawdzić godziny i stacje, decydując o kolejnym kroku. Lista alternatywnych połączeń otwiera się w obrębie tego samego widoku, zachowując wcześniej wybraną datę oraz liczbę pasażerów.
Taki układ zajmuje więcej miejsca w pionie (szczególnie na ekranie telefonu), a na dłuższych trasach z dużą liczbą opcji czytelniejszy przegląd mógłby zapewnić powrót do zapisanych wcześniej wyników wyszukiwania. Pozostawiłam tę alternatywę do dalszej ewaluacji – fakt, że jeden z układów zaprojektowałam w pierwszej kolejności, nie przesądza o tym, który z nich okaże się wygodniejszy dla użytkowników.
Ryc. 4 Eksponat interaktywny
Trzy rozważane struktury obsługi błędu
Wybór konkretnego rozwiązania wpływa na to, gdzie pasażer musi skierować wzrok w kolejnym kroku oraz jakie dane interfejs musi zapamiętać.
Wyjaśnienie bezpośrednio przy wybranym połączeniu
Zachować widoczność wybranego odjazdu i rozwinąć alternatywne opcje bezpośrednio pod nim.
- Podstawa
Rozwiązanie odpowiednie przy niewielkiej liczbie bezpośrednich alternatyw.
- Decyzja
Akceptacja dłuższego widoku w zamian za to, że wyjaśnienie błędu pozostaje ściśle powiązane z połączeniem, którego dotyczy.
Powrót do zachowanych wyników
Przywrócić listę wyników, jej filtry i wcześniejszą pozycję przewijania. Oznaczyć połączenie, dla którego nie można było przejść dalej.
- Podstawa
Mogłoby ułatwić porównanie rozbudowanego rozkładu.
- Decyzja
Wymaga niezawodnego przywracania poprzedniego widoku i czytelnego przypomnienia o ograniczeniu.
Okno wymagające zamknięcia
Umieścić wyjaśnienie nad wybraną podróżą i wymagać zamknięcia okna przed dalszym działaniem.
- Podstawa
Ogranicza obszar poruszania się fokusem, nie dodając informacji o dalszych możliwościach.
- Decyzja
Pominąć dodatkową warstwę przy ograniczeniu, po którym można kontynuować wybór. Zachować wyjaśnienie i alternatywy na stronie.
Wypróbuj ścieżkę naprawczą
Przetestuj ją w następującej kolejności:
- Zacznij od komunikatu o ograniczeniu dotyczącym roweru.
- (Wybierz opcję zmiany połączenia)
- Otwórz listę innych połączeń i wybierz późniejszy pociąg. Data oraz liczba dorosłych pozostaną bez zmian.
- Zmień dowolne z tych pól. Wyświetlona cena zostanie wycofana do momentu zakończenia kolejnej weryfikacji.
Przełączniki umieszczone nad polskim interfejsem wczytują gotowe, powtarzalne scenariusze, dzięki czemu możesz przeanalizować każdą odpowiedź systemu bez konieczności połączenia z żywym serwisem transportowym.
Ryc. 5 Eksponat interaktywny
Cztery odpowiedzi dla jednej podróży
Przeanalizuj ograniczenie, brak odpowiedzi z systemu, błąd zapytania oraz dostępną cenę. Prototyp kończy się na etapie podsumowania.
Niezależny prototyp. Poniższe rozkłady, ceny i odpowiedzi są danymi przykładowymi; nie można zarezerwować biletu.
Wybierz odpowiedź, a następnie inne połączenie. Zmień datę lub liczbę osób, aby zobaczyć, kiedy cena wymaga ponownego sprawdzenia. W przykładach braku odpowiedzi i błędu ponowna próba zwraca zaprogramowaną odpowiedź z dostępną ceną.
Przejdź do wybranej odpowiedziTwoja podróż
Wrocław / Kraków
Pociąg · Kurs A
Wrocław Główny → Kraków Główny
Ten kurs wymaga podróży z rowerem
W przykładowej odpowiedzi pozostały wyłącznie miejsca dla osób z rowerem. Nie możesz przejść dalej z wybraną opcją przejazdu bez roweru.
Możesz wybrać późniejszy pociąg lub autokar. Nie zmieniamy Twojego wyboru na przejazd z rowerem.
Razem79,00 zł
Po zmianie połączenia zachowasz datę i liczbę osób.
Wybierz inne połączenie
Zachowaliśmy datę i liczbę osób. Sprawdź miejsca odjazdu i przyjazdu: autokar odjeżdża z dworca autobusowego. Po wyborze sprawdzimy cenę dla całej grupy.
03:10 → 07:25
Pociąg · Kurs A
Wrocław Główny → Kraków Główny
4 godz. 15 min · Cena wymaga sprawdzenia.
Cena do sprawdzenia
05:40 → 09:10
Pociąg · Kurs B
Wrocław Główny → Kraków Główny
3 godz. 30 min · Bez przesiadek.
89,00 zł
Razem · 1 osoba dorosła
05:15 → 09:25
Autokar · Kurs C
Wrocław, dworzec autobusowy → Kraków, MDA
4 godz. 10 min · Inne miejsca odjazdu i przyjazdu.
65,00 zł
Razem · 1 osoba dorosła
06:00 → 09:45
Pociąg · Kurs D
Wrocław Główny → Kraków Główny
3 godz. 45 min · Niepotwierdzona dostępność.
Cena do sprawdzenia
Sprawdź wybraną podróż
- Data wyjazdu
- Pasażerowie
Razem
To koniec prototypu. Cena jest przykładowa. Nie zarezerwowano miejsca, nie kupiono biletu i nie pobrano opłaty.
Odpowiedź musi dotyczyć zapytania, które ją wywołało
Załóżmy, że ktoś wybiera autokar, gdy cena dla pociągu jest jeszcze weryfikowana. Jeśli odpowiedź dotycząca pociągu nadejdzie później, może nadpisać podsumowanie dla autokaru. Ekran nadal wygląda spójnie, ale w rzeczywistości łączy wybraną podróż z niewłaściwą ceną.
Prototyp temu zapobiega – wiąże każde trwające sprawdzenie z konkretnym zapytaniem, które je uruchomiło. Wybór nowej opcji, zmiana daty lub modyfikacja liczby pasażerów sprawiają, że spóźniona odpowiedź ze starszego zapytania zostaje odrzucona i nie aktualizuje ekranu.
W prototypie dodano krótkie opóźnienie przy każdym sprawdzeniu, dzięki czemu tę zasadę można zaobserwować w praktyce: w trakcie weryfikacji wybierz inny scenariusz albo zmień liczbę dorosłych. Wcześniejsza odpowiedź nie wpłynie na nowy stan interfejsu.
Jest to zachowanie lokalne i symulowane. Połączenie z rzeczywistym serwisem wymagałoby kontraktu API, który jednoznacznie identyfikuje konkretny odjazd, konfigurację pasażerów oraz czas ważności odpowiedzi – a takich gwarancji sam licznik czasowy w przeglądarce nie jest w stanie zapewnić.
Ryc. 6 Eksponat interaktywny
Znaczenie stanów i dozwolone akcje
Każdy stan ma przypisane konkretne znaczenie oraz dozwolony kolejny krok. Cena wyświetla się wyłącznie wtedy, gdy dany scenariusz zwróci użyteczną odpowiedź dla aktualnie wybranej konfiguracji.
Zachowanie dostępności nawigacji
Sygnalizować, że zapytanie jest w toku, zachowując jednocześnie stałą widoczność pól trasy oraz liczby pasażerów.
- Decyzja
Informować o trwającym weryfikowaniu danych bez wielokrotnego, gwałtownego przenoszenia punktu skupienia uwagi (fokusu) użytkownika.
Wyjaśnić warunek podany w odpowiedzi
Wybrany przykład dopuszcza wyłącznie podróżnych z rowerami.
- Decyzja
Zaproponować inne połączenie. Nigdy nie dodawać roweru w imieniu pasażera.
Nie przesądzać o dostępności
Brak odpowiedzi i błąd sprawdzania ceny mają różne komunikaty. Żaden z nich nie potwierdza braku miejsc.
- Decyzja
Pozwolić na świadome ponowienie próby lub wybór innego połączenia.
Wycofać poprzednią cenę
Zmiana daty lub liczby pasażerów unieważnia kwotę. Wybór innego połączenia rozpoczyna osobne sprawdzenie.
- Decyzja
Zachować pola wyszukiwania i ignorować odpowiedzi na starsze zapytania.
Pokazać łączną kwotę do sprawdzenia
Wyświetlić przykładową sumę dla aktualnej liczby dorosłych.
- Decyzja
Przejść wyłącznie do podsumowania. Potwierdzenie przykładowej ceny nie tworzy rezerwacji.
Wycofanie ceny po zmianie danych wyjściowych
Stara kwota pozostawiona na ekranie może sprawiać wrażenie, że nadal dotyczy nowego wyboru. Po modyfikacji daty lub liczby pasażerów prototyp usuwa poprzednią cenę i umożliwia jej ponowne zweryfikowanie. Sama trasa oraz wprowadzone dane pozostają dostępne do momentu nadejścia nowej odpowiedzi z systemu.
Przykład uwzględnia wyłącznie osoby dorosłe i przelicza stałą stawkę za osobę. Nie odwzorowuje ulg, zasad wiekowych ani dostępności miejsc grupowych. Tego typu parametry wymagałyby własnych reguł weryfikacji: zachowanie wpisanego pola jest pomocne tylko wtedy, gdy jego znaczenie pozostaje aktualne dla wybranego przewoźnika.
Porządek odczytu i nawigacja jako elementy wychodzenia z błędu
Większość elementów sterujących to natywne komponenty przeglądarki. Wybór scenariusza testowego odbywa się za pomocą standardowych pól jednokrotnego wyboru (radio buttons), a parametry podróży ustawia się w polu daty i na liście wyboru liczby dorosłych. Akcje naprawcze uruchamiają klasyczne przyciski. Ich etykiety wprost opisują działanie: Sprawdź ponownie, Pokaż inne połączenia lub Przejdź do podsumowania. Oparcie interfejsu na natywnych kontrolkach zachowuje domyślne zachowanie klawiatury i ogranicza potrzebę tłumaczenia niestandardowych interakcji.
Przenoszenie fokusu i komunikaty głosowe podążają za intencją pasażera:
- Odpowiedź o cenie przychodząca w tle aktualizuje komunikat o stanie (za pomocą dyskretnego powiadomienia dynamicznego aria-live="polite"), nie przerywając bieżącej wypowiedzi czytnika ekranu i nie przenosząc fokusu.
- Otwarcie listy alternatywnych połączeń jest świadomą akcją nawigacyjną, dlatego fokus zostaje przeniesiony na nagłówek tej listy.
- Wybór alternatywnego połączenia kieruje uwagę użytkownika z powrotem na aktualny stan operacji.
- Podsumowanie posiada własny nagłówek oraz wyraźny przycisk powrotu.
- Stan ładowania danych nie blokuje pasażera, a błąd jest przedstawiony zarówno wizualnie, jak i w formie jednoznacznego tekstu.
Zasady te oparłam na wytycznych W3C dotyczących komunikatów o stanie (Status Messages), które odróżniają dyskretną aktualizację bez zabierania fokusu od pełnej zmiany kontekstu. W tym przypadku ma to kluczowe znaczenie: cena nadesłana w tle i świadome otwarcie listy alternatyw przez użytkownika wymagają całkowicie odmiennego traktowania.
Ponieważ nie przeprowadzono jeszcze pełnego audytu z użyciem czytników ekranu, przyjęte założenia wymagają weryfikacji za pomocą technologii asystujących.
Inne połączenie może oznaczać zmianę stacji
W przykładowym zestawie danych pociąg kursuje między stacjami Wrocław Główny a Kraków Główny. Autokar odjeżdża natomiast z dworca autobusowego i dociera na przystanek Kraków MDA.
Na tej trasie autokar stanowi realną alternatywę dla kolei. Zmiana środka transportu wiąże się jednak ze zmianą punktów początkowego i docelowego. Dlatego oba dworce są wyraźnie widoczne na liście alternatyw przed dokonaniem wyboru, a następnie w podsumowaniu wybranego połączenia. Sama niższa cena nie odpowiada na pytanie, czy przesiadka na inny dworzec będzie dogodna dla osoby podróżującej z dużym bagażem lub z ograniczoną mobilnością.
Sygnalizowanie zmiany dworca przed dokonaniem wyboru
Wiersz z ofertą autokarową wyraźnie nazywa obie stacje i jednoznacznie sygnalizuje zmianę punktu odjazdu i przyjazdu. Wybrana liczba dorosłych zostaje zachowana. Interfejs wymaga ponownej weryfikacji ceny, a alternatywne opcje wyświetlają od razu łączny koszt dla całej grupy, dzięki czemu cena za przejazd dwóch osób jest znana jeszcze przed podjęciem decyzji.
Analiza syntetycznych scenariuszy użycia pomogła mi zweryfikować ten element projektu. Wskazała ona potencjalne punkty krytyczne – np. ryzyko potraktowania autokaru jako idealnego zamiennika pociągu bez dostrzeżenia różnicy stacji. Scenariusze te służą jako wskazówki projektowe: nie określają jednak, jak często prawdziwi podróżni przeoczyliby zmianę dworca ani które rozwiązanie uznaliby za wygodniejsze.
Co pozwala sprawdzić ten prototyp?
Opracowana makieta umożliwia przetestowanie ściśle określonego zbioru zachowań w warunkach powtarzalnych:
- wszystkich czterech typów odpowiedzi systemu,
- wyboru alternatywnego odjazdu,
- zachowania wpisanej daty i liczby pasażerów,
- unieważnienia wyceny po zmianie parametrów wejściowych,
- przejścia do podsumowania, które kończy się przed etapem płatności.
Przy przełącznikach zaznaczono jedno uproszczenie: ponowienie próby w przypadku braku odpowiedzi lub błędu zwraca zaprogramowany scenariusz z udaną wyceną. Służy to wyłącznie zaprezentowaniu przejścia między stanami i w żaden sposób nie sugeruje, że w środowisku produkcyjnym druga próba zakończyłaby się sukcesem.
Prototyp wyraźnie pokazuje też swoje ograniczenia technologiczne. Zmiana daty nie pobiera rzeczywistego rozkładu jazdy. Alternatywne połączenia są fikcyjne, sprawdzanie ceny nie tworzy rezerwacji w systemie, a wyliczona kwota dotyczy wyłącznie biletów normalnych. Brak tu mapy miejsc, opcji rezerwacji roweru, gwarancji przesiadek czy obsługi powrotu z bramki płatniczej. Wdrożenie produkcyjne wymagałoby ścisłych reguł biznesowych dla każdego z tych procesów.
Kolejny krok: badania z udziałem użytkowników
To, czego nadal nie wiem, to czy podróżni potrafią bez zewnętrznej pomocy poprawnie zinterpretować dany stan interfejsu i podjąć właściwy krok.
W moderowanym teście zadaniowym uczestnik otrzymałby określony czas przybycia na miejsce oraz budżet. Po napotkaniu ograniczenia miałby za zadanie kontynuować proces. Analiza sesji powinna objąć:
- ostatecznie wybrane połączenie,
- sposób, w jaki uczestnik rozumie wyświetloną cenę,
- dane, które musiał wpisać ponownie,
- wszelkie interwencje ze strony moderatora.
Warto pamiętać, że odpowiedź udzielona z dużym przekonaniem nadal może być błędna – sama pewność siebie użytkownika nie stanowi miernika sukcesu UX.
W badaniach powinny wziąć udział osoby na co dzień korzystające z czytników ekranu, nawigacji klawiaturowej oraz narzędzi powiększających – na własnym sprzęcie i oprogramowaniu. Sesje testowe pozwoliłyby ocenić kolejność i czas odczytywania komunikatów oraz wygodę obsługi elementów sterujących. Porównanie tego rozwiązania z wariantem powrotu do zapisanych wyników wyszukiwania wykazałoby, czy wyjaśnienie błędu bezpośrednio przy połączeniu rzeczywiście pomaga w rozwiązaniu problemu, czy jedynie niepotrzebnie wydłuża stronę. W ramach niniejszego opracowania nie przeprowadzono jeszcze takich badań.


