Difference between revisions of "Dynamika technického dluhu v softwarovém vývoji"

From Simulace.info
Jump to: navigation, search
(Přidání témata simulace: Dynamika technického dluhu v softwarovém vývoji)
 
m (Blanked the page)
(Tag: Blanking)
 
Line 1: Line 1:
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.
 
 
[[File: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)
 
 
 
[[File: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
 
 
* YLI-HUUMO, Jesse, Andrey MAGLYAS a Kari SMOLANDER, 2016. How do software development teams manage technical debt? – An empirical study. Dostupné z: doi:https://doi.org/10.1016/j.jss.2016.05.018
 
 
* TOM, Edith, Aybüke AURUM a Richard VIDGEN, 2013. An exploration of technical debt. Journal of Systems and Software. 86(6), 1498–1516. Dostupné z: doi:https://doi.org/10.1016/j.jss.2012.12.052
 
 
* 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
 
 
* Wierzchanowski G. and Jackiewicz M. Web Article: The complete guide to technical debt management: best practices for future proofing your new apps. Dostupné z: https://www.rst.software/blog/technical-debt-management
 
 
Jiné pomocné materiály
 
Feedback loops: System Dynamics: Exploring System Dynamics in Feedback Loops [https://www.fastercapital.com/content/Feedback-loops--System-Dynamics--Exploring-System-Dynamics-in-Feedback-Loops.html]
 
 
Technical debt quantification financial analysis: [https://fullscale.io/blog/technical-debt-quantification-financial-analysis/]
 
 
 
=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]
 

Latest revision as of 20:40, 15 June 2025