Kalkulace vývoje software

Mudvy

Kalkulace vývoje software
« kdy: 17. 09. 2020, 16:43:48 »
Zdravím uživatele zdejšího fóra. Rád bych se zde zeptal na zkušenosti druhých s kalkulacemi náročnosti vývoje softwaru, jako jsou například WPF aplikace. Abych byl konkrétní, tak jsou to tvorby uživatelských prostředí, práce s daty, automatizace sw třetích stran, kooperace mezi více instancemi, time managemet apod. Zkrátka se jedná o řešení problémů, které vznikají ve firmách, kde dlouho zanedbávaly přínosy technologií a dnes jsou z toho systémy tvořené miliony excelových tabulek na všechno.

Abych trochu popsal mojí situaci, tak jsem v naší firmě zodpovědný za vývoj od A do Z. Tím pádem zastávám několik rolí, které však vyžadují různé zkušenosti. Nejtěžší je pro mě zastávat roli projekťáka, kde je nutno dokázat z nabídky vytvořit hodinovou kalkulaci, do které se pak jako vývojář musím vejít. Problém nastává, pokud jsou práce odhadovány na několik měsíců a celý sw je komplexní dílo co pokrývá spoustu funkcí v jednoduché formě používání. Během tvorby je často nalezeno místo, se kterým nebylo v kalkulacích počítáno, ale je nutné na něm ztrávit čas, aby celé dílo fungovalo spolehlivě. Odhadovaný čas je tím pádem nenaplněn a spíš se značně překračuje.

Částečně je nedostatek času i moje vina, protože jsem puntíčkář a považuju práci za hotovou jen tehdy kdy vím co to dělá než, když si myslím, že vím co to dělá, ale ve skutečnosti to tak není. Program dělá co napíšu, ne to co si myslím když to píšu.

Pak nastávají komplikace s obhajováním víceprací, stress z nedostatku času a horší kvality na úkor rychlosti. Rád bych celý princip dělal jinak, ale bohužel nemám s jiným postupem kalkulací a vedení práce zkušenosti a i v naší firmě jsem veden takto, jak se to dělá v jiných oblastech, kde to však funguje.

Mám tedy dotaz, jaké jsou osvědčené postupy při vývoji, aby byl pohodlný jak pro vývojáře tak i pro zákazníka.

Děkuji za všechny komentáře.



« Poslední změna: 17. 09. 2020, 17:07:24 od Petr Krčmář »


Re:Kalkulace Vývoje SW
« Odpověď #1 kdy: 17. 09. 2020, 16:58:09 »
nejsem projektak, spis obcas odhaduju narocnost svoji prace asi jako ty.
Vzdycky se mi oplatilo to co odhadnu vynasobit dvema a prinejhorsim to pak nakonci nestalo tolik, ale zpravidla to tak nejak vyjde. (kolonka nepredvidatelne problemy :) )

Re:Kalkulace Vývoje SW
« Odpověď #2 kdy: 17. 09. 2020, 17:03:03 »
Doporucil bych podivat se na PERT.


Re:Kalkulace vývoje software
« Odpověď #3 kdy: 17. 09. 2020, 17:53:25 »
Hmmm...

existují metody jak se k žádanému dostat - shora dolů, naopak, použít podobné kalkulace, management rizik, agilní přístup nebo T&M pokud to opravdu jinak nejde.

Nicméně za mě je zde problém, že jste děvče pro všechno z čehož plynou problémy - člověk odpovědný za vývoj od A po Z má obvykle k dispozici tým, který je schopen dílo posoudit, analyzovat, nacenit, odřídit vývoj, otestovat, nasadit a provozovat. Tým o velikost jednoho hrdinu obvykle skončí na hřbitově nebo vyhořelý velice brzo...

Moje doporučení je investovat nějakou korunu do konzultanta/ů a A/ nechat je zpracovat tento projekt, B/ nechat je zpracovat procesní framework pro budoucnost...

Jinak osvědčená metoda, která zaručí úspěch prostě neexistuje, každá společnost je jiná, stejně jako každý zákazník...

Re:Kalkulace vývoje software
« Odpověď #4 kdy: 17. 09. 2020, 18:09:41 »
Nejlepší je zjistit, kolikanásobně jste původní odhad překročil v minulých případech a v vynásobit příslušnou konstantou v aktuálním odhadu.

