Malý tím, veľké zázraky: Príbeh (Časť 1)
Malý tím, veľké zázraky: Príbeh o refaktoringu, leadership a prežití
Disclaimer: Tento príbeh je založený na skutočných udalostiach. Žiadni developeri neboli počas písania článku fyzicky poškodení. Legacy kód však nemal také šťastie.
Prolog: Welcome to the Jungle
Keď som nastúpil na projekt ako Solution Architect, mal som pocit, že som vstúpil do Indiana Jones filmu. Akorát namiesto hľadania stratených pokladov som hľadal stratené console.log výpisy a snažil sa rozlúštiť hieroglyfy v podobe kódu bez komentárov.
Situácia deň 1:
// Skutočný stav projektu (názvy zmenené na ochranu nevinných)
Status: 🔥 Dumpster fire
Team morale: 📉 Existenčná kríza
Code quality: 💀 "It works on my machine"
Manager: 🏖️ Na mesačnej dovolenke
Architekt (ja): 🤔 "Do I really need this job?"Ak ste si niekedy povedali "Koľko ešte môže byť zlé?", odpoveď je: Vždy môže byť horšie.
Kapitola 1: Stretnutie s "Inventárom"
Na každom projekte existuje developer inventár. To je ten typ kolegu, ktorý:
- Pracuje v firme 15+ rokov ✅
- Pozná každý riadok legacy kódu ✅
- Má kľúče od všetkých systémov ✅
- Copy-paste je jeho primárna design pattern ⚠️
Teória: Roky skúseností = Expert
Realita: Nie vždy
The Case of the Multiplying Tables
// Originál requirement:
"Potrebujeme 12 tabuliek v aplikácii"
// Očakávaný výsledok:
12 tabuliek = 12 komponentov
// Skutočný výsledok:
144 tabuliek = 1 originál + 11 × (copy + úpravy) + 132 variácií
// Ako?
// "Potrebujem túto tabuľku bez stĺpca Email"
// *Ctrl+C, Ctrl+V, Delete column*
// Hotovo! 🎉
// "Potrebujem túto tabuľku so sorting"
// *Ctrl+C, Ctrl+V, Add sorting*
// Hotovo! 🎉
// ... repeat 142×Plot twist: Toto nebol môj prvý raz.
Flashback: Pure JavaScript Architect
Kedysi som stretol projekt kde:
- Celá aplikácia: 1 file, 15,000 lines
- Functions: 0
- Comments: "// TODO: refactor this"
- Author: Architekt s 27 rokmi skúseností
- Ja: Junior developer (nemohol som nič zmeniť)
Vtedajší ja: "Prečo je to všetko v jednom file?" Architekt: "Lebo to tak funguje." Ja: "Ale..." Architekt: "Funguje!"
Lesson learned: Roky ≠ Skúsenosti. Sometimes roky = Opakovanie tých istých chýb.
Kapitola 2: Refaktoring ako záchranná misia
Priorita #1: Stop the bleeding (zastaviť šírenie vírusu)
// ❌ BAD: Copy-paste pattern
class UsersTable extends BaseTable { /* 500 lines */ }
class UsersTableWithoutEmail extends BaseTable { /* 498 lines */ }
class UsersTableWithSorting extends BaseTable { /* 520 lines */ }
class UsersTableWithFilters extends BaseTable { /* 540 lines */ }
// ... × 140 more variations
// ✅ GOOD: Configuration pattern
class ConfigurableTable extends BaseTable {
@Input() columns: ColumnConfig[];
@Input() enableSorting: boolean = false;
@Input() enableFilters: boolean = false;
}
// Usage
<configurable-table
[columns]="userColumns"
[enableSorting]="true"
[enableFilters]="true">
</configurable-table>Fáza 1: Rýchla pomoc - vytvoril som 12 reusable tabuliek
12 tabuliek namiesto 144
Úspora: 132 komponentov
Maintenance: 12× jednoduchší
Time to fix bug: 1× namiesto 12×Fáza 2: Ultimate solution - 1 konfigurovateľná tabuľka
// settings/users-table.config.ts
export const UsersTableConfig: TableConfig = {
columns: [
{ field: 'name', header: 'Name', sortable: true },
{ field: 'email', header: 'Email', sortable: true },
{ field: 'role', header: 'Role', filterable: true }
],
actions: ['edit', 'delete'],
pagination: true
};
// Component
<dynamic-table [config]="UsersTableConfig"></dynamic-table>Výsledok:
Pred: 144 table components
Po: 1 dynamic component + 12 config files
Code reduction: 99.3%
Maintainability: 📈 Through the roof
Developer sanity: 🧘 RestoredLego skladačky prístup
Predstavte si, že staviate dom:
Copy-paste approach:
Potrebujem dom s 3 izbami → Postavím celý dom
Potrebujem dom s 2 izbami → Postavím nový dom
Potrebujem dom s garážou → Postavím ďalší nový dom
Výsledok: 50 domov pre 50 variáciíComponent approach:
Komponenty: Steny, Dvere, Okná, Strechy
Konfigurácia: JSON s popisom domu
Výsledok: Nekonečné kombinácie z 10 komponentovKapitola 3: Sauronovo oko (alebo: Keď micromanagement zabíja)
Po návrate manažérky z dovolenky:
Week 1:
Daily standups: 1× (ok)
Check-in calls: 2× (tolerable)
"Quick questions": 5× (hmm...)Week 2:
Daily standups: 1×
Check-in calls: 4×
"Quick questions": 10×
"Why is this taking so long?": ∞×Week 3:
*Developer sa bojí otvoriť Slack*
*Každý commit vyžaduje vysvetlenie*
*"Môžeš mi ukázať čo robíš?" = 8× denne*
Team morale: 💀
Productivity: 📉
Call centre PTSD: 📞📞📞Real conversation
Manager: "Prečo tento task trvá 3 dni?"
Ja: "Lebo riešim technický dlh z posledných 2 rokov"
Manager: "Ale prečo to nejde rýchlejšie?"
Ja: "Predstav si, že čistíš 10-ročný garáž plný vecí"
Manager: "To si len vymýšľaš dôvody"
Ja: "..."
Developer: "Potrebujem 2 hodiny focus time na debugging"
Manager: *calls after 15 minutes* "Už si to vyriešil?"
Developer: "..."
Team: "Nemôžeme takto pracovať"
Manager: "Prečo je tu taká negatívna atmosféra?"Decision point: Buď odídem ja, alebo táto situácia.
Eskalacia a riešenie
# Stažnosti stupňovali na manažérku
git log --grep="stress" | wc -l
> 47 incidents
# Team turnover rate
echo "3 developers quit in 2 months"
# Konečné rozhodnutie HR
> Manažérka musela odísťLesson learned: Dobrý manager empowers, zlý manager kontroluje každý pohyb.
V ďalšej časti sa pozrieme na The Great Downsizing, transformáciu tímu a lessons learned.