Apgūstiet priekšgala atkarību pārvaldības sarežģītību ar Renovate un Dependabot. Šis ceļvedis piedāvā ieskatus, labāko praksi un praktiskus piemērus.
Frontend atkarību apgūšana: Visaptverošs ceļvedis Renovate un Dependabot
Straujajā priekšgala izstrādes pasaulē sekošana līdzi atkarībām nav tikai ērtības jautājums; tas ir būtisks projekta veselības, drošības un veiktspējas uzturēšanas aspekts. Projektiem kļūstot lielākiem un attīstoties, ārējo bibliotēku un ietvaru skaits, uz kuriem tie balstās, var ātri kļūt nekontrolējams. Manuāli atjauninājumi ir laikietilpīgi, pakļauti kļūdām un bieži tiek atstāti novārtā, kā rezultātā rodas novecojuši pakotnes ar potenciālām drošības ievainojamībām vai saderības problēmām. Šeit talkā nāk automatizētie atkarību pārvaldības rīki, piemēram, Renovate un Dependabot, kas piedāvā uzlabotus risinājumus atjaunināšanas procesa racionalizēšanai.
Šis visaptverošais ceļvedis ir izstrādāts globālai izstrādātāju, komandu vadītāju un projektu vadītāju auditorijai. Mēs izpētīsim priekšgala atkarību pārvaldības pamatkoncepcijas, iedziļināsimies Renovate un Dependabot iespējās, salīdzināsim to funkcijas un sniegsim praktiskus ieskatus, lai palīdzētu jums ieviest un optimizēt to lietošanu savās daudzveidīgajās, starptautiskajās komandās.
Priekšgala atkarību pārvaldības būtiskā loma
Priekšgala izstrāde lielā mērā balstās uz plašu atvērtā pirmkoda bibliotēku un rīku ekosistēmu. Sākot ar lietotāja interfeisa komponentu ietvariem, piemēram, React, Vue un Angular, līdz stāvokļa pārvaldības risinājumiem, utilītu bibliotēkām un būvēšanas rīkiem, šīs atkarības veido mūsdienu tīmekļa lietojumprogrammu pamatu. Tomēr šī paļaušanās rada vairākas problēmas:
- Drošības ievainojamības: Novecojušas atkarības ir galvenais drošības pārkāpumu veids. Ievainojamības tiek atklātas un labotas regulāri, un, neizdarot atjaunināšanu, jūsu lietojumprogramma paliek neaizsargāta.
- Kļūdu labojumi un veiktspējas uzlabojumi: Izstrādātāji pastāvīgi izdod savām bibliotēkām labojumus un veiktspējas uzlabojumus. Sekošana līdzi nodrošina, ka jūs gūstat labumu no šiem uzlabojumiem.
- Jaunas funkcijas un modernizācija: Sekojot līdzi atkarību atjaunināšanai, varat izmantot jaunas funkcijas un arhitektūras modeļus, saglabājot savu kodu bāzi modernu un viegli uzturamu.
- Saderības problēmas: Jūsu projektam attīstoties un atjauninot citas jūsu sistēmas daļas, vecākas atkarības var kļūt nesaderīgas, radot nedarbojošu funkcionalitāti vai sarežģītu refaktorēšanu.
- Tehniskais parāds: Atkarību atjauninājumu novārtā atstāšana rada tehniskos parādus, padarot turpmākos atjauninājumus sarežģītākus un dārgākus.
Efektīvai šo atkarību pārvaldībai nepieciešama proaktīva un automatizēta pieeja. Šeit rīki, kas paredzēti atkarību atjauninājumu atklāšanas un lietošanas automatizēšanai, kļūst par neatņemamu.
Iepazīstinām ar Renovate un Dependabot
Renovate un Dependabot ir divi populārākie un jaudīgākie automatizētie atkarību pārvaldības roboti, kas pieejami šodien. Abi cenšas vienkāršot jūsu projekta atkarību atjaunināšanu, automātiski izveidojot pieprasījumus par labojumiem (PR) vai apvienošanās pieprasījumus (MR) atkarību atjauninājumiem.
Dependabot: GitHub vietējais risinājums
Dependabot sākotnēji bija neatkarīgs pakalpojums, ko 2020. gadā iegādājās GitHub. Tagad tas ir dziļi integrēts GitHub platformā, piedāvājot nevainojamu pieredzi projektiem, kas mitināti GitHub. Dependabot skenē jūsu projekta atkarību failus (piemēram, package.json, package-lock.json, yarn.lock utt.) un automātiski izveido PR, kad ir pieejami atjauninājumi.
Dependabot galvenās funkcijas:
- GitHub integrācija: Dziļi integrēts ar GitHub, padarot iestatīšanu un lietošanu vienkāršu GitHub lietotājiem.
- Drošības brīdinājumi: Proaktīvi brīdina par zināmām jūsu atkarību ievainojamībām un var automātiski izveidot PR, lai tās novērstu.
- Automātiskie versiju atjauninājumi: Izveido PR nelieliem un labojumu versiju atjauninājumiem jūsu npm, Yarn un citām pakotņu pārvaldnieku atkarībām.
- Konfigurācija, izmantojot
dependabot.yml: Ļauj plaši konfigurēt atjaunināšanas stratēģijas, grafikus un mērķus, izmantojot īpašu YAML failu jūsu repozitorijā. - Monorepo atbalsts: Var pārvaldīt atkarības vairākās pakotnēs monorepo ietvaros.
- Konkrētu atkarību mērķēšana: Varat konfigurēt Dependabot, lai tas atjauninātu tikai noteiktas atkarības vai ignorētu citas.
Dependabot spēks slēpjas tā vienkāršībā un ciešajā integrācijā ar GitHub ekosistēmu, ieskaitot tā CI/CD cauruļvadu (GitHub Actions) un drošības funkcijas.
Renovate: Funkcijām bagātīga, platformai neatkarīga jaudīgā programma
Renovate ir atvērtā pirmkoda, ļoti konfigurējams un platformai neatkarīgs atkarību pārvaldības rīks. Tas atbalsta plašu platformu klāstu, ieskaitot GitHub, GitLab, Bitbucket, Azure DevOps un citas. Renovate ir pazīstams ar savu plašo konfigurējamību, uzlabotajām funkcijām un plašo atbalstu dažādiem pakotņu pārvaldniekiem un ekosistēmām.
Renovate galvenās funkcijas:
- Platformas neatkarība: Nevainojami darbojas visās platformās, piemēram, GitHub, GitLab, Bitbucket, Azure DevOps un citās, padarot to ideāli piemērotu dažādām mitināšanas vidēm.
- Plaša konfigurējamība: Piedāvā nepārspējamu pielāgošanas līmeni, izmantojot
renovate.jsonkonfigurācijas failu vai caur lietotāja interfeisu. Jūs varat kontrolēt atjaunināšanas veidus, grafikus, grupēt atkarības, automātiski apvienot un daudz ko citu. - Vairākas atjaunināšanas stratēģijas: Atbalsta dažādas stratēģijas, piemēram, nelielus, labojumu, jaunākos, tikai bloķēšanas failus un digest atjauninājumus.
- Atkarību grupēšana: Ļauj grupēt saistītās atkarības (piemēram, visas React atkarības), lai iegūtu vieglāk pārvaldāmus PR.
- Automātiskā apvienošana: Var konfigurēt, lai automātiski apvienotu PR, kas iziet CI pārbaudes, ievērojami paātrinot atjaunināšanas procesu.
- Automātiskā atklāšana: Var automātiski atklāt un konfigurēt sevi visiem atklātajiem pakotņu pārvaldniekiem repozitorijā, ieskaitot monorepo.
- Pirmsizlaides un automātiskās apvienošanas stratēģijas: Uzlabotas opcijas pirmsizlaides versiju apstrādei un automātiskai apvienošanai, pamatojoties uz dažādiem kritērijiem.
- Neizmantoto atkarību izgriešana: Var palīdzēt identificēt un noņemt neizmantotās atkarības.
- Divvirzienu valodu atbalsts: Lielisks atbalsts JavaScript/TypeScript, bet arī paplašinās uz daudzām citām valodām un ekosistēmām (piemēram, Docker, Python, Ruby, Java).
Renovate elastība un jauda padara to par pievilcīgu izvēli komandām, kas meklē precīzi kontrolējamus atkarību atjaunināšanas darbplūsmas dažādās Git mitināšanas platformās.
Renovate un Dependabot salīdzinājums
Lai gan abi rīki kalpo vienam un tam pašam galvenajam mērķim, to atšķirības atbilst dažādām komandu vajadzībām un darbplūsmām. Šeit ir salīdzinošs pārskats:
| Funkcija | Dependabot | Renovate |
|---|---|---|
| Platformas atbalsts | Galvenokārt GitHub | GitHub, GitLab, Bitbucket, Azure DevOps, Gitea utt. |
| Konfigurācija | dependabot.yml |
renovate.json, UI, CLI |
| Iestatīšanas vieglums (GitHub) | Ļoti viegli (iebūvēts) | Viegli (caur lietotnes instalēšanu vai CI) |
| Konfigurējamība | Laba, bet mazāk granulāra | Ārkārtīgi augsta, granulāra kontrole |
| Atjaunināšanas stratēģijas | Versiju atjauninājumi, drošības atjauninājumi | Versiju atjauninājumi, drošības atjauninājumi, bloķēšanas failu atjauninājumi, digest atjauninājumi, pirmsizlaidumi utt. |
| Atkarību grupēšana | Ierobežota | Uzlabotas grupēšanas iespējas |
| Automātiskā apvienošana | Ierobežota (caur GitHub funkcijām) | Augsti konfigurējama automātiskā apvienošana, pamatojoties uz CI statusu |
| Kopiena/atbalsts | Spēcīga GitHub kopiena | Aktīva atvērtā pirmkoda kopiena |
| Paplašināmība | Integrējas ar GitHub Actions | Var palaist dažādās CI/CD vidēs |
Kad izvēlēties Dependabot:
Dependabot ir lieliska izvēle komandām, kas izmanto tikai GitHub. Tās nevainojamā integrācija nozīmē mazāku iestatīšanas laiku, un tās pamatfunkcionalitāte ir spēcīga, lai pārvaldītu parastos atkarību atjauninājumus un drošības ievainojamības. Ja jūsu komanda prioritizē vienkāršību un ciešu integrāciju ar GitHub vietējiem darbplūsmām, Dependabot ir spēcīgs pretendents.
Kad izvēlēties Renovate:
Renovate izceļas, kad:
- Jums ir jāatbalsta vairākas Git mitināšanas platformas (piemēram, GitLab, Bitbucket, Azure DevOps).
- Jums nepieciešama ļoti precīza kontrole pār atjaunināšanas politikām, grafikiem un automātiskās apvienošanas noteikumiem.
- Jūsu projekts izmanto monorepo struktūru ar sarežģītām atkarību pārvaldības vajadzībām.
- Jūs vēlaties grupēt saistītās atkarības organizētākiem PR.
- Jums ir jāpārvalda atkarības, kas pārsniedz JavaScript/TypeScript (piemēram, Docker attēli, valodai specifiskas pakotnes).
- Jūs dodat priekšroku ļoti pielāgojamam un atvērtā pirmkoda risinājumam.
Komandām ar daudzveidīgu infrastruktūru vai tām, kas pieprasa dziļu kontroli pār saviem CI/CD cauruļvadiem un atjaunināšanas stratēģijām, Renovate bieži izrādās jaudīgāks un pielāgojamāks risinājums.
Renovate un Dependabot ieviešana: Labākā prakse globālām komandām
Neatkarīgi no izvēlētā rīka, efektīva ieviešana ir galvenais tās priekšrocību izmantošanā. Šeit ir labākā prakse, kas pielāgota globālai, daudzveidīgai izstrādes videi:
1. Sāciet ar skaidru stratēģiju
Pirms sākt, definējiet savus mērķus. Kādus atjauninājumu veidus vēlaties automatizēt? Cik bieži šiem atjauninājumiem vajadzētu notikt? Kāda ir jūsu tolerance pret potenciālām sadalīšanas izmaiņām? Apspriediet šos jautājumus ar saviem starptautiskajiem komandas locekļiem, ņemot vērā dažādu pieredzes līmeni un piekļuvi resursiem.
2. Konfigurējiet gudri
Dependabot:
Izveidojiet .github/dependabot.yml failu savā repozitorijā. Šeit ir vienkāršs piemērs:
# .github/dependabot.yml
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "daily"
open-pull-requests-limit: 10
assignees:
- "your-github-username"
reviewers:
- "team-lead-github-username"
# Optional: Only target specific groups of dependencies
# target-branch: "main"
# commit-message:
# prefix: "[deps]"
# include: "scope"
# labels:
# - "dependencies"
# - "automated-pr"
Renovate:
Renovate var konfigurēt vairākos veidos. Visbiežāk izmantotās metodes ir:
- Renovatebot lietotne (GitHub/GitLab): Instalējiet lietotni un konfigurējiet caur platformas lietotāja interfeisu vai
renovate.jsonfailu savā repozitorijā. - CI/CD cauruļvads: Palaidiet Renovate kā komandrindas rīku savā CI/CD cauruļvadā.
Šeit ir paraugs renovate.json:
{
"extends": [
"config:base"
],
"packageRules": [
{
"packagePatterns": ["react", "@angular/*", "vue"],
"groupDependencies": "shallow",
"labels": ["frontend", "dependencies"]
},
{
"packagePatterns": ["^types"],
"matchPackageNames": ["@types/node"],
"enabled": false
}
],
"timezone": "UTC",
"schedule": [
"every weekend"
],
"assignees": ["@your-username"],
"reviewers": ["@teamlead-username"]
}
Galvenie konfigurācijas apsvērumi globālām komandām:
- Laika joslas: Skaidri iestatiet Renovate laika joslu (piemēram,
"timezone": "UTC"), lai nodrošinātu prognozējamu atjauninājumu grafiku neatkarīgi no jūsu komandas globālās izplatības. - Plānošana: Konfigurējiet atjaunināšanas grafikus, lai samazinātu traucējumus. Atjauninājumu veikšana nestrādājošās stundās jūsu primārajā izstrādes reģionā vai ciklošana pa reģioniem var būt efektīva. Apsveriet Renovate
schedulefunkcijas izmantošanu, lai definētu konkrētus laikus vai intervālus. - Paziņojumi: Nodrošiniet, ka jūsu paziņojumu iestatījumi ir skaidri un pieejami visiem komandas locekļiem.
- Zaru stratēģija: Izlemiet par konsekventu zaru stratēģiju. Renovate var izveidot PR uz konkrētiem zariem vai izmantot izlaidumu zarus.
3. Izmantojiet automātisko apvienošanu (ar piesardzību)
Renovate piedāvā jaudīgas automātiskās apvienošanas iespējas. Tas var ievērojami paātrināt atjauninājumu pieņemšanu. Tomēr ir svarīgi, lai būtu pieejami spēcīgi automatizēti testēšanas līdzekļi. Dependabot gadījumā varat izmantot GitHub iebūvētās automātiskās apvienošanas funkcijas pēc tam, kad PR ir apstiprināti un pārbaudes ir izietas.
Labākā prakse automātiskajai apvienošanai:
- Prasīt izietas CI pārbaudes: Vienmēr pieprasiet, lai visi automatizētie testi, lintētāji un būvēšanas procesi izietu pirms PR ir piemērojami apvienošanai.
- Prasīt pārskatus: Kritiskajiem atjauninājumiem vai atkarībām pieprasiet vismaz vienu cilvēka pārskatu pat tad, ja ir iespējota automātiskā apvienošana.
- Izolēt kritiskos atjauninājumus: Apsveriet automātiskās apvienošanas atspējošanu lielu versiju atjauninājumiem vai atkarībām, kuras ir zināms, ka tās ir sarežģītas.
- Izmantot etiķetes: Pievienojiet PR etiķetes, lai tos klasificētu un potenciāli filtrētu automātiskai apvienošanai.
4. Atkarību grupēšana
Simtiem atsevišķu atkarību atjaunināšanas PR pārvaldīšana var būt pārslogojoša. Gan Renovate, gan Dependabot atļauj atkarību grupēšanu.
Renovate grupēšana: Renovate ir ļoti sarežģītas grupēšanas opcijas. Jūs varat grupēt atkarības pēc veida (piemēram, visas React pakotnes), pēc versiju shēmas vai pēc pakotnes pārvaldnieka. Tas ievērojami samazina PR skaitu, padarot tos vieglāk pārskatāmus.
Dependabot grupēšana: Dependabot atbalsta arī grupēšanu, īpaši vietējiem pakotņu pārvaldniekiem. Varat konfigurēt to, lai grupētu saistītus atjauninājumus kopā.
Renovate grupēšanas piemērs renovate.json:
{
"packageRules": [
{
"matchPackageNames": ["react", "react-dom", "@testing-library/react"],
"groupVersions": "byMajor",
"groupTags": ["react"],
"labels": ["react"]
},
{
"matchPackageNames": ["eslint", "eslint-config-prettier"],
"groupDependencies": "array",
"labels": ["eslint"]
}
]
}
Tas palīdz uzturēt tīrāku PR rindu, kas ir īpaši izdevīga komandām, kurās saziņa dažādās laika joslās var aizkavēt pārskatus.
5. Drošības atjauninājumu apstrāde vispirms
Abi rīki izceļas, identificējot un novēršot drošības ievainojamības. Prioritizējiet drošības ievainojamību brīdinājumu un automātisko labojumu iestatīšanu. Tas ir nenoliedzams mūsdienu programmatūras izstrādes aspekts, nodrošinot pamata drošības līmeni jūsu lietojumprogrammām.
Dependabot drošības atjauninājumi: Pēc noklusējuma ieslēgts Dependabot automātiski izveidos PR, lai atjauninātu neaizsargātās atkarības. Varat pielāgot šo uzvedību savā dependabot.yml.
Renovate drošības atjauninājumi: Renovate arī apstrādā drošības atjauninājumus. Jūs varat konfigurēt specifiskus noteikumus tiem, bieži vien dodot tiem prioritāti pār parastajiem versiju atjauninājumiem.
6. Integrācija ar jūsu CI/CD cauruļvadu
Automatizēta testēšana ir drošu atkarību atjauninājumu pamats. Nodrošiniet, ka jūsu CI/CD cauruļvads veic visaptverošus testus (vienības, integrācijas, gala-līdz-galam) katram PR, ko izveidojis jūsu atkarību pārvaldnieks.
GitHub Actions gadījumā Dependabot PR automātiski uzsāk darbplūsmas. Renovate gadījumā nodrošiniet, ka jūsu CI konfigurācija veic testus un sniedz atsauksmes par Renovate PR. Šī atsauksmju cilpa ir būtiska pārliecinošai automātiskai apvienošanai.
GitHub Actions darbplūsmas uzsākšanas piemērs Dependabot PR:
# .github/workflows/ci.yml
on:
push:
branches: [ main ]
pull_request:
types: [ opened, synchronize, reopened ] # Include Dependabot PRs
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Use Node.js 18.x
uses: actions/setup-node@v3
with:
node-version: '18.x'
- name: Install Dependencies
run: npm install
- name: Run Tests
run: npm test
7. Konfigurācijas atjauninājumu pārvaldīšana
Jūsu projektam attīstoties, attīstīsies arī jūsu atkarību pārvaldības stratēģija. Regulāri pārskatiet un atjauniniet savu dependabot.yml vai renovate.json. Tas ir kopīgs centiens, kurā jāiesaista galvenie ieinteresētie dalībnieki no jūsu starptautiskās komandas.
Apsveriet iespēju izveidot īpašus PR konfigurācijas izmaiņām. Tas ļauj apspriest un pārskatīt pašu atkarību pārvaldības stratēģiju.
8. Efektīva komunikācija
Ar izplatītu globālu komandu skaidra un konsekventa komunikācija ir vissvarīgākā. Nodrošiniet, ka:
- Visi saprot atkarību pārvaldnieka mērķi un darbplūsmu.
- Ir izraudzīts atbildīgais punkts vai neliela komanda, kas atbild par procesa uzraudzību.
- Diskusijas par neveiksmīgiem atjauninājumiem vai sarežģītiem atkarību konfliktiem notiek pieejamos kanālos (piemēram, Slack, Teams, projektu vadības rīkos).
- Dokumentācija ir centralizēta un viegli pieejama visiem komandas locekļiem, neatkarīgi no viņu atrašanās vietas vai primārā darba laika.
9. Lielo versiju atjauninājumu apstrāde
Lieli versiju atjauninājumi (piemēram, React 17 līdz React 18) bieži vien rada sadalīšanas izmaiņas. Tas prasa rūpīgu plānošanu un testēšanu.
- Manuāla iejaukšanās: Lielu atjauninājumu gadījumā bieži vien vislabāk ir atspējot automātisko apvienošanu un nodrošināt rūpīgu manuālo testēšanu un koda refaktorēšanu.
- Pakāpeniska izvēršana: Ja iespējams, veiciet pakāpenisku lielo atjauninājumu izvēršanu nelielai lietotāju vai vides daļai.
- Lasiet izlaiduma piezīmes: Vienmēr izlasiet izlaiduma piezīmes par lieliem atjauninājumiem, lai saprastu potenciālo ietekmi.
Gan Renovate, gan Dependabot ļauj konfigurēt, kā tiek apstrādāti lielie versiju atjauninājumi, piemēram, izveidojot atsevišķus PR vai grupējot tos atšķirīgi.
10. Atkarību izgriešana un sakārtošana
Laika gaitā jūsu atkarību saraksts var pieaugt ar neizmantotām pakotnēm. Renovate ir funkcijas, kas palīdz identificēt un ieteikt šo izgriešanu. Regulāra jūsu atkarību audita veikšana var radīt mazākus pakešu izmērus un vienkāršāku kodu bāzi.
Papildu Renovate funkcijas globālai orķestrēšanai
Renovate plašā konfigurējamība atver jaudīgus modeļus globālām komandām:
automergeStrategy: Definējiet specifiskus automātiskās apvienošanas nosacījumus, piemēram,pr(apvieno PR) vaitight(apvieno tikai tad, ja visas atkarības tiek atjauninātas kopā).matchUpdateTypes: Mērķējiet specifiskus atjauninājumu veidus, piemēram, tikaipatchvaiminoratjauninājumus.ignorePlatforms: Noderīgi, ja jums ir dažādas konfigurācijas dažādām Git mitināšanas platformām.automergeSchedule: Kontrolējiet, kad automātiskā apvienošana var notikt, ievērojot konkrētus laika logus.automergeWithProgress: Ļauj aizkavēt pirms automātiskās apvienošanas, dodot uzturētājiem iespēju iejaukties.
Šie papildu iestatījumi ļauj jums izveidot sarežģītu un izturīgu atkarību pārvaldības sistēmu, kas nodrošina starptautiskās sadarbības sarežģītību.
Noslēgums
Priekšgala atkarību pārvaldība ir kritisks, nepārtraukts uzdevums. Rīki, piemēram, Renovate un Dependabot, ir būtiski šī procesa automatizēšanai, nodrošinot, ka jūsu projekti paliek droši, atjaunināti un viegli uzturami. Dependabot piedāvā racionalizētu, GitHub vietēju pieredzi, savukārt Renovate nodrošina nepārspējamu elastību un platformas atbalstu sarežģītākām vai vairākplatformu vidēm.
Globālām komandām panākumu atslēga nav tikai pareizā rīka izvēle, bet gan tā pārdomāta ieviešana. Nosakot skaidras stratēģijas, gudri konfigurējot, prioritizējot drošību, izmantojot automatizāciju ar piesardzību un veicinot atklātu komunikāciju, jūs varat izveidot izturīgu atkarību pārvaldības darbplūsmu, kas atbalsta efektīvu izstrādi visos reģionos un kultūrās. Izmantojiet šos rīkus, lai samazinātu tehnisko parādu, uzlabotu drošību un saglabātu jūsu priekšgala projektus plaukstošus pastāvīgi mainīgajā digitālajā vidē.
Galvenie ieguvumi:
- Automatizēta atkarību pārvaldība ir būtiska drošībai un projekta veselībai.
- Dependabot ir ideāli piemērots GitHub centrētām komandām, kas meklē vienkāršību.
- Renovate piedāvā izcilu elastību, platformas atbalstu un papildu funkcijas sarežģītām vajadzībām.
- Efektīva ieviešana ietver skaidru stratēģiju, gudru konfigurāciju, izturīgu testēšanu un spēcīgu komunikāciju.
- Prioritizējiet drošības atjauninājumus un rūpīgi apstrādājiet lielus versiju atjauninājumus.
Ieguldot laiku, lai iestatītu un uzturētu savu izvēlēto atkarību pārvaldības sistēmu, jūs ļaujat savai globālajai izstrādes komandai koncentrēties uz inovatīvu funkciju veidošanu, nevis uz cīņu ar novecojušiem pakotnēm.