Software team collaboration during an open office whiteboard session

Η ανθρώπινη πλευρά της συνεργασίας στην ανάπτυξη λογισμικού

Δημιουργία αποτελεσματικών ομάδων και επικοινωνία στην ανάπτυξη λογισμικού.

Η συνεργασία στην ανάπτυξη λογισμικού είναι, στον πυρήνα της, μια βαθιά ανθρώπινη υπόθεση. Τα αντικείμενα που επιβιώνουν — ο κώδικας, τα αρχεία σχεδιασμού, το ιστορικό git — είναι απλώς απολιθώματα των συνομιλιών που τα δημιούργησαν. Όταν η συνεργασία στην ανάπτυξη λογισμικού πηγαίνει καλά, αυτές οι συνομιλίες παράγουν λογισμικό που αντικατοπτρίζει τη συλλογική νοημοσύνη. Όταν η συνεργασία στην ανάπτυξη λογισμικού πάει στραβά, τα αντικείμενα αντικατοπτρίζουν ανεπίλυτες ανθρώπινες συγκρούσεις μεταμφιεσμένες σε τεχνικό χρέος. Αυτό το άρθρο καλύπτει την ανθρώπινη πλευρά της συνεργασίας στην ανάπτυξη λογισμικού, την οποία τα τεχνικά βιβλία συχνά αγνοούν. Δείτε τη σελίδα μας για το πώς δομούμε τις ομάδες. Πρώτον, η επιτυχημένη συνεργασία στην ανάπτυξη λογισμικού εξαρτάται από την ψυχολογική ασφάλεια. Οι μηχανικοί που φοβούνται να κριθούν για το να κάνουν ερωτήσεις θα σταματήσουν να τις κάνουν, κάτι που κρύβει τα προβλήματα μέχρι να γίνουν δαπανηρά. Αντίθετα, οι ομάδες με ισχυρές συνήθειες συνεργασίας στην ανάπτυξη λογισμικού κανονικοποιούν το «Δεν καταλαβαίνω αυτόν τον κώδικα, μπορείς να μου εξηγήσεις;» ως δύναμη και όχι ως αδυναμία. Κατά συνέπεια, οι διαχειριστές που επιθυμούν καλύτερη συνεργασία στην ανάπτυξη λογισμικού θα πρέπει οι ίδιοι να δείξουν τρωτότητα — το να παραδέχονται δημόσια τα κενά γνώσεών τους διδάσκει την ομάδα ότι η παραδοχή κενών είναι αποδεκτή. Δείτε τη Βικιπαίδεια για την ψυχολογική ασφάλεια για το ερευνητικό υπόβαθρο. Δεύτερον, η γραπτή επικοινωνία είναι το θεμέλιο της κλιμακούμενης συνεργασίας στην ανάπτυξη λογισμικού. Η προφορική συνομιλία έχει υψηλό εύρος ζώνης αλλά δεν αφήνει αρχείο· οι συναντήσεις αποκλείουν όσους βρίσκονται σε διαφορετική ζώνη ώρας. Αντίθετα, η γραπτή συνεργασία στην ανάπτυξη λογισμικού — μέσω εγγράφων σχεδιασμού, περιγραφών pull request, γραπτών daily stand-up, RFC και αρχείων αρχιτεκτονικών αποφάσεων — κλιμακώνεται σε μεγέθη ομάδων και ζώνες ώρας. Επιπλέον, η ίδια η πράξη της γραφής αναγκάζει σε σαφέστερη σκέψη από την αντίστοιχη προφορική ανταλλαγή. Τρίτον, η συνεργασία στην ανάπτυξη λογισμικού ωφελείται τεράστια από μικρές ομάδες. Πάνω από περίπου οκτώ άτομα, τα έξοδα επικοινωνίας αυξάνονται υπερ-γραμμικά. Για αυτόν τον λόγο, η συνεργασία υψηλής απόδοσης στην ανάπτυξη λογισμικού συνήθως λαμβάνει χώρα σε ομάδες τριών έως επτά μηχανικών με έναν ενιαίο, σαφή στόχο. Επιπλέον, όταν οι ομάδες χρειάζεται να μεγαλώσουν πέρα από αυτό το μέγεθος, η διαίρεση σε υπο-ομάδες με σαφείς διεπαφές παράγει καλύτερη συνεργασία στην ανάπτυξη λογισμικού από το να κρατάς όλους σε ένα μεγάλο χώρο. Τέταρτον, η αναθεώρηση κώδικα είναι το σημείο όπου η συνεργασία στην ανάπτυξη λογισμικού είτε ανθεί είτε σαπίζει. Οι αναθεωρήσεις που εστιάζουν στην ουσία (συμβιβασμοί σχεδιασμού, οριακές περιπτώσεις, ασαφής ονοματολογία) ενισχύουν τη συνεργασία στην ανάπτυξη λογισμικού· οι αναθεωρήσεις που μικρολογούν τις προσωπικές προτιμήσεις στυλ την εξασθενούν. Κατά συνέπεια, οι καλύτερες κουλτούρες συνεργασίας στην ανάπτυξη λογισμικού έχουν σαφείς κανόνες αναθεώρησης: να στοχεύουν σε εποικοδομητικό τόνο, να διαχωρίζουν το «πρέπει να αλλάξει» από το «σκέψου να αλλάξεις» και να γιορτάζουν τις αλλαγές που βρήκατε διδακτικές. Επιπλέον, η συνεργασία σε δύσκολες αναθεωρήσεις είναι συχνά ταχύτερη από την ασύγχρονη αναθεώρηση. Πέμπτον, η διαφωνία είναι υγιής για τη συνεργασία στην ανάπτυξη λογισμικού. Ομάδες που συμφωνούν σε όλα είτε δεν σκέφτονται κριτικά είτε καταπιέζουν πραγματικές αντιρρήσεις — και τα δύο αποτελέσματα είναι κακά. Αντίθετα, ομάδες με ισχυρή συνεργασία στην ανάπτυξη λογισμικού αντιμετωπίζουν τη διαφωνία ως πόρο: μια καλά εκφρασμένη αντίρρηση συνήθως δείχνει σε έναν κίνδυνο που κανένας άλλος δεν έχει ακόμα αρθρώσει. Για αυτόν τον λόγο, τα τελετουργικά συνεργασίας στην ανάπτυξη λογισμικού πρέπει να περιλαμβάνουν επίσημους μηχανισμούς για την καταγραφή διαφωνίας (γραπτές έντονες απόψεις, ρητές αποφάσεις του τεχνικού επικεφαλής μετά την ακρόαση της διαφωνίας, αρχιτεκτονικές αναθεωρήσεις). Έκτον, η συνεργασία στην ανάπτυξη λογισμικού χρειάζεται κοινό πλαίσιο. Νέα μέλη της ομάδας που δεν έχουν πλαίσιο δεν μπορούν να συνεργαστούν αποτελεσματικά, ανεξάρτητα από το πόσο ικανά είναι ατομικά. Κατά συνέπεια, οι καλές κουλτούρες συνεργασίας στην ανάπτυξη λογισμικού επενδύουν σημαντικά στην ένταξη νέων μελών: συνεργασία με ανώτερους μηχανικούς για δύο εβδομάδες, εκτέλεση τεκμηριωμένων εκπαιδευτικών έργων πριν από την αφή της παραγωγής και διατήρηση wiki σελίδων ένταξης που εξηγούν γιατί το σύστημα είναι όπως είναι, όχι μόνο τι είναι. Έβδομον, η συνεργασία στην ανάπτυξη λογισμικού διαμέσου πειθαρχιών πολλαπλασιάζει την παραγωγή. Όταν σχεδιαστές, μηχανικοί και διαχειριστές προϊόντων εργάζονται ως μία ομάδα αντί να παραδίδουν αντικείμενα μεταξύ τους, η συνεργασία στην ανάπτυξη λογισμικού παράγει καλύτερο λογισμικό γρηγορότερα. Επιπλέον, η διεπιστημονική συνεργασία στην ανάπτυξη λογισμικού εντοπίζει προβλήματα νωρίς: ένας σχεδιαστής που συμμετέχει σε αναθεωρήσεις κώδικα παρατηρεί ότι η υλοποίηση αποκλίνει από το σχεδιασμό· ένας μηχανικός που συμμετέχει σε συνεντεύξεις χρηστών κατανοεί τις οριακές περιπτώσεις πριν από την πρώτη γραμμή κώδικα. Δείτε τη σελίδα καριέρας μας για το πώς προσλαμβάνουμε για διεπιστημονικές δεξιότητες. Όγδοον, η εξ αποστάσεως συνεργασία στην ανάπτυξη λογισμικού απαιτεί σκόπιμη προσπάθεια. Σήματα που είναι δωρεάν σε ένα κοινό γραφείο — γλώσσα του σώματος, σκίτσα στον πίνακα, τυχαίες συνομιλίες — εξαφανίζονται στην εξ αποστάσεως εργασία. Για αυτόν τον λόγο, οι κουλτούρες εξ αποστάσεως συνεργασίας στην ανάπτυξη λογισμικού αντισταθμίζουν σκόπιμα: περισσότερο γραπτό πλαίσιο, πιο ρητές δομές συναντήσεων, πολιτικές ενεργοποιημένης κάμερας για σημαντικές συνομιλίες και τακτικές εβδομάδες ομάδας με φυσική παρουσία. Η εξ αποστάσεως συνεργασία στην ανάπτυξη λογισμικού μπορεί να είναι εξαιρετική, αλλά μόνο όταν οι ομάδες αναγνωρίζουν τα κόστη και τα πληρώνουν συνειδητά. Ένατον, η συνεργασία στην ανάπτυξη λογισμικού με την πάροδο του χρόνου είναι πιο δύσκολη από τη συνεργασία σε μια στιγμή. Η ομάδα που γράφει ένα σύστημα δεν είναι σχεδόν ποτέ η ομάδα που το συντηρεί τρία χρόνια αργότερα. Κατά συνέπεια, οι κουλτούρες υψηλής απόδοσης συνεργασίας στην ανάπτυξη λογισμικού γράφουν για μελλοντικούς αναγνώστες: τα σχόλια εξηγούν το γιατί, όχι το τι· οι αρχιτεκτονικές αποφάσεις τεκμηριώνονται με τους συμβιβασμούς τους· τα μηνύματα commit αφηγούνται ιστορίες. Η συνεργασία στην ανάπτυξη λογισμικού που αγνοεί αυτό το μελλοντικό κοινό παράγει συστήματα που είναι δαπανηρά να εξελιχθούν ακόμα και όταν ο ίδιος ο κώδικας είναι τεχνικά υγιής. Δέκατον, ο δημόσιος εορτασμός της συνεργασίας στην ανάπτυξη λογισμικού ενισχύει την κουλτούρα. Όταν ένα δύσκολο περιστατικό παραγωγής επιλύεται μέσω ισχυρής ομαδικής εργασίας, η ιστορία πρέπει να ειπωθεί — στην αναδρομή της ομάδας, σε εσωτερική ανάρτηση ιστολογίου, σε ολόκληρη την εταιρεία. Ομοίως, όταν μια διομαδική συνεργασία παραδίδει μια λειτουργία αγαπημένη από τους χρήστες, η πίστωση πρέπει να κατανεμηθεί ρητά. Η συνεργασία στην ανάπτυξη λογισμικού που παραμένει αναγνώριστη ξεθωριάζει· η συνεργασία στην ανάπτυξη λογισμικού που γιορτάζεται δημόσια σωρεύεται. Στη Square Software βλέπουμε τη συνεργασία στην ανάπτυξη λογισμικού ως την επένδυση με την υψηλότερη μόχλευση που μπορεί να κάνει ένας τεχνολογικός ηγέτης. Κάθε δολάριο που δαπανάται για τη βελτίωση της συνεργασίας στην ανάπτυξη λογισμικού — καλύτερη συγγραφή, καλύτερες συναντήσεις, καλύτερη ένταξη νέων μελών, καλύτερες αναδρομές — παράγει ανατοκιζόμενες αποδόσεις σε κάθε λειτουργία που παραδίδει η ομάδα στη συνέχεια. Αντίθετα, ομάδες που αντιμετωπίζουν τη συνεργασία στην ανάπτυξη λογισμικού ως ήπιο κόστος συνήθως ανακαλύπτουν μέσα σε λίγα χρόνια ότι η σκληρή τεχνική παραγωγή τους έχει σταθεροποιηθεί. Δυνατοί άνθρωποι συν ισχυρή συνεργασία στην ανάπτυξη λογισμικού υπερτερούν της ατομικής ιδιοφυΐας κάθε φορά. Επικοινωνήστε μαζί μας μέσω της σελίδας επικοινωνίας για δεσμεύσεις ομαδικής καθοδήγησης.

Έτοιμοι να ξεκινήσετε το έργο σας;

Ας συζητήσουμε πώς μπορούμε να βοηθήσουμε να ζωντανέψουν οι ιδέες σας με εξατομικευμένες λύσεις λογισμικού.

Επικοινωνήστε μαζί μας