Archive for the ‘Ogólne’ Category

h1

Statusy cząstkowe czy o kluczowych etapach?

Wrzesień 15, 2017

Ostatnio zamawiając wybrany produkt przez internet, proces zaówienia wyglądał jak zwykle, czyli wybór produktu, określenie parametrów dostawy oraz płatności, a na koniec płatność za pomocą wybranej usługi. Po chwili na skrzynce znalazłem informację z potwierdzeniem zamówienia. Wybrałem dostawę za pomocą firmy kurierskiej, więc wystarczyło czekać na dostawę w szacowanym terminie –  kilka dni.

Następnego dnia dostaję maila od firmy kurierskiej z informacją: “czekamy na przygotowanie przesyłki”. Po kilku godzinach – “odebraliśmy przesyłkę, powiadomimy o czasie dostawy kolejnym mailem”. Następnego dnia – “planowane dostarczenie w podanej lokalizacji i przedziale czasowym”. Otrzymałem także informację o tym, że mogę zmienić szczegóły dostawy – lokalizację i przedział czasowy. Na koniec, gdy kurier dostarczył mi przesyłkę i potwierdziłem podpisem odbiór, dostałem maila, że “przesyłka dostarczona”. Poszczególne statusy oraz powiązane kroki procesu zostały przedstawione na poniższym diagramie.

statusyczastkowe450px

Można powiedzieć, że zamiast „zwykłych” statusów o etapach (złożone, wysłane, w trakcie oraz dostarczone) z procesu przekazywane były Klientowi statusy cząstkowe. Te cząstkowe statusy były okazją dla firmy do udostępnienia dodatkowej możliwości elektronicznej zmiany szczegółów dostawy. Podobnie można było dokładnie zauważyć moment zmiany podmiotu odpowiedzialnego za realiazcję procesu – między przygotowaną przesyłką (strona zamawiającego na diagramie) a odebraną przesyłką (strona dostarczającego na diagramie). W takich procesach często na koniec występuje ankieta, pozwalająca na ocenę procesu.

Szczerze mówiąc zacząłem się zastanawiać, z jaką szczegółowością chciałbym być informowany o przebiegu realizacji procesu – mógłbym otrzymać numer przesyłki smsem, z możliwością jej śledzenia. Mając na uwadze, że czas realizacji był 1-2 dni, tak częste statusy wydawały się nadmiarowe, ponieważ gdybym sprawdził pocztę dopiero po kilku dniach zobaczyłbym 3-5 wiadomości dotyczącej przesyłki. Jeżeli okres realizacji byłby dłuższy, np. od momentu złożenia zamówienia do przygotowania przesyłki był okres kilku dni lub tygodni, to pewnie oceniłbym to inaczej. Korzyścią z rozwiązania było to, że dokładnie wiedziałem, gdzie jest przesyłka i mogłem się przygotować na jej odbiór od kuriera.

Reklamy
h1

Wartości graniczne

Lipiec 8, 2017

Prawie 3 lata temu napisałem na blogu wpis dotyczący karty aglomeracyjnej, a w szczególności sposobu naliczania opłat na niej. Osatnio zauważyłem, że obowiązuje zasada, że jeżeli jednego dnia, nastąpi naliczenie opłat w wysokości opłaty za bilet 24-godzinny, naliczanie opłat zostaje wstrzymane. Na poniższym diagramie, pochodzącym z pierwotnego wpisu, zostało dodane rozszerzenie, które obsługuje to ograniczenie w procesie. Ta cena biletu 24-godzinnego (oznaczenie CB24G) jest „górną” wartością graniczną stosowaną w tym procesie. Jest to moja próba przykładowego zobrazowania procesu – nie sprawdzałem jak dokładnie przebiega ten proces w rzeczywistości.

