Οι Λάννιστερ πληρώνουν πάντα τα χρέη τους. Ποιο είναι το μότο των Lannister; Ο Γιούρι Μπόλντιρεφ συκοφαντεί τον ασήμαντο μπλόγκερ του υπο-Κρεμλίνου Ρότζερς

Τεχνολογικές πρακτικές διαχείρισης χρέους σε μια ενιαία ομάδα


Πριν από περίπου ένα χρόνο, η ομάδα μας πέρασε από μια φάση ταχείας ανάπτυξης χαρακτηριστικών σε μια πιο ρευστή ανάπτυξη με έμφαση στη βελτίωση της ποιότητας. Σε αυτό το σημείο, τα προϊόντα μας έχουν συγκεντρώσει έναν αξιοσημείωτο αριθμό μη βέλτιστων λύσεων, άσχημο κώδικα και ξεπερασμένες βιβλιοθήκες. Κάτι έπρεπε να γίνει για όλα αυτά.


Μέχρι σήμερα, έχουμε καταφέρει να οικοδομήσουμε μια διαδικασία που καθιστά την καταπολέμηση του τεχνικού χρέους προβλέψιμη, ανώδυνη και αναπόφευκτη.


Τι πήραμε ως αποτέλεσμα:

  • Η ομάδα είναι χαρούμενη. Η αναδρομική έκδοση περιλαμβάνει τακτικά θετικά σημεία σχετικά με τη βελτίωση της τεχνολογίας και τη μείωση του τεχνικού χρέους.
  • Για αρκετές τριμηνιαίες εκδόσεις στη σειρά, μπορέσαμε να αυξήσουμε τη λειτουργικότητα χωρίς να αυξήσουμε τον αριθμό των γραμμών κώδικα στο έργο. Η κατάργηση του περιττού κώδικα και η απλοποίηση του απαραίτητου μείωσε το μέγεθος της βάσης κώδικα για την υπάρχουσα λειτουργικότητα. Και αυτή η μείωση συνέπεσε περίπου σε κλίμακα με τον νέο κώδικα που εφαρμόζει τη νέα λειτουργικότητα.
  • Κατά τις ανακατασκευές και τις αναβαθμίσεις, το προϊόν είναι πάντα σε κατάσταση λειτουργίας. Κάθε δύο εβδομάδες κυκλοφορούμε μια ενδιάμεση κυκλοφορία που λειτουργεί πλήρως.

Επιτρέψτε μου να σας πω πώς το πετύχαμε αυτό.

Τι είναι το τεχνικό χρέος

Ο εργασιακός ορισμός μου για το τεχνικό χρέος είναι ο όγκος της δουλειάς που πρέπει να γίνει για να μπορέσει ένα έργο να ανταποκριθεί στο όραμα της ομάδας για το τι είναι υπέροχο. Σημειώστε ότι το τεχνικό χρέος μπορεί να προκύψει όχι μόνο λόγω της φιλελεύθερης χρήσης των πατερίτσες στην ανάπτυξη, αλλά και λόγω της αλλαγής των ιδεών για την ομορφιά. Για παράδειγμα, οι κοινές πρακτικές του κλάδου έχουν αλλάξει. Ή οι προγραμματιστές ερωτεύτηκαν το OOP και ερωτεύτηκαν τον λειτουργικό προγραμματισμό. Ή το άλλοτε μοντέρνο πλαίσιο δεν είναι πια κέικ και έχει γίνει δύσκολο να βρεις ειδικούς που θα ήθελαν να γράψουν πάνω του.


Ωστόσο, η κύρια αιτία του τεχνικού χρέους είναι η εντροπία σε όλη της την ποικιλομορφία. Δοκιμές μονάδων με ειδικές ανάγκες, παρωχημένα σχόλια που έχασαν την επαφή με τον κώδικα, ανεπιτυχείς αρχιτεκτονικές αποφάσεις, εφαρμογή χαρακτηριστικών που κανείς δεν χρησιμοποιεί πια, μια βάση για ένα μέλλον που δεν έχει έρθει και πολλά, πολλά άλλα.


Από αυτό προκύπτει ότι η εμφάνιση τεχνικού χρέους είναι αναπόφευκτη σε κάθε μακρόβιο έργο.

Όταν το τεχνικό χρέος δεν είναι πρόβλημα

Γιατί είναι κακό το τεχνικό χρέος; Αυξάνει το κόστος περαιτέρω ανάπτυξης λόγω ορισμένων παραγόντων:

  • Η ταχύτητα υλοποίησης της νέας λειτουργικότητας μειώνεται.
  • Η πιθανότητα παλινδρόμησης κατά τη διόρθωση ελαττωμάτων αυξάνεται.
  • Η διαδικασία ανάπτυξης γίνεται λιγότερο προβλέψιμη και επομένως λιγότερο διαχειρίσιμη.
  • Η διαδικασία εισαγωγής ενός νέου προγραμματιστή στο έργο επιμηκύνεται.

Αυτή η απώλεια ονομάζεται μερικές φορές "τόκοι τεχνικού χρέους"


Υπάρχουν περιπτώσεις όπου αυτές οι απώλειες είναι φθηνότερες από την εξάλειψη του τεχνικού χρέους:

  • Το τέλος της ζωής του έργου πλησιάζει. Σημείωση, αυτό δεν είναι το τέλος της προσθήκης λειτουργικότητας, αλλά η στιγμή που μπορείτε να σταματήσετε να σπαταλάτε τις προσπάθειες του προγραμματιστή για υποστήριξη. Αυτή η κατηγορία περιλαμβάνει επίσης πρωτότυπα εφάπαξ, επιδείξεις για εκθέσεις κ.λπ.
  • Η αξία του χρόνου ανάπτυξης τώρα είναι πολύ υψηλότερη από την αναμενόμενη στο μέλλον. Επείγουσες διορθώσεις σε καθορισμένη προθεσμία, νεοφυείς επιχειρήσεις που ξεμένουν από χρήματα από τον επόμενο γύρο χρηματοδότησης κ.λπ. Σε τέτοιες περιπτώσεις, ο καθορισμός τεχνικού χρέους μπορεί να καθυστερήσει έως ότου κρυώσει ο καύσωνας της στιγμής. Υπάρχουν έργα που δεν βγαίνουν από κατάσταση έκτακτης ανάγκης, αλλά οι συμβουλές από αυτό το άρθρο και πάλι δεν θα τους βοηθήσουν.

Τι να κάνετε με το τεχνικό χρέος; Αποτυχημένες προσεγγίσεις

Προσέγγιση Νο. 1. "Δεν έχουμε χρόνο, η έκδοση πρέπει να υποβληθεί χθες"

Η επιθυμία να τηρηθεί με κάθε κόστος η αυριανή προθεσμία, εις βάρος της αναπτυξιακής ταχύτητας μεθαύριο.


Μερικές φορές μια προκατασκευασμένη κατασκευή από πατερίτσες είναι μια αντικειμενικά σωστή επιλογή. Στην πρακτική μου, αυτό εκφράστηκε πιο ξεκάθαρα όταν δημιουργούσα εκδόσεις επίδειξης για εκθέσεις. Η ημερομηνία της εκδήλωσης είναι αυστηρά καθορισμένη· αν δεν κάνατε έγκαιρα για μια σημαντική έκθεση, η επόμενη προσπάθεια θα είναι σε ένα χρόνο. Σε αυτήν την περίπτωση, μπορείτε να εμφανίσετε το προϊόν "από τα χέρια σας", αποφεύγοντας προσεκτικά όλα τα σφάλματα. Ως μηχανικός, είναι δυσάρεστο για μένα να κάνω τέτοια έργα, αλλά τα δεκανίκια σε αυτά είναι δικαιολογημένα.


Όταν φτιάχνεις ένα προϊόν που θα διαρκέσει πολύ, όλα είναι διαφορετικά. Η τήρηση της προθεσμίας λόγω αμφίβολων τεχνικών λύσεων είναι μια δαπανηρή απόλαυση. Το συνολικό κόστος είναι:

  1. από την εφαρμογή του ίδιου του δεκανίκι,
  2. από την επακόλουθη αντικατάστασή του με μια ολοκληρωμένη λύση,
  3. από την ταλαιπωρία της ύπαρξης δεκανίκι ανάμεσα στα προηγούμενα σημεία.

Το δεύτερο σημείο είναι πολύ εύκολο να υποτιμηθεί, και υπάρχει ο κίνδυνος να μην σκεφτούμε καθόλου το τρίτο, το πιο ακριβό.


Όταν συναντάτε έναν επικεφαλής τεχνολογίας με τρεμούλιασμα σε ένα συνέδριο, μπορεί να αποδειχθεί ότι ήταν ο εφιάλτης του ατελείωτου εντοπισμού σφαλμάτων ενός σχεδίου κατασκευασμένου από δεκανίκια που τον έφερε σε αυτήν την κατάσταση.


Προσέγγιση Νο. 2. «Ναι, εδώ πρέπει να τα πετάξουμε έξω και να τα ξαναγράψουμε»

Όσο χειρότερη είναι η κατάσταση του τεχνικού χρέους, τόσο ισχυρότερος είναι ο πειρασμός να θάψουμε ολόκληρο τον κώδικα του έργου και να γράψουμε τα πάντα ξανά. Αυτό είναι ένα από τα κλασικά λάθη που μπορεί να σκοτώσει ολόκληρο το έργο.


