ლანისტერები ყოველთვის იხდიან ვალებს. რა არის ლანისტერის დევიზი? იური ბოლდირევი აწვალებს წვრილმან კრემლის ქვე-ბლოგერს როჯერსს

ვალის მართვის ტექნოლოგიური პრაქტიკა ერთ გუნდში


დაახლოებით ერთი წლის წინ, ჩვენი გუნდი ფუნქციების სწრაფი ზრდის ფაზიდან გადავიდა უფრო თხევად განვითარებაზე, ორიენტირებული ხარისხის გაუმჯობესებაზე. ამ ეტაპზე, ჩვენმა პროდუქტებმა დაგროვდა შესამჩნევი რაოდენობის არაოპტიმალური გადაწყვეტილებები, მახინჯი კოდი და მოძველებული ბიბლიოთეკები. რაღაც უნდა გაეკეთებინა ამ ყველაფერთან დაკავშირებით.


დღემდე მოვახერხეთ ისეთი პროცესის აგება, რომელიც ტექნიკურ დავალიანებასთან ბრძოლას პროგნოზირებადს, უმტკივნეულო და გარდაუვალს ხდის.


რა მივიღეთ შედეგად:

  • გუნდი ბედნიერია. გამოშვების რეტროსპექტივა რეგულარულად მოიცავს დადებით პუნქტებს ტექნოლოგიის გაუმჯობესებისა და ტექნიკური დავალიანების შემცირების შესახებ.
  • ზედიზედ რამდენიმე კვარტალური გამოშვებისთვის ჩვენ შევძელით ფუნქციონირების გაზრდა პროექტში კოდის ხაზების რაოდენობის გაზრდის გარეშე. არასაჭირო კოდის ამოღებამ და საჭიროების გამარტივებამ შეამცირა კოდის ბაზის ზომა არსებული ფუნქციონირებისთვის. და ეს შემცირება უხეშად დაემთხვა მასშტაბით ახალ კოდს, რომელიც ახორციელებს ახალ ფუნქციონირებას.
  • რეფაქტორირებისა და განახლების დროს პროდუქტი ყოველთვის მუშა მდგომარეობაშია. ყოველ ორ კვირაში ჩვენ ვაძლევთ სრულად მოქმედ შუალედურ გამოშვებას.

ნება მომეცით გითხრათ, როგორ მივაღწიეთ ამას.

რა არის ტექნიკური დავალიანება

ტექნიკური დავალიანების ჩემი სამუშაო განმარტება არის სამუშაოს მოცულობა, რომელიც უნდა გაკეთდეს იმისათვის, რომ პროექტი დააკმაყოფილოს გუნდის ხედვაზე, რა არის შესანიშნავი. გაითვალისწინეთ, რომ ტექნიკური დავალიანება შეიძლება წარმოიშვას არა მხოლოდ განვითარებაში ხელჯოხების ლიბერალური გამოყენების გამო, არამედ სილამაზის შესახებ იდეების შეცვლის გამო. მაგალითად, შეიცვალა ინდუსტრიის საერთო პრაქტიკა. ან დეველოპერებს შეუყვარდათ OOP და შეუყვარდათ ფუნქციონალური პროგრამირება. ან ოდესღაც მოდური ჩარჩო აღარ არის ნამცხვარი და გართულდა სპეციალისტების პოვნა, რომლებსაც მასზე დაწერა სურთ.


თუმცა, ტექნიკური დავალიანების მთავარი მიზეზი არის ენტროპია მთელი თავისი მრავალფეროვნებით. გამორთული ერთეულის ტესტები, მოძველებული კომენტარები, რომლებმაც დაკარგეს შეხება კოდთან, წარუმატებელი არქიტექტურული გადაწყვეტილებები, ფუნქციების განხორციელება, რომლებსაც აღარავინ იყენებს, საფუძველი მომავლისთვის, რომელიც არ მოსულა და ბევრი, ბევრი სხვა.


აქედან გამომდინარეობს, რომ ტექნიკური დავალიანების გამოჩენა გარდაუვალია ნებისმიერ ხანგრძლივ პროექტში.

როცა ტექნიკური დავალიანება არ არის პრობლემა

რატომ არის ტექნიკური დავალიანება ცუდი? ეს ზრდის შემდგომი განვითარების ღირებულებას მთელი რიგი ფაქტორების გამო:

  • მცირდება ახალი ფუნქციონირების განხორციელების სიჩქარე.
  • დეფექტების გამოსწორებისას რეგრესიების ალბათობა იზრდება.
  • განვითარების პროცესი ხდება ნაკლებად პროგნოზირებადი და, შესაბამისად, ნაკლებად მართვადი.
  • პროექტში ახალი დეველოპერის შემოყვანის პროცესი გრძელდება.

ამ ზარალს ზოგჯერ უწოდებენ "პროცენტს ტექნიკურ დავალიანებაზე".


არის სიტუაციები, როდესაც ეს დანაკარგები უფრო იაფია, ვიდრე ტექნიკური დავალიანების აღმოფხვრა:

  • პროექტის სიცოცხლის დასასრული ახლოვდება. გაითვალისწინეთ, ეს არ არის ფუნქციების დამატების დასასრული, არამედ ის მომენტი, როდესაც შეგიძლიათ შეაჩეროთ პროგრამისტის ძალისხმევის დახარჯვა მხარდაჭერაზე. ამ კატეგორიაში ასევე შედის ერთჯერადი პროტოტიპები, ერთჯერადი დემო გამოფენებისთვის და ა.შ.
  • განვითარების დროის ღირებულება ახლა გაცილებით მაღალია, ვიდრე მოსალოდნელია მომავალში. ფიქსირებული ვადის გადაუდებელი შესწორებები, სტარტაპები, რომლებსაც არ აქვთ ფული დაფინანსების შემდეგი რაუნდიდან და ა.შ. ასეთ შემთხვევებში ტექნიკური დავალიანების დაფიქსირება შეიძლება გადაიდოს მანამ, სანამ სიცხე არ გაცივდება. არის პროექტები, რომლებიც არ გამოდიან საგანგებო მდგომარეობიდან, მაგრამ ამ სტატიიდან მიღებული რჩევები მათ მაინც არ დაეხმარება.

რა ვუყოთ ტექნიკურ ვალს? წარუმატებელი მიდგომები

მიდგომა No 1. „დრო არ გვაქვს, გამოშვება გუშინ უნდა იყოს წარმოდგენილი“

ხვალინდელი ვადის დაკმაყოფილების სურვილი ნებისმიერ ფასად, განვითარების სიჩქარის საზიანოდ ზეგ.


ზოგჯერ ყავარჯნებისაგან დამზადებული ასაწყობი სტრუქტურა ობიექტურად სწორი არჩევანია. ჩემს პრაქტიკაში ეს ყველაზე ნათლად გამოიხატა გამოფენებისთვის დემო ვერსიების მიღებისას. ღონისძიების თარიღი მკაცრად არის დაფიქსირებული, თუ დროულად არ მიაღწიეთ მნიშვნელოვან გამოფენას, შემდეგი მცდელობა იქნება ერთ წელიწადში. ამ შემთხვევაში, თქვენ შეგიძლიათ აჩვენოთ პროდუქტი "ხელიდან", ფრთხილად თავიდან აიცილოთ ყველა შეცდომა. როგორც ინჟინერს, ჩემთვის უსიამოვნოა ასეთი პროექტების გაკეთება, მაგრამ მათში ყავარჯნები გამართლებულია.


როცა ამზადებ პროდუქტს, რომელიც დიდხანს გაგრძელდება, ყველაფერი სხვაგვარადაა. საეჭვო ტექნიკური გადაწყვეტილებების გამო ვადის დაცვა ძვირი სიამოვნებაა. მთლიანი ღირებულებაა:

  1. თავად ყავარჯნის განხორციელებიდან,
  2. მისი შემდგომი ჩანაცვლებიდან სრულფასოვანი ხსნარით,
  3. წინა პუნქტებს შორის ყავარჯნის ტანჯვისგან.

მეორე პუნქტის დაფასება ძალიან ადვილია და არსებობს რისკი, რომ საერთოდ არ იფიქროთ მესამეზე, ყველაზე ძვირადღირებულზე.


როდესაც კონფერენციაზე ტექნოლოგიურ ლიდერს შეხვდებით თვალისმომჭრელი თვალებით, შეიძლება აღმოჩნდეს, რომ ეს იყო ყავარჯნებისაგან დამზადებული დიზაინის გაუთავებელი გამართვის კოშმარი, რამაც იგი ამ მდგომარეობამდე მიიყვანა.


მიდგომა No2. ”დიახ, აქ უნდა გადავაგდოთ ყველაფერი და ისევ დავწეროთ”

რაც უფრო უარესია ტექნიკური დავალიანების მდგომარეობა, მით უფრო ძლიერდება ცდუნება, რომ დამარხოთ მთელი პროექტის კოდი და ისევ დაწეროთ ყველაფერი. ეს არის ერთ-ერთი კლასიკური შეცდომა, რომელსაც შეუძლია მოკლას მთელი პროექტი.