W ramach kroku naliczenie opłaty, następuje sprawdzenie jaką kwotę dotychczas pobrano za przejazdy oraz czy te opłaty dotyczą danego dnia (lub inaczej zdefiniowanego okresu). Jeżeli przekroczono kwotę, jest ona ustalana na cenę biletu 24-godzinnego (CB24G). Przy następnym przebiegu, następuje sprawdzenie okresu, który został opłacony (do końca doby) i jeżeli został przekroczony, naliczanie opłaty rozpoczyna się od początku.

konto2v450px

Wiele procesów ma wbudowane wartości graniczne dolne lub górne. Inne zastosowanie wartości granicznej można zauważyć w procesie sprzedaży w internecie, gdy proces wyboru opłaty za dostawę jest wyłączany w momencie obsługi koszyka o wartości wyższej niż pewna umowna wartość. Można sobie też wyobrazić proces sprzedaży, gdy transakcja jest realizowana dopiero od wybrania X sztuk produktów. W księgarni internetowej można teoretycznie spotkać rozwiązanie, że przy określonej liczbie książek w koszyku, można wybrać dodatkową książkę taniej.

W podanych przykładach wartość graniczna jest używana na bramce do włączenia lub wyłączenia pewnej części procesu/ścieżki. Takie działanie może być korzystne dla Klienta procesu lub nie. Wynika z przejętego modelu biznesowego, a w szczególności kosztów obsługi danego procesu.

Wartości graniczne mogą też być stosowane w regułach biznesowych czy pętlach.

h1

Proces samoobsługowy

Czerwiec 27, 2017

Ostatnio w jednym ze sklepów sieciowych, do którego poszedłem po dłuższej przerwie, trafiłem na zmiany w okolicach kas. Właściciele sieci wprowadzili kasy samoobsługowe. Biorąc pod uwagę rodzaj asortymentu, byłem trochę zdziwiony. Ale cóż… trzeba spróbować w innym sklepie niż hipermarket. Proces wyglądał tak samo: połóż, zeskanuj, zapłać, wczytaj kartę klienta i zabierz zakupy. Do tego momentu proces identyczny jak gdzie indziej. Zmiana pojawiła się przy wyjściu ze strefy kas samoobsługowych – trzeba było zeskanować kod z paragonu, aby wyjść. Pewnie chodzi o zabezpieczenie, aby nie przejść przez strefę bez zeskanowania produktów.

Produkty sprzedane, płatność dokonana – dla firmy jest przychód. W statystykach sprzedaży pojawił się kolejny klient, kolejny koszyk sprzedanych produktów oraz każdy produkt z osobna. Zostały pokryte koszty produkcji, transportu i koszty stałe (miejmy nadzieję). Dla firmy same korzyści. Ten ostatni krok powoduje, że osoby obsługujące mogą mniej czasu poświęcić teoretycznie na kontrolę osób przechodzących przez strefę samoobsługową a skupić się na pomocy tym, którzy mają problemy przy kasach.

kasa_samoobslugowa450px

Wygenerowany paragon ma podwójne znaczenie – jest dowodem sprzedaży i „biletem” do przejścia przez bramkę. Różnica między odczytanymi paragonami a zrealizowanymi transakcjami sprzedaży może być powodem do przekazania sygnału osobom obsługującym strefę. Może być także informacją ile osób przeszło równocześnie z innymi przez bramkę lub wróciło na sklep po dokonaniu płatności – np. skorzystać z innych usług w sklepie lub przeprowadzić dodatkowe zakupy, o których zapomnieli. Zakładając, że osoba w strefie, nie pozwala wyjść osobom wykorzystujących 2 różne kasy, w ramach jednego odczytu kodu, ta druga grupa się powiększa. Praktycznie może być jeszcze grupa, która wyszła awaryjnie (np. poprzez otwarcie bramki przez osobę obsługującą).

