User:Hrus07

From Simulace.info
Revision as of 20:39, 15 June 2025 by Hrus07 (talk | contribs) (Created page with "Technický dluh je dnes neodmyslitelnou součástí softwarového vývoje. Vzniká v důsledku různých důvodu (tlak na rychlost dodání, neoptimální řešení, použív...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Technický dluh je dnes neodmyslitelnou součástí softwarového vývoje. Vzniká v důsledku různých důvodu (tlak na rychlost dodání, neoptimální řešení, používání zkratek a zanedbání architektury). Tento dluh se časem akumuluje a projevuje se v podobě nárůstu úsilí nutného k úpravám, údržbě ale ovlivňuje i další vývoj. Čím větší dluh, tím větší dopad na produktivitu týmu. Projekt se zpomaluje a dále zvyšuje celkové náklady.

Definice problému

Aplikace, o kterou se starám vznikla jako demovací nástroj. S průběhem času se vyvinula do plnohodnotného projektu a její rozšiřování naráží na technologický dluh. Začínáme tedy s již existencí defektů, ke kterému se přidává backlog nových funkcionalit. Stavu nepomáhá omezená velikost týmu, zdrojů a talk od vedení.

Metoda

Pro simulaci byla zvolena metoda systémové dynamiky, která je vhodná pro modelování zpětných vazeb a kumulativních efektů v časově proměnných systémech. Model byl vytvořen v nástroji Vensim.

Model

Model reprezentuje reálný případ z praxe. Kde dochází k interakci mezi backlogem, technickým dluhem, produktivitou a strategiemi řízení dluhu.

Míra využití zkratek se pohybuje kolem 4 z 10 případů. Backlog v tomto momentu má přes 80 hodin na jednotlivých požadavcích. A taky v tomto momentu už máme vedle backlogu kolem 30 hodin přirazených na refaktoring z důvodu neoptimálních řešení. Projekt je koncipován pro 2 aktivní developery s možností rozšíření na 6 lidí. Míra nově příchozích požadavcích je simulována normálovým rozdělením, tasky chodí pravidelně na týdenní bázi no pro jednoduchost jsme upravili logiku a denně se generuje v průměru 6 hodin práce. V tomto modelu jsme zanedbali svátků a jiných nepracovních dnů. Jelikož na projektu pracují převážně studenti, uvažujeme produktivitu 50 %.

Pro CLD jsme si identifikovali tři důležité kauzální slučky:

R1 – Růst dluhu: Tlak na rychlé dodání zvyšuje míru zkratek, což vede k rychlejší akumulaci technického dluhu, ten snižuje produktivitu, což vede k pomalejšímu dodání a opětovnému nárůstu tlaku.

R2 – Ztráta morálky: Nárůstem dluhu se zvyšuje frustrace a ztráta morálky týmu, což má negativní dopad na produktivitu a znovu zvyšuje backlog a dluh.

B1 – Refaktoring: Pokud dochází k refaktoringu, může dojít k redukci technického dluhu a obnovení části ztracené produktivity.

Hrus07 01.png

SFD model obsahuje následující: Proměnné v modelu: • Počáteční backlog (hodinově) • Počáteční dłuh • Velikost týmu (počet developerů) • Základní produktivita • Míra zkratek (neboli nátlak vedení, protože alibisticky počítáme s poctivostí developera) • Podíl času na refaktoring • Efektivita refaktoringu • Dopad dluhu na produktivitu • Nové požadavky (generovány s malou stochastickou variabilitou)


Hrus07 02.png

Výsledky

Prvotní simulace se spoléhali na konstantní alokaci času na refaktoring kterou je zákazník ochoten zaplatit kolem 10 %. Tato míra pomáhá udržet duh pod kontrolou, ale dlohodobě nedokáže dluh zastavit. Reaktivní strategie (refaktoring, když duh dosáhne určité úrovně) se ukazuje jako efektivnější v rovnováze mezi krátkodobou produktivitou a dlouhodobou udržitelností vývoje. Proto dále uvažujme jen výsledky s dynamickou mírou alokovaného času pro refaktoring.

Simulace jednoho roku projektu z počátečního stavu by nebyla zvládnutelná a by bylo odpracováno méně než 8 hodin. 1 student by na konci roku efektivně zvládl odpracovat 2 hodiny na projektu a 1.5 hodiny na refaktoringu.

Optimalizací počtu developerů jsme zjistili, že 3 studenti jsou optimální počet pro udržení 8 hodin práce na projektu a 3 hodin na refaktoringu, přičemž dodání práce nekolísá a dluh se zmenšuje. Přičemž studenti můžou být pohodlně nahrazeni 2 zaměstnanci na plný úvazek.

Dle předpokladu, vyšší optimalizace získáme jen za předpokladu snížení tlaku a tedy míry zkratek které zaměstnanci použijí. Optimální řešení je 20 % využití zkratek s 2 zaměstnanci na plný úvazek. Při kterém získáme 12.4 hodin práce na projektu místo 8 s nulovou mírou využívání zkratek.

Závěr

Model potvrzuje, že řízení technického dluhu je klíčové pro udržitelný vývoj software. Projektoví manažeři a stakeholdeři mohou pomocí simulace pochopit důsledky různých rozhodnutí a lépe prioritizovat mezi rychlostí dodání a kvalitou kódu. Zkratky dokážou přinést bonus k produktivitě no musí být správně ošetřeny a zkratky nesmí překročit hranici, v našem konkrétním případu 20 %. Refaktoring není luxus, ale nezbytný nástroj k zabránění kolapsu produktivity.

Data

Po konzultaci s vedením jsem dosal povolení pro využití produkčních dat na méně důležitém projektu a kombinoval je s informacemi z odborní literatury.

  • GUPTA, Kartik, 2025. Measuring the Impact of Technical Debt on Development Effort in Software Projects. arXiv [online]. [cit. 2025-05-12]. Dostupné z: https://arxiv.org/abs/2502.16277
  • HOLVITIE, Johannes, Sherlock A. LICORISH, Rodrigo O. SPÍNOLA, Sami HYRYNSALMI, Stephen G. MACDONELL, Thiago S. MENDES, Jim BUCHAN a Ville LEPPÄNEN, 2018. Technical debt and agile software development practices and processes: An industry practitioner survey. Information and Software Technology. 96, 141–160. Dostupné z: doi:https://doi.org/10.1016/j.infsof.2017.11.015

Jiné pomocné materiály Feedback loops: System Dynamics: Exploring System Dynamics in Feedback Loops [1]

Technical debt quantification financial analysis: [2]


Kód

File:Hrus07.mdl

(01) Akumulace dluhu=Míra zkratek * Dodana prace

   Units: Hour

(02) Backlog= INTEG (MAX(Nové požadavky - Dodana prace, 0), Počáteční backlog)

   Units: Hour

(03) Čas na Refaktoring=Produktivita * Podil refaktoru

   Units: Hour

(04) Developeři=1 + INTEGER ((Backlog + Dluh) / 160)

   Units: Dmnl [1,20,1]

(05) Dluh= INTEG (Akumulace dluhu-Refaktoring, Počáteční dluh)

   Units: Hour

(06) Dodana prace=Produktivita * ( 1 - Podil refaktoru)

   Units: Hour

(07) Dopad Dluhu=1 / (1 + EXP((Dluh - 50) / 10))

   Units: Dmnl

(08) Efektivita Refaktoringu=0.6

   Units: Dmnl [0,1,0.01]

(09) FINAL TIME = 365

   Units: Day
   The final time for the simulation.

(10) INITIAL TIME = 0

   Units: Day
   The initial time for the simulation.

(11) Míra zkratek=0.4

   Units: Dmnl [0,1,0.01]

(12) Nové požadavky=RANDOM NORMAL(4, 10, 6, 2, 12345)

   Units: Hour

(13) Počáteční backlog=80

   Units: Hour [0,500,8]

(14) Počáteční dluh=30

   Units: Hour [0,500,8]

(15) Podil refaktoru=MIN(1, Dluh / 150 + 0.2 * (Backlog / 200))

   Units: Hour

(16) Produktivita=Developeři * 8 * Základní produktivita * (1 + 0.35 * Míra zkratek) * Dopad Dluhu

   Units: Hour

(17) Refaktoring=Čas na Refaktoring * Efektivita Refaktoringu

   Units: Hour

(18) SAVEPER =

      TIME STEP 
   Units: Day [0,?]
   The frequency with which output is stored.

(19) TIME STEP = 1

   Units: Day [0,?]
   The time step for the simulation.

(20) Základní produktivita=0.5

   Units: Dmnl [0,1,0.01]