თემა იმდენად კარგად არის გაშუქებული ჯოელ სპოლსკის ცნობილ სტატიაში, რომ ჩემი არგუმენტების წარმოდგენის აზრს ვერ ვხედავ.

მიდგომა No. 3. „ჩვენ ვასწორებთ ღამით და შაბათ-კვირას, რათა მენეჯერმა არ გაარკვიოს“.

ბიზნესის სარგებლის თვალსაზრისით ტექნიკური დავალიანების აღმოფხვრის აუცილებლობის კამათი ყოველთვის არ არის ადვილი. დეველოპერთა გუნდს შეიძლება გაუჩნდეს ცდუნება, შემოიხედოს უხეში კიდეები და დაიწყოს ძირითადი რეფაქტორირება ადგილზე. ეს შეიძლება გაკეთდეს არასამუშაო საათებში, სხვა დავალებებს შორის პაუზებში ან სხვა ამოცანების „კუდზე“ შეფასებების გაბერვით.


რა არის ამაში ცუდი? ოჰ, უამრავი რამ:

  • შემცირებული გამჭვირვალობა ძირს უთხრის ნდობას მენეჯმენტსა და გუნდს შორის. ხშირად სიტუაციის გამოსწორების შემდგომი მცდელობები დისციპლინის დაწესებით და ხრახნების გამკაცრებით გამოიწვევს გუნდური მუშაობის შემდგომ გაუარესებას.
  • ფესვგადგმული სიტუაცია, რომელშიც გუნდისა და მენეჯმენტის პრიორიტეტები ურთიერთსაწინააღმდეგოა, ორივე მხარის დემოტივაციას იწვევს.
  • რეფაქტორინგის ნაყოფი შედის პროდუქტში არაპროგნოზირებადი გზებით და იწვევს რეგრესიულ შეცდომებს იქ, სადაც არ არის მოსალოდნელი. შეგნებულ გუნდებში ეს იწვევს უეცარ და დაუგეგმავ დატვირთვას QA-ზე. არაცნობიერში ის გადადის წარმოებაში და იქ იშლება.

მას შემდეგ, რაც გუნდი გამოიყენებს ამ რეცეპტს, მენეჯმენტის თვალები იწყებს ტრიალს.

ჩვენი პრინციპები

1. დაამატეთ ტექნიკური ამოცანები ზოგად ჩამორჩენას

პროექტებში ამოცანების ცხოვრებაში რამდენიმე ნიმუშია:

  • დავალება, რომელიც არ არის ჩამორჩენილი, ნაკლები შანსი აქვს სამსახურში მოხვედრას.
  • დავალებას მკაფიო ფორმულირების გარეშე აქვს სამუშაოში მოხვედრის ნაკლები შანსი.
  • დავალებას, რომელიც არ შეიძლება შეფასდეს მაღალი ნდობით, ნაკლები შანსი აქვს საქმეში მოხვედრას.
  • დიდი დავალება უფრო დიდხანს დაელოდება რიგში, ვიდრე პატარა.

მაქსიმ დოროფეევი ამ საკითხებზე ძალიან კარგად საუბრობს თავის "ცარიელი შემოსულების ტექნიკაში"


ტექნიკური დავალიანების დაგროვების თავიდან ასაცილებლად, მის აღმოფხვრაზე მუშაობა უნდა დასრულდეს ზემოთ ჩამოთვლილი პრინციპების გათვალისწინებით.


ყველა დავალება, გარდა უმცირესისა, ჩამოთვლილია ჩანაწერში. ამ გზით მათ აქვთ შესაძლებლობა, გააკეთონ არა მხოლოდ თავისუფალ დროს, არამედ დაგეგმილი სამუშაოს ფარგლებში. გარდა ამისა, ასეთი ამოცანების სრული დაკარგვა უფრო რთულია - ჩამორჩენილი ნარჩენები უფრო ხშირად და უფრო მჭიდროდ განიხილება, ვიდრე TODO-ებს კოდში, ქაღალდის ნაჭრებს მონიტორზე, მიტოვებულ ვიკი გვერდებზე, ჩაის შეღებილ ხელსახოცებს დიაგრამებით და სხვა. ინფორმაციის წყაროები.

  • თუ კოდში არის არატრივიალური TODO, ის შეიცავს ბმულს დავალების დასაბრუნებლად. ჩვენ ვამოწმებთ ამ პრინციპის შესაბამისობას კოდის განხილვისას და არ ვიღებთ კომპლექსურ TODO-ებს მითითებების გარეშე.

    კომენტარის უკან შესაძლოა დრამა იყოს.

    ერთხელ, ასეთი TODO-ს გვერდით ეწერა: „ყავარჯენი. პროდუქტის მფლობელმა მაიძულა ამის გაკეთება. რაც შეიძლება მალე ამოიღეთ“.

  • როდესაც დეველოპერი აცნობიერებს, რომ რაღაც ადგილი საჭიროებს რეფაქტორირებას, ის ქმნის პრობლემას ნარჩენებში.
  • როდესაც დეველოპერს აქვს პლატფორმის გაუმჯობესების სურვილი, ის ქმნის დავალებას ბექლოგში.
  • გრძელვადიანი არქიტექტურული გეგმები ცალკეული ამოცანების სახით გროვდება, როგორც კი საკმარისი დარწმუნება იქნება მინიმუმ პირველი ნაბიჯების შესახებ.

სანამ ასეთი ცვლილებები იაფი დარჩება განვითარების ხარჯებისა და საჭირო ტესტირების ოდენობის თვალსაზრისით, ჩვენ შეგვიძლია თანდათან გავაუმჯობესოთ ჩვენი კოდის ბაზა ბიზნესის მიზნების შეწყვეტის ან დამატებითი რისკების დანერგვის გარეშე.

2. დაგეგმეთ ტექნიკური ისტორიები ბიზნესის პრიორიტეტებზე დაყრდნობით

ტყეში ხე რომ დაეცა, მაგრამ არავის გაუგია, იყო თუ არა ხმა? თუ პროექტში არის ცუდი კოდი, მაგრამ ეს მოდული არასდროს საჭიროებს შეცვლას, არის თუ არა ტექნიკური დავალიანება?


მე მჯერა, რომ როდესაც პროგრამისტს უსიამოვნოა რაიმე ძველი მოდულის ყურება, ეს თავისთავად არ არის დიდი პრობლემა. გაცილებით უარესია ის, რაც ხდება, როდესაც გჭირდებათ ამ მოდულის ახალი ფუნქციონირების დამატება ან ძველის გაფართოება. კარგად დაწერილ კოდში ცვლილებების შეტანასთან შედარებით, ასეთი ამოცანები უფრო სავარაუდოა (და უფრო სავარაუდოა, რომ აღემატება თავდაპირველ შეფასებას) და შეიცავს უფრო მეტ შეცდომებს. ზოგჯერ ბევრად მეტი. ამ ტიპის პრობლემებისგან თავის დასაცავად, ჩვენ ვცდილობთ დავგეგმოთ რეფაქტორირება ისე, რომ ისინი განხორციელდეს ახალი ფუნქციების იმავე ადგილას ჩაწერამდე.


თუ ფუნქციონალური ცვლილებები და რეფაქტორირება მცირეა, ისინი შეიძლება ერთად გაკეთდეს. ამოცანის ემპირიულად შერჩეული ზომა, რომლისთვისაც ეს მიდგომა იქნება ოპტიმალური, არის 3 დღე სამუშაო ერთი დეველოპერისთვის ან ნაკლები. როდესაც ცხადია, რომ მეტი სამუშაოა, ის იყოფა რეფაქტორირებად, მიმდინარე ქცევის შენარჩუნებით და ახალი ფუნქციონირების დანერგვით.


ამრიგად, ტექნიკური დავალიანების აღმოფხვრის სამუშაოების თანმიმდევრობა განისაზღვრება საქმიანი ამოცანების თანმიმდევრობით.


„ბიზნესის პრიორიტეტების“ პრინციპს კიდევ ერთი გამოყენება აქვს. ერთ-ერთი საერთო პრობლემა, რომელსაც აწუხებთ დეველოპერები, რომლებიც ცდილობენ კარგად დაწერონ, არის მუშაობის ოპტიმიზაციისთვის დროის დათმობის სირთულე, შენარჩუნების გაუმჯობესება ან სხვა რამ, რაც უშუალოდ არ შედის სამუშაო გეგმაში. თითქმის ყოველთვის არის ბიზნესის საჭიროება ამ გაუმჯობესებისთვის. ვის არ სურს სისტემამ იმუშაოს უფრო სწრაფად, უფრო სტაბილურად და უფრო იაფი იყოს შენარჩუნება? ყველა ეს სარგებელი შეიძლება შეფასდეს და, ამ შეფასების საფუძველზე, გაუმჯობესების ამოცანები შეიძლება განთავსდეს დანარჩენებთან ერთად.