W powyższym procesie, Klient postępuje zgodnie z procesem sprzedaży wbudowanym w aplikację kasową. Kasa wskazuje jakie kolejne kroki Klient ma wykonać i żąda od niego decyzji w odpowiednich momentach – karty klienta, sposobu płatności itd. Klient nie ma możliwości poinformowania kasy na początku, jak będzie chciał przejść przez proces. W przypadku tradycyjnej kasy już na początku może dać kartę klienta. Potwierdzeniem przeprowadzenia procesu sprzedąży przy pomocy kasy jest właśnie wspomniany paragon.

h1

Zadanie przekazane do odbiorcy

Czerwiec 4, 2017

Ostatnio przedłużałem umowę na telefon komórkowy. Po chwili rozmowy i zapoznaniu się z dostępnymi wariantami, wybrałem jeden z nich. Umowa wygenerowana, przedstawiona do podpisu. Sprzedawca tłumaczy i zaznacza jakie smsy trzeba wysłać, aby wyłączyć domyślnie uruchomione mechanizmy. Wydawałoby się, że można o to spytać i przeprowadzić ich wyłączenie bezpośrednio w salonie. Wiem, że wtedy użytkownik nawet nie będzie miał okazji sprawdzić, czy  danego mechanizmu potrzebuje. Z drugiej strony takie podejście, z wyłączaniem, wymagałoby bardziej indywidualnego podejścia w zakresie umów.

Można stwierdzić, że zadanie zostało przekazane Klientowi, a po stronie Sprzedawcy (Dostawcy) proces ograniczył się do zaprezentowania wariantu i odnotowania w umowie wybranego wariantu przez Klienta. Dodatkowo weryfikowana jest poprawność danych, które trafią do umowy. Jest to zaprezentowane na diagramie (kroki zielone).

umow_telefon2_450px

W wersji rozszerzonej dochodzą dodatkowe kroki w procesie (kroki z żółtym tłem), które zwiększają liczbę interakcji oraz poziom skomplikowania umowy. Co ważne obydwie czynności są wtedy rozłożone w czasie, tj. realizacja u Sprzedawcy oraz realizacja przez Klienta (krok niebieski). W wersji rozszerzonej Klient nie musi już pamiętać o akcjach do wykonania. W wersji z zadaniem po stronie Klienta, to on musi pamiętać, że w określonym momencie czasu od aktywowania nowej umowy, musi takie działanie wykonać.

Im bardziej uproszczony proces po stronie Sprzedawcy, tym mniejszy jego koszt i czas trwania. Sprzedawca szybciej może się zająć kolejnym Klientem, wiedząc, że kolejny Klient przedłużył umowę. Niektórzy Klienci natomiast mogą nie być zadowoleni z takiej obsługi. Wszystko zależy od tego w jaki sposób Sprzedawca to zadanie „przekazał”. W zależności od przyjętego podejścia, będzie różny wykonawca danego zadania.

h1

Proces określania korzystnych wyników

Maj 26, 2017

Wielu kibiców polskiej ligi zastanawia się kto zostanie mistrzem. Jedni ze 100% pewnością mówią, że to drużyna, której kibicują. Inny patrzą z niedowierzaniem na tabelę, na 2 kolejki przed końcem. Bo prawda jest taka, że 4 drużyny – oznaczmy je jako LP, LG, LW, JB – walczą o mistrzostwo oraz miejsce w pucharach. Jedna z drużyn pozostanie z niczym. Kolejna drużyna w kolejności ma taką stratę, że nie trzeba jej brać pod uwagę. Wskazane drużyny są obecnie ułożone w kolejności:  LW, JB, LB, LG z dorobkiem punktowym odpowiednio: 40, 38, 38, 38. Jest to punkt wyjściowy do próby określenia szans wybranej drużyny na zwycięstwo. Kroki są opisane na poniższym diagramie.

wyniki428px

Po określeniu punktu startowego, trzeba wygenerować wszystkie możliwe układy wyników w 2 kolejkach, z uwzględnieniem tego, że w pierwszej kolejce każda z drużyn walczy z drużyną spoza pierwszej czwórki, a w drugiej kolejce, walczą między sobą. Opieramy się tutaj tylko na wszystkich możliwych wynikach. Można to wygenerować następująco:

