Pokud dáváte záruku na vývoj software, zaděláváte si na problém. A pokud do záruky tlačíte svého dodavatele, můžete si zadělat na problém i vy. Jak nekoupit zajíce v pytli? Existuje řešení.

Záruka na software - bug

Teď zřejmě podezřívavý čtenář zbystří. „Vždyť je normální na své služby dávat záruku!“ Jenomže vývoj software úplně normální službou není. Proč?

  • Každý software obsahuje alespoň 1 chybu. Včetně infrastruktury Googlu, vesmírné rakety nebo WordPress pluginu. I nejprostší funkci (a + b) lze rozbít třeba tak, že do ní dám čísla s milionem cifer a budu se snažit dostat výsledek milionkrát za sekundu. Nebo si schválně zkuste na hloupější kalkulačce vypočítat 10 ÷ 3 × 3. Vyjde vám správně 10 nebo chybně  9,9999999?
  • Proto dávat záruku na software neznamená stát si za kvalitou své práce, ale hrát si na pojišťovnu.
  • Aby programátor nevynalézal kolo, musí používat software tisíců jiných programátorů. Musí se tedy spoléhat na něco, co nemůže dopředu řádně otestovat.
  • Není obvyklé, aby se na software dávala záruka.
  • Vhodnou alternativou k záruce je formální akceptace (předání) software.

Možná si říkáte, že problémy vznikají jen u obřích projektů a mého webu na WordPressu se to týkat nemůže. Jste si jistí?

Taková normální zakázka

Karel má zastaralý minimalistický e-shop. Prodeje celkem váznou a proto do toho chce šlápnout a web předělat. Chce totiž časem dát v práci výpověď a vydělávat jen díky svému e-shopu.

Karel si najme firmu Webaři s.r.o., aby mu web zhotovila. Jelikož nechce do e-shopu dávat moc peněz, preferuje redakční systém WordPress. Společně sepíšou specifikaci na půl stránky A4. Karel nechce kupovat zajíce v pytli a proto si vyžádá záruku 6 měsíců na dodaný web. Karel zaplatí zálohu a firma nový web zhotoví.

Úspěšný projekt? Ne tak docela.

using wordpress so much win

Problémy v ráji

Po několika měsících začne Karlovi chodit spousta objednávek. Karel dá tedy výpověď v práci a začne se webu věnovat naplno. Začíná si všímat problémů, kterých si předtím nevšiml a docela ho to štve. Navíc je web pomalý, jednou nefungoval a dokonce přestaly z webu kompletně chodit e-maily.

No to je vrchol!

Karlovi dojde trpělivost a napíše Webařům ostrý e-mail.

Vážení Webaři,
stránky, které jste mi dodali, mají zcela zásadní vady!!!!! Požaduji jejich neprodlenou opravu!!!!!!!!:

  • Když si zákazník objedná produkt, který je poslední na skladě, mělo by u produktu svítit, že není skladem. To je přeci běžné u každého e-shopu.
  • Úvodní stránka začala mít rozhozený design.
  • Na mobilu v Androidu 2.3.6 má web totálně rozhozený design a nejde používat, to samé v Internet Exploreru 8.
  • Web je někdy tak pomalý, že se skoro nedá používat.
  • Minulý týden web 2 hodiny nefungoval, zrovna ve špičce prodejů.
  • Včera se web na Androidu přestal zobrazovat, píše mi to, že stránky můžou být nebezpečné a něco o certifikátu.
  • Už 3 dny nechodí žádné e-maily s objednávkami.
  • A teď se web dokonce vůbec nezobrazuje, píše to jen „error“.
  • Kvůli výše uvedeným věcem jsem reálně přišel o 100 000 Kč a poškodilo to moji pověst.
  • Myslel jsem, že si od Vás kupuji kvalitní web, ale dodali jste mi zmetek. Na Váš produkt mám ze zákona záruku 2 roky, takže požaduji jejich opravu!

fuuu meme

Má Karel nárok na opravu?

Na první pohled se jedná o zmetek. Pokud by si Webaři chtěli za každou cenu udržet dobrý vztah s Karlem, tak by mu určitě vyšli vstříc. Ale odevzdali snad nekvalitní dílo? Má Karel nárok na bezplatnou opravu?