ასე რომ, თუ გსურთ მუშაობის ოპტიმიზაცია, მაგრამ ამის ნაცვლად მოგიწევთ კიდევ ერთი მოსაწყენი ხარვეზის გამოსწორება, შესაძლოა უბრალოდ არ იცით როგორ ახსნათ ოპტიმიზაციის სარგებელი იმ ენაზე, რომელსაც პროდუქტის მფლობელს ესმის.

3. დატოვეთ კოდი უფრო სუფთა, ვიდრე ადრე იყო

თითქმის ნებისმიერი კოდი, გარდა ახლახან დაწერილისა, ოდნავ ჩამორჩება სილამაზის ამჟამინდელ იდეას სტილისა და არქიტექტურის სფეროში. როდესაც თქვენ გჭირდებათ კოდის შეცვლა, როგორც დავალების ნაწილი, კარგ პრაქტიკად ითვლება ყველა უსაფრთხო გაუმჯობესების განხორციელება, რაც შესაძლებელია დაზარალებულ ტერიტორიაზე. რა შეიძლება იყოს?

  • მოდულების მოყვანა მიმდინარე სტილში.
  • შიდა ცვლადების სახელების შეცვლა უფრო გასაგებად.
  • გაამარტივეთ განხორციელება ქცევის შენარჩუნებისას.
  • ლოკალური რეფაქტორინგი, რომელიც არ ახორციელებს ფართომასშტაბიან ცვლილებებს სხვა მოდულებში.

მოსალოდნელია, რომ ეს გაუმჯობესებები გააუმჯობესებს კოდს, მაგრამ მნიშვნელოვნად არ გაზრდის განვითარების ან ტესტირების ღირებულებას.


ამ პრინციპიდან გამომდინარე, კოდის ხარისხი თანდათან იზრდება ფონზე, იმ ადგილებშიც კი, სადაც ცალკე რეფაქტორირება არ იყო დაგეგმილი. უფრო მეტიც, რაც უფრო ხშირად ვიმუშავებთ სისტემის გარკვეულ ნაწილზე, მით უკეთესი იქნება კოდი ამ ნაწილისთვის. კარგი კონტრასტია პროექტებისგან, სადაც დეველოპერი ყველაზე მეტ დროს ატარებს ყველაზე ცუდი კოდის მქონე ნაწილებზე.

4. რაც არ უნდა მოხდეს, სისტემა უნდა დარჩეს მუშა მდგომარეობაში.

SCRUM-ის ერთ-ერთი ძირითადი პრინციპი ამბობს, რომ ყოველი სპრინტის ბოლოს სისტემამ უნდა მიაღწიოს სტაბილურ მდგომარეობას.


„სპრინტის დასასრულისთვის, მატება მზად უნდა იყოს, რაც ნიშნავს, რომ ის აკმაყოფილებს Scrum Team-ის მზადყოფნის კრიტერიუმებს და მზად არის გამოსაყენებლად. ის მზად უნდა იყოს გამოსაყენებლად, მიუხედავად პროდუქტის მფლობელის გადაწყვეტილებისა მისი გამოშვების ან გადადების შესახებ. ”

ტექნიკური დავალიანების აღმოფხვრის ნებისმიერი სამუშაო ამ პრინციპის დაცვით ხდება.


დიდი გარდაქმნები აუცილებლად იშლება ისე, რომ ნებისმიერი ინდივიდუალური ეტაპი შეიძლება დასრულდეს ერთ სპრინტში. მაგალითად, ჩვენ შევცვალეთ აშენების სისტემა ორ ეტაპად (კუთხური 1.x: მცოცავი ვებპაკეტი, დამალული ღრიალი)


ჩვენ ვმუშაობთ VCS-თან კლასიკურ gitflow-თან მიახლოებული პრინციპების მიხედვით. განვითარება ხდება მხატვრული ფილიალებში, იქ ტარდება ტესტირება. როგორც წესი, ასეთი ტოტი ერთ ორკვირიან სპრინტზე მეტ ხანს არ გრძელდება. ფილიალი, რომელიც უფრო მეტხანს ცხოვრობს, თითქმის ყოველთვის იწვევს დამატებით ხარჯებს.


ჩვენი გამოცდილება ნათლად ადასტურებს ამ ნიმუშს. ყოველ ჯერზე, როდესაც ჩვენ ვერ ვასრულებდით დიდ რეფაქტორირებას ორ კვირაში, ეს იყო ტკივილი და ტანჯვა. და რაც უფრო გრძელი იყო დავალება და რაც უფრო დიდხანს ცოცხლობდა ღია ფილიალი, მით უფრო ნელა მიდიოდა სამუშაო და უფრო მეტი პრობლემა იყო.


სტაბილური გამოშვებისგან ყოველთვის რამდენიმე ნაბიჯის დაშორების აუცილებლობა ქმნის ერთ-ერთ ყველაზე რთულ და საინტერესო საინჟინრო პრობლემას - სტრატეგიული გეგმების ოპტიმალური დაშლის პოვნას. ფართომასშტაბიანი ცვლილებები შეიძლება დაიყოს ცალკეულ, დამოუკიდებელ ნაბიჯებად. მიზანშეწონილია სარგებლის მიღება რაც შეიძლება ადრე დაიწყოთ. რაც უფრო კარგად განხორციელდება სამუშაოს ეს დაშლა, მით მეტია სამუშაოს დასრულებამდე მიყვანის შანსი.

როგორ გამოიყურება ჩვენი პროცესი

თითო გამოშვებაზე ერთხელ ჩვენ ვაკეთებთ ტექნიკური ჩამორჩენის დეტალურ მიმოხილვას:

  • ჩვენ ვხურავთ შეუსაბამო ისტორიებს (დაკარგულია აქტუალობა, დამზადებულია რაღაცის ნაწილად, დუბლიკატები).
  • ჩვენ ვაახლებთ აღწერას, სადაც შეიცვალა საკითხის ხედვა.

როდესაც ბიზნეს ისტორიები ჩნდება ჰორიზონტზე, კეთდება ტექნიკური ანალიზი და ყველა ტექნიკური ისტორია, რომელიც დაეხმარება განხორციელებაში, ასოცირდება ბიზნეს ისტორიასთან.


სპრინტის დაგეგმვისთვის მზადება:

  • ჩვენ ვამოწმებთ კავშირებს ტექნიკურ და ბიზნეს ისტორიებს შორის.
  • ჩვენ ყველა დაკავშირებულ შეცდომას ვუკავშირებთ ტექნიკურ ისტორიებს, რომელთა გამოსწორება შესაძლებელია იაფად იმავე ადგილას.

როგორ ჩამოყალიბდეს ნარჩენების ტექნიკური ნაწილი

როდესაც გუნდში წამყვანის როლი ვითამაშე, თითოეულ დეველოპერს და QA-ს ვკითხე, რა გაუმჯობესება სურდათ პროდუქტში. მოთხოვნების უმეტესობა ეხებოდა პლატფორმის ტექნიკურ გაუმჯობესებას და რეფაქტორირებას. როგორც შემდგომმა გამოცდილებამ აჩვენა, პროდუქტის ყველა ძირითადი ტექნიკური პრობლემა ჩართული იყო სურვილების ამ კომპლექტში. ასე რომ, თქვენ შეგიძლიათ გამოიყენოთ ეს პრაქტიკა ნულიდან ტექნიკური ნარჩენების სწრაფად შესაქმნელად ან ახალ პროექტში ტექნიკური დავალიანების მდგომარეობის შესახებ ზოგადი წარმოდგენის მისაღებად.


ნარჩენების მიმდინარე შევსება ტექნიკური ამოცანებით ხდება ზემოთ აღწერილი პრაქტიკის გამო და არ საჭიროებს ცალკეულ ძალისხმევას ან ანალიზს. გარდა ამისა, ნარჩენებს ემატება პროდუქტის ტექნიკური გაუმჯობესების ახალი იდეები. ამას აკეთებს გუნდის ნებისმიერი წევრი, ვისაც ასეთი იდეა გაუჩნდა. ამ ეტაპზე მთავარია იდეა არ დაკარგოთ. პრიორიტეტის დაზუსტება და განსაზღვრა ხდება მოგვიანებით, სამუშაოს დაგეგმვისას.