lp = 38
lw = 40
lg = 38
jb = 38
Określenie puntku startowego, poprzez określenie liczby punktów dla każdej z drużyn, przed kolejką.
for lp1 in [3,1,0]:
for lw1 in [3,1,0]:
for lg1 in [3,1,0]:
for jb1 in [3,1,0]: (…)
Generowanie wszystkich możliwych rozstrzygnięć dla pierwszej kolejki, wybierając odpowiedni wynik dla każdej z drużyn.
for lp2 in [3,1,0]:
for lw2 in [3,1,0]:
jb2 = wynikiodwr[lp2]
lg2 = wynikiodwr[lw2]
Generowanie dla każdego zestawu wyników z pierwszej kolejki, wszystkich możliwych rozstrzygnięć dla drugiej kolejki, wybierając odpowiedni wynik dla każdej z drużyn, z uwzględnieniem tego, że JB gra z LP oraz LG gra z LW.
(lp1,lw1,lg1,jb1,
lp2,lw2,lg2,jb2,
lpk = lp+lp1+lp2,
lwk =lw+lw1+lw2,
lgk =lg+lg1+lg2,
jbk = jb+jb1+jb2)
Zebranie możliwe zestawu wyników dla 1 I 2 kolejki wraz z osiągniętą liczbą punktów na koniec. Taki rekord jest dodawany do określonej struktury danych – określmy ją jako Wyniki.

Tym sposobem mamy 729 różnych rozstrzygnięć.

Teraz na bazie utworzonej struktury danych Wyniki możemy sprawdzić jakie rozstrzygnięcia powodują mistrzostwo określonej drużyny. Założmy, ze interesuje nas drużyna LP to wtedy możemy wyszukać wygenerowane pozycje, które spełniają na przykład warunek:

(Wyniki.lpk > Wyniki.lwk) & (Wyniki.lpk >= Wyniki.lgk) & (Wyniki.lpk > Wyniki.jbk)

Dla tego warunku mamy 91 rozstrzygnięć, co stanowi około 12,5% biorąc pod uwagę wszystkie wyniki bez uwzględnienia dotychczasowych rozstrzygnięć między drużynami grającymi w danej kolejce, statystyk, problemów drużyn, zmęczenia, kartek itp. Powyższy warunek nie uwzględnia tez innych relacji z ta samą liczbą punktów, które mogą powodować mistrzostwo określonej drużyny.

Powyższy przykład pokazuje, że pod określonymi krokami w procesie, kryją się określone działania w systemie lub wykonywane przez użytkownika. Wraz z diagramem mógłby być opis, który mniej lub bardziej technicznie pokazuje, na czym polega dany krok. Takie elementy jak powyżej można byłoby potraktować jako warstwę implementacyjną procesu.

Już w niedzielę okaże się, które z wygenerowanych wierszy można pominąć, skupiając się tylko na wynikach drugiej kolejki.

h1

Gdy chcesz wysłać paczkę

Maj 18, 2017

Dzwoni domofon. Pytasz kto to? Pada krótka odpowiedź: kurier. Nie przypominasz sobie czy na coś czekasz, więc wpuszczasz i weryfikujesz co to za przesyłka. Sprawdzasz i przyjmujesz paczkę lub nie. Gdy znasz nadawcę jest łatwiej i dane odbiorcy w pełni się zgadzają – przyjmujesz paczkę. W innych sytuacjach – kwestia pozostaje do wyjaśnienia. Te wyjaśnienia ułatwia dołączony do paczki list przewozowy/nalepka adresowa. Oprócz nadawcy i odbiorcy przesyłki zawiera informacje o jej wymiarach, wadze, nazwie firmy oraz dodatkowe informacje. Są one efektem procesu zlecenia wysyłki paczki. Tzw. wyjścia poszczególnych kroków.

paczka350px