Το θέμα καλύπτεται τόσο καλά στο διάσημο άρθρο του Joel Spolsky που δεν βλέπω νόημα να παρουσιάσω τα δικά μου επιχειρήματα.

Προσέγγιση Νο. 3. «Θα ανανεώνουμε τη νύχτα και τα Σαββατοκύριακα, ώστε να μην το μάθει ο διευθυντής».

Το επιχείρημα της ανάγκης εξάλειψης του τεχνικού χρέους όσον αφορά τα επιχειρηματικά οφέλη δεν είναι πάντα εύκολο. Η ομάδα ανάπτυξης μπορεί να μπει στον πειρασμό να πάει γύρω από τις τραχιές άκρες και να ξεκινήσει μια σημαντική ανακατασκευή επί τόπου. Αυτό μπορεί να γίνει κατά τη διάρκεια μη εργάσιμων ωρών, σε παύσεις μεταξύ άλλων εργασιών ή «στην ουρά» άλλων εργασιών διογκώνοντας τις εκτιμήσεις.


Τι κακό έχει; Α, ένα σωρό πράγματα:

  • Η μειωμένη διαφάνεια υπονομεύει την εμπιστοσύνη μεταξύ της διοίκησης και της ομάδας. Συχνά, οι επακόλουθες προσπάθειες να διορθωθεί η κατάσταση επιβάλλοντας πειθαρχία και σφίγγοντας τις βίδες θα οδηγήσουν σε περαιτέρω επιδείνωση της ομαδικής εργασίας.
  • Μια παγιωμένη κατάσταση στην οποία οι προτεραιότητες της ομάδας και της διοίκησης είναι αντικρουόμενες προκαλεί αποθάρρυνση και στις δύο πλευρές.
  • Οι καρποί της ανακατασκευής περιλαμβάνονται στο προϊόν με απρόβλεπτους τρόπους και προκαλούν σφάλματα παλινδρόμησης όπου δεν αναμένονται. Στις συνειδητές ομάδες, αυτό οδηγεί σε ένα ξαφνικό και απρογραμμάτιστο φορτίο στο QA. Στο ασυνείδητο, μπαίνει στην παραγωγή και εκεί διασπάται.

Αφού η ομάδα χρησιμοποιήσει αυτή τη συνταγή, τα μάτια της διοίκησης αρχίζουν να συσπώνται.

Οι αρχές μας

1. Προσθέστε τεχνικές εργασίες στο γενικό ανεκτέλεστο

Υπάρχουν διάφορα πρότυπα στη ζωή των εργασιών σε έργα:

  • Μια εργασία που δεν είναι στο ανεκτέλεστο έχει λιγότερες πιθανότητες να μπει στη δουλειά.
  • Μια εργασία χωρίς σαφή διατύπωση έχει λιγότερες πιθανότητες να μπει στη δουλειά.
  • Μια εργασία που δεν μπορεί να εκτιμηθεί με υψηλό βαθμό εμπιστοσύνης έχει λιγότερες πιθανότητες να μπει στη δουλειά.
  • Μια μεγάλη εργασία θα περιμένει περισσότερο στην ουρά από μια μικρή.

Ο Maxim Dorofeev μιλάει για αυτά τα πράγματα πολύ καλά στην "Τεχνική του κενού εισερχομένων"


Για να αποφευχθεί η συσσώρευση τεχνικού χρέους, οι εργασίες για την εξάλειψή του θα πρέπει να ολοκληρωθούν λαμβάνοντας υπόψη τις αρχές που αναφέρονται παραπάνω.


Όλες οι εργασίες, εκτός από τις μικρότερες, παρατίθενται στο ανεκτέλεστο. Έτσι έχουν την ευκαιρία να γίνουν όχι μόνο στον ελεύθερο χρόνο τους, αλλά και ως μέρος της προγραμματισμένης εργασίας. Επιπλέον, τέτοιες εργασίες είναι πιο δύσκολο να χαθούν εντελώς από τα μάτια μας - το ανεκτέλεστο εξετάζεται πιο συχνά και πιο προσεκτικά από ό,τι σε TODO στον κώδικα, κομμάτια χαρτιού στην οθόνη, εγκαταλελειμμένες σελίδες wiki, χαρτοπετσέτες με διαγράμματα και άλλα πηγές πληροφοριών.

  • Εάν υπάρχει μια μη τετριμμένη TODO στον κώδικα, περιέχει έναν σύνδεσμο προς την εργασία στο ανεκτέλεστο αρχείο. Ελέγχουμε τη συμμόρφωση με αυτήν την αρχή κατά την αναθεώρηση του κώδικα και δεν αποδεχόμαστε πολύπλοκες TODO χωρίς αναφορές.

    Μπορεί να υπάρχει δράμα πίσω από το σχόλιο.

    Κάποτε, δίπλα σε ένα τέτοιο TODO έγραφε: «Περατίνα. Ο ιδιοκτήτης προϊόντος με ανάγκασε να το κάνω. Αφαιρέστε το συντομότερο δυνατό."

  • Όταν ένας προγραμματιστής συνειδητοποιεί ότι κάποιο μέρος απαιτεί ανακατασκευή, δημιουργεί ένα ζήτημα στο ανεκτέλεστο.
  • Όταν ένας προγραμματιστής έχει την επιθυμία να βελτιώσει την πλατφόρμα, δημιουργεί μια εργασία στο backlog.
  • Τα μακροπρόθεσμα αρχιτεκτονικά σχέδια τοποθετούνται στο ανεκτέλεστο με τη μορφή χωριστών εργασιών μόλις υπάρχει αρκετή βεβαιότητα για τουλάχιστον τα πρώτα βήματα.

Εφόσον αυτές οι αλλαγές παραμένουν ανέξοδες όσον αφορά το κόστος ανάπτυξης και τον απαιτούμενο όγκο δοκιμών, μπορούμε σταδιακά να βελτιώσουμε τη βάση του κώδικα χωρίς να διακόπτουμε τους επιχειρηματικούς στόχους ή να εισάγουμε πρόσθετους κινδύνους.

2. Σχεδιάστε τεχνικές ιστορίες με βάση τις επιχειρηματικές προτεραιότητες

Αν ένα δέντρο έπεφτε στο δάσος, αλλά κανείς δεν το άκουγε, ακούστηκε ήχος; Εάν υπάρχει κακός κώδικας σε ένα έργο, αλλά αυτή η ενότητα δεν θα χρειαστεί ποτέ να αλλάξει, υπάρχει τεχνικό χρέος;


Πιστεύω ότι όταν ένας προγραμματιστής βρίσκει δυσάρεστο να κοιτάξει κάποια παλιά ενότητα, αυτό από μόνο του δεν είναι πολύ μεγάλο πρόβλημα. Πολύ χειρότερο είναι αυτό που συμβαίνει όταν χρειάζεται να προσθέσετε νέα λειτουργικότητα σε αυτήν την ενότητα ή να επεκτείνετε την παλιά. Σε σύγκριση με την πραγματοποίηση αλλαγών σε καλογραμμένο κώδικα, τέτοιες εργασίες είναι πιο πιθανό (και πιο πιθανό να υπερβούν την αρχική εκτίμηση) και περιέχουν περισσότερα σφάλματα. Μερικές φορές πολύ περισσότερο. Για να προστατευθούμε από τέτοιου είδους προβλήματα, προσπαθούμε να προγραμματίσουμε ανακατασκευές έτσι ώστε να γίνονται πριν γράψουμε νέα λειτουργικότητα στο ίδιο μέρος.


Εάν οι αλλαγές λειτουργικότητας και οι ανακατασκευές φαίνονται μικρές, μπορούν να γίνουν μαζί. Το εμπειρικά επιλεγμένο μέγεθος της εργασίας για την οποία αυτή η προσέγγιση θα είναι βέλτιστη είναι 3 ημέρες εργασίας για έναν προγραμματιστή ή λιγότερο. Όταν είναι σαφές ότι υπάρχει περισσότερη δουλειά, χωρίζεται σε ανακατασκευή διατηρώντας την τρέχουσα συμπεριφορά και εφαρμόζοντας νέα λειτουργικότητα.


Έτσι, η σειρά εργασιών για την εξάλειψη του τεχνικού χρέους καθορίζεται από τη σειρά των επιχειρηματικών εργασιών στο ανεκτέλεστο.


Η αρχή των «επιχειρηματικών προτεραιοτήτων» έχει άλλη εφαρμογή. Ένα από τα κοινά προβλήματα που αντιμετωπίζουν οι προγραμματιστές που προσπαθούν να γράφουν καλά είναι η δυσκολία να αφιερώσουν χρόνο στη βελτιστοποίηση της απόδοσης, τη βελτίωση της δυνατότητας συντήρησης ή άλλα πράγματα που δεν περιλαμβάνονται άμεσα στο σχέδιο εργασίας. Υπάρχει σχεδόν πάντα μια επιχειρηματική ανάγκη για αυτές τις βελτιώσεις. Ποιος δεν θέλει το σύστημα να λειτουργεί πιο γρήγορα, πιο σταθερό και να είναι φθηνότερο στη συντήρηση; Όλα αυτά τα οφέλη μπορούν να αξιολογηθούν και, βάσει αυτής της αξιολόγησης, τα καθήκοντα για βελτίωση μπορούν να τοποθετηθούν στο ανεκτέλεστο, μαζί με οποιαδήποτε άλλα.