დასკვნები

  • ტექნიკური დავალიანება გარდაუვალია.
  • პროექტების უმეტესობისთვის ტექნიკური დავალიანების აღმოფხვრა ძალისხმევის კარგი ინვესტიციაა.
  • თუ ტექნიკური დავალიანება არ განიხილება, განვითარების სიჩქარე თანდათან ნულს მიუახლოვდება.
  • ყველაფრის გადაყრისა და ხელახლა დაწერის ცდუნებამ შეიძლება მოკლას ან სერიოზულად გაანადგუროს თქვენი პროექტი.
  • ტექნიკური დავალიანების აღმოფხვრის სარგებელი უნდა ჩამოყალიბდეს ბიზნესის უპირატესობებით, წინააღმდეგ შემთხვევაში, არსებობს რისკი, რომ ახალი ფუნქციების შექმნის ამოცანები ყოველთვის უფრო მნიშვნელოვანად ჩაითვალოს.
  • ტექნიკური დავალიანების აღმოფხვრის ამოცანები ღირს მართვა. ასეთი ამოცანები არ განსხვავდება სხვა საპროექტო ამოცანებისაგან ბუღალტრული აღრიცხვის, დაგეგმვისა და პრიორიტეტების მიხედვით.
  • რეგულარულად წარმოიქმნება სიტუაციები, როდესაც შეგიძლიათ შეამციროთ ტექნიკური დავალიანება და მოაგვაროთ ბიზნეს პრობლემა, ამავე დროს, უფრო იაფად, ვიდრე ცალკე. ეს შესაძლებლობები უნდა იქნას გამოყენებული.
  • გააზრებული და დროულად განახლებული კოდის სტილის კონვენციები და განხილვის პროცესები ხელს უწყობს ახალი ტექნიკური დავალიანების გაჩენის შენელებას.
  • მოკლე გამეორებები ისეთივე სასარგებლოა რეფაქტორინგისთვის, როგორც ახალი ფუნქციონალური განვითარებისთვის.
  • გუნდმა, როგორც წესი, იცის, სად არის პროექტში ტექნიკური დავალიანება და რამდენად ცუდია. ღირს ამ ცოდნის გამოყენება პროექტის ტექნიკური დავალიანების შესახებ წარმოდგენის ფორმირებისას.

ჩემს პასუხში შევეხები არა მარტო დიდ სახლებს, არამედ სხვა სახლებსაც, რომლებზეც ინფორმაციის მოპოვება მოვახერხე.

1.სტარკი - "Ზამთარი მოდისნიშნავს, რომ მშვიდობა და უსაფრთხოება დროებითია და მოჩვენებითია; ყოველთვის მზად უნდა იყოთ კატასტროფებისთვის და ომებისთვის, რათა საფრთხეს სრულად შეიარაღებული შეხვდეთ. ვესტეროსში ზამთარი არა მხოლოდ წლების სეზონია, არამედ რთული განსაცდელების სიმბოლოცაა. ფაქტობრივად, ეს დევიზი ეხება არა მხოლოდ სტარკების სახლს, არამედ მთელ ქვეყანას.

2. ლანისტერები- ლანისტერის სახლს, როგორც ჩანს, ორი დევიზი აქვს, ერთი ადასტურებს დიდ გერბს -" ისმინე ჩემი ღრიალი!", მეორე, გამონათქვამის ექვივალენტურია, მაგრამ უფრო ხშირად ჟღერს სიდიდის ბრძანებით, ვიდრე პირველი -" ლანისტერები ყოველთვის იხდიან ვალებსპირველი დევიზი შეიძლება მივაწეროთ უშუალოდ გერბს. ლანისტერის გერბზე გამოსახულია ლომი მძვინვარებს- "მღრიალა ლომი" და დევიზი "ისმინე ჩემი ღრიალი" პირდაპირ ავსებს მას, ეს ასევე იმის დასტურია, რომ ლომი მხეცების მეფეა, ხოლო ლანისტერებს აქვთ მაღალი პოზიცია საზოგადოებაში. გამონათქვამი "ლანისტერი ყოველთვის იხდის თავის ვალებს" უპირველეს ყოვლისა ასოცირდება ბრაავოსის რკინის ბანკთან: "რკინის ბანკი ყოველთვის მიიღებს იმას, რაც უნდა იყოს". მეორეც, „ლანისტერი ყოველთვის იხდის თავის ვალებს“ ნიშნავს, რომ ლანისტერები არასოდეს ივიწყებენ მათ, ვინც მათ დაეხმარნენ და რომ ლანისტერები არასოდეს აპატიებენ მათ მიმართ ჩადენილ დანაშაულს.

3. ბარათეონი - "გაბრაზებულები ვართთავდაპირველად ეკუთვნოდა შტორმის დასასრულის დურანდონებს. ორის ბარათეონმა (ეგონ I დამპყრობლის უკანონო ძმა), რომელმაც მოკლა არგილაკი ამპარტავანი, ქარიშხლების უკანასკნელი მბრძანებელი, მიიღო მისი დევიზი. მაგრამ დევიზი ითარგმნა ძალიან სიტყვასიტყვით. იძლევა. დევიზის ლოგიკური თარგმანი" გაბრაზება ჩვენი ელემენტია"მისი მნიშვნელობის განმარტებით" ბრაზი ჩვენი ელემენტია, რაც ნიშნავს: როცა გაგვაბრაზებ, თევზს ზღვაში აგდებ, სადაც მშვენივრად გრძნობს თავს.„ანუ, ბარათეონებისთვის ემოციების ძალადობრივი ჩვენება ცივი მიზეზის ხარჯზე არ არის მანკიერება.

4. გრეიჯოი - "ჩვენ არ ვთესავთ"გრეიჯოები ძირითადად მეკობრეები არიან. მათი მიწების ტერიტორია მდებარეობს შიშველ კლდეებზე და ქვიშაზე. ამ სახლის დევიზი არის პირდაპირი გზავნილი იმისა, რომ გრეიჯოები არ მუშაობენ მიწაზე (რაც ნამდვილად არ არსებობს). ისინი არ თესავს. არაფერი და არ იზრდება, ძარცვავენ მათ, ვისაც მოსავალი და ნაძარცვი აქვს, რადგან მას არ აქვს და არ შეუძლია ჰქონდეს საკუთარი.

5. ტარგარიენი - "ცეცხლი და სისხლიტარგარიენის დევიზი შეიძლება ორი გზით იქნას განმარტებული. პირველი - ეგონ დამპყრობელმა და მისმა ორმა დას, სამ დრაკონზე დაიმორჩილეს ვესტეროსი, რომელსაც ჰქვია "მასთან და მახვილთან ერთად". მზის ჩასვლის მარტოობა) - " ტარგარიანები დრაკონები არიან დაბადებულები, მათ აქვთ ძველი ვალირიასა და დრაკონების სისხლი, ასევე ცეცხლისადმი იმუნიტეტის ბონუსი და დრაკონების მოთვინიერება. როდესაც ტარგარიანები ამბობენ ცეცხლი და სისხლი, ისინი ახსენებენ მათ, ვინც მოულოდნელად დაივიწყეს ეს."

6. არინსი - "პატივისავით მაღალი"ერთის მხრივ, არინის სახლი, ჯონ არინის მაგალითზე, ზრუნავდა ღირსების შენარჩუნებაზე. ჯონის დაშინება და მოსყიდვა არ შეიძლებოდა. ხოლო ვესტეროსის მიწებზე შეუძლებელი იყო ვინმეს პოვნა, ვინც უფრო მეტად ზრუნავდა ღირსების შენარჩუნებაზე, ვიდრე არინები, მაგრამ ჯონის გარდაცვალების შემდეგ, ალბათ, სხვა ვარიანტია უფრო გამოსადეგი - არისტოკრატული ამპარტავნობა, ზიზღი დაბალი სტატუსის მქონეთა მიმართ, ისინი ამბობენ: "სად ხარ ჩვენგან".

7. ტარლი - "პირველი ბრძოლაში„ტარლის სახლმა მრავალი დიდი მეომარი და გამოჩენილი გენერალი გააჩინა, რასაც ეს დევიზიც ადასტურებს.

8. ტული - "ოჯახი, მოვალეობა, პატივი"House Tully უპირველეს ყოვლისა ერთგულია თავისი ოჯახური კავშირების მიმართ. მოვალეობა და პატივი მოდის მათ შემდეგ, მაგრამ ოჯახი პირველ ადგილზეა. House Tully მხარს უჭერდა რობ სტარკს ხუთი მეფის ომში, რისთვისაც მათ გადაიხადეს.

9. მარტელები - "უდრეკი, უდრეკი, დაუმორჩილებელი". სიამაყისა და მოუქნელობის მოდელი. მარტელები ერთადერთი სახლია, რომელსაც ტარგარიანებმა ძალით ვერ წაართვეს. და ამ სახლის გმირების ქცევიდან აშკარად ჩანს, რომ ისინი თავქარიანები და ურყევი არიან. მათ არ სჭირდებათ უფალთა კანონები, მეფეთა მოწონება, ისინი საკუთარ თავზე არიან, მაგრამ აშკარად აჩვენებს, რომ ისინი მზად არ არიან დანებდნენ.

10. ტაირელი - "ვიზრდებით, ვძლიერდებით". ტირელების სახლის დევიზი დაადასტურა მათმა ჯარმა, რომლის რიცხვი ვერ შეედრება ვესტეროსის არცერთ ჯარს. ტირელებს ასევე ჰქონდათ "ბალიშები" დაგროვილი სიმდიდრის სახით. იმის გათვალისწინებით, რომ ქურთუკი. ამ სახლის მკლავებზე გამოსახულია ვარდი, პარალელიც შეიძლება გავავლოთ მას პატარა ყლორტიდან უზარმაზარ ვარდის ბუჩქებამდე თქვა, ისინი არ არიან მეომრები.