Záleží především na konkrétním znění smlouvy a kvalitě právníků obou stran. Nicméně ve většině myslitelných případů, nemá Karel nárok na opravu chyb. Proč?

  • Prvních několik výtek bylo zjevných už při předání díla a Karel tak promeškal možnost poukázat na vady díla „bez zbytečného odkladu“.
  • Není-li ve smlouvě (což je i domluva e-mailem) stanovena jakost díla (např. rychlost webu) nemá Karel nárok na uplatnění vady díla, pokud tato vada neznamená ztrátu schopnosti plnit účel díla (nakoupit produkt na webu). Obdobně pokud byste si u kadeřnice nechali udělat mikádo, které by vám neslušelo, nemáte nárok na reklamaci. Chtěli jste mikádo, dostali jste ho. Pokud by vás ale kadeřnice vzala strojkem na ježka, byla by to jiná situace, protože by nedodala objednanou službu.
  • Karel se dožaduje záruky 2 roky, ta se ale týká jen spotřebitelů (soukromých osob), nikoli firem.

Dále bychom mohli řešit, jestli by Webaři měli mít odpovědnost za ušlý zisk, ale to ponechám právníkům. Na téma odpovědnosti za vady díla díla se rozepsali jiní odborníci.

A co ostatní funkční problémy? Podcenili Webaři svoji práci a dodali nekvalitní produkt?

Obrana dodavatele

Reálná situace klidně mohla vypadat tak, že chybám opravdu nešlo ani s vynaložením rozumného úsilí (= v rámci domluvené ceny) předejít:

  • Údajná chyba se skladovostí je vlastnost, nikoli závada. E-shop tak by záměrně navržen. Karel mohl udělat testovací objednávky a ověřit funkčnost, ale neudělal to.
    → Návrh sice nebyl šťastný, ale Karel vůči němu nic nenamítal.
  • Na úvodní stránce byla slideshow, do které Karel nahrál obrázek v nepodporovaném poměru stran, což rozhodilo design stránky.
    → Administrace by ideálně měla být blbuvzdorná, ale Karel způsobil chybu sám.
  • Android 2.3.6 a Internet Explorer 8 jsou zastaralé prohlížeče a není technicky možné dohromady skloubit dokonalý design a 100% kompatibilitu se všemi zařízeními. Dnes si lze prohlédnout web na tisíci a jednom zařízení – od mobilu až po televizi. Existují miliony různých konfigurací. A často i moderní prohlížeče obsahují chyby. Web není plakát, ale shluk informací, které se musí přizpůsobit zařízení, na kterém jsou zobrazeny.
    → Je velmi nákladné ladit vzhled i pro staré prohlížeče. Když mají podíl na trhu cca 2 %, tak se to u většiny webů nevyplatí.
  • Web byl testován s malou návštěvností a malým počtem položek. Počet položek vzrostl 10x a počet návštěv 100x. Takový nárůst se nedal předpokládat a proto je web pomalejší, než byl v době testování.
    → Bylo by dobré připravit web na větší návštěvnost i počet produktů, ale byla by to předčasná a drahá optimalizace.
  • Web nefungoval proto, že nefungoval webhosting.
    → Webaři sice mohli doporučit jiný webhosting, ale výpadek se může stát u kohokoli.
  • Web na HTTPs přestal na Androidu fungovat proto, že server k SSL certifikátu nepřipojil certifikát i své certifikační autority a po aktualizaci telefonu přestal prohlížeč sám stahovat externí certifikáty. Zkrátka vývojáři v Googlu se nějak rozhodli a ostatní se musí přizpůsobit.
    Webaři sice nasazovali SSL certifikát na server, ale použili standardní nastavení s jinými výhodami, které v té době bez problémů fungovalo.
  • Karel měl zřejmě slabé přihlašovací heslo a tak se mu do webu dostal malware. Tento vir napadající WordPress založil stránky s formuláři, které odesílaly spam. Zvýšené množství odeslaných e-mailů detekoval webhosting a proto zablokoval odesílání e-mailů a o této akci informoval Karla. Poslal mu zprávu na jeho kontaktní e-mailovou adresou, kterou byl Karlův soukromý e-mail. Navíc padla Karlovi zpráva do spamu, takže si jí ani nevšimnul a proto nebylo možné na incident včas reagovat.
    → Zabezpečení webu by sice mohlo být lepší, ale Karel byl jedním z uživatelů se slabým heslem.
  • Web fungoval, žádný „error“ Webaři neviděli. Po dlouhé analýze se ale zjistilo, že Karel nebo někdo jiný ze stejné IP adresy vytvářel mnoho požadavků na server s vypnutým JavaScriptem a proto security plugin ve WordPressu zablokoval přístupy z této IP adresy.
    → Security plugin mohl být jinak nastavený, ale Webaři použili výchozí tvůrcem doporučené nastavení.

