www.rozumim.cz

Až budou většinu Vašich uživatelů tvořit stroje

Strašák strojů, které nás nahradí v práci, je už pár desítek (možná stovek) let starý. Až budou místo lidí pracovat stroje, budou také stroje nejčastějšími uživateli našich programů.

Nevím, zda tuto změnu kolem sebe pozorujete, já se na ní ale díky svojí práci už delší dobu přímo podílím. Nechci teď ovšem psát o tom, zda je to dobře nebo špatně. Chci jen popsat změny, které pozoruji z pohledu programátora Obyčejného Informačního Systému™.

Uživatelé

Jedním z důležitých uživatelů v naší aplikaci je nyní Systém. Systém dělá jak operace, které nikdo jiný neumí, tak i operace, které běžně dělají obyčejní, živí uživatelé. Je tedy potřeba neustále dávat pozor na to, kdo právě pracuje, zda jde o skutečného uživatele nebo ne. Podle toho musíme např. řešit zobrazení chybových hlášek. Systém si zprávy o chybě nevšimne, ani když bude její rámeček blikat třemi barvami. Také Vám ihned nezatelefonuje, když nemůže pokračovat v práci. Je tedy vždy třeba rozmýšlet, kterého skutečného uživatele upozornit a jak. Napadají mě teď tyto možnosti, které v různé míře pro upozornění používáme:

  • zaslání e-mailu
  • zadání nového úkolu
  • zpřístupnění informace ve formě přehledu (statistiky/dashboardu)
  • přeskočení uživatele a upozornění přímo vývojáře

Systém pracuje neustále. Dokonce toho v noci dělá víc než ve dne. Klíčové jsou v této situaci spolehlivé a přehledné logy. Vždy je potřeba zaznamenat alespoň začátek operace, s čím Systém bude pracovat a poté konec operace spolu s výsledkem (vše OK, došlo k chybě …). Systém je totiž kombinací všech programátorů a kromě dobrých vlastností od nich získává i jejich chyby. (Zde začínám pod pokličku Systému schovávat mnoho různých procesů a vše velmi zjednodušuji.)

Systém nepozná, zda to, co dělá, má smysl. Je schopný opakovat jednu a tu samou operaci neustále dokola nebo zkoušet provedení nějaké operace u dalších položek fronty, přestože je jasné, že u všech dojde ke stejné chybě. Je tedy důležité mu nastavovat omezení a umožnit jednoduchou kontrolu výsledků jeho práce.

Ostatní, živí uživatelé se také musí naučit se Systémem spolupracovat. Musí vědět, co od něho mají očekávat, dokázat rozpoznat jeho chyby a ne mu jen slepě důvěřovat.

Aplikace

Jak jsem už naznačil v předchozích odstavcích, stále více se toho děje pod povrchem aplikace, automaticky. V podstatě neexistuje okamžik, kdy by aplikace nic nedělala. Těžko se určuje poměr činnosti, kterou aplikace udělá na základě požadavku od uživatele a té, kterou udělá sama (podle plánu nebo v reakci na určitou událost, třeba v jiném systému). Kdybych měl vycházet z toho, které oblasti se věnuji více já sám, pak určitě převažuje právě ta práce ‘pod povrchem’.

Postupně zavádíme do aplikace více prvků, které zvyšují její odolnost a usnadňují nám kontrolu a dohled. Pokud lze určitou práci připravit jako samostatný proces, který poté budeme moci individuálně spouštět, zastavovat a kontrolovat (a také opravovat), je to nyní preferované řešení.

Pro mě je stále důležitější být schopný libovolnou část práce zmiňovaných skrytých procesů reprodukovat. Protože se věnuji převážně komunikaci s cizími systémy a fantazie jejich programátorů nezná mezí, těžko odhaduji, jakou zprávu jejich systém pošle příště a jakou chybu (a kde) v naší aplikaci způsobí. Je proto důležité už při návrhu počítat s tím, že jednou bude nutné otestovat každou část procesu:

  • navázání spojení
  • přijetí zprávy
  • zpracování zprávy
  • validace hodnot
  • zpracování hodnot
  • upozornění uživatelů
  • zaslání odpovědi
  • (…)

Na každou z těchto částí musí ideálně existovat (unit) test, i kdyby ze začátku sloužil jen jako ukázka, jak proces činnost provádí. Jednou se bude hodit i pro kontrolu opravy chyby, která se dříve či později zaručeně objeví.

Ostatní systémy

Naše aplikace není zdaleka jediná, která jde tímto směrem. Neustále přibývají další, se kterými je možné (resp. nutné) komunikovat pomocí API a tím nahradit ruční práci. Kromě našich chyb se tak začínají projevovat i chyby z cizích aplikací.

Začala tak nekonečná soutěž mezi námi a nimi. My se snažíme připravit na nejrůznější i dosud neznámé problémy a udělat chování našeho systému co nejvíce transparentní. Ostatní systémy ovšem přichází nepřetržitě s novými vylepšeními, opravami a samozřejmě i chybami.

U většiny z těchto ostatních systémů se navíc po čase ukáže, zda existují proto, aby skutečně poskytovaly určitou službu, nebo jen proto, aby se splnilo zadání/utratily peníze. Spolupráce s těmi z druhé skupiny je přirozeně o dost složitější a ani jejich služby zpravidla neodpovídají očekávání. O tom, jak rozpoznat dobře připravené API, bych rád někdy v budoucnu napsal víc.

Závěr

Práce bez živých uživatelů přináší nové druhy problémů a výzev. Tam, kde obyčejný uživatel pracuje pomalu, zapomíná, nebo si naopak pamatuje a dokáže improvizovat, program pracuje rychle, přesně podle zadání, nepřemýšlí a zásadně neimprovizuje. Pro program není problém způsobit během chvilky 1 000 chyb, ale není problém jich také 10 000 opravit.

Až nám stroje vezmou práci (nebo jí jim s radostí přenecháme?), budou Váš informační systém používat hlavně jiné programy. Z uživatelů se stanou operátoři, dohlížející na hladký chod. Nejdůležitějšími vlastnostmi aplikace z pohledu programátora pak budou transparentnost, rozdělení do nezávislých jednotek, možnosti propojení s ostatními systémy a odolnost vůči nečekaným chybám.

23. 4. 2014, kategorie: it
comments powered by Disqus