Řízení projektů: Agilní vývoj softwaru

6. ledna 2023

Lang: cs en de es

Když vyvíjíte softwarový projekt, tak si kladete otázku, jak ho úspěšně dotáhnout do konce. K tomu to účelu vznikly různé techniky řízení/vedení softwarových projektů. Každá taková metodika má svá pro a proti a tedy se hodí pro různé typy projektů a firemních prostředí. Pokud jde o vývoj softwaru na míru v dnešní dynamické době, tak se osvědčily agilní metodiky, které jsou však dosti odlišné od toho s čím se v životě setká běžný člověk. Dneska se oblasti vývoje software agilní metodiky vývoje hojně rozšířily. V principu se nejedná o nic nového. Avšak i proto, že mnoho typicky nových zákazníků, očekává realizaci stylem fix-time fix-price = pevná cena a dodání v určitém čase, je potřeba si vysvětlit, co je to agilní vývoj software a jaké skýtá pro zákazníky výhody.

Řízení projektů

Řízení projektů je systematická činnost k dosažení realizace nějakého individuální díla. Z toho plyne, že se nejedná o prodej již hotového řešení. A zároveň, že taková realizace přinese vždy nějaké nové překážky, které pomocí řízení projektů se snažíme efektivně překonat. Typicky je potřeba uřídit projekt, tak aby měl požadovanou funkčnost za předem orientačně očekávané peníze a ve vhodném termínu. Projekt, který stojí víc než vydělá nebo je dodán později než bylo třeba, je totiž projekt zbytečný.

První řadě tedy umět řídit projekt znamená mít schopnost projekt dle očekávání dokončit .

Fáze projektu

Průběh projektu je možno rozdělit do těchto fází:

  1. Inicializace
  2. Analýza
  3. Zahájení
  4. Průběh realizace - dlouhodobá práce v jednotlivých iteracích
  5. Ukončení
  6. Zhodnocení

Když se provádí analýza, je potřeba nejen hledět na technické hledisko, ale i na obchodní. To znamená, že se i zváží jestli je to skutečně potřeba, jaké to přinese výhody. Z finanční hlediska se zjišťuje jak moc bude orientačně realizace náročná na zdroje (materiál, čas, finance). Z technického hlediska je potřeba zjistit, jestli je to vůbec realizovatelné.

Metodiky řízení projektů

Metodik řízení projektů je více. Základní metodiky řízení projektů jsou:

  • Metoda kritické cesty
  • Metoda vodopádu = waterfall
  • Agilní metodiky - je jích více se stejnými základními principy
  • PERT (Program Evaluation and Review Technique=technika hodnocení a kontroly programu)
  • PRINCE2
  • atd.

Metodik a technik řízení projektů je mnoho a dotýká se to i oblasti obchodní a komunikační. Proto zmíním a popíší od každého něco. To s čím se dá setkat nejčastěji a vypíchnu podstatné vlastnosti.
Doporučuji i nejprve si spolupráci a danou metodiku řízení vyzkoušet na nějakém malém (pilotním projektu).

Waterfall

Waterfall (vodopádová) bylo nejtypičtější řízení projektů. Někdo rozhodne, že se bude něco vyvíjet a po analýze se do projektu lidi pustí. (Pokud se neudělá analýza nedá se mluvit o tom, že by se projekt řídil).

Metoda kritické cesty

Při realizaci jakéhokoli projektu na sebe navazují různé úkony a bez dokončení předchozího se nedá pokračovat. Tato metoda tak umožňuje se zaměřuje na nalezení těchto kritických míst a následně je sleduje v průběhu realizace projektu.
To pak zaručuje, že se včas, tedy někdy dopředu, ví pokud je problém, který by ohrožoval výrazně další zdárné pokračování v realizaci projektu.
Nejjednodušší je si to představit na realizaci stavby, kde je jasné, že bez základů se nedá stavět budova. A že schnutí betonu se nedá urychlit. Bez určitého počtu lidí není možné dané práce realizovat v plánovaném čase. Některé činnosti zase umožňují paralelní práci a tím se dá realizace projektu urychlit. Ovšem v určitém bodě je potřeba daný úsek práce spojit a to je potřeba umět uřídit.

Fix Time Fix Price

Fix Time Fix Price - nejedná se o metodiku řízení, ale způsob obchodní smlouvy projektu, kdy se daný projekt dodá za předem domluvenou cenu a v daném termínu. Osobně takto realizuji jen menší přesně definované, typicky opakovatelné úkoly. A vzhledem k přesné ceně/času si takovou práci nechávám platit předem.

Na počátku projektu je potřeba rozsáhlá analýza, jejíž náročnost s velikostí projektu výrazně roste. S velikostí projektu stoupá i doba a cena realizace samotné počáteční analýzy. Kvalitní analýzu zdarma vám nikdo neudělá, tudíž je potřeba ji zaplatit aniž je jistota, že se projekt nakonec bude realizovat. Na druhou stranu zákazník má přesné informace o tom jestli se dá projekt realizovat a díky tomu nebude zbytečně investovat peníze a čas. Navíc zná přesnou cenu a termín dodání. Analýzu může prát i jako investici a použít ji jako základ až v budoucnu a klidně s jiným dodavatelem.