Negativní dopady špatného odhadu či špatné analýzy se dají minimalizovat rozdrobením na malé podčásti - pokud něčemu věnujete tři dny místo původně odhadovaného dne jednoho, tak se tolik nestane. Pokud něčemu věnujete tři měsíce místo odhadovaného měsíce jednoho, je to problém. Rozdrobení funguje nejlépe pokud je možno rychle prototypovat. Na prototypu se dá názorně ukázat, co je jak pracné. Dá se včas zatáhnout ruční brzda, pokud projekt neúměrně bobtná.

Doporučuju také nechat si udělat odhad u jiné externí firmy. Pravděpodobně si napočítají veškeré potřebné rezervy což zlepší Vaši informovanost a vyjednávací pozici při obhajování projektu. Pokud externí firma nacení vývoj na půl milionu a vy jej nabízíte za 300 tisíc, může to být výhra/výhra pro Vás i pro vaši firmu. Vy máte výhodu, že znáte prostředí a interní procesy ve firmě, takže vývoj můžete nabídnout za menší náklady jelikož ušetříte na analýze. Firma vidí, že jste nejlevnější způsob, jak software vyvinout. Výhra-výhra.

Nakonec záleží, jaké máte vy nebo firma rezervy, kterými je možné vykrýt například potřebné sebevzdělání či vybavení nutné pro vývoj. Pokud nemáte dostatečné zkušenosti a vybavení, může vyjít poměr opačně - zkušený externista může software vyvinou za násobně menší čas než vy, pokud se musíte většinu věcí učit, nakoupit licence apod. To se firmě může vyplatit pouze tehdy, pokud se investice do Vašeho vzdělání vrátí tj. pokud v dané specialilzaci dokážete další projekt realizovat úsporněji. Zde hrají roli i osobní schopnosti a dále vztahy ve firmě. Znovupoužitelnost kapitálu (zkušení lidé) se v daném časovém úseku zvyšuje se specializací - pokud by byl každý projekt jiného charakteru, může být problém použít předchozí zkušenosti. Proto jsou vysoce cenění lidé s širokým záběrem, ovšem k tomu záběru potřebovali znační čas (investici), aby jej získali. Čili mluvíme o volbou mezi specializací a rozhledem přičemž každá varianta přináší jiné potřeby.

A nezapomeňte, že nemusíte dělat vše sám, můžete si nadiktovat, co budete potřebovat od kolegů. Tím se může i vhodně delegovat zodpovědnost a rozdělit rizika. Pokud vás v tom bude víc, nebudete z toho míst takové nervy. Příliš velký tým je ale náročný na synchronizaci, leckdy dobře funguje dvojice či trojice lidí, ale to záleží také na charakteru firmy... Mimochodem dobré vedení by Vám mělo dát veškerou podporu pro kvalitní odhady, takže místo toho, aby se vozilo po nedodržených termínech, by mělo zvládnou Vás managovat tak, aby k problémům nedocházelo - úměrně k vašim zkušenostem (u nezkušeného pracovníka musí vedení předjímat automaticky chyby a minimalizovat jejich rizika pro firmu i zaměstnance). Pokud byste ovšem byl seniorní pracovník, mělo by toto být právě Vaším úkolem.
« Poslední změna: 17. 09. 2020, 18:11:54 od Ondrej Nemecek »


Re:Kalkulace vývoje software
« Odpověď #5 kdy: 17. 09. 2020, 18:14:29 »
PS: Začal bych tím násobením odhadů a vyhotovením odhadu od jiných firem. Pak můžete vzít rozum do hrsti a navrhnout třeba nějakou metodiku ke změně firemních zvyklostí při kalkulaci a schvalování projektů.

Mudvy

Re:Kalkulace vývoje software
« Odpověď #6 kdy: 17. 09. 2020, 21:45:47 »
Děkuji za rady, máte pravdu že není dobré když je na vše člověk sám. Kdybych mohl, raději bych tuto práci přenechal někomu zkušenějšímu :). K práci používám visual studio kde je k dispozici docela zajímavy ALM Azure DevOps. Používá se
tento nástroj na řízení projektů v praxi?

Osobně vidím tvorbu kalkulací těžší práci, než vývoj samotného programu :D. Baví mě vymýšlet věci, ale nedokážu odhadnout jak rychle co vymyslím.

Re:Kalkulace vývoje software
« Odpověď #7 kdy: 17. 09. 2020, 22:25:16 »
stare heslo rika, ze na kazdy radek v kodu by mely byt aspon dve osoby.
kolik uz jsem zazil projektu, kde kritickou vec znal jeden clovek, pak onemocnel a byl pruser.