Celé toto zjišťování trvalo Webařům 2 dny práce, jejich ušlý zisk mohl být třeba 10 000 Kč. Mohou naúčtovat Karlovi za práci na zjišťování příčin těchto problémů? Nebo mají být konzultanty zdarma? A co když Webaři přehání a využívají Karlovo neznalosti? Existují standardy, podle kterých lze zkontrolovat kvalitu práce Webařů? Kdo odhalí skutečnou příčinu a viníka?

Přesně s těmito problémy jsme se v Net Magnetu již setkali.

Moc otázek, málo odpovědí.

Hledá se viník

start trek bsod

  • Může vývojář pluginu ve WordPressu za to, že na Karlovo webu jeho kód nezafungoval správně?
  • Můžou Webaři za to, že použili běžně používané nástroje, metody vývoje a zabezpečení, když měli omezený rozpočet?
  • Může Karel za to, že nahrál obrázek v chybném formátu a měl slabé heslo, když ho administrace nechala?
  • Může vývojář Googlu za to, že navrhl Android prohlížeč příliš jednoduše a s ohledem na rychlost?
  • Může hosting za to, že mu shořel disk a musel obnovit data ze záložního úložiště?
  • A kdo může za to, že bylo možné web jednoduše hacknout?

Kde je hranice toho, že někdo udělal nedbalou chybu nebo použil standardní metodu?

Odpovědí by mohlo být „chtělo to lepší specifikaci.“ Nicméně obsáhnout ve specifikaci každou situaci, která se může pokazit, není možné ani u malých natož pak velkých projektů.

Ze všech těchto důvodů vyplývá neradostný závěr.

Viníka nelze vždy najít a chybám nelze předejít ani je předpovědět.

Pokud nechcete do těchto problémů tahat právníky a soudy, ve finále je to bohužel o vyjednávání a pozici. Tedy jestli dodavatel potřebuje zaplatit za svoji práci nebo jestli objednatel potřebuje rychle funkční web.

Takže je zřejmé, že chybám se nevyhneme. Lze alespoň omezit jejich výskyt?

Množství chyb v software není přímo závislé na kvalitě odvedené práce, ale na důkladnosti testování.

Když by firma dala záruku na software, musela by při stejné kvalitě práce zvýšit cenu. Nenáročný zákazník by přeplácel, rejpal by na tom „vydělal“. Tak či onak by se to pravděpodobně neobešlo bez tahanic, které stojí čas obě strany.

Proto považuji za férovější domluvu dopředu říct, že záruka na software není, a nezahrnovat do ceny projektu žádné spekulativní náklady na pozdější reklamaci. Chcete-li webovou aplikaci budovat dlouhodobě, není důležitá záruka, ale férový vztah s dodavatelem webu. Protože spuštěním webu práce nekončí, ale naopak začínají.

Jak tedy nekoupit zajíce v pytli?

Akceptace ~ záruka

Akceptaci (převzetí) dělá v určité formě každý z nás. Když převezmeme balíček od České pošty, podpisem souhlasíme s tím, že nemáme výhrady k přepravě.

Analogicky se akceptace software provádí po dokončení projektu. Odběratel má nějakou lhůtu (třeba 21 dnů) na to, aby dílo otestoval a sepsal své výhrady. Na opravě těchto výhrad se pak domluví s dodavatelem.

Dalo by se říct, že akceptace je taková zkrácená záruka.

Toto považuji za férový přístup.

Dodavatel ví, že bude po omezený čas opravovat nějaké chyby, které se zákonitě vyskytnou. Zároveň se nemusí obávat, že za ním po půl roce přijde zákazník se seznamem závad a požadavkem k jejich bezplatnému odstranění.

Odběratel ví, že dostane to, co si objednal. Navíc je motivovaný, aby aplikaci řádně otestoval. To zrychluje hledání chyb a ve finále zlepšuje aplikaci pro uživatele.

Jak to dělají jiní?

Mohli byste namítat, že záruka se přece dává běžně. Pokud si necháte opravit hodinky nebo postavit dům, tak ano. Ale četli jste někdy licenci softwarových služeb a produktů, které používáte? Dávají záruku jiné firmy?

Krabicový software

  • Microsoft Word 2016 – bez záruky
    „Řádně licencovaný software bude v podstatných rysech fungovat tak, jak je popsáno v materiálech společnosti Microsoft dodávaných spolu s ním. Výrobce či instalátor ani společnost Microsoft však ve vztahu k licencovanému softwaru neposkytují žádné smluvní záruky.“
  • Microsoft Windows 10 – zřejmě jakási záruka, kdy máte nárok max. na vrácení peněz
    „Pokud společnost Microsoft poruší svou omezenou záruku, potom dle svého uvážení: (i) bezplatně opraví nebo nahradí software, nebo (ii) přijme vrácení softwaru (nebo dle svého výběru zařízení značky Microsoft, na kterém byl software předinstalován) a nahradí případnou uhrazenou částku.“
  • Účetní program Money S3 – bez záruky
    „Absence nebo rozdílnost vlastností či funkcí oproti uživatelské dokumentaci se nepovažuje za vadu a UŽIVATELI nevznikají z tohoto důvodu žádné nároky z odpovědnosti za vady ani nárok na odstoupení od LICENČNÍ SMLOUVY. […] CÍGLER SOFTWARE nenese odpovědnost za škody ani za nepřímé škody, ať jsou jakékoliv […]“

Cloudové služby

  • Google – bez záruky s pofidérní odpovědností za škody spočívající ve vrácení peněz nebo v bezplatném prodloužení služeb
    „[…] NEPONESE SPOLEČNOST GOOGLE ANI JEJÍ DODAVATELÉ ČI DISTRIBUTOŘI ODPOVĚDNOST ZA UŠLÝ ZISK, ZTRÁTU TRŽEB, ZTRÁTU DAT, FINANČNÍ ZTRÁTY […] BUDE CELKOVÁ ODPOVĚDNOST SPOLEČNOSTI GOOGLE […] OMEZENA VÝŠÍ ČÁSTKY, KTEROU JSTE ZA POUŽITÍ SLUŽEB ZAPLATILI (NEBO NA OPĚTOVNÉ POSKYTOVÁNÍ SLUŽEB, POKUD SE PRO TUTO MOŽNOST ROZHODNEME).“
  • Github – bez jakékoli záruky, ani za kompletní ztrátu dat
    „GitHub does not warrant that […] the service will be uninterrupted, timely, secure, or error-free […] GitHub shall not be liable for any direct, indirect, incidental, special, consequential or exemplary damages“

Infrastruktura

  • Amazon AWS – bez záruky
    „WE AND OUR AFFILIATES AND LICENSORS MAKE NO REPRESENTATIONS OR WARRANTIES OF ANY KIND
  • Wedos – náhrada škody za výpadek s maximálním plněním 25 Kč/měsíc
    „Jestliže je služba nedostupná z důvodu poruchy více než 5 minut v kalendářním měsíci, náleží Zákazníkovi kompenzace ve formě slevy 1% za každou další započatou hodinu nedostupnosti, nejvýše však částka odpovídající měsíčnímu (v případě měsíčního předplatného) nebo ročnímu (v případě ročního předplatného) poplatku za provoz služby.“

Závěr

Jako tečku za tímto projektovým okénkem bych zopakoval…

Chybám není možné předejít.

Záruka na software se běžně nedává.

Důležitější je vztah a celková spokojenost než možnost reklamace.

Díky akceptaci dostane odběratel požadovaný výsledek a nad dodavatelem dlouhodobě nevisí hrozba nepředvídatelných reklamací.

Jaký pohled na záruku na software máte vy? Budu rád, když se o své zkušenosti a názory podělíte v diskuzi. A jestli souhlasíte, tak lajkujte a sdílejte 🙂

Tomáš Kouba

Jednatel Net Magnet s.r.o.