Projekty typu Fix Time Fix Price, mají výrazně vyšší cenu, protože dodavatel na sebe bere rizika v průběhu realizace. V průběhu realizace není možno měnit, natož přidávat nové požadavky. To by znamenalo udělat znova celou analýzu.

Agilní

Agilní metodiky vývoje softwaru jsou přesně definované techniky/způsoby řízení vývoje softwarových projektu. Jsou často používané a ještě častěji se o nich mluví. Principiálně se však nejedná o nic nového. Jen díky zadefinování pojmu, sepsání knih vešly více do povědomí.

Agilní metodiky mají několik přesně definovaných technik pro řízení projektů, které se detailně uplatňují ve velkých firmách. Nejčastější se používá technika Scrum.

Pro agilní vývoj je typické:

  • Blízký kontakt s uživatelem = komunikace. Programátor komunikuje s účetní pokud řeší účetní část aplikace nebo se skladníkem pokud řeší skladové funkce.
  • Reakce na požadavky v průběhu vývoje.
  • Dodávání menších funkčních celků. V tzv. iteracích.

Agilní způsob řízení znamená, méně práce s řízením, tedy šetříte čas/peníze s snižujete komunikační šum.

Osobně takovou práci fakturuji průběžně na konci každého měsíčně, i když jdou některé úkoly teprve rozdělané.

Seznam agilních technik:

  • Srum
  • Extrémní programování (XP)
  • Test Driven Development (TDD)
  • Lean development
  • atd

Jak vznikl agilní vývoj

Právě na počátku vývoje softwaru se používal agilní vývoj. Vývojář programoval software sám pro sebe nebo byl vývoj řešen interně a jednalo se o malou firmy.
Vývojář byl tak vždy v těsném kontaktu nejen se zadavatelem, ale i přímo s uživatelem vyvíjeného softwaru. Vzhledem k tomu, že obor informatika byl nový, často se jednalo o skutečný výzkum, tak si každý uvědomoval náročnost vytvoření programu. A s tím spojené hledání nových cest řešení ať už šlo o algoritmy nebo technické prostředky.
V těch dobách se radši většina lidí počítačům jen vyhýbala.
Postupem času jak se však obor rozšiřoval se informatikou začalo zabývat víc a víc lidí a jejich průměrná odbornost se snižovala . Nakonec počítače začaly užívat i běžní lidé čili laici. K čemuž přispěla nejen cena, ale i uživatelská přívětivost a v neposlední řadě otevřený software (opensource) včetně OS GNU/Linux.
Situace je dneska taková, že: Požadavky na vývoj softwarových projektů nyní v převážné většině pochází od běžných uživatelů, kteří by rádi řešení na míru bez znalosti náročnosti řešeného problému. Zákazník často posuzuje pouze cenu. Obchodník, který zastupuje dodavatele, nemá znalosti o projektu a složitosti realizace úkolu, přitom pro uzavření obchodu je schopen slíbit kde co někdy i nemožné. V důsledku toho vznikne obchod o realizaci projektu, který má konkrétně danou cenu a termín zhotovení, ale nemá přesné zadání ani nebyla provedena analýza řešeného problému. Takovéto projekty vznikaly a někdy vznikají ještě dneska.
Jelikož však takové výsledky nebyly dobré a nebyly s nimi spokojeni ani zákazníci ani programátoři, tak vývojáři připomněli jak se má vývoj provádět, aby to bylo ke spokojenosti všech a následně sepsali manifest agilního vývoje.
Ono vyvíjet software není jako prodávat rohlíky nebo prostě prodávat již hotové softwarové řešení. Vývoj je o tom, že je přibližně znám cíl, ale jak se k němu dostat se teprve musí zjistit. A proto se nedá určit přesně ani čas ani cena. A při špatném řízení se může čas i cena výrazně navýšit, přitom zbytečně.

Vlastnosti agilního vývoje

Nedůležitějším článkem při vývoji software je vývojář/program. Proto se vše dělá s cílem, aby mohl programátor pohodlně pracovat. Pro efektivní posouvání k cíli je i úkolem vývojáře spolupracovat se zákazníkem a naopak. Což je v zažitém protikladu, kdy se firmy snaží programátora odstřihnout od uživatele a uživatele držet co nejdál od programátora.
Vývojář musí s klient probrat potřeby navrhnout řešení a vše si musí vysvětlit, samozřejmě i tento čas klient platí. Díky tomu však nedochází ke komunikačnímu šumu a přímá komunikace je navíc časově mnohem efektivnější. Tento přímý kontakt/komunikace má tedy v konečném důsledku tu výhodu, že produkt je lepší a protože se ušetřil i čas, tak i levnější.

Pokud si nedokážete představit co dělá programátor, tak podrobnosti o tom co je náplní programátora najdete v článku: Co je pracovní náplň programátora.

V rychle měnící době se rychle mění požadavky jejich priority a vnikají požadavky nové. Agilní vývoj umožňuje na tyto požadavky reagovat a to rychle. U pevně daného projektu by nezbývalo než projekt zastavit, a znovu od začátku provést analýzu a zahájit vývoje nového upraveného projektu.

Zákazníci si pochvalují, že místo jedné velké schůzky a pak čekání na výsledek, který se samozřejmě výrazně rozchází s představou. Mohou průběžně dodávat podklady, upravovat zadání a hlavně připomínkovat dodané řešení. Postupně tak dostávají výsledek, který můžou kontrolovat a začít i používat. A jednotlivými iteracemi se blíží víc a víc jejich potřebám a představám.

Tato metodika je vhodná tam, kde se požadavky mění nebo je nedokážeme podrobně specifikovat nebo potřebujeme rychle dodat dílčí funkční řešení. Ano, obecně vzato jednodušeji vypadá, sepsat zadání a pak počkat až dorazí výsledek, ale sepsat dostatečně přesné zadání je velice obtížné. (A málokomu se chce sepisovat) U nemalých projektů není často možné na začátku domyslet všechny detaily.
Vytváření dobrého zadání se tak neobejde bez analýzy nebo i vytvoření nějakého prototypu.

U fixního zadání se také očekává fixní cena, což v praxi znamená buď ořezaný nebo špatný výsledek. U fixních zadání následně tedy dochází k potřebě více-prací.
Čili fixní cena u nemalých projektů je idealistická představa, pokud jde o vývoj na míru. (Něco jiného je koupě hotového řešení.) Je totiž potřeba vzít v potaz, že aby dodavatel zahrnul rizika, tak typicky cenu násobí a to minimálně 2x až 4x.
Z toho plyne, že byť u agilního vývoj na první pohled není zřejmá konečná cena, vždy vyjde levněji. Protože, vždy platíte jen za to, co potřebujete a co se udělá.
Fix-price vyjde levněji, jedině pokud bude dodavatel ve ztrátě a to dlouhodobě nikdo dělat nebude.

Aplikace

Pro podporu řízení projektů existují různé aplikace. Existují i takové aplikace, které jsou specializují na řízení softwarových projektů a které jsou na optimalizované pro vývojáře softwaru. Jedním takovým nástrojem je webová aplikace GitLab, která integruje i další prostředky pro efektivní vývoj jako je GIT. Manažeři tak v GitLabu mohou vést úkoly a řídit realizaci projektu včetně jednotlivých fází.

gitlab úkoly

Navíc obsahují i další funkce a umožnující integrace s dalšími nástroji. Například, je možnost používat automatické testování a automatické nasazování.

Úspěšný projekt

Ať už realizujete malý nebo velký projekt, základem úspěchu je:

  • Předat požadavky
  • Otestovat si dodané řešení

Články na podobné téma

Jak použít aplikaci MailCatcher pro testování emailů
Návod: Python OpenAI API
Vytvoření WebSocket webové aplikace a nastavení proxy
Jak provozovat staré PHP aplikace
Co by měl umět dobrý programátor
Programovací jazyk Rust
NodeJS: vývoj, konfigurace serveru
Nette security bug CVE-2020-15227
Jak porovnat dvě stejné databáze?
REST API: API platform
Vlastní web a mail hosting se softwarem ISP Config
Programovní v SQL: PostgreSQL, MySQL/MariaDB
HTTPS: zabezpečený web
NoSQL databáze Mongo DB
Připojení k Microsoft SQL Serveru z Linuxu
Co je pracovní náplň programátora
Lokalizace aplikací v jazyce Python
Jaký mail a web hosting vybrat
How to make wireless low power Arduino
Digispark - Programujte mikrokontrolér Atmel ATtiny pomocí Arduino IDE
Program Roulette
Vývoj pro procesory ARM s Arduino IDE
Wireless low power Arduino
Pyradio - Python program for receive Internet radio with text user inteface
UPS monitor pro Android
Bezdrátový bateriově napájený WiFi teploměr
Jak programovat WiFi procesor ESP8266
Comparison IQRF vs Wireless Arduino
Jakou platformu zvolit pro eshop? Například Prestashop
Development kits and gateways for wireless platform IQRF

OpenStreetMap a GPS trasy v mapě na webu
Quickplay
Java program pro přehledné monitorování záložních zdrojů
Čipové kontaktní a bezkontaktní karty Java Card OpenPlatform
Otevřený chytrý telefon s Linuxem - Openmoko Neo FreeRunner
Vývoj pro bezdrátové moduly s procesorem PIC pod GNU/Linux - IQRF
Grafický program pro embeded/mobilní zařízení na vyhledávání dopravního spoje.
O programování a ruzné programy v jazyce Java, Python a dalších
Java program a applet Kalkulačka
Java program na výpočet kvadratické rovnice

Odběr novinek

Pokud máte zájem dostávat příležitostně na email novinky.
Můžete se vyplněním emailu registrovat k odběru novinek.


+