Re:Kalkulace vývoje software
« Odpověď #8 kdy: 17. 09. 2020, 22:27:35 »
Osobně vidím tvorbu kalkulací těžší práci, než vývoj samotného programu :D. Baví mě vymýšlet věci, ale nedokážu odhadnout jak rychle co vymyslím.

protoze se napriklad budes muset naucit neco noveho, takze odhad neni lehky.
proto by se melo odhadovat jen v bodech, lehky ukol, stredni, tezky, extremni co se musi rozsekat (fibonacci).

Re:Kalkulace vývoje software
« Odpověď #9 kdy: 17. 09. 2020, 23:09:21 »
Koukněte na metodiku odhadu nákladů podle modelu COCOMO. Je to sice trochu starší, ale jednoduché a docela se s tím dá trefovat. Používá to pro odhad např. sloccount(1); příklad výstupu na malém programu:
Kód: [Vybrat]
Total Physical Source Lines of Code (SLOC)                = 2,967
Development Effort Estimate, Person-Years (Person-Months) = 0.63 (7.52)
 (Basic COCOMO model, Person-Months = 2.4 * (KSLOC**1.05))
Schedule Estimate, Years (Months)                         = 0.45 (5.38)
 (Basic COCOMO model, Months = 2.5 * (person-months**0.38))
Estimated Average Number of Developers (Effort/Schedule)  = 1.40
Total Estimated Cost to Develop                           = $ 84,640
 (average salary = $56,286/year, overhead = 2.40).

Tj. necelé 3 tisíce řádků, 7 a půl člověkoměsíců práce, trvalo to ale o dva měsíce méně, protože krom jednoho člověka na fulltime tam další přicmrndával. :-) U výpočtu ceny si pak všimněte toho overheadu, kterým se násobí ten odhad člověkoměsíců.

Re:Kalkulace vývoje software
« Odpověď #10 kdy: 17. 09. 2020, 23:45:16 »
pocitat cenu podle poctu radku kodu? to je echt novatorstvi.
Děkuji za možnost editace příspěvku.

Re:Kalkulace vývoje software
« Odpověď #11 kdy: 17. 09. 2020, 23:58:07 »
pocitat cenu podle poctu radku kodu? to je echt novatorstvi.

Spíš by to mělo být opačně, z analýzy by mělo vypadnout, kolik toho kódu bude potřeba.

Ale poměr funkčnosti vs. počet řádků vychází různě podle jazyka a použitých nástrojů.

Některé jazyky jsou tak expresivní, až se blbě čtou (Scala...)  ;D

xPoli

Re:Kalkulace vývoje software
« Odpověď #12 kdy: 18. 09. 2020, 08:00:16 »
Já při kalkulacích dělím projekt na menší a menší části, až jsem schopen udělad odhad pro ten který bod. I malinký jednoduchý projekt tak obsahuje řádově nízké desítky řádků. Nezapomínám na body jako vytvoření repozitářů a režie s commity (pracuju sám, takže si sám dělám revizi kódu "chunk by chunk") a tvorba uživatelské dokumentace. Jednotlivé řádky jsou v rozsahu jednotek hodin až nízkých jednotek dnů. U bodů, které jsou typově nové a budu je řešit od nuly násobím prvotní odhad toho bodu zhruba 2-3x. Udělat takový odhad někdy tvrá i hodiny, když si musím nějaký bod v základních obrysech rychle naprototypovat nebo dohledat v dokumentaci, že můj nápad bude realizovatelný.

U zákazníků se pak dá lépe obhajovat, když relativně malý projektík vyjde na 30-40MD. Zákazník pak nad takovou tabulkou usoudí, že některé jeho požadavky jsou z říše přání a ne potřeb a tabulka se proškrtá. Aby to proškrtání nebylo neomezené, váže se implementace některých řádků na jiné - tzn. B nejde bez A, ale samostatné A lze apod.

Žádný SW na správu projektu nepoužívám, stačí mi takhle vytvořená tabulka v markdown a případně nějaká malůvka bokem, která určuje pořadí jednotlivých bodů během implementace.

Re:Kalkulace vývoje software
« Odpověď #13 kdy: 18. 09. 2020, 14:44:15 »
Drobením taky dostávám nejrealističtější čísla, často víc než jsem od boku odhadoval. Ale je to dost pracné...