Diagram przedstawia standardowy proces w takim przypadku. Przeglądając różne strony internetowe firm kurierskich można zauważyć, że na samym początku następuje pytanie o wagę i wymiary paczki, następnie miejsce dostarczenia. Paramatry te pozwalają określić cenę paczki. Jeżeli nadawca akceptuje te koszty, może podać szczegółowe dane nadawcy i odbiorcy. Czasami najpierw następuje rejestracja nadawcy, a potem reszta procesu. Bez podawania jakichkolwiek danych można wycenić paczkę i określić czy jest standardowa, czy może wymaga innych działań. Na odpowiednim etapie konieczne jest także opłacenie wysyłki.

W sytuacji, gdy zależy nam na ubezpieczeniu lub gwarancji dostarczenia paczki do określonej godziny jesteśmy zobowiązani do poniesienia wyższej opłaty, wykonania dodatkowych kroków lub zlecenia wysyłki paczki w określonych godzinach i miejscu. Elementów tych nie uwzględniłem na diagramie.

Wartość dodana w takim procesie może być tworzona przez dodatkowe udogodnienia, w tym poprzez możliwość śledzenia położenia paczki – jej wysyłki, transportu, dostarczenia, dzięki poznaniu z góry określonym identyfikatorom dla paczki.

h1

Kiedy dostaniesz powiadomienie?

Kwiecień 29, 2017

Ostatnio otrzymałem wiadomość mailową o treści: “Przypomnienie o końcu ważności biletu okresowego”. Rzeczywiście za 2 dni kończył mi się okres ważności wykupionego biletu okresowego. Pamiętałem o tym, więc kilka dni wcześniej już go przedłużyłem. Dlatego byłem trochę zdziwiony, że tego maila otrzymałem.

Zacząłem się zastanawiać, że mogli wygenerować bazę z kończącymi się biletami wcześniej i dopiero tego dnia wygenerować powiadomienia. Inne rozwiązanie to takie, że mechanizm chodzi codziennie i sprawdza dla aktywnych biletów jaka jest data końca. W systemie każde przedłużenie może jest widoczne jako osobny rekord, a nie zmienia bieżącego i to powoduje problem. Wydaje się, że mechanizm nie sprawdza, czy jest już kolejny rekord lub nie pobiera najstarszej daty końca spośród rekordów. Może utrudnieniem dla mechanizmu jest to, że ze względu na długi weekend, przesunąłem datę początku obowiązywania nowego biletu o kilka (X) dni (na co pozwala system). Wydaje się, że algorytm wyboru biletu do wysłania powiadomienia mógłby wyglądać jak poniżej.

bilet_okresowy400px

Powyższy diagram jest kolejnym przykładem drzewa decyzyjnego, które przedstawiam na swoim blogu. Jest to istotny element procesu biznesowego. Wiele procesów opiera się na krokach, w których taki mechanizm ma zastosowanie i od niego zależy dalszy przebieg procesu. Wykonywane działanie opiera się na danych zebranych podczas procesu. Na powyższym diagramie taki przykładowy proces również został uwzględniony. Za pomocą drzewa decyzyjnego można szybko określić jakie działanie powinno zostać podjęte w ramach kroku

A może ta wysyłka powiadomienia, gdy jest odstęp między kolejnymi okresami ważności biletu, jest zabiegiem świadomym, aby użytkownik jednak pamiętał o tym, że pierwotny bilet kończy się danego dnia? Takie działanie dodałem do drzewka decyzyjnego linią przerywaną jako alternatywne rozwiązanie dla tego diagramu. To, w jaki sposób interpretujemy dane i układamy drzewko decyzjne jest kwestią decyzji biznesowej. Jeżeli zależy nam mimo wszystko, aby powiadomić użytkownika w każdej sytuacji, będziemy patrzeć tylko na parametry bieżącego biletu. Jeżeli natomiast, nie chcemy wysyłać powiadomień, które użytkownicy odbiorą jako błędne, trzeba zastosować bardziej dokładne reguły.