Επομένως, εάν θέλετε να βελτιστοποιήσετε την απόδοση, αλλά πρέπει να διορθώσετε ένα άλλο βαρετό σφάλμα, ίσως απλά δεν ξέρετε πώς να εξηγήσετε τα οφέλη της βελτιστοποίησης σε μια γλώσσα που μπορεί να κατανοήσει ο ιδιοκτήτης του προϊόντος.

3. Αφήστε τον κωδικό πιο καθαρό από ό,τι ήταν πριν

Σχεδόν κάθε κώδικας, εκτός από αυτόν που γράφτηκε πολύ πρόσφατα, υστερεί λίγο πίσω από την τρέχουσα ιδέα της ομορφιάς στον τομέα του στυλ και της αρχιτεκτονικής. Όταν χρειάζεται να αλλάξετε κώδικα ως μέρος μιας εργασίας, θεωρείται καλή πρακτική να κάνετε όλες τις ασφαλείς βελτιώσεις που είναι δυνατές στην πληγείσα περιοχή. Τι θα μπορούσε να είναι?

  • Φέρνοντας τις ενότητες στο τρέχον στυλ.
  • Αλλαγή ονομάτων εσωτερικών μεταβλητών σε πιο κατανοητά.
  • Απλοποιήστε την εφαρμογή διατηρώντας παράλληλα τη συμπεριφορά.
  • Τοπικές ανακατασκευές που δεν εισάγουν αλλαγές μεγάλης κλίμακας σε άλλες μονάδες.

Αυτές οι βελτιώσεις αναμένεται να κάνουν τον κώδικα καλύτερο, αλλά όχι να αυξήσουν σημαντικά το κόστος ανάπτυξης ή δοκιμής.


Λόγω αυτής της αρχής, η ποιότητα του κώδικα αυξάνεται σταδιακά στο παρασκήνιο, ακόμη και σε εκείνα τα μέρη όπου δεν είχαν προγραμματιστεί ξεχωριστές ανακατασκευές. Επιπλέον, όσο πιο συχνά εργαζόμαστε σε ένα συγκεκριμένο μέρος του συστήματος, τόσο καλύτερος είναι ο κώδικας για αυτό το τμήμα. Μια ωραία αντίθεση με έργα όπου ο προγραμματιστής ξοδεύει τον περισσότερο χρόνο στα εξαρτήματα με τον χειρότερο κώδικα.

4. Ό,τι κι αν συμβεί, το σύστημα πρέπει να παραμείνει σε κατάσταση λειτουργίας.

Μία από τις βασικές αρχές του SCRUM λέει ότι στο τέλος κάθε σπριντ το σύστημα θα πρέπει να φτάσει σε μια σταθερή κατάσταση.


«Μέχρι το τέλος του σπριντ, η αύξηση θα πρέπει να είναι έτοιμη, πράγμα που σημαίνει ότι πληροί τα κριτήρια ετοιμότητας της ομάδας Scrum και είναι έτοιμη για χρήση. Θα πρέπει να είναι έτοιμο για χρήση, ανεξάρτητα από την απόφαση του κατόχου του προϊόντος να το κυκλοφορήσει ή να το καθυστερήσει.»

Οποιαδήποτε εργασία για την εξάλειψη του τεχνικού χρέους γίνεται σύμφωνα με αυτήν την αρχή.


Οι μεγάλοι μετασχηματισμοί αναγκαστικά αποσυντίθενται έτσι ώστε κάθε μεμονωμένο στάδιο να μπορεί να ολοκληρωθεί σε ένα σπριντ. Για παράδειγμα, αλλάξαμε το σύστημα κατασκευής σε δύο στάδια (Angular 1.x: creeping webpack, lurking grunt)


Δουλεύουμε με VCS σύμφωνα με αρχές κοντά στο κλασικό gitflow. Η ανάπτυξη πραγματοποιείται σε κλάδους χαρακτηριστικών, η δοκιμή πραγματοποιείται εκεί. Κατά κανόνα, ένας τέτοιος κλάδος δεν διαρκεί περισσότερο από ένα σπριντ δύο εβδομάδων. Ένα υποκατάστημα που ζει περισσότερο σχεδόν πάντα έχει επιπλέον κόστος.


Η εμπειρία μας επιβεβαιώνει ξεκάθαρα αυτό το μοτίβο. Κάθε φορά που αποτυγχάναμε να ολοκληρώσουμε μια μεγάλη ανακατασκευή σε δύο εβδομάδες, ήταν πόνος και ταλαιπωρία. Και όσο μεγαλύτερη ήταν η εργασία και όσο περισσότερο ζούσε το ανοιχτό υποκατάστημα, τόσο πιο αργά πήγαιναν οι εργασίες και τόσο περισσότερα προβλήματα υπήρχαν.


Η ανάγκη να βρίσκεστε πάντα λίγα βήματα μακριά από μια σταθερή απελευθέρωση δημιουργεί ένα από τα πιο δύσκολα και ενδιαφέροντα προβλήματα μηχανικής - την εύρεση της βέλτιστης αποσύνθεσης των στρατηγικών σχεδίων. Οι αλλαγές μεγάλης κλίμακας μπορούν να αναλυθούν σε ξεχωριστά, ανεξάρτητα βήματα. Συνιστάται να αρχίσετε να λαμβάνετε παροχές όσο το δυνατόν νωρίτερα. Όσο καλύτερα εκτελείται αυτή η ανάλυση της εργασίας, τόσο μεγαλύτερες είναι οι πιθανότητες να ολοκληρωθεί η εργασία.

Πώς μοιάζει η διαδικασία μας

Μία φορά ανά έκδοση, κάνουμε μια λεπτομερή ανασκόπηση του τεχνικού εκκρεμούς:

  • Κλείνουμε άσχετες ιστορίες (χαμένη συνάφεια, φτιαγμένα ως μέρος κάτι άλλο, διπλότυπα).
  • Ενημερώνουμε την περιγραφή όπου έχει αλλάξει το όραμα του ζητήματος.

Όταν εμφανίζονται επιχειρηματικές ιστορίες στον ορίζοντα, γίνεται μια τεχνική ανάλυση και όλες οι τεχνικές ιστορίες που θα βοηθούσαν στην υλοποίηση συνδέονται με την επιχειρηματική ιστορία.


Προετοιμασία για τον προγραμματισμό του σπριντ:

  • Ελέγχουμε τις συνδέσεις μεταξύ τεχνικών και επιχειρηματικών ιστοριών.
  • Συνδέουμε όλα τα σχετικά σφάλματα με τεχνικές ιστορίες που μπορούν να διορθωθούν φθηνά στο ίδιο μέρος.

Πώς να σχηματίσετε το τεχνικό μέρος του εκκρεμούς

Όταν ανέλαβα τον ρόλο του επικεφαλής στην ομάδα, ρώτησα κάθε προγραμματιστή και QA ποιες βελτιώσεις στο προϊόν ήθελαν περισσότερο να κάνουν. Τα περισσότερα από τα αιτήματα αφορούσαν τεχνικές βελτιώσεις στην πλατφόρμα και ανακατασκευές. Όπως έδειξε η περαιτέρω εμπειρία, όλα τα βασικά τεχνικά προβλήματα του προϊόντος συμπεριλήφθηκαν σε αυτό το σύνολο επιθυμιών. Έτσι, μπορείτε να χρησιμοποιήσετε αυτήν την πρακτική για να δημιουργήσετε γρήγορα ένα τεχνικό ανεκτέλεστο από την αρχή ή να πάρετε μια γενική ιδέα για την κατάσταση του τεχνικού χρέους σε ένα νέο έργο.


Η τρέχουσα πλήρωση του εκκρεμούς με τεχνικές εργασίες συμβαίνει λόγω των πρακτικών που περιγράφονται παραπάνω και δεν απαιτεί ξεχωριστές προσπάθειες ή ανάλυση. Επιπλέον, νέες ιδέες για τεχνική βελτίωση του προϊόντος προστίθενται στο ανεκτέλεστο. Αυτό γίνεται από κάθε μέλος της ομάδας που σκέφτηκε μια τέτοια ιδέα. Το κύριο πράγμα σε αυτό το στάδιο είναι να μην χαθεί η ιδέα. Η αποσαφήνιση και ο καθορισμός της προτεραιότητας γίνονται αργότερα, κατά τη διάρκεια του προγραμματισμού εργασίας.