11. ბოლტონი -"ჩვენი პირები ბასრიაეს დევიზი ბოლტონის ოჯახის მტრების (და არა მხოლოდ) მტრების გაფრთხილებას ემსახურება. ამ სახლის წარმომადგენლებს პირქუში რეპუტაცია აქვთ; წიგნებში ისინი ადამიანის ტყავისგან შეკერილ მოსასხამსაც კი ატარებდნენ და ამით ამშვენებდნენ თავიანთი ციხესიმაგრეების კედლებს. : ”შიშველ კაცს არ აქვს საიდუმლოებები, მაგრამ ტყავი და კიდევ უფრო მეტი.” ”ჩვენი პირები ბასრია” - როგორც ჩანს, ასევე შეიძლება ნიშნავდეს პირებს ხორცის გასაწმენდად.

12. მორმონტი - "აქ ვდგავართ". დევიზი, რომელიც მზის ჩასვლის მიხედვით, რუსულადაც არასწორად არის ნათარგმნი." აქ ჩვენ ვდგავართ - შეიძლება ნიშნავდეს "აქ არის ჩვენი მიწები", რაც თავის მხრივ ნიშნავს "პატარა, მაგრამ ამაყი კუნძული, რომელიც არავის აწუხებს, მაგრამ შეუძლია საკუთარი თავის განსაზღვრა, აქ არის ჩვენი მიწები, დაიმახსოვრე ეს, როცა აქ მოხვალთ გააფრთხილებს“. ან შეიძლება ითარგმნოს როგორც "ჩვენ ვდგავართ" - რაც პირდაპირ მიუთითებს მორმონტის სიჯიუტის სიძლიერეზე."

13. ფრეი - "ვდგავართ მხარ-მხარზეფრეისები აფასებდნენ ოჯახურ კავშირებს და ამ სიტყვის ხელშეუხებლობას, რასაც ეს დევიზი ასახავდა. იქიდან ვალდერ ფრეის ენით აუწერელი წყენა ჰქონდა რობ სტარკის მიმართ, რომელმაც დაარღვია თავის ქალიშვილზე დაქორწინების პირობა, რასაც სამწუხარო შედეგები მოჰყვა.

"ლანისტერი ყოველთვის იხდის თავის ვალებს." © FFG ( ჯეისონ ა ენგლი)

"ლანისტერები ყოველთვის იხდიან ვალებს"(ასევე: "ლანისტერი ყოველთვის იხდის თავის ვალს"მოუსმინე)) არის პოპულარული გამონათქვამი შვიდ სამეფოში ლანისტერის შესახებ და ტირიონ ლანისტერის საყვარელი გამოთქმა. ის არანაკლებ ცნობილია, ვიდრე სახლის "ოფიციალური" დევიზი, "მისმინე ჩემი ღრიალი!" ამ გამოთქმას ორმაგი მნიშვნელობა აქვს. ერთის მხრივ, ეს ნიშნავს, რომ ლანისტერები, როგორც შტატის უმდიდრესი სახლი, ყოველთვის მზად არიან გადაიხადონ გადასახადები და მადლობა გადაუხადონ მათ, ვინც დაეხმარნენ მათ, ან დაჰპირდნენ ჯილდოებს მომავალში - ყოველთვის შეგიძლიათ იმედი გქონდეთ კეთილშობილებისა და ერთგულების შესახებ. "ლომები". მაგრამ ამ დევიზის მეორე, მუქარის მნიშვნელობაც აქვს: ლანისტერები არ ივიწყებენ მათზე მიყენებულ შეურაცხყოფას და აუცილებლად იძიებენ შურს დამნაშავეებზე.

სერსეი ლანისტერის პირში გამონათქვამი გაისმა თავად ტირიონის წინააღმდეგ მიმართულ გამოსვლაში - სერსეიმ ძმა დაადანაშაულა მის და ჯოფრის წინააღმდეგ ინტრიგებში და ცდილობდა დატყვევებული ალაიას დაშანტაჟებას. მოგვიანებით, სახელმწიფოს სათავეში აღმოჩენის შემდეგ, სერსეიმ იგივე სიტყვები გამოიყენა, რათა გაემართლებინა გადაწყვეტილება, შეეწყვიტა სახელმწიფო ვალების გადახდა ბრავოსის რკინის ბანკისთვის - ლანისტერები ყოველთვის იხდიან თავიანთ ვალებს და ეს ვალი ადრე თუ გვიან გადაიხდება. მოგვიანებით მან ეს გამონათქვამი ახსენა ბალმან ბირჩთან და ფალისა სტოკვორტთან დიალოგში, დაჰპირდა მათ დახმარებისთვის ჯილდოს, შემდეგ კი ტიროშის გაგზავნა, რომელიც მის მოტყუებას ცდილობდა ჯალათთან სიტყვებით: „ლანისტერები იხდიან ვალებს და შენ გადაიხდი. ასევე.”

ტაივინ ლანისტერმა ახსენა ეს გამონათქვამი ტირიონთან საუბარში, ამართლებდა პეტირ ბეელიშისთვის ჰარენჰალის მიცემის აუცილებლობას, რადგან თავად მას ეს სურდა. თავად ტირიონმა მაშინვე გაიმეორა სიტყვები ვალების შესახებ და მოითხოვა ჯილდო საკუთარი თავისთვის, როგორც ხელის მომსახურებისთვის. შაიმ გაიმეორა ეს გამონათქვამი და შეახსენა ტირიონს დაპირება, რომ დააბრუნებდა მას ქალაქის სახლში. მას შემდეგ რაც შეიტყო ვესტერლინგების რობ სტარკთან გადადგომის შესახებ, ტირიონმა იფიქრა, რომ ტაივინი აუცილებლად დასჯიდა მოღალატეებს და გაიხსენა ეს გამონათქვამი.

ჯეიმე ლანისტერმა ურსვიკს შეახსენა იგი, ცდილობდა მისი სიმდიდრით აცდუნა, მოგვიანებით კი, ხელიდან რომ დაკარგა, საკუთარ თავს გაიმეორა ეს გამონათქვამი, შურისძიების წყურვილი და სიცოცხლის სურვილი. მან უთხრა ტარტ ბრიენს, რომ მან გადაარჩინა იგი გაუპატიურებისგან რობინ რიგერის გალერის ჩაძირვისთვის მადლიერების ნიშნად მათი მოგზაურობის დასაწყისში და კვლავ გაიხსენა ეს გამონათქვამი. მოგვიანებით მან ეს სიტყვები ვარისთან საუბარში გაიმეორა და ამით ახსნა ტირიონის გათავისუფლების სურვილი. რივერრანის კედლებთან ედმურ ტულის ხარაჩოდან ამოღების შემდეგ, ჯეიმ თავისთვის გაიფიქრა: „ლანისტერები იხდიან ვალებს, შენ კი ერთადერთი მონეტა ხარ, რაც მე დამრჩა“.

თავად ედმურ ტულიმ გაიხსენა ეს გამონათქვამი, როდესაც შეიტყო რიკარდ კარსტარკის მიერ უილემ ლანისტერისა და თეონ ფრეის მკვლელობის შესახებ. რუზ ბოლტონმა ისაუბრა თავის განზრახვაზე, დაეტოვებინა ჰარენჰალი და დატოვოს იგი ვარგო ჰოუტისთვის, თქვა: „ლანისტერები არ არიან ერთადერთი, ვინც იხდის მათ ვალებს“. ჯეიმმა გაიმეორა ეს გამონათქვამი, როდესაც დაემშვიდობა მამაცი ბიჭებს ციხიდან გასვლისას, მიანიშნა, რომ შურს იძიებდა მათზე, შემდეგ კი, ბრიანისთვის ციხესიმაგრეში დაბრუნების შემდეგ, მან იგივე სიტყვები მიმართა ვარგო ჰაუტს და თქვა, რომ მიიღებდა. გამოსასყიდი როგორც ჯეიმისთვის, ასევე ბრიენისთვის

ვალის მართვის ტექნოლოგიური პრაქტიკა ერთ გუნდში


დაახლოებით ერთი წლის წინ, ჩვენი გუნდი ფუნქციების სწრაფი ზრდის ფაზიდან გადავიდა უფრო თხევად განვითარებაზე, ორიენტირებული ხარისხის გაუმჯობესებაზე. ამ ეტაპზე, ჩვენმა პროდუქტებმა დაგროვდა შესამჩნევი რაოდენობის არაოპტიმალური გადაწყვეტილებები, მახინჯი კოდი და მოძველებული ბიბლიოთეკები. რაღაც უნდა გაეკეთებინა ამ ყველაფერთან დაკავშირებით.


დღემდე მოვახერხეთ ისეთი პროცესის აგება, რომელიც ტექნიკურ დავალიანებასთან ბრძოლას პროგნოზირებადს, უმტკივნეულო და გარდაუვალს ხდის.


რა მივიღეთ შედეგად:

  • გუნდი ბედნიერია. გამოშვების რეტროსპექტივა რეგულარულად მოიცავს დადებით პუნქტებს ტექნოლოგიის გაუმჯობესებისა და ტექნიკური დავალიანების შემცირების შესახებ.
  • ზედიზედ რამდენიმე კვარტალური გამოშვებისთვის ჩვენ შევძელით ფუნქციონირების გაზრდა პროექტში კოდის ხაზების რაოდენობის გაზრდის გარეშე. არასაჭირო კოდის ამოღებამ და საჭიროების გამარტივებამ შეამცირა კოდის ბაზის ზომა არსებული ფუნქციონირებისთვის. და ეს შემცირება უხეშად დაემთხვა მასშტაბით ახალ კოდს, რომელიც ახორციელებს ახალ ფუნქციონირებას.
  • რეფაქტორირებისა და განახლების დროს პროდუქტი ყოველთვის მუშა მდგომარეობაშია. ყოველ ორ კვირაში ჩვენ ვაძლევთ სრულად მოქმედ შუალედურ გამოშვებას.

ნება მომეცით გითხრათ, როგორ მივაღწიეთ ამას.

რა არის ტექნიკური დავალიანება

ტექნიკური დავალიანების ჩემი სამუშაო განმარტება არის სამუშაოს მოცულობა, რომელიც უნდა გაკეთდეს იმისათვის, რომ პროექტი დააკმაყოფილოს გუნდის ხედვაზე, რა არის შესანიშნავი. გაითვალისწინეთ, რომ ტექნიკური დავალიანება შეიძლება წარმოიშვას არა მხოლოდ განვითარებაში ხელჯოხების ლიბერალური გამოყენების გამო, არამედ სილამაზის შესახებ იდეების შეცვლის გამო. მაგალითად, შეიცვალა ინდუსტრიის საერთო პრაქტიკა. ან დეველოპერებს შეუყვარდათ OOP და შეუყვარდათ ფუნქციონალური პროგრამირება. ან ოდესღაც მოდური ჩარჩო აღარ არის ნამცხვარი და გართულდა სპეციალისტების პოვნა, რომლებსაც მასზე დაწერა სურთ.


თუმცა, ტექნიკური დავალიანების მთავარი მიზეზი არის ენტროპია მთელი თავისი მრავალფეროვნებით. გამორთული ერთეულის ტესტები, მოძველებული კომენტარები, რომლებმაც დაკარგეს შეხება კოდთან, წარუმატებელი არქიტექტურული გადაწყვეტილებები, ფუნქციების განხორციელება, რომლებსაც აღარავინ იყენებს, საფუძველი მომავლისთვის, რომელიც არ მოსულა და ბევრი, ბევრი სხვა.


აქედან გამომდინარეობს, რომ ტექნიკური დავალიანების გამოჩენა გარდაუვალია ნებისმიერ ხანგრძლივ პროექტში.

როცა ტექნიკური დავალიანება არ არის პრობლემა

რატომ არის ტექნიკური დავალიანება ცუდი? ეს ზრდის შემდგომი განვითარების ღირებულებას მთელი რიგი ფაქტორების გამო:

  • მცირდება ახალი ფუნქციონირების განხორციელების სიჩქარე.
  • დეფექტების გამოსწორებისას რეგრესიების ალბათობა იზრდება.
  • განვითარების პროცესი ხდება ნაკლებად პროგნოზირებადი და, შესაბამისად, ნაკლებად მართვადი.
  • პროექტში ახალი დეველოპერის შემოყვანის პროცესი გრძელდება.

ამ ზარალს ზოგჯერ უწოდებენ "პროცენტს ტექნიკურ დავალიანებაზე".


არის სიტუაციები, როდესაც ეს დანაკარგები უფრო იაფია, ვიდრე ტექნიკური დავალიანების აღმოფხვრა:

  • პროექტის სიცოცხლის დასასრული ახლოვდება. გაითვალისწინეთ, ეს არ არის ფუნქციების დამატების დასასრული, არამედ ის მომენტი, როდესაც შეგიძლიათ შეაჩეროთ პროგრამისტის ძალისხმევის დახარჯვა მხარდაჭერაზე. ამ კატეგორიაში ასევე შედის ერთჯერადი პროტოტიპები, ერთჯერადი დემო გამოფენებისთვის და ა.შ.
  • განვითარების დროის ღირებულება ახლა გაცილებით მაღალია, ვიდრე მოსალოდნელია მომავალში. ფიქსირებული ვადის გადაუდებელი შესწორებები, სტარტაპები, რომლებსაც არ აქვთ ფული დაფინანსების შემდეგი რაუნდიდან და ა.შ. ასეთ შემთხვევებში ტექნიკური დავალიანების დაფიქსირება შეიძლება გადაიდოს მანამ, სანამ სიცხე არ გაცივდება. არის პროექტები, რომლებიც არ გამოდიან საგანგებო მდგომარეობიდან, მაგრამ ამ სტატიიდან მიღებული რჩევები მათ მაინც არ დაეხმარება.

რა ვუყოთ ტექნიკურ ვალს? წარუმატებელი მიდგომები

მიდგომა No 1. „დრო არ გვაქვს, გამოშვება გუშინ უნდა იყოს წარმოდგენილი“

ხვალინდელი ვადის დაკმაყოფილების სურვილი ნებისმიერ ფასად, განვითარების სიჩქარის საზიანოდ ზეგ.


ზოგჯერ ყავარჯნებისაგან დამზადებული ასაწყობი სტრუქტურა ობიექტურად სწორი არჩევანია. ჩემს პრაქტიკაში ეს ყველაზე ნათლად გამოიხატა გამოფენებისთვის დემო ვერსიების მიღებისას. ღონისძიების თარიღი მკაცრად არის დაფიქსირებული, თუ დროულად არ მიაღწიეთ მნიშვნელოვან გამოფენას, შემდეგი მცდელობა იქნება ერთ წელიწადში. ამ შემთხვევაში, თქვენ შეგიძლიათ აჩვენოთ პროდუქტი "ხელიდან", ფრთხილად თავიდან აიცილოთ ყველა შეცდომა. როგორც ინჟინერს, ჩემთვის უსიამოვნოა ასეთი პროექტების გაკეთება, მაგრამ მათში ყავარჯნები გამართლებულია.


როცა ამზადებ პროდუქტს, რომელიც დიდხანს გაგრძელდება, ყველაფერი სხვაგვარადაა. საეჭვო ტექნიკური გადაწყვეტილებების გამო ვადის დაცვა ძვირი სიამოვნებაა. მთლიანი ღირებულებაა:

  1. თავად ყავარჯნის განხორციელებიდან,
  2. მისი შემდგომი ჩანაცვლებიდან სრულფასოვანი ხსნარით,
  3. წინა პუნქტებს შორის ყავარჯნის ტანჯვისგან.

მეორე პუნქტის დაფასება ძალიან ადვილია და არსებობს რისკი, რომ საერთოდ არ იფიქროთ მესამეზე, ყველაზე ძვირადღირებულზე.


როდესაც კონფერენციაზე ტექნოლოგიურ ლიდერს შეხვდებით თვალისმომჭრელი თვალებით, შეიძლება აღმოჩნდეს, რომ ეს იყო ყავარჯნებისაგან დამზადებული დიზაინის გაუთავებელი გამართვის კოშმარი, რამაც იგი ამ მდგომარეობამდე მიიყვანა.


მიდგომა No2. ”დიახ, აქ უნდა გადავაგდოთ ყველაფერი და ისევ დავწეროთ”

რაც უფრო უარესია ტექნიკური დავალიანების მდგომარეობა, მით უფრო ძლიერდება ცდუნება, რომ დამარხოთ მთელი პროექტის კოდი და ისევ დაწეროთ ყველაფერი. ეს არის ერთ-ერთი კლასიკური შეცდომა, რომელსაც შეუძლია მოკლას მთელი პროექტი.


თემა იმდენად კარგად არის გაშუქებული ჯოელ სპოლსკის ცნობილ სტატიაში, რომ ჩემი არგუმენტების წარმოდგენის აზრს ვერ ვხედავ.

მიდგომა No. 3. „ჩვენ ვასწორებთ ღამით და შაბათ-კვირას, რათა მენეჯერმა არ გაარკვიოს“.

ბიზნესის სარგებლის თვალსაზრისით ტექნიკური დავალიანების აღმოფხვრის აუცილებლობის კამათი ყოველთვის არ არის ადვილი. დეველოპერთა გუნდს შეიძლება გაუჩნდეს ცდუნება, შემოიხედოს უხეში კიდეები და დაიწყოს ძირითადი რეფაქტორირება ადგილზე. ეს შეიძლება გაკეთდეს არასამუშაო საათებში, სხვა დავალებებს შორის პაუზებში ან სხვა ამოცანების „კუდზე“ შეფასებების გაბერვით.


რა არის ამაში ცუდი? ოჰ, უამრავი რამ:

  • შემცირებული გამჭვირვალობა ძირს უთხრის ნდობას მენეჯმენტსა და გუნდს შორის. ხშირად სიტუაციის გამოსწორების შემდგომი მცდელობები დისციპლინის დაწესებით და ხრახნების გამკაცრებით გამოიწვევს გუნდური მუშაობის შემდგომ გაუარესებას.
  • ფესვგადგმული სიტუაცია, რომელშიც გუნდისა და მენეჯმენტის პრიორიტეტები ურთიერთსაწინააღმდეგოა, ორივე მხარის დემოტივაციას იწვევს.
  • რეფაქტორინგის ნაყოფი შედის პროდუქტში არაპროგნოზირებადი გზებით და იწვევს რეგრესიულ შეცდომებს იქ, სადაც არ არის მოსალოდნელი. შეგნებულ გუნდებში ეს იწვევს უეცარ და დაუგეგმავ დატვირთვას QA-ზე. არაცნობიერში ის გადადის წარმოებაში და იქ იშლება.

მას შემდეგ, რაც გუნდი გამოიყენებს ამ რეცეპტს, მენეჯმენტის თვალები იწყებს ტრიალს.

ჩვენი პრინციპები

1. დაამატეთ ტექნიკური ამოცანები ზოგად ჩამორჩენას

პროექტებში ამოცანების ცხოვრებაში რამდენიმე ნიმუშია:

  • დავალება, რომელიც არ არის ჩამორჩენილი, ნაკლები შანსი აქვს სამსახურში მოხვედრას.
  • დავალებას მკაფიო ფორმულირების გარეშე აქვს სამუშაოში მოხვედრის ნაკლები შანსი.
  • დავალებას, რომელიც არ შეიძლება შეფასდეს მაღალი ნდობით, ნაკლები შანსი აქვს საქმეში მოხვედრას.
  • დიდი დავალება უფრო დიდხანს დაელოდება რიგში, ვიდრე პატარა.

მაქსიმ დოროფეევი ამ საკითხებზე ძალიან კარგად საუბრობს თავის "ცარიელი შემოსულების ტექნიკაში"


ტექნიკური დავალიანების დაგროვების თავიდან ასაცილებლად, მის აღმოფხვრაზე მუშაობა უნდა დასრულდეს ზემოთ ჩამოთვლილი პრინციპების გათვალისწინებით.


ყველა დავალება, გარდა უმცირესისა, ჩამოთვლილია ჩანაწერში. ამ გზით მათ აქვთ შესაძლებლობა, გააკეთონ არა მხოლოდ თავისუფალ დროს, არამედ დაგეგმილი სამუშაოს ფარგლებში. გარდა ამისა, ასეთი ამოცანების სრული დაკარგვა უფრო რთულია - ჩამორჩენილი ნარჩენები უფრო ხშირად და უფრო მჭიდროდ განიხილება, ვიდრე TODO-ებს კოდში, ქაღალდის ნაჭრებს მონიტორზე, მიტოვებულ ვიკი გვერდებზე, ჩაის შეღებილ ხელსახოცებს დიაგრამებით და სხვა. ინფორმაციის წყაროები.

  • თუ კოდში არის არატრივიალური TODO, ის შეიცავს ბმულს დავალების დასაბრუნებლად. ჩვენ ვამოწმებთ ამ პრინციპის შესაბამისობას კოდის განხილვისას და არ ვიღებთ კომპლექსურ TODO-ებს მითითებების გარეშე.

    კომენტარის უკან შესაძლოა დრამა იყოს.

    ერთხელ, ასეთი TODO-ს გვერდით ეწერა: „ყავარჯენი. პროდუქტის მფლობელმა მაიძულა ამის გაკეთება. რაც შეიძლება მალე ამოიღეთ“.

  • როდესაც დეველოპერი აცნობიერებს, რომ რაღაც ადგილი საჭიროებს რეფაქტორირებას, ის ქმნის პრობლემას ნარჩენებში.
  • როდესაც დეველოპერს აქვს პლატფორმის გაუმჯობესების სურვილი, ის ქმნის დავალებას ბექლოგში.
  • გრძელვადიანი არქიტექტურული გეგმები ცალკეული ამოცანების სახით გროვდება, როგორც კი საკმარისი დარწმუნება იქნება მინიმუმ პირველი ნაბიჯების შესახებ.

სანამ ასეთი ცვლილებები იაფი დარჩება განვითარების ხარჯებისა და საჭირო ტესტირების ოდენობის თვალსაზრისით, ჩვენ შეგვიძლია თანდათან გავაუმჯობესოთ ჩვენი კოდის ბაზა ბიზნესის მიზნების შეწყვეტის ან დამატებითი რისკების დანერგვის გარეშე.

2. დაგეგმეთ ტექნიკური ისტორიები ბიზნესის პრიორიტეტებზე დაყრდნობით

ტყეში ხე რომ დაეცა, მაგრამ არავის გაუგია, იყო თუ არა ხმა? თუ პროექტში არის ცუდი კოდი, მაგრამ ეს მოდული არასდროს საჭიროებს შეცვლას, არის თუ არა ტექნიკური დავალიანება?


მე მჯერა, რომ როდესაც პროგრამისტს უსიამოვნოა რაიმე ძველი მოდულის ყურება, ეს თავისთავად არ არის დიდი პრობლემა. გაცილებით უარესია ის, რაც ხდება, როდესაც გჭირდებათ ამ მოდულის ახალი ფუნქციონირების დამატება ან ძველის გაფართოება. კარგად დაწერილ კოდში ცვლილებების შეტანასთან შედარებით, ასეთი ამოცანები უფრო სავარაუდოა (და უფრო სავარაუდოა, რომ აღემატება თავდაპირველ შეფასებას) და შეიცავს უფრო მეტ შეცდომებს. ზოგჯერ ბევრად მეტი. ამ ტიპის პრობლემებისგან თავის დასაცავად, ჩვენ ვცდილობთ დავგეგმოთ რეფაქტორირება ისე, რომ ისინი განხორციელდეს ახალი ფუნქციების იმავე ადგილას ჩაწერამდე.


თუ ფუნქციონალური ცვლილებები და რეფაქტორირება მცირეა, ისინი შეიძლება ერთად გაკეთდეს. ამოცანის ემპირიულად შერჩეული ზომა, რომლისთვისაც ეს მიდგომა იქნება ოპტიმალური, არის 3 დღე სამუშაო ერთი დეველოპერისთვის ან ნაკლები. როდესაც ცხადია, რომ მეტი სამუშაოა, ის იყოფა რეფაქტორირებად, მიმდინარე ქცევის შენარჩუნებით და ახალი ფუნქციონირების დანერგვით.


ამრიგად, ტექნიკური დავალიანების აღმოფხვრის სამუშაოების თანმიმდევრობა განისაზღვრება საქმიანი ამოცანების თანმიმდევრობით.


„ბიზნესის პრიორიტეტების“ პრინციპს კიდევ ერთი გამოყენება აქვს. ერთ-ერთი საერთო პრობლემა, რომელსაც აწუხებთ დეველოპერები, რომლებიც ცდილობენ კარგად დაწერონ, არის მუშაობის ოპტიმიზაციისთვის დროის დათმობის სირთულე, შენარჩუნების გაუმჯობესება ან სხვა რამ, რაც უშუალოდ არ შედის სამუშაო გეგმაში. თითქმის ყოველთვის არის ბიზნესის საჭიროება ამ გაუმჯობესებისთვის. ვის არ სურს სისტემამ იმუშაოს უფრო სწრაფად, უფრო სტაბილურად და უფრო იაფი იყოს შენარჩუნება? ყველა ეს სარგებელი შეიძლება შეფასდეს და, ამ შეფასების საფუძველზე, გაუმჯობესების ამოცანები შეიძლება განთავსდეს დანარჩენებთან ერთად.


ასე რომ, თუ გსურთ მუშაობის ოპტიმიზაცია, მაგრამ ამის ნაცვლად მოგიწევთ კიდევ ერთი მოსაწყენი ხარვეზის გამოსწორება, შესაძლოა უბრალოდ არ იცით როგორ ახსნათ ოპტიმიზაციის სარგებელი იმ ენაზე, რომელსაც პროდუქტის მფლობელს ესმის.

3. დატოვეთ კოდი უფრო სუფთა, ვიდრე ადრე იყო

თითქმის ნებისმიერი კოდი, გარდა ახლახან დაწერილისა, ოდნავ ჩამორჩება სილამაზის ამჟამინდელ იდეას სტილისა და არქიტექტურის სფეროში. როდესაც თქვენ გჭირდებათ კოდის შეცვლა, როგორც დავალების ნაწილი, კარგ პრაქტიკად ითვლება ყველა უსაფრთხო გაუმჯობესების განხორციელება, რაც შესაძლებელია დაზარალებულ ტერიტორიაზე. რა შეიძლება იყოს?

  • მოდულების მოყვანა მიმდინარე სტილში.
  • შიდა ცვლადების სახელების შეცვლა უფრო გასაგებად.
  • გაამარტივეთ განხორციელება ქცევის შენარჩუნებისას.
  • ლოკალური რეფაქტორინგი, რომელიც არ ახორციელებს ფართომასშტაბიან ცვლილებებს სხვა მოდულებში.

მოსალოდნელია, რომ ეს გაუმჯობესებები გააუმჯობესებს კოდს, მაგრამ მნიშვნელოვნად არ გაზრდის განვითარების ან ტესტირების ღირებულებას.


ამ პრინციპიდან გამომდინარე, კოდის ხარისხი თანდათან იზრდება ფონზე, იმ ადგილებშიც კი, სადაც ცალკე რეფაქტორირება არ იყო დაგეგმილი. უფრო მეტიც, რაც უფრო ხშირად ვიმუშავებთ სისტემის გარკვეულ ნაწილზე, მით უკეთესი იქნება კოდი ამ ნაწილისთვის. კარგი კონტრასტია პროექტებისგან, სადაც დეველოპერი ყველაზე მეტ დროს ატარებს ყველაზე ცუდი კოდის მქონე ნაწილებზე.

4. რაც არ უნდა მოხდეს, სისტემა უნდა დარჩეს მუშა მდგომარეობაში.

SCRUM-ის ერთ-ერთი ძირითადი პრინციპი ამბობს, რომ ყოველი სპრინტის ბოლოს სისტემამ უნდა მიაღწიოს სტაბილურ მდგომარეობას.


„სპრინტის დასასრულისთვის, მატება მზად უნდა იყოს, რაც ნიშნავს, რომ ის აკმაყოფილებს Scrum Team-ის მზადყოფნის კრიტერიუმებს და მზად არის გამოსაყენებლად. ის მზად უნდა იყოს გამოსაყენებლად, მიუხედავად პროდუქტის მფლობელის გადაწყვეტილებისა მისი გამოშვების ან გადადების შესახებ. ”

ტექნიკური დავალიანების აღმოფხვრის ნებისმიერი სამუშაო ამ პრინციპის დაცვით ხდება.


დიდი გარდაქმნები აუცილებლად იშლება ისე, რომ ნებისმიერი ინდივიდუალური ეტაპი შეიძლება დასრულდეს ერთ სპრინტში. მაგალითად, ჩვენ შევცვალეთ შეკრების სისტემა ორ ეტაპად ()


ჩვენ ვმუშაობთ VCS-თან კლასიკურ gitflow-თან მიახლოებული პრინციპების მიხედვით. განვითარება ხდება მხატვრული ფილიალებში, იქ ტარდება ტესტირება. როგორც წესი, ასეთი ტოტი ერთ ორკვირიან სპრინტზე მეტ ხანს არ გრძელდება. ფილიალი, რომელიც უფრო მეტხანს ცხოვრობს, თითქმის ყოველთვის იწვევს დამატებით ხარჯებს.


ჩვენი გამოცდილება ნათლად ადასტურებს ამ ნიმუშს. ყოველ ჯერზე, როდესაც ჩვენ ვერ ვასრულებდით დიდ რეფაქტორირებას ორ კვირაში, ეს იყო ტკივილი და ტანჯვა. და რაც უფრო გრძელი იყო დავალება და რაც უფრო დიდხანს ცოცხლობდა ღია ფილიალი, მით უფრო ნელა მიდიოდა სამუშაო და უფრო მეტი პრობლემა იყო.


სტაბილური გამოშვებისგან ყოველთვის რამდენიმე ნაბიჯის დაშორების აუცილებლობა ქმნის ერთ-ერთ ყველაზე რთულ და საინტერესო საინჟინრო პრობლემას - სტრატეგიული გეგმების ოპტიმალური დაშლის პოვნას. ფართომასშტაბიანი ცვლილებები შეიძლება დაიყოს ცალკეულ, დამოუკიდებელ ნაბიჯებად. მიზანშეწონილია სარგებლის მიღება რაც შეიძლება ადრე დაიწყოთ. რაც უფრო კარგად განხორციელდება სამუშაოს ეს დაშლა, მით მეტია სამუშაოს დასრულებამდე მიყვანის შანსი.

როგორ გამოიყურება ჩვენი პროცესი

თითო გამოშვებაზე ერთხელ ჩვენ ვაკეთებთ ტექნიკური ჩამორჩენის დეტალურ მიმოხილვას:

  • ჩვენ ვხურავთ შეუსაბამო ისტორიებს (დაკარგულია აქტუალობა, დამზადებულია რაღაცის ნაწილად, დუბლიკატები).
  • ჩვენ ვაახლებთ აღწერას, სადაც შეიცვალა საკითხის ხედვა.

როდესაც ბიზნეს ისტორიები ჩნდება ჰორიზონტზე, კეთდება ტექნიკური ანალიზი და ყველა ტექნიკური ისტორია, რომელიც დაეხმარება განხორციელებაში, ასოცირდება ბიზნეს ისტორიასთან.


სპრინტის დაგეგმვისთვის მზადება:

  • ჩვენ ვამოწმებთ კავშირებს ტექნიკურ და ბიზნეს ისტორიებს შორის.
  • ჩვენ ყველა დაკავშირებულ შეცდომას ვუკავშირებთ ტექნიკურ ისტორიებს, რომელთა გამოსწორება შესაძლებელია იაფად იმავე ადგილას.

როგორ ჩამოყალიბდეს ნარჩენების ტექნიკური ნაწილი

როდესაც გუნდში წამყვანის როლი ვითამაშე, თითოეულ დეველოპერს და QA-ს ვკითხე, რა გაუმჯობესება სურდათ პროდუქტში. მოთხოვნების უმეტესობა ეხებოდა პლატფორმის ტექნიკურ გაუმჯობესებას და რეფაქტორირებას. როგორც შემდგომმა გამოცდილებამ აჩვენა, პროდუქტის ყველა ძირითადი ტექნიკური პრობლემა ჩართული იყო სურვილების ამ კომპლექტში. ასე რომ, თქვენ შეგიძლიათ გამოიყენოთ ეს პრაქტიკა ნულიდან ტექნიკური ნარჩენების სწრაფად შესაქმნელად ან ახალ პროექტში ტექნიკური დავალიანების მდგომარეობის შესახებ ზოგადი წარმოდგენის მისაღებად.


ნარჩენების მიმდინარე შევსება ტექნიკური ამოცანებით ხდება ზემოთ აღწერილი პრაქტიკის გამო და არ საჭიროებს ცალკეულ ძალისხმევას ან ანალიზს. გარდა ამისა, ნარჩენებს ემატება პროდუქტის ტექნიკური გაუმჯობესების ახალი იდეები. ამას აკეთებს გუნდის ნებისმიერი წევრი, ვისაც ასეთი იდეა გაუჩნდა. ამ ეტაპზე მთავარია იდეა არ დაკარგოთ. პრიორიტეტის დაზუსტება და განსაზღვრა ხდება მოგვიანებით, სამუშაოს დაგეგმვისას.

დასკვნები

  • ტექნიკური დავალიანება გარდაუვალია.
  • პროექტების უმეტესობისთვის ტექნიკური დავალიანების აღმოფხვრა ძალისხმევის კარგი ინვესტიციაა.
  • თუ ტექნიკური დავალიანება არ განიხილება, განვითარების სიჩქარე თანდათან ნულს მიუახლოვდება.
  • ყველაფრის გადაყრისა და ხელახლა დაწერის ცდუნებამ შეიძლება მოკლას ან სერიოზულად გაანადგუროს თქვენი პროექტი.
  • ტექნიკური დავალიანების აღმოფხვრის სარგებელი უნდა ჩამოყალიბდეს ბიზნესის უპირატესობებით, წინააღმდეგ შემთხვევაში, არსებობს რისკი, რომ ახალი ფუნქციების შექმნის ამოცანები ყოველთვის უფრო მნიშვნელოვანად ჩაითვალოს.
  • ტექნიკური დავალიანების აღმოფხვრის ამოცანები ღირს მართვა. ასეთი ამოცანები არ განსხვავდება სხვა საპროექტო ამოცანებისაგან ბუღალტრული აღრიცხვის, დაგეგმვისა და პრიორიტეტების მიხედვით.
  • რეგულარულად წარმოიქმნება სიტუაციები, როდესაც შეგიძლიათ შეამციროთ ტექნიკური დავალიანება და მოაგვაროთ ბიზნეს პრობლემა, ამავე დროს, უფრო იაფად, ვიდრე ცალკე. ეს შესაძლებლობები უნდა იქნას გამოყენებული.
  • გააზრებული და დროულად განახლებული კოდის სტილის კონვენციები და განხილვის პროცესები ხელს უწყობს ახალი ტექნიკური დავალიანების გაჩენის შენელებას.
  • მოკლე გამეორებები ისეთივე სასარგებლოა რეფაქტორინგისთვის, როგორც ახალი ფუნქციონალური განვითარებისთვის.
  • გუნდმა, როგორც წესი, იცის, სად არის პროექტში ტექნიკური დავალიანება და რამდენად ცუდია. ღირს ამ ცოდნის გამოყენება პროექტის ტექნიკური დავალიანების შესახებ წარმოდგენის ფორმირებისას.

კატეგორიები

პოპულარული სტატიები

2024 "kingad.ru" - ადამიანის ორგანოების ულტრაბგერითი გამოკვლევა