Analizując wymagania i modelując funkcjonalność przyszłych systemów informatycznych stoimy często przed trudnymi decyzjami – czy szukać idealnego rozwiązania, czy też wzorować się na tym, co już znamy i widzieliśmy? Na czym oprzeć się, jeśli chcemy zwiększyć efektywność pracy użytkowników oprogramowania? Czy wprost zastosować się do wytycznych klienta odnośnie tego, co ma robić system? Jak stworzyć coś, co w pełni zadowoli użytkowników, pozwoli osiągnąć, albo nawet prześcignąć, cele biznesowe sponsora? Co należy zrobić, by poprowadzić projekt do sukcesu?
Nasuwają się tu metody modelowania np. przypadki użycia. Z mojego doświadczenia wynika, że nawet wykorzystanie odpowiednich narzędzi i modeli nie wystarczało, by móc stworzyć oprogramowanie zbliżone do ideału. Potrzebowałem czegoś więcej. Potrzebowałem odpowiedniej strategii i filozofii przy podejmowaniu decyzji.
Bardzo duży wpływ wywarła na mnie książka 'Understanding Computers and Cognition. A new foundation for design’ autorstwa Terry’ego Winograda i Fernando Floresa. Pomogła mi zrozumieć, że zasady jakimi się kierowałem w tworzeniu wymagań nie zawsze były słuszne.
Wychowany na ideach takich jak Six Sigma czy CMMI starałem się wyeliminować pomyłki, jakie może popełnić użytkownik oprogramowania. Zwracałem dużą uwagę na walidację i uprawnienia, oraz starałem się maksymalnie upraszczać funkcjonalność systemu. Nigdy nie przeszło mi przez myśl, żeby pozwolić użytkownikom absolutnie na wszystko. Gdyby ktoś nastawał na taką elastyczność, z pewnością starałbym się odwieść go od tego w obawie przed zbytnim komplikowaniem systemu.
Dzięki książce Winograda i Floresa zmieniłem swoje podejście do tworzenia wymagań. Chciałbym opowiedzieć Wam o tym, jak ułatwiło mi to pracę, a w szczególności podejmowanie decyzji i sugerowanie rozwiązań.
Chciałbym przybliżyć Wam filozofię jaką możemy posługiwać się w Analizie Biznesowej.
Człowiek będzie zawsze mądrzejszy od komputera
Komputery potrafią niesamowicie szybko wykonywać dowolnie skomplikowane działania matematyczne. Potrafią symulować zjawiska przyrody. Mają dostęp do niewyobrażalnych ilości informacji i to dostęp prawie natychmiastowy. Dzięki automatyzacji potrafią wykonywać pracę fizyczną. Istnieją wreszcie mechanizmy sztucznej inteligencji, a nawet sieci neuronowe, które potrafią same się uczyć. Nadal jednak komputer nie może dorównać stopniu złożoności i zaawansowania żywego organizmu. Dotyczy to również inteligencji i postrzegania.
Człowiek jest mądrzejszy niż komputer i zawsze tak pozostanie. Istota ludzka, co prawda zapamiętuje i gromadzi wiedzę znacznie wolniej i w mniejszej ilości niż komputer, jednak lepiej potrafi zdobytą wiedzę zastosować. Co prawda, człowiek popełnia pomyłki, komputer nie. Tyle, że nadal to człowiek jest mądrzejszy. Szybciej niż maszyna rozpoznaje wzorce, przykładowo, rozpoznaje konkretnych ludzi czy przedmioty. Ma własną opinię na dany temat i może sam decydować o swoim zachowaniu.
Człowiek jest istotą doskonalszą niż komputer nawet przy wszystkich swoich ograniczeniach. Samo zbadanie natury ludzkiego ciała jest niesłychanie trudne ponieważ pojawia się pytanie: jak metoda badania wpływa na otrzymywane rezultaty?
Winograd i Flores przytaczają wyniki jakie na polu badania żywych organizmów ma współczesny nam naukowiec i filozof Humberto R. Maturana. Maturana to chilijski neurobiolog, który badał neurofizjologię widzenia. Jego praca nad anatomią widzenia oka żaby poprowadziła go do sformułowania teorii organizacji żywych systemów. Inne prace i przemyślenia Maturany dotyczą postrzegania świata, roli języka jakim się posługujemy i funkcjonowania ludzi w społeczeństwie.
Przełomowe odkrycie odnośnie mechanizmu widzenia żaby polegało na tym, że włókna nerwowe połączone do siatkówki tego stworzenia okazały się ściśle wyspecjalizowane. Neurony podłączone do siatkówki oka same rozpoznawały to, co oko widzi, bez udziału mózgu. Przykładowo, jeden typ włókna bardzo silnie reagował na czarną kropkę otoczoną jasnością. Kiedy wzbudzał się, automatycznie, uruchamiana była reakcja prowadząca do odruchu łapania muchy w miejscu odpowiadającym tej czarnej kropce.
Praca Humberto Maturany pozwala zrozumieć, że każdy żywy organizm, w tym i człowiek, jest istotą nieskończenie bardziej skomplikowaną niż komputer. Pełne zrozumienie mechanizmów działających w ciele człowieka jest niemożliwe. Okazuje się, że odkrywając coś nowego napotykamy zawsze na kolejną głębszą i trudniejszą do poznania tajemnicę. Stale powraca pytanie jak metoda badania wpływa na otrzymywane wyniki.
Przypomnijmy badanie, w którym rosyjscy naukowcy odrywali musze kolejne nogi i za każdym razem rozkazywali: 'Mucho idź’. Jaki wpływ na wyniki miała tu metoda wykonywania badania?
Wnioski dla Analizy Biznesowej
Nie tyle same badania Maturany, ani też rosyjskich naukowców, ile reszta książki Winograda i Floresa pomogły mi uświadomić sobie, że to człowiek powinien być stroną podejmującą wszelkie decyzje w pracy z komputerem. Zrozumiałem, że komputer powinien zawsze robić to, co człowiek uzna za stosowne. Nawet, jeżeli z pozoru to, co użytkownik zechce zrobić jest błędne i szkodliwe.
Systemy komputerowe są tworzone przez człowieka, jako systemy o zaplanowanej reakcji na przewidziane sytuacje. Programiści i analitycy, wiedząc do czego ma służyć dany system, przewidują jakie sytuacje będą zachodzić i sprawiają, że komputer reaguje na nie w określony sposób. Człowiek natomiast jest w stanie poradzić sobie z nowymi sytuacjami, których nie przewidział i z którymi styka się po raz pierwszy. Komputer nie zrobi nic, jeśli danej sytuacji nie przewidzieli jego twórcy.
Często mówimy o tym, co oprogramowanie 'pozwala’ zrobić. Taki sposób mówienia wywodzi się z tradycji i z tego, że nie wszystko, czego byśmy potrzebowali można przy pomocy komputerów wykonać. Projektując oprogramowanie, decydujemy co wolno a czego nie. Decydujemy, co użytkownik może zrobić i jak chronić go przed nim samym. Zmiana tego sposobu myślenia okazała się dla mnie osobiście wyzwalająca i pomogła uprościć podejmowanie decyzji. Musiałem jedynie skupić się na innych sprawach niż ochranianie użytkownika przed nim samym.
Teraz zaczynam pozwalać użytkownikom na wszystko, a jeżeli faktycznie nabroją, to wiem, że sami to odkryją. Zacząłem obecnie zwracać uwagę na to, by użytkownicy mogli wycofywać wszystkie wykonane akcje oraz ich skutki. Zamiast pytać użytkownika czy na pewno chce zrobić to, co chce zrobić pozwalam mu na wszystko. A potem … niech system umożliwi mu odkręcenie tych akcji. Wszystko, co wykonuje użytkownik, można przecież odwrócić, logować, monitorować. Trzeba jednak to odwracanie i odkręcanie przewidzieć na etapie tworzenia wymagań.
Podsumowanie
Terry Winograd (profesor informatyki na Uniwersytecie Stanforda i badacz sztucznej inteligencji) wspólnie z Fernando Floresem (filozofem i byłym chilijskim Ministrem Finansów) odkryli, że sztuczna inteligencja nigdy nie będzie w stanie dorównać inteligencji żywego organizmu, który powstał na drodze milionów lat ewolucji. Każda sytuacja, w życiu każdego organizmu, wpływa na niego i na jego ewolucję. Stworzenie sztucznej inteligencji równie inteligentnej jak dowolny żywy organizm zajęłoby tyle samo czasu, co powstanie tego organizmu w środowisku naturalnym, czyli zwykle miliony lat.
W Analizie Biznesowej bardzo pomaga przyznanie intelektualnej wyższości użytkowników nad systemami komputerowymi. Wyzwalające jest zrozumienie, że to użytkownik jest decydującą stroną w interakcji z komputerem.
W kolejnym artykule postaram się opisać przykłady zastosowania podejścia Winograda i Floresa do zbierania wymagań. W jeszcze następnym opiszę praktyczne podejście do zbierania wymagań oraz pytania na jakie Analityk Biznesowy musi zdobyć odpowiedzi od klienta i użytkowników.
Mam nadzieję, że udało mi się zainteresować Was książką 'Understanding computers and cognition’.
0 komentarze “Kontrola czy swoboda użytkownika, czyli filozofia projektowania systemów”
Czyli jaki jest odkrywczy wniosek tej filozofii..?
Żeby nie ograniczać użytkownika w wykonywaniu akcji, których nie powinien wykonać, np. ograniczenie wstawiania daty z przeszłości – niech robi coś, nawet wtedy, kiedy zasady zabraniają, ale sam sobie radzi z konsekwencjami tych akcji.
To idąc tym przykladem nie nazywalbym tego filozofia a krokiem w tył. Konsekwencje takich operacji szczególnie w złożonych systemach mogą być poważniejsze niż sie wydaje i niejednokrotnie nie do odwołania przez ta sama osobę – z różnych względów.
Pełna kontrola uzhytkownika w systemie informatycznym oznacza również możliwość wycofywania akcji. Jeżeli dany system nie pozwala na wycofywanie to tradycyjnie zabrania wykonania szkodliwych operacji. Natomiast zmiana tego systemu tak aby wykonanie i odwołanie każdej operacji było możliwe to krok w przód. W złożonych systemach oznacza to koniecznośc zrozumienia jak działa system i na co wpływają akcje użytkowników. Jednak po to mamy analizę biznesowa i systemową by mieć kontrole nad zachowaniem systemu. Po to mamy narzędzia do modelowania by nad tą złożonością panować.
Jednak muszę Ci przyznać rację, że w większości przypadków kierownictwo projektów uzna oddawanie kontroli w ręce użytkowninków za krok w tył. Tyle, że postawa taka wynika z dążenia do krótkoterminowych celów oraz z tego, że każdy system ma zaciągnięty dług techniczny. Ten dług ma wpływ na to jak łatwo wprowadza się zmiany. Zaciągany jest zawsze kiedy projekt robiony jest na skróty czyli w praktyce zawsze wtedy kiedy kierownictwo projektu chce skończyć projekt szybciej niż uważają programiści.
My tutaj chcemy propagować zaradzenie temu problemowi na etapie zbierania wymagań do nowych funkcjonalności i w poprawianiu istniejących.
Więcej w kolejnym artykule.
Jak miałaby taka swoboda wyglądać w systemie księgowym? Czy pozwalać użytkownikowi na zmianę zaksięgowanych dokumentów i niech sam radzi sobie z konsekwencjami (kontrola skarbowa / wyrok / kara finansowa)?
Mam również (jako programista) pewne wątpliwości dotyczące mechanizmu wycofywania zmian. Mnie również podoba się ta funkcja wprowadzona w poczcie Gmail 😉 Zauważcie jednak, że nie ma odwrotu od wysłania wiadomości do innego użytkownika. Nie można „cofnąć” faktu przeczytania wiadomości przez użytkownika. A usuwanie „wycofanej”, lecz odczytanej wiadomości ze skrzynki odbiorczej ? fiu fiu… Podobnie w życiu – jeśli nadamy dokument do US to nie ma już odwrotu. Pozostaje nam jedynie wysłać np. wniosek korygujący. Ogólnie, problem pojawi się wszędzie tam, gdzie zaistniej konieczność wymiany danych z innymi systemami / podsystemami, co przy złożoności dzisiejszych rozwiązań IT jest niemal regułą (np. SOA).
Z technicznego punktu widzenia, wykonanie niebanalnego systemu w opisany sposób wydaje się piekielnie kosztowne (logika „odkręcająca” zmiany mogłaby okazać się bardzo złożona) i podatne na błędy, choć może podejście „Event Sourcingu” pomogłoby coś zdziałać.
A może prawda leży gdzieś po środku i należałoby umożliwić użytkownikowi wprowadzenie do systemu np. wniosku z błędami i brakami (z możliwością dalszej korekty / poprawy), ale ściśle kontrolować jego zawartość w momencie „pchnięcia dalej” w obiegu oraz umożliwić wysłanie odpowiedniego wniosku korygującego w przypadku wykrycia nieprawidłowości na dalszych etapach obiegu.
P.S. Chciałem pozostawić pusty e-mail pod komentarzem i uzupełnić go później, ale CMS mi nie pozwolił ;(
Co do księgowania to niestety zupełnie nie znam się na tym. WYdaje mi się jedynie, że możnaby pozwalać na zmiany do pewnego momentu. Czyli pozwalać przez godzinę, dzień czy do określonego zdarzenia po to by móc poprawić ewentualne błedy czy uzupełnić braki. Należałoby śledzić wszystkie dokumenty z brakami i upewnić się, że nie jest za późno na dokonanie zmian. Pytanie też jakie byłyby zyski z umożliwienia dokonywania zmian w już zaksięgowanych dokumentach.
Co do wysyłania maili to faktycznie dziwne byłoby, że znikła przeczytana wiadomość. Natomiast możnaby to jakoś kreatywnie obsłużyć np. zaznaczyć odebrany ale wycofany mail jako skreślony. Powiedzmy, że szef wysłał ci jakieś polecenie ale to już nie jest aktualne. Wtedy wycofuje tego maila i nadal go widzisz ale jest teraz przekreślony. Być może jest uzupełniony o jakąś adnotację.
Swoją drogą w mojej poprzednej pracy w Lotus Notes była możliwość wycofywania wysłanych maili i działało to nawet jak odbiorca przeczytał maila 🙂
Pewne aspekty oddawania kontroli w ręce użytkownika mogą być korzystne z punktu widzenia użyteczności i ułatwiania życia użytkownikom.
Podoba mi się ten PS 🙂
Wniosek taki, że oprogramowanie to narzędzie, które powinno
być posłuszne użytkownikowi. Więcej można zrobić za pomocą narzędzia
jeżeli można je w pełni kontrolować. Przykłady zastosowania tej
filozofii w praktyce będą w kolejnym artykule.
Wg Winograda i
Floresa użytkownik powinien móc kontrolować sposób zachowania
oprogramowania. To wbrew pozorom zupełnie zmienia sposób ustalania
funkcjonalności oprogramowania.
System nigdy nie powinien zabraniać ani prosić o
potwierdzenie chęci wykonania danej akcji, zamiast tego powinien
oferować szerokie możliwości wycofywania dokonanych akcji. System, który
oddaje kontrolę użytkownikowi sprawia, że praca jest bardziej efektywna
a zaufanie do systemu większe.
W
praktyce kontrola użytkownika nad przykładowo interfejsem jest zawsze
ograniczona a często jej w ogóle nie ma. Rzadko kiedy użytkownik może
ustalać co i jak jest wyświetlane. Weźmy np. strona
www, która prezentuje zdjęcia i tekst. Użytkownik powinien móc ustawić jaka ma
być rozdzielczość zdjęć, czy mają być pokazywane zdjęcia czy je schować,
czy ma być tekst czy go schować itp.
Jeżeli przykładowo mamy blog to
użytkownik powinien kontrolować czy na jednej stronie jest jeden
artykuł, kilka lub wszystkie, ograniczać każdy artykuł do pewnej liczby
początkowych znaków, ograniczać listę artykułów wg tagu, autora czy słów
występujących w tekście, usuwać zdjęcia z artykułów itp.
Ta filozofia wcale nie jest oczywista i wg mnie prawie nikt jej nie stosuje w praktyce.
Przykładów aplikacji gdzie
użytkownik nie ma kontroli jest bardzo dużo, wystarczy otworzyć dowolną
stronę z informacjami o jakichś produktach i usługach.
Z punktu widzenia architekta/programisty
Zdecydowanie zgadzam się z tym, że systemy informatyczne powinny być tak projektowane, by umożliwić wybranym pracownikom organizacji dostosowywać pod zmieniające się potrzeby biznesowe. Niestety w tylko nieliczni dostawcy w ten sposób budują swoją przewagę (reszta woli trzymać już raz złapanego klienta przy sobie).
Trzeba jednak pamiętać, że konfigurowalność w wielu przypadkach oznacza to, że systemy informatyczne potrzebują tą konfigurację zaczytać i przetworzyć – co może skutkować niewielkim spadkiem wydajności. Zazwyczaj jest to na tyle niewielkie opóźnienie, że można sobie na to pozwolić. Niestety w niektórych systemach walka jest o każdą milisekundę – przykładem są takie elementy jak procesy masowego przetwarzania i to „trochę” pomnożone o przetworzenie np. 10 milionów obiektów może spowodować biznesowo niedopuszczalne spowolnienie.
Jeśli chodzi o zwiększenie kosztów – dużo zależy od architektury systemu i pomysłowości projektantów. Tworzenie funkcjonalności pozwalających modyfikować system są rzeczywiście bardzo czasochłonne a co za tym idzie kosztowne, ale…
Są dostępne na rynku silniki BPMS, BRMS, różnego rodzaju rozwiązania wspierające architekturę SOA, których zaprzęgniecie jako część systemu, albo nawet część ekosystemu informatycznego może przynieść znaczne oszczędności, dostarczając przy tym rozbudowane możliwości konfiguracji.
Miesiąc temu napisałem trzy posty w temacie zastosowania zewnętrznego silnika obliczeniowego w systemie informatycznym. Zaczynają się one od tego wpisu http://www.algorithmssystem.com/blog/elastyczne-reguly-elastyczny-biznes/. Pozostałe dwa opisują przykład realnego wdrożenia.