συμπεράσματα

  • Το τεχνικό χρέος είναι αναπόφευκτο.
  • Για τα περισσότερα έργα, η εξάλειψη του τεχνικού χρέους είναι μια καλή επένδυση προσπάθειας.
  • Εάν δεν αντιμετωπιστεί το τεχνικό χρέος, η ταχύτητα ανάπτυξης θα πλησιάσει σταδιακά το μηδέν.
  • Ο πειρασμός να πετάξετε τα πάντα έξω και να γράψετε ξανά μπορεί να σκοτώσει ή να ακρωτηριάσει σοβαρά το έργο σας.
  • Τα οφέλη από την εξάλειψη του τεχνικού χρέους θα πρέπει να πλαισιώνονται από την άποψη των επιχειρηματικών οφελών, διαφορετικά υπάρχει ο κίνδυνος οι εργασίες για τη δημιουργία νέας λειτουργικότητας να θεωρούνται πάντα πιο σημαντικές.
  • Τα καθήκοντα για την εξάλειψη του τεχνικού χρέους αξίζουν τη διαχείριση. Τέτοιες εργασίες δεν διαφέρουν από άλλες εργασίες έργου όσον αφορά τη λογιστική, τον προγραμματισμό και την ιεράρχηση προτεραιοτήτων.
  • Προκύπτουν τακτικά καταστάσεις όπου μπορείτε να μειώσετε το τεχνικό χρέος και να λύσετε ένα επιχειρηματικό πρόβλημα την ίδια στιγμή φθηνότερα από το να το κάνετε ξεχωριστά. Αυτές οι ευκαιρίες πρέπει να αξιοποιηθούν.
  • Οι στοχαστικές και έγκαιρες ενημερωμένες συμβάσεις στυλ κώδικα και διαδικασίες αναθεώρησης βοηθούν στην επιβράδυνση της εμφάνισης νέων τεχνικών χρεών.
  • Οι σύντομες επαναλήψεις είναι τόσο χρήσιμες για την αναδιαμόρφωση όσο και για την ανάπτυξη νέων λειτουργιών.
  • Η ομάδα συνήθως γνωρίζει πού βρίσκεται το τεχνικό χρέος στο έργο και πόσο κακό είναι. Αξίζει να χρησιμοποιήσετε αυτή τη γνώση όταν σχηματίζετε μια ιδέα για το τεχνικό χρέος του έργου.

Στην απάντησή μου θα θίξω όχι μόνο τους Μεγάλους Οίκους, αλλά και κάποιους άλλους οίκους για τους οποίους μπόρεσα να πάρω πληροφορίες.

1.Starkey - "Ο χειμώνας έρχεταιΣημαίνει ότι η ειρήνη και η ασφάλεια είναι προσωρινές και απατηλές· πρέπει να είσαι πάντα προετοιμασμένος για καταστροφές και πολέμους για να αντιμετωπίσεις τον κίνδυνο πλήρως οπλισμένος. Στο Westeros, ο χειμώνας δεν είναι μόνο μια εποχή που διαρκεί χρόνια, αλλά και σύμβολο δύσκολων δοκιμασιών Και μάλιστα, αυτό το μότο δεν αφορά μόνο τον Οίκο των Σταρκ, αλλά ολόκληρη τη χώρα.

2. Λάνιστερς- Το House Lannister φαίνεται να έχει δύο μότο, το ένα επιβεβαιώνει το τρομερό οικόσημο -" Άκου το βρυχηθμό μου!", το δεύτερο, ισοδυναμεί με ένα ρητό, αλλά ακούγεται μια τάξη μεγέθους πιο συχνά από το πρώτο - " Οι Λάννιστερ πληρώνουν πάντα τα χρέη τους". Το πρώτο σύνθημα μπορεί να αποδοθεί απευθείας στο εθνόσημο. Το οικόσημο Lannister απεικονίζει λιοντάρι αχαλίνωτο- "ένα λιοντάρι που βρυχάται", και το μότο "Άκου το βρυχηθμό μου" το συμπληρώνει άμεσα, είναι επίσης απόδειξη ότι το λιοντάρι είναι ο βασιλιάς των θηρίων και οι Λάννιστερ έχουν υψηλή θέση στην κοινωνία. Το ρητό «Ένας Λάννιστερ πληρώνει πάντα τα χρέη του» συνδέεται κυρίως με την Iron Bank of Braavos «Η Σιδηρά Τράπεζα θα παίρνει πάντα αυτό που πρέπει». Δεύτερον, «Ένας Λάννιστερ πληρώνει πάντα τα χρέη τους» σημαίνει ότι οι Λάννιστερ δεν ξεχνούν ποτέ αυτούς που τους βοήθησαν και ότι οι Λάννιστερ δεν συγχωρούν ποτέ τα λάθη που τους έγιναν.

3. Μπαράθεον - "Είμαστε έξαλλοιΑρχικά ανήκε στους Durrandons of Storm's End. Ο Orys Baratheon (ο παράνομος αδελφός του Aegon I του Κατακτητή), έχοντας σκοτώσει τον Argilac τον Αλαζόνα, τον τελευταίο Άρχοντα των Stormlands, υιοθέτησε το σύνθημά του. Αλλά το σύνθημα μεταφράστηκε πολύ κυριολεκτικά. μια λογική μετάφραση του μότο" Ο θυμός είναι το στοιχείο μας", με εξήγηση της σημασίας του" Ο θυμός είναι το στοιχείο μας, που σημαίνει: όταν μας θυμώνεις, πετάς το ψάρι στη θάλασσα, όπου νιώθει υπέροχα.«Δηλαδή, για τους Baratheons, η βίαιη επίδειξη συναισθημάτων σε βάρος της ψυχρής λογικής δεν είναι κακία.

4. Greyjoy - "Δεν σπέρνουμε"Οι Greyjoys είναι ως επί το πλείστον πειρατές. Η περιοχή της γης τους βρίσκεται σε γυμνούς βράχους και άμμο. Το μότο αυτού του σπιτιού είναι ένα άμεσο μήνυμα ότι οι Greyjoys δεν δουλεύουν στη γη (που πραγματικά δεν υπάρχει). Δεν σπέρνουν οτιδήποτε και δεν φυτρώνουν, ληστεύουν όσους έχουν καλλιέργειες και λάφυρα, αφού δεν έχουν και δεν μπορούν να έχουν δικά τους.

5. Ταργκάρυεν - "ΦΩΤΙΑ ΚΑΙ ΑΙΜΑΤο σύνθημα των Ταργκάρυεν μπορεί να ερμηνευτεί με δύο τρόπους. Ο πρώτος - ο Αίγκον ο Κατακτητής και οι δύο αδερφές του, πάνω σε τρεις δράκους, υπέταξαν το Γουέστερος, το οποίο ονομάζεται "με αυτόν και το σπαθί". Η δεύτερη επιλογή - (η προαναφερθείσα ηλιοβασίλεμα μοναξιά) - " Τα Targaryens είναι γεννημένα δράκοι, έχουν το αίμα της Αρχαίας Βαλυρίας και δράκους, καθώς και ένα μπόνους ασυλίας στη φωτιά και εξημερώνουν δράκους. Όταν οι Ταργκάρυεν λένε Φωτιά και Αίμα, θυμίζουν αυτούς που το ξέχασαν ξαφνικά."

6. Arryns - "Ψηλός σαν τιμή"Από τη μια πλευρά, ο Οίκος του Arryn, ακολουθώντας το παράδειγμα του Jon Arryn, νοιαζόταν για τη διατήρηση της τιμής. Ο Jon δεν μπορούσε να εκφοβιστεί ή να δωροδοκηθεί. Και στις χώρες του Westeros ήταν αδύνατο να βρεθεί κάποιος που νοιαζόταν περισσότερο για τη διατήρηση της τιμής από Αλλά μετά το θάνατο του Jon, πιθανότατα μια άλλη επιλογή είναι πιο εφαρμόσιμη - αριστοκρατική αλαζονεία, περιφρόνηση για όσους έχουν χαμηλότερη θέση, λένε, «πού είσαι από εμάς».

7. Tarly - "Πρώτος στη μάχη«Ο Οίκος του Tarly έχει γεννήσει πολλούς μεγάλους πολεμιστές και εξαιρετικούς στρατηγούς, όπως επιβεβαιώνει αυτό το σύνθημα.

8. Ο Τάλι - "Οικογένεια, καθήκον, τιμή"Το House Tully είναι πάνω απ' όλα πιστό στους οικογενειακούς του δεσμούς. Το καθήκον και η τιμή έρχονται μετά από αυτά, αλλά η οικογένεια έρχεται πρώτη. Ο House Tully υποστήριξε τον Rob Stark στον Πόλεμο των Πέντε Βασιλέων, για τον οποίο πλήρωσαν.

9. Martells - "Ανυποχώρητος, ακλόνητος, ανυποχώρητος". Πρότυπο περηφάνιας και ακαμψίας. Οι Μαρτέλ είναι το μόνο σπίτι που οι Ταργκάρυεν δεν μπορούσαν να πάρουν με το ζόρι. Και από τη συμπεριφορά των χαρακτήρων αυτού του οίκου είναι προφανές ότι είναι ξεροκέφαλοι και ακλόνητοι. Δεν χρειάζονται το νόμοι των Κυρίων, την έγκριση των Βασιλέων, είναι μόνοι τους, αλλά δείχνουν ξεκάθαρα ότι δεν είναι έτοιμοι να τα παρατήσουν.

10. Tyrell - "Μεγαλώνοντας γινόμαστε πιο δυνατοί". Το σύνθημα του οίκου Tyrell επιβεβαιώθηκε από τον στρατό τους, ο αριθμός των οποίων δεν μπορούσε να συγκριθεί με κανέναν στρατό στο Westeros. Οι Tyrell είχαν επίσης ένα "μαξιλάρι" με τη μορφή του πλούτου που είχαν συσσωρεύσει. Λαμβάνοντας υπόψη ότι το παλτό των βραχιόνων αυτού του οίκου απεικονίζει ένα τριαντάφυλλο, μπορεί επίσης να γίνει παράλληλο με αυτό Από ένα μικρό βλαστάρι σε έναν τεράστιο θάμνο τριανταφυλλιάς. Έτσι τα μέλη του οίκου Tyrell, συσσωρεύοντας σταδιακά δύναμη, ανέπτυξαν και ενίσχυσαν τις θέσεις τους. Ωστόσο, όπως η ίδια η Olenna είπε, δεν είναι καθόλου πολεμιστές.

11. Μπόλτον -"Οι λεπίδες μας είναι κοφτερές". Αυτό το σύνθημα χρησιμεύει μάλλον ως προειδοποίηση προς τους εχθρούς (και όχι μόνο) της οικογένειας Μπόλτον. Οι εκπρόσωποι αυτού του οίκου έχουν μια ζοφερή φήμη· στα βιβλία φορούσαν ακόμη και μανδύες από ανθρώπινο δέρμα και διακοσμούσαν τους τοίχους των κάστρων τους με αυτό : «Ένας γυμνός άντρας δεν έχει μυστικά, αλλά ένας ξεφλουδισμένος και ακόμη περισσότερο.» «Οι λεπίδες μας είναι αιχμηρές» - προφανώς μπορεί να σημαίνει και λεπίδες για την εκδορά της σάρκας.

12. Mormont - "Εδώ στεκόμαστε". Το μότο, το οποίο, σύμφωνα με το sunsetsolitude, μεταφράζεται επίσης εσφαλμένα στα ρωσικά." Εδώ στεκόμαστε - μπορεί να σημαίνει "Εδώ είναι τα εδάφη μας", που με τη σειρά του σημαίνει "Ένα μικρό αλλά περήφανο νησί που δεν ενοχλεί κανέναν, αλλά μπορεί να ορίσει τον εαυτό του. Εδώ είναι τα εδάφη μας, θυμηθείτε το όταν έρθετε εδώ, εμείς θα προειδοποιήσει». Ή μπορεί να μεταφραστεί ως "On this we stand" - που θα ήταν μια άμεση ένδειξη της δύναμης του πείσματος του Mormont"

13. Frey - "Στεκόμαστε ώμο με ώμο"Οι Freys εκτιμούσαν τους οικογενειακούς δεσμούς και το απαραβίαστο αυτής της λέξης, κάτι που αντικατοπτρίζει αυτό το σύνθημα. Από εκεί, ο Walder Frey είχε μια ανείπωτη μνησικακία εναντίον του Rob Stark, ο οποίος αθέτησε την υπόσχεσή του να παντρευτεί την κόρη του, κάτι που οδήγησε σε θλιβερές συνέπειες.

«Ένας Λάνιστερ πληρώνει πάντα τα χρέη του». © FFG ( Jason A. Engle)

«Οι Λάννιστερ πληρώνουν πάντα τα χρέη τους»(Επίσης: «Ένας Λάνιστερ πληρώνει πάντα τα χρέη του»ακούστε)) είναι ένα δημοφιλές ρητό στα Επτά Βασίλεια για το House Lannister και μια αγαπημένη έκφραση του Tyrion Lannister. Δεν είναι λιγότερο διάσημο από το «επίσημο» μότο του οίκου, «Άκου με να βρυχώ!» Αυτή η έκφραση έχει διπλή σημασία. Από τη μία, σημαίνει ότι οι Lannisters, ως το πλουσιότερο σπίτι στην πολιτεία, είναι πάντα έτοιμοι να πληρώσουν λογαριασμούς και να ευχαριστήσουν όσους τους βοήθησαν ή να υπόσχονται ανταμοιβές στο μέλλον - μπορείτε πάντα να βασίζεστε στη γενναιοδωρία και τη δέσμευση των «λιοντάρια». Αλλά αυτό το σύνθημα έχει και ένα δεύτερο, απειλητικό νόημα: οι Λάννιστερ δεν ξεχνούν τις προσβολές που τους επιβλήθηκαν και σίγουρα θα εκδικηθούν τους παραβάτες.

Στο στόμα της Cersei Lannister, η ρήση ακούστηκε σε μια ομιλία που στρέφεται εναντίον του ίδιου του Tyrion - η Cersei κατηγόρησε τον αδελφό της για ίντριγκες εναντίον της και του Joffrey και προσπάθησε να εκβιάσει την αιχμάλωτη Alaya. Αργότερα, έχοντας βρεθεί στον αρχηγό του κράτους, η Cersei χρησιμοποίησε τα ίδια λόγια για να δικαιολογήσει την απόφασή της να σταματήσει να πληρώνει τα δημόσια χρέη στην Iron Bank of Braavos - οι Lannisters πληρώνουν πάντα τα χρέη τους και αυτό το χρέος θα πληρωθεί αργά ή γρήγορα. Αργότερα ανέφερε το ρητό σε έναν διάλογο με τους Balman Birch και Falisa Stokeworth, υποσχόμενος ανταμοιβή για τη βοήθειά τους, και στη συνέχεια έστειλε τον Tyroshi που προσπάθησε να την εξαπατήσει στον δήμιο με τις λέξεις «Οι Λάννιστερ πληρώνουν τα χρέη τους και εσύ θα πληρώσεις πολύ."

Ο Tywin Lannister ανέφερε τη ρήση σε συνομιλία με τον Tyrion, δικαιολογώντας την ανάγκη να δοθεί το Harrenhal στον Petyr Baelish, αφού ο ίδιος το ευχήθηκε. Ο ίδιος ο Tyrion επανέλαβε αμέσως τα λόγια για τα χρέη, απαιτώντας ανταμοιβή για τον εαυτό του για τις υπηρεσίες του ως Hand. Η Shae επανέλαβε το ρητό, υπενθυμίζοντας στον Tyrion την υπόσχεσή του να την ξαναβάλει στο αρχοντικό. Έχοντας μάθει για την αποστασία των Βέστερλινγκ στον Ρομπ Σταρκ, ο Τύριον σκέφτηκε ότι ο Τάιγουιν σίγουρα θα τιμωρούσε τους προδότες και θυμήθηκε το ρητό.

Ο Jaime Lannister την υπενθύμισε στον Urswick, προσπαθώντας να τον αποπλανήσει με πλούτη, και αργότερα, έχοντας χάσει το χέρι του, επανέλαβε το ρητό στον εαυτό του, τροφοδοτώντας τη δίψα του για εκδίκηση και την επιθυμία να ζήσει. Είπε στην Brienne of Tarth ότι την έσωσε από τον βιασμό σε ένδειξη ευγνωμοσύνης για τη βύθιση της γαλέρας του Robin Rieger στην αρχή του ταξιδιού τους, ξαναθυμώντας το ρητό. Αργότερα επανέλαβε αυτά τα λόγια σε μια συνομιλία με τον Varys, εξηγώντας έτσι την επιθυμία του να απελευθερώσει τον Tyrion. Αφού έβγαλε τον Edmure Tully από το ικρίωμα στα τείχη του Riverrun, ο Jaime σκέφτηκε: «Οι Lannisters πληρώνουν τα χρέη τους και εσύ είσαι το μόνο νόμισμα που μου έχει απομείνει».

Ο ίδιος ο Edmure Tully θυμήθηκε το ρητό όταν έμαθε για τον φόνο του Willem Lannister και του Theon Frey από τον Rickard Karstark. Ο Ρουζ Μπόλτον, μιλώντας για την πρόθεσή του να φύγει από το Χάρενχαλ και να το αφήσει στον Βάργκο Χάουθ, είπε: «Οι Λάνιστερ δεν είναι οι μόνοι που πληρώνουν τα χρέη τους». Ο Jaime επανέλαβε το ρητό όταν αποχαιρέτησε τους Brave Boys φεύγοντας από το κάστρο, αφήνοντας να εννοηθεί ότι θα τους εκδικηθεί, και στη συνέχεια, επιστρέφοντας στο κάστρο για την Brienne, απηύθυνε τα ίδια λόγια στον Vargo Haught, λέγοντας ότι θα δεχόταν λύτρα τόσο για τον Jaime όσο και για την Brienne

Τεχνολογικές πρακτικές διαχείρισης χρέους σε μια ενιαία ομάδα


Πριν από περίπου ένα χρόνο, η ομάδα μας πέρασε από μια φάση ταχείας ανάπτυξης χαρακτηριστικών σε μια πιο ρευστή ανάπτυξη με έμφαση στη βελτίωση της ποιότητας. Σε αυτό το σημείο, τα προϊόντα μας έχουν συγκεντρώσει έναν αξιοσημείωτο αριθμό μη βέλτιστων λύσεων, άσχημο κώδικα και ξεπερασμένες βιβλιοθήκες. Κάτι έπρεπε να γίνει για όλα αυτά.


Μέχρι σήμερα, έχουμε καταφέρει να οικοδομήσουμε μια διαδικασία που καθιστά την καταπολέμηση του τεχνικού χρέους προβλέψιμη, ανώδυνη και αναπόφευκτη.


Τι πήραμε ως αποτέλεσμα:

  • Η ομάδα είναι χαρούμενη. Η αναδρομική έκδοση περιλαμβάνει τακτικά θετικά σημεία σχετικά με τη βελτίωση της τεχνολογίας και τη μείωση του τεχνικού χρέους.
  • Για αρκετές τριμηνιαίες εκδόσεις στη σειρά, μπορέσαμε να αυξήσουμε τη λειτουργικότητα χωρίς να αυξήσουμε τον αριθμό των γραμμών κώδικα στο έργο. Η κατάργηση του περιττού κώδικα και η απλοποίηση του απαραίτητου μείωσε το μέγεθος της βάσης κώδικα για την υπάρχουσα λειτουργικότητα. Και αυτή η μείωση συνέπεσε περίπου σε κλίμακα με τον νέο κώδικα που εφαρμόζει τη νέα λειτουργικότητα.
  • Κατά τις ανακατασκευές και τις αναβαθμίσεις, το προϊόν είναι πάντα σε κατάσταση λειτουργίας. Κάθε δύο εβδομάδες κυκλοφορούμε μια ενδιάμεση κυκλοφορία που λειτουργεί πλήρως.

Επιτρέψτε μου να σας πω πώς το πετύχαμε αυτό.

Τι είναι το τεχνικό χρέος

Ο εργασιακός ορισμός μου για το τεχνικό χρέος είναι ο όγκος της δουλειάς που πρέπει να γίνει για να μπορέσει ένα έργο να ανταποκριθεί στο όραμα της ομάδας για το τι είναι υπέροχο. Σημειώστε ότι το τεχνικό χρέος μπορεί να προκύψει όχι μόνο λόγω της φιλελεύθερης χρήσης των πατερίτσες στην ανάπτυξη, αλλά και λόγω της αλλαγής των ιδεών για την ομορφιά. Για παράδειγμα, οι κοινές πρακτικές του κλάδου έχουν αλλάξει. Ή οι προγραμματιστές ερωτεύτηκαν το OOP και ερωτεύτηκαν τον λειτουργικό προγραμματισμό. Ή το άλλοτε μοντέρνο πλαίσιο δεν είναι πια κέικ και έχει γίνει δύσκολο να βρεις ειδικούς που θα ήθελαν να γράψουν πάνω του.


Ωστόσο, η κύρια αιτία του τεχνικού χρέους είναι η εντροπία σε όλη της την ποικιλομορφία. Δοκιμές μονάδων με ειδικές ανάγκες, παρωχημένα σχόλια που έχασαν την επαφή με τον κώδικα, ανεπιτυχείς αρχιτεκτονικές αποφάσεις, εφαρμογή χαρακτηριστικών που κανείς δεν χρησιμοποιεί πια, μια βάση για ένα μέλλον που δεν έχει έρθει και πολλά, πολλά άλλα.


Από αυτό προκύπτει ότι η εμφάνιση τεχνικού χρέους είναι αναπόφευκτη σε κάθε μακρόβιο έργο.

Όταν το τεχνικό χρέος δεν είναι πρόβλημα

Γιατί είναι κακό το τεχνικό χρέος; Αυξάνει το κόστος περαιτέρω ανάπτυξης λόγω ορισμένων παραγόντων:

  • Η ταχύτητα υλοποίησης της νέας λειτουργικότητας μειώνεται.
  • Η πιθανότητα παλινδρόμησης κατά τη διόρθωση ελαττωμάτων αυξάνεται.
  • Η διαδικασία ανάπτυξης γίνεται λιγότερο προβλέψιμη και επομένως λιγότερο διαχειρίσιμη.
  • Η διαδικασία εισαγωγής ενός νέου προγραμματιστή στο έργο επιμηκύνεται.

Αυτή η απώλεια ονομάζεται μερικές φορές "τόκοι τεχνικού χρέους"


Υπάρχουν περιπτώσεις όπου αυτές οι απώλειες είναι φθηνότερες από την εξάλειψη του τεχνικού χρέους:

  • Το τέλος της ζωής του έργου πλησιάζει. Σημείωση, αυτό δεν είναι το τέλος της προσθήκης λειτουργικότητας, αλλά η στιγμή που μπορείτε να σταματήσετε να σπαταλάτε τις προσπάθειες του προγραμματιστή για υποστήριξη. Αυτή η κατηγορία περιλαμβάνει επίσης πρωτότυπα εφάπαξ, επιδείξεις για εκθέσεις κ.λπ.
  • Η αξία του χρόνου ανάπτυξης τώρα είναι πολύ υψηλότερη από την αναμενόμενη στο μέλλον. Επείγουσες διορθώσεις σε καθορισμένη προθεσμία, νεοφυείς επιχειρήσεις που ξεμένουν από χρήματα από τον επόμενο γύρο χρηματοδότησης κ.λπ. Σε τέτοιες περιπτώσεις, ο καθορισμός τεχνικού χρέους μπορεί να καθυστερήσει έως ότου κρυώσει ο καύσωνας της στιγμής. Υπάρχουν έργα που δεν βγαίνουν από κατάσταση έκτακτης ανάγκης, αλλά οι συμβουλές από αυτό το άρθρο και πάλι δεν θα τους βοηθήσουν.

Τι να κάνετε με το τεχνικό χρέος; Αποτυχημένες προσεγγίσεις

Προσέγγιση Νο. 1. "Δεν έχουμε χρόνο, η έκδοση πρέπει να υποβληθεί χθες"

Η επιθυμία να τηρηθεί με κάθε κόστος η αυριανή προθεσμία, εις βάρος της αναπτυξιακής ταχύτητας μεθαύριο.


Μερικές φορές μια προκατασκευασμένη κατασκευή από πατερίτσες είναι μια αντικειμενικά σωστή επιλογή. Στην πρακτική μου, αυτό εκφράστηκε πιο ξεκάθαρα όταν δημιουργούσα εκδόσεις επίδειξης για εκθέσεις. Η ημερομηνία της εκδήλωσης είναι αυστηρά καθορισμένη· αν δεν κάνατε έγκαιρα για μια σημαντική έκθεση, η επόμενη προσπάθεια θα είναι σε ένα χρόνο. Σε αυτήν την περίπτωση, μπορείτε να εμφανίσετε το προϊόν "από τα χέρια σας", αποφεύγοντας προσεκτικά όλα τα σφάλματα. Ως μηχανικός, είναι δυσάρεστο για μένα να κάνω τέτοια έργα, αλλά τα δεκανίκια σε αυτά είναι δικαιολογημένα.


Όταν φτιάχνεις ένα προϊόν που θα διαρκέσει πολύ, όλα είναι διαφορετικά. Η τήρηση της προθεσμίας λόγω αμφίβολων τεχνικών λύσεων είναι μια δαπανηρή απόλαυση. Το συνολικό κόστος είναι:

  1. από την εφαρμογή του ίδιου του δεκανίκι,
  2. από την επακόλουθη αντικατάστασή του με μια ολοκληρωμένη λύση,
  3. από την ταλαιπωρία της ύπαρξης δεκανίκι ανάμεσα στα προηγούμενα σημεία.

Το δεύτερο σημείο είναι πολύ εύκολο να υποτιμηθεί, και υπάρχει ο κίνδυνος να μην σκεφτούμε καθόλου το τρίτο, το πιο ακριβό.


Όταν συναντάτε έναν επικεφαλής τεχνολογίας με τρεμούλιασμα σε ένα συνέδριο, μπορεί να αποδειχθεί ότι ήταν ο εφιάλτης του ατελείωτου εντοπισμού σφαλμάτων ενός σχεδίου κατασκευασμένου από δεκανίκια που τον έφερε σε αυτήν την κατάσταση.


Προσέγγιση Νο. 2. «Ναι, εδώ πρέπει να τα πετάξουμε έξω και να τα ξαναγράψουμε»

Όσο χειρότερη είναι η κατάσταση του τεχνικού χρέους, τόσο ισχυρότερος είναι ο πειρασμός να θάψουμε ολόκληρο τον κώδικα του έργου και να γράψουμε τα πάντα ξανά. Αυτό είναι ένα από τα κλασικά λάθη που μπορεί να σκοτώσει ολόκληρο το έργο.


Το θέμα καλύπτεται τόσο καλά στο διάσημο άρθρο του Joel Spolsky που δεν βλέπω νόημα να παρουσιάσω τα δικά μου επιχειρήματα.

Προσέγγιση Νο. 3. «Θα ανανεώνουμε τη νύχτα και τα Σαββατοκύριακα, ώστε να μην το μάθει ο διευθυντής».

Το επιχείρημα της ανάγκης εξάλειψης του τεχνικού χρέους όσον αφορά τα επιχειρηματικά οφέλη δεν είναι πάντα εύκολο. Η ομάδα ανάπτυξης μπορεί να μπει στον πειρασμό να πάει γύρω από τις τραχιές άκρες και να ξεκινήσει μια σημαντική ανακατασκευή επί τόπου. Αυτό μπορεί να γίνει κατά τη διάρκεια μη εργάσιμων ωρών, σε παύσεις μεταξύ άλλων εργασιών ή «στην ουρά» άλλων εργασιών διογκώνοντας τις εκτιμήσεις.


Τι κακό έχει; Α, ένα σωρό πράγματα:

  • Η μειωμένη διαφάνεια υπονομεύει την εμπιστοσύνη μεταξύ της διοίκησης και της ομάδας. Συχνά, οι επακόλουθες προσπάθειες να διορθωθεί η κατάσταση επιβάλλοντας πειθαρχία και σφίγγοντας τις βίδες θα οδηγήσουν σε περαιτέρω επιδείνωση της ομαδικής εργασίας.
  • Μια παγιωμένη κατάσταση στην οποία οι προτεραιότητες της ομάδας και της διοίκησης είναι αντικρουόμενες προκαλεί αποθάρρυνση και στις δύο πλευρές.
  • Οι καρποί της ανακατασκευής περιλαμβάνονται στο προϊόν με απρόβλεπτους τρόπους και προκαλούν σφάλματα παλινδρόμησης όπου δεν αναμένονται. Στις συνειδητές ομάδες, αυτό οδηγεί σε ένα ξαφνικό και απρογραμμάτιστο φορτίο στο QA. Στο ασυνείδητο, μπαίνει στην παραγωγή και εκεί διασπάται.

Αφού η ομάδα χρησιμοποιήσει αυτή τη συνταγή, τα μάτια της διοίκησης αρχίζουν να συσπώνται.

Οι αρχές μας

1. Προσθέστε τεχνικές εργασίες στο γενικό ανεκτέλεστο

Υπάρχουν διάφορα πρότυπα στη ζωή των εργασιών σε έργα:

  • Μια εργασία που δεν είναι στο ανεκτέλεστο έχει λιγότερες πιθανότητες να μπει στη δουλειά.
  • Μια εργασία χωρίς σαφή διατύπωση έχει λιγότερες πιθανότητες να μπει στη δουλειά.
  • Μια εργασία που δεν μπορεί να εκτιμηθεί με υψηλό βαθμό εμπιστοσύνης έχει λιγότερες πιθανότητες να μπει στη δουλειά.
  • Μια μεγάλη εργασία θα περιμένει περισσότερο στην ουρά από μια μικρή.

Ο Maxim Dorofeev μιλάει για αυτά τα πράγματα πολύ καλά στην "Τεχνική του κενού εισερχομένων"


Για να αποφευχθεί η συσσώρευση τεχνικού χρέους, οι εργασίες για την εξάλειψή του θα πρέπει να ολοκληρωθούν λαμβάνοντας υπόψη τις αρχές που αναφέρονται παραπάνω.


Όλες οι εργασίες, εκτός από τις μικρότερες, παρατίθενται στο ανεκτέλεστο. Έτσι έχουν την ευκαιρία να γίνουν όχι μόνο στον ελεύθερο χρόνο τους, αλλά και ως μέρος της προγραμματισμένης εργασίας. Επιπλέον, τέτοιες εργασίες είναι πιο δύσκολο να χαθούν εντελώς από τα μάτια μας - το ανεκτέλεστο εξετάζεται πιο συχνά και πιο προσεκτικά από ό,τι σε TODO στον κώδικα, κομμάτια χαρτιού στην οθόνη, εγκαταλελειμμένες σελίδες wiki, χαρτοπετσέτες με διαγράμματα και άλλα πηγές πληροφοριών.

  • Εάν υπάρχει μια μη τετριμμένη TODO στον κώδικα, περιέχει έναν σύνδεσμο προς την εργασία στο ανεκτέλεστο αρχείο. Ελέγχουμε τη συμμόρφωση με αυτήν την αρχή κατά την αναθεώρηση του κώδικα και δεν αποδεχόμαστε πολύπλοκες TODO χωρίς αναφορές.

    Μπορεί να υπάρχει δράμα πίσω από το σχόλιο.

    Κάποτε, δίπλα σε ένα τέτοιο TODO έγραφε: «Περατίνα. Ο ιδιοκτήτης προϊόντος με ανάγκασε να το κάνω. Αφαιρέστε το συντομότερο δυνατό."

  • Όταν ένας προγραμματιστής συνειδητοποιεί ότι κάποιο μέρος απαιτεί ανακατασκευή, δημιουργεί ένα ζήτημα στο ανεκτέλεστο.
  • Όταν ένας προγραμματιστής έχει την επιθυμία να βελτιώσει την πλατφόρμα, δημιουργεί μια εργασία στο backlog.
  • Τα μακροπρόθεσμα αρχιτεκτονικά σχέδια τοποθετούνται στο ανεκτέλεστο με τη μορφή χωριστών εργασιών μόλις υπάρχει αρκετή βεβαιότητα για τουλάχιστον τα πρώτα βήματα.

Εφόσον αυτές οι αλλαγές παραμένουν ανέξοδες όσον αφορά το κόστος ανάπτυξης και τον απαιτούμενο όγκο δοκιμών, μπορούμε σταδιακά να βελτιώσουμε τη βάση του κώδικα χωρίς να διακόπτουμε τους επιχειρηματικούς στόχους ή να εισάγουμε πρόσθετους κινδύνους.

2. Σχεδιάστε τεχνικές ιστορίες με βάση τις επιχειρηματικές προτεραιότητες

Αν ένα δέντρο έπεφτε στο δάσος, αλλά κανείς δεν το άκουγε, ακούστηκε ήχος; Εάν υπάρχει κακός κώδικας σε ένα έργο, αλλά αυτή η ενότητα δεν θα χρειαστεί ποτέ να αλλάξει, υπάρχει τεχνικό χρέος;


Πιστεύω ότι όταν ένας προγραμματιστής βρίσκει δυσάρεστο να κοιτάξει κάποια παλιά ενότητα, αυτό από μόνο του δεν είναι πολύ μεγάλο πρόβλημα. Πολύ χειρότερο είναι αυτό που συμβαίνει όταν χρειάζεται να προσθέσετε νέα λειτουργικότητα σε αυτήν την ενότητα ή να επεκτείνετε την παλιά. Σε σύγκριση με την πραγματοποίηση αλλαγών σε καλογραμμένο κώδικα, τέτοιες εργασίες είναι πιο πιθανό (και πιο πιθανό να υπερβούν την αρχική εκτίμηση) και περιέχουν περισσότερα σφάλματα. Μερικές φορές πολύ περισσότερο. Για να προστατευθούμε από τέτοιου είδους προβλήματα, προσπαθούμε να προγραμματίσουμε ανακατασκευές έτσι ώστε να γίνονται πριν γράψουμε νέα λειτουργικότητα στο ίδιο μέρος.


Εάν οι αλλαγές λειτουργικότητας και οι ανακατασκευές φαίνονται μικρές, μπορούν να γίνουν μαζί. Το εμπειρικά επιλεγμένο μέγεθος της εργασίας για την οποία αυτή η προσέγγιση θα είναι βέλτιστη είναι 3 ημέρες εργασίας για έναν προγραμματιστή ή λιγότερο. Όταν είναι σαφές ότι υπάρχει περισσότερη δουλειά, χωρίζεται σε ανακατασκευή διατηρώντας την τρέχουσα συμπεριφορά και εφαρμόζοντας νέα λειτουργικότητα.


Έτσι, η σειρά εργασιών για την εξάλειψη του τεχνικού χρέους καθορίζεται από τη σειρά των επιχειρηματικών εργασιών στο ανεκτέλεστο.


Η αρχή των «επιχειρηματικών προτεραιοτήτων» έχει άλλη εφαρμογή. Ένα από τα κοινά προβλήματα που αντιμετωπίζουν οι προγραμματιστές που προσπαθούν να γράφουν καλά είναι η δυσκολία να αφιερώσουν χρόνο στη βελτιστοποίηση της απόδοσης, τη βελτίωση της δυνατότητας συντήρησης ή άλλα πράγματα που δεν περιλαμβάνονται άμεσα στο σχέδιο εργασίας. Υπάρχει σχεδόν πάντα μια επιχειρηματική ανάγκη για αυτές τις βελτιώσεις. Ποιος δεν θέλει το σύστημα να λειτουργεί πιο γρήγορα, πιο σταθερό και να είναι φθηνότερο στη συντήρηση; Όλα αυτά τα οφέλη μπορούν να αξιολογηθούν και, βάσει αυτής της αξιολόγησης, τα καθήκοντα για βελτίωση μπορούν να τοποθετηθούν στο ανεκτέλεστο, μαζί με οποιαδήποτε άλλα.


Επομένως, εάν θέλετε να βελτιστοποιήσετε την απόδοση, αλλά πρέπει να διορθώσετε ένα άλλο βαρετό σφάλμα, ίσως απλά δεν ξέρετε πώς να εξηγήσετε τα οφέλη της βελτιστοποίησης σε μια γλώσσα που μπορεί να κατανοήσει ο ιδιοκτήτης του προϊόντος.

3. Αφήστε τον κωδικό πιο καθαρό από ό,τι ήταν πριν

Σχεδόν κάθε κώδικας, εκτός από αυτόν που γράφτηκε πολύ πρόσφατα, υστερεί λίγο πίσω από την τρέχουσα ιδέα της ομορφιάς στον τομέα του στυλ και της αρχιτεκτονικής. Όταν χρειάζεται να αλλάξετε κώδικα ως μέρος μιας εργασίας, θεωρείται καλή πρακτική να κάνετε όλες τις ασφαλείς βελτιώσεις που είναι δυνατές στην πληγείσα περιοχή. Τι θα μπορούσε να είναι?

  • Φέρνοντας τις ενότητες στο τρέχον στυλ.
  • Αλλαγή ονομάτων εσωτερικών μεταβλητών σε πιο κατανοητά.
  • Απλοποιήστε την εφαρμογή διατηρώντας παράλληλα τη συμπεριφορά.
  • Τοπικές ανακατασκευές που δεν εισάγουν αλλαγές μεγάλης κλίμακας σε άλλες μονάδες.

Αυτές οι βελτιώσεις αναμένεται να κάνουν τον κώδικα καλύτερο, αλλά όχι να αυξήσουν σημαντικά το κόστος ανάπτυξης ή δοκιμής.


Λόγω αυτής της αρχής, η ποιότητα του κώδικα αυξάνεται σταδιακά στο παρασκήνιο, ακόμη και σε εκείνα τα μέρη όπου δεν είχαν προγραμματιστεί ξεχωριστές ανακατασκευές. Επιπλέον, όσο πιο συχνά εργαζόμαστε σε ένα συγκεκριμένο μέρος του συστήματος, τόσο καλύτερος είναι ο κώδικας για αυτό το τμήμα. Μια ωραία αντίθεση με έργα όπου ο προγραμματιστής ξοδεύει τον περισσότερο χρόνο στα εξαρτήματα με τον χειρότερο κώδικα.

4. Ό,τι κι αν συμβεί, το σύστημα πρέπει να παραμείνει σε κατάσταση λειτουργίας.

Μία από τις βασικές αρχές του SCRUM λέει ότι στο τέλος κάθε σπριντ το σύστημα θα πρέπει να φτάσει σε μια σταθερή κατάσταση.


«Μέχρι το τέλος του σπριντ, η αύξηση θα πρέπει να είναι έτοιμη, πράγμα που σημαίνει ότι πληροί τα κριτήρια ετοιμότητας της ομάδας Scrum και είναι έτοιμη για χρήση. Θα πρέπει να είναι έτοιμο για χρήση, ανεξάρτητα από την απόφαση του κατόχου του προϊόντος να το κυκλοφορήσει ή να το καθυστερήσει.»

Οποιαδήποτε εργασία για την εξάλειψη του τεχνικού χρέους γίνεται σύμφωνα με αυτήν την αρχή.


Οι μεγάλοι μετασχηματισμοί αναγκαστικά αποσυντίθενται έτσι ώστε κάθε μεμονωμένο στάδιο να μπορεί να ολοκληρωθεί σε ένα σπριντ. Για παράδειγμα, αλλάξαμε το σύστημα συναρμολόγησης σε δύο στάδια ()


Δουλεύουμε με VCS σύμφωνα με αρχές κοντά στο κλασικό gitflow. Η ανάπτυξη πραγματοποιείται σε κλάδους χαρακτηριστικών, η δοκιμή πραγματοποιείται εκεί. Κατά κανόνα, ένας τέτοιος κλάδος δεν διαρκεί περισσότερο από ένα σπριντ δύο εβδομάδων. Ένα υποκατάστημα που ζει περισσότερο σχεδόν πάντα έχει επιπλέον κόστος.


Η εμπειρία μας επιβεβαιώνει ξεκάθαρα αυτό το μοτίβο. Κάθε φορά που αποτυγχάναμε να ολοκληρώσουμε μια μεγάλη ανακατασκευή σε δύο εβδομάδες, ήταν πόνος και ταλαιπωρία. Και όσο μεγαλύτερη ήταν η εργασία και όσο περισσότερο ζούσε το ανοιχτό υποκατάστημα, τόσο πιο αργά πήγαιναν οι εργασίες και τόσο περισσότερα προβλήματα υπήρχαν.


Η ανάγκη να βρίσκεστε πάντα λίγα βήματα μακριά από μια σταθερή απελευθέρωση δημιουργεί ένα από τα πιο δύσκολα και ενδιαφέροντα προβλήματα μηχανικής - την εύρεση της βέλτιστης αποσύνθεσης των στρατηγικών σχεδίων. Οι αλλαγές μεγάλης κλίμακας μπορούν να αναλυθούν σε ξεχωριστά, ανεξάρτητα βήματα. Συνιστάται να αρχίσετε να λαμβάνετε παροχές όσο το δυνατόν νωρίτερα. Όσο καλύτερα εκτελείται αυτή η ανάλυση της εργασίας, τόσο μεγαλύτερες είναι οι πιθανότητες να ολοκληρωθεί η εργασία.

Πώς μοιάζει η διαδικασία μας

Μία φορά ανά έκδοση, κάνουμε μια λεπτομερή ανασκόπηση του τεχνικού εκκρεμούς:

  • Κλείνουμε άσχετες ιστορίες (χαμένη συνάφεια, φτιαγμένα ως μέρος κάτι άλλο, διπλότυπα).
  • Ενημερώνουμε την περιγραφή όπου έχει αλλάξει το όραμα του ζητήματος.

Όταν εμφανίζονται επιχειρηματικές ιστορίες στον ορίζοντα, γίνεται μια τεχνική ανάλυση και όλες οι τεχνικές ιστορίες που θα βοηθούσαν στην υλοποίηση συνδέονται με την επιχειρηματική ιστορία.


Προετοιμασία για τον προγραμματισμό του σπριντ:

  • Ελέγχουμε τις συνδέσεις μεταξύ τεχνικών και επιχειρηματικών ιστοριών.
  • Συνδέουμε όλα τα σχετικά σφάλματα με τεχνικές ιστορίες που μπορούν να διορθωθούν φθηνά στο ίδιο μέρος.

Πώς να σχηματίσετε το τεχνικό μέρος του εκκρεμούς

Όταν ανέλαβα τον ρόλο του επικεφαλής στην ομάδα, ρώτησα κάθε προγραμματιστή και QA ποιες βελτιώσεις στο προϊόν ήθελαν περισσότερο να κάνουν. Τα περισσότερα από τα αιτήματα αφορούσαν τεχνικές βελτιώσεις στην πλατφόρμα και ανακατασκευές. Όπως έδειξε η περαιτέρω εμπειρία, όλα τα βασικά τεχνικά προβλήματα του προϊόντος συμπεριλήφθηκαν σε αυτό το σύνολο επιθυμιών. Έτσι, μπορείτε να χρησιμοποιήσετε αυτήν την πρακτική για να δημιουργήσετε γρήγορα ένα τεχνικό ανεκτέλεστο από την αρχή ή να πάρετε μια γενική ιδέα για την κατάσταση του τεχνικού χρέους σε ένα νέο έργο.


Η τρέχουσα πλήρωση του εκκρεμούς με τεχνικές εργασίες συμβαίνει λόγω των πρακτικών που περιγράφονται παραπάνω και δεν απαιτεί ξεχωριστές προσπάθειες ή ανάλυση. Επιπλέον, νέες ιδέες για τεχνική βελτίωση του προϊόντος προστίθενται στο ανεκτέλεστο. Αυτό γίνεται από κάθε μέλος της ομάδας που σκέφτηκε μια τέτοια ιδέα. Το κύριο πράγμα σε αυτό το στάδιο είναι να μην χαθεί η ιδέα. Η αποσαφήνιση και ο καθορισμός της προτεραιότητας γίνονται αργότερα, κατά τη διάρκεια του προγραμματισμού εργασίας.

συμπεράσματα

  • Το τεχνικό χρέος είναι αναπόφευκτο.
  • Για τα περισσότερα έργα, η εξάλειψη του τεχνικού χρέους είναι μια καλή επένδυση προσπάθειας.
  • Εάν δεν αντιμετωπιστεί το τεχνικό χρέος, η ταχύτητα ανάπτυξης θα πλησιάσει σταδιακά το μηδέν.
  • Ο πειρασμός να πετάξετε τα πάντα έξω και να γράψετε ξανά μπορεί να σκοτώσει ή να ακρωτηριάσει σοβαρά το έργο σας.
  • Τα οφέλη από την εξάλειψη του τεχνικού χρέους θα πρέπει να πλαισιώνονται από την άποψη των επιχειρηματικών οφελών, διαφορετικά υπάρχει ο κίνδυνος οι εργασίες για τη δημιουργία νέας λειτουργικότητας να θεωρούνται πάντα πιο σημαντικές.
  • Τα καθήκοντα για την εξάλειψη του τεχνικού χρέους αξίζουν τη διαχείριση. Τέτοιες εργασίες δεν διαφέρουν από άλλες εργασίες έργου όσον αφορά τη λογιστική, τον προγραμματισμό και την ιεράρχηση προτεραιοτήτων.
  • Προκύπτουν τακτικά καταστάσεις όπου μπορείτε να μειώσετε το τεχνικό χρέος και να λύσετε ένα επιχειρηματικό πρόβλημα την ίδια στιγμή φθηνότερα από το να το κάνετε ξεχωριστά. Αυτές οι ευκαιρίες πρέπει να αξιοποιηθούν.
  • Οι στοχαστικές και έγκαιρες ενημερωμένες συμβάσεις στυλ κώδικα και διαδικασίες αναθεώρησης βοηθούν στην επιβράδυνση της εμφάνισης νέων τεχνικών χρεών.
  • Οι σύντομες επαναλήψεις είναι τόσο χρήσιμες για την αναδιαμόρφωση όσο και για την ανάπτυξη νέων λειτουργιών.
  • Η ομάδα συνήθως γνωρίζει πού βρίσκεται το τεχνικό χρέος στο έργο και πόσο κακό είναι. Αξίζει να χρησιμοποιήσετε αυτή τη γνώση όταν σχηματίζετε μια ιδέα για το τεχνικό χρέος του έργου.

ΚΑΤΗΓΟΡΙΕΣ

Δημοφιλή ΑΡΘΡΑ

2024 "kingad.ru" - υπερηχογραφική εξέταση ανθρώπινων οργάνων