Academy250.com
Developer mindset · Engineer mindset · Human failure

Developer: κάν’ το να δουλέψει.
Engineer: βρες πώς θα καταστραφεί.

Δεν είναι σύγκριση ανωτερότητας. Είναι δύο διαφορετικά hard-coded σημεία εκκίνησης. Ο developer χτίζει τη λειτουργία. Ο engineer —ο μηχανικός— χτίζει την ικανότητα της λειτουργίας να επιβιώσει όταν περάσει από τα χέρια της πραγματικότητας.

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

</> Αριστερά · Developer

Hard-coded να δημιουργεί κάτι που δουλεύει

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

⚙ Δεξιά · Engineer / Μηχανικός

Hard-coded να περιμένει ότι κάτι θα χαλάσει

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

01

Η φυσική αποστολή

Τι προσπαθεί να πετύχει πρώτα ο κάθε ρόλος;

Developer

Να μετατρέψει μια απαίτηση σε λειτουργία

Ο developer παίρνει κάτι ασαφές —«θέλω να καταχωρίζω παραγγελίες»— και το μετατρέπει σε σαφή πεδία, κανόνες, APIs, πίνακες βάσης δεδομένων, permissions και αποτέλεσμα στην οθόνη.

Η επαγγελματική του καθημερινότητα τον εκπαιδεύει να κλείνει κενά λογικής. Ο κώδικας είτε κάνει αυτό που πρέπει είτε δεν το κάνει. Η λειτουργία είτε ολοκληρώνεται είτε επιστρέφει error.

Το default ερώτημα είναι: «Πώς θα το κάνω να δουλέψει σωστά κάθε φορά;»
Engineer / Μηχανικός

Να δημιουργήσει κάτι που θα επιβιώσει εκτός του μυαλού του

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

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

Το default ερώτημα είναι: «Πώς θα αποτύχει όταν βρεθεί στα χέρια της πραγματικότητας;»
02

Η εικόνα της αποτυχίας

Τι σημαίνει «απέτυχε» μέσα στο μυαλό του;

Developer

Η αποτυχία είναι bug, exception ή μη αναμενόμενο state

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

Αυτό δημιουργεί ένα πανίσχυρο mindset συνέπειας. Ο developer μαθαίνει να μην αποδέχεται το «περίπου δουλεύει». Πρέπει να βρει την αιτία, να γράψει τη διόρθωση και να κάνει deploy μία λειτουργική εκδοχή.

Engineer / Μηχανικός

Η αστοχία δεν είναι εξαίρεση. Είναι αναμενόμενο στάδιο της ανάπτυξης

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

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

03

Τα tests που γνωρίζει καλύτερα

Απέναντι σε ποιον αντίπαλο δοκιμάζει το σύστημα;

Developer

Δοκιμάζει τον κώδικα απέναντι σε τεχνικά σενάρια

Unit tests, integration tests, load tests, regression tests, retries, timeouts, invalid payloads, network failures, concurrent requests και permissions είναι πραγματικά tests αποτυχίας. Δεν είναι καθόλου επιφανειακά.

Συχνά, όμως, έχουν δημιουργηθεί από ανθρώπους που γνωρίζουν ήδη πώς λειτουργεί το σύστημα. Ελέγχουν γνωστές τεχνικές αστοχίες και λογικά edge cases. Ο αντίπαλος παραμένει ένας άλλος τεχνικός νους ή μία προβλέψιμη υποδομή.

Τι θα γίνει αν το API καθυστερήσει πέντε δευτερόλεπτα; Τι θα γίνει αν δύο requests ενημερώσουν ταυτόχρονα την ίδια εγγραφή; Τι θα γίνει αν ένα πεδίο είναι κενό ή έχει λάθος τύπο δεδομένων; Τι θα γίνει αν ο server επανεκκινήσει στη μέση μιας συναλλαγής;
Engineer / Μηχανικός

Δοκιμάζει το σύστημα απέναντι σε χρήση, κατάχρηση και φθορά

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

Το test δεν γράφεται μόνο από κάποιον που κατανοεί το σύστημα. Γράφεται και από τη βαρύτητα, την τριβή, την κόπωση, τον χρόνο, το νερό, τη σκόνη, τον βιαστικό χρήστη και τον άνθρωπο που δεν διάβασε ποτέ το manual.

Τι θα γίνει αν το φορτίο είναι διπλάσιο από το αναμενόμενο; Τι θα γίνει αν ο χρήστης ενεργοποιήσει δύο αντίθετες εντολές μαζί; Τι θα γίνει αν ο αισθητήρας δώσει απολύτως λογική αλλά λανθασμένη τιμή; Τι θα γίνει αν η βλάβη εμφανιστεί όταν κανένας τεχνικός δεν είναι διαθέσιμος;
04

Ο χρήστης στο μυαλό του

Ποιον άνθρωπο φαντάζεται ότι θα χρησιμοποιήσει το αποτέλεσμα;

Developer

Ο χρήστης ακολουθεί τη ροή που σχεδιάστηκε

Ο developer συνήθως βλέπει τον χρήστη μέσα από interfaces, actions και permissions. Ο χρήστης ανοίγει τη φόρμα, συμπληρώνει τα δεδομένα, πατά αποθήκευση και περιμένει το αποτέλεσμα.

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

Engineer / Μηχανικός

Ο χρήστης είναι μη εκπαιδευμένος, βιαστικός και απρόβλεπτος

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

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

05

Το κουμπί «Ολοκληρώθηκε»

Πότε μία τεχνικά σωστή λειτουργία γίνεται επιχειρησιακά επικίνδυνη;

Developer

Το κουμπί «Ολοκληρώθηκε» λειτουργεί τέλεια

Ο developer υλοποιεί το κουμπί. Ελέγχει το permission, ενημερώνει το status, καταγράφει timestamp και εμφανίζει επιτυχές μήνυμα. Τεχνικά, η λειτουργία είναι άψογη.

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

Η λειτουργία είναι σωστή. Η σημασία του πατήματος θεωρείται δεδομένη.
Engineer / Μηχανικός

Το κουμπί «Ολοκληρώθηκε» είναι μία επιχειρησιακή δήλωση

Ο engineer δεν ρωτά μόνο αν το status αλλάζει. Ρωτά αν επιτρέπεται να αλλάξει. Υπάρχει αποδεικτικό; Έχει ολοκληρωθεί το προηγούμενο στάδιο; Υπάρχει φυσική παραλαβή; Ποιος αναλαμβάνει την ευθύνη; Μπορεί ο ίδιος άνθρωπος να δημιουργήσει και να εγκρίνει;

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

Η λειτουργία δεν αρκεί να δουλεύει. Πρέπει να αρνείται να λειτουργήσει όταν η πραγματικότητα δεν τη στηρίζει.
06

Η μεγάλη δύναμη

Γιατί το σωστό σύστημα χρειάζεται και τα δύο mindsets;

Developer

Χωρίς αυτό το mindset, τίποτα δεν θα τελείωνε

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

Δεν είναι «λιγότερο» από engineering. Είναι διαφορετική εστίαση. Κάποιος πρέπει να κάνει το σύστημα πραγματικό, να το ολοκληρώσει και να το κρατήσει λειτουργικό.

Engineer / Μηχανικός

Σχεδιάζει την επιβίωση, όχι μόνο τη λειτουργία

Ο engineer δημιουργεί όρια, interlocks, fail-safe states, συντελεστές ασφαλείας, audit trails, φυσικούς περιορισμούς και διαδικασίες που σταματούν την αλυσίδα όταν λείπει μία κρίσιμη προϋπόθεση.

Δεν προσπαθεί να αποδείξει ότι ο χρήστης έκανε λάθος. Προσπαθεί να εμποδίσει το λάθος του χρήστη να μετατραπεί σε καταστροφή.

Γιατί ένα αυτοκίνητο καταστρέφεται ξανά και ξανά πριν κυκλοφορήσει

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

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

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

Crash test · Καταστρέφουμε το πρωτότυπο για να προστατεύσουμε τον άνθρωπο 16:9 · 1920 × 1080
Η πραγματική συνεργασία

Ο developer χτίζει τη λειτουργία. Ο engineer χτίζει τα όρια μέσα στα οποία επιτρέπεται να λειτουργήσει.

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

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

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

Το σύστημα δεν σχεδιάζεται για τον χρήστη που θα το χρησιμοποιήσει τέλεια.

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

Ο developer δημιουργεί τη δυνατότητα. Ο engineer δημιουργεί την προστασία από την κακή, λανθασμένη ή απρόβλεπτη χρήση της δυνατότητας.

Ο ένας είναι hard-coded να φτιάξει κάτι που δουλεύει.
Ο άλλος είναι hard-coded να γνωρίζει ότι κάποιος, κάπου, κάποτε θα το χαλάσει.

Developer × Engineer · Full-loop builder · Systems mindset

Όταν ο Engineer γίνεται Developer
και ο Developer γίνεται Engineer.

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

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

01 </>

Όταν ο Engineer γίνεται Developer

Ο engineer είναι εκπαιδευμένος να βλέπει το σύστημα, τα φορτία, τις εξαρτήσεις, τα όρια, την κόπωση και την αστοχία. Συχνά όμως εξαρτάται από άλλους για να μετατρέψει αυτή τη σκέψη σε λειτουργικό εργαλείο. Περιγράφει τη ροή, γράφει τις προδιαγραφές, σχεδιάζει τις δικλίδες και στη συνέχεια περιμένει από έναν developer να τις υλοποιήσει.

Όταν ο engineer αποκτά την ικανότητα του developer, η απόσταση ανάμεσα στην παρατήρηση και στην πράξη σχεδόν εξαφανίζεται. Βλέπει ένα πρόβλημα στη γραμμή παραγωγής το πρωί και το απόγευμα μπορεί να έχει ήδη δημιουργήσει το πρώτο εργαλείο καταγραφής, έναν μικρό αυτοματισμό, ένα prototype dashboard ή ένα σύστημα ειδοποίησης.

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

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

Στη μηχανή

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

Στην επιχείρηση

Δεν περιγράφει μόνο ότι η καθυστέρηση πρέπει να συνδεθεί με την έγκριση αγοράς. Δημιουργεί το record, το audit trail, το dependency και την αναφορά που αποδεικνύει τη διαδρομή.

02

Όταν ο Developer γίνεται Engineer

Ο developer είναι εκπαιδευμένος να παίρνει μία απαίτηση και να τη μετατρέπει σε λειτουργία. Η φόρμα αποθηκεύει, το API απαντά, το state αλλάζει και η διαδικασία ολοκληρώνεται. Όταν όμως αρχίζει να σκέφτεται ως engineer, παύει να θεωρεί ότι η επιτυχής εκτέλεση του κώδικα είναι το ίδιο πράγμα με την επιτυχία του συστήματος.

Αρχίζει να ρωτά τι συνέβη πριν εμφανιστούν τα δεδομένα στη φόρμα. Ποιος είχε την πληροφορία; Ποιος πιέστηκε να πατήσει το κουμπί; Ποιος θα κατηγορηθεί από το αποτέλεσμα; Τι θα συμβεί αν ο χρήστης βιαστεί, αν παραλείψει ένα στάδιο, αν αντιγράψει λάθος τιμή, αν χάσει τη σύνδεση ή αν προσπαθήσει να χρησιμοποιήσει τη λειτουργία με τρόπο που κανένας developer δεν είχε φανταστεί;

Τότε το software παύει να είναι μία συλλογή από σωστές λειτουργίες. Γίνεται μηχανισμός που έχει όρια, interlocks, fail-safe states, ιστορικό αλλαγών και σαφείς συνθήκες κάτω από τις οποίες επιτρέπεται να συνεχίσει.

Ο developer που γίνεται engineer παύει να δοκιμάζει μόνο αν η λειτουργία δουλεύει. Αρχίζει να δοκιμάζει αν το σύστημα επιβιώνει όταν ο χρήστης δεν δουλεύει όπως περιμένει η λειτουργία.

Το κουμπί «Ολοκληρώθηκε»

Δεν αρκεί πλέον να αλλάζει το status. Ενεργοποιείται μόνο όταν υπάρχουν τα προηγούμενα records, τα αποδεικτικά, ο σωστός ρόλος και η πραγματική δυνατότητα ολοκλήρωσης.

Η διόρθωση αριθμού

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

03

Δεν συγχωνεύονται οι τίτλοι. Συγχωνεύονται οι ερωτήσεις.

Ο άνθρωπος αυτός δεν σταματά να είναι developer όταν ανοίγει τον editor και δεν σταματά να είναι engineer όταν γράφει κώδικα. Μετακινείται συνεχώς ανάμεσα σε δύο διαφορετικές ερωτήσεις.

Developer mode

Πώς θα το κάνω να λειτουργήσει;

Ποια δεδομένα χρειάζομαι; Ποια states υπάρχουν; Πώς θα συνδεθούν τα APIs; Ποια είναι η μικρότερη λειτουργική έκδοση που μπορώ να δοκιμάσω σήμερα;

Engineer mode

Πώς θα αποτύχει όταν φύγει από τα χέρια μου;

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

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

04

Ο άνθρωπος που κλείνει ολόκληρο τον κύκλο

Όταν αυτά τα δύο χαρακτηριστικά συναντηθούν πραγματικά, δημιουργείται ένας full-loop builder. Όχι ένας άνθρωπος που γνωρίζει απλώς δύο επαγγέλματα, αλλά ένας άνθρωπος που μπορεί να μετακινείται από τον πραγματικό κόσμο στον ψηφιακό και ξανά πίσω χωρίς να χάνει τις συνέπειες στη διαδρομή.

Παρατήρηση πραγματικής ανάγκης Μοντελοποίηση του συστήματος Γρήγορη υλοποίηση Ελεγχόμενη καταστροφή Μέτρηση της αστοχίας Επανασχεδιασμός Ασφαλής πραγματική λειτουργία

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

Ο full-loop builder κλείνει όλο τον κύκλο 16:9 · Observation → Build → Break → Measure → Rebuild
05

Τι αλλάζει μέσα σε μία επιχείρηση

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

Βλέπει την οδοντογλυφίδα

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

Μετατρέπει την ανάγκη σε σύστημα

Δεν αντικαθιστά την οδοντογλυφίδα με ένα πιο όμορφο ψηφιακό workaround. Διορθώνει τη ροή που ανάγκασε τον άνθρωπο να τη δημιουργήσει.

Βλέπει την ευθύνη

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

Γράφει τη δικλίδα

Μπορεί να μετατρέψει αυτή τη γνώση σε permissions, prerequisites, immutable history, alerts και safe stop μέσα στην ίδια την εφαρμογή.

06

Δεν κάνει απλώς testing. Επιτίθεται στο ίδιο του το έργο.

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

Θα δοκιμάσει το happy path, αλλά μετά θα μπει ως κουρασμένος χρήστης, βιαστικός υπεύθυνος, κακόβουλος διαχειριστής, αποσυνδεδεμένο τμήμα, χαλασμένος αισθητήρας και λανθασμένη βάση δεδομένων. Δεν ρωτά μόνο «λειτουργεί;». Ρωτά «τι θα επιτρέψει να συμβεί όταν όλα γύρω του λειτουργούν λάθος;».

Δεν αγαπά λιγότερο αυτό που έφτιαξε. Το αγαπά αρκετά ώστε να προσπαθήσει ο ίδιος να το καταστρέψει πριν το καταστρέψει η πραγματικότητα.

Ο κίνδυνος του ανθρώπου που μπορεί να τα κάνει όλα

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

Ο engineer-developer πρέπει να επιτίθεται και στις δικές του βεβαιότητες. Χρειάζεται Operators που θα χρησιμοποιήσουν το σύστημα διαφορετικά, πραγματικά δεδομένα, εξωτερικό review και δοκιμές που δεν σχεδιάστηκαν από τον ίδιο. Διαφορετικά, μπορεί απλώς να κατασκευάσει με εξαιρετική τεχνική ποιότητα μία πολύ καλά οργανωμένη προσωπική αυταπάτη.

The convergence · build speed × failure intelligence

Ο Developer λέει «ship it». Ο Engineer λέει «break it first».

Όταν βρίσκονται στον ίδιο άνθρωπο, δεν ακυρώνει ο ένας τον άλλο. Δημιουργούν έναν εσωτερικό διάλογο. Ο developer εμποδίζει τον engineer να μείνει για πάντα μέσα στην ανάλυση. Ο engineer εμποδίζει τον developer να μετατρέψει την πρώτη λειτουργική εκδοχή σε τελικό σύστημα.

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

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

Δεν είναι δύο επαγγέλματα μέσα σε έναν άνθρωπο. Είναι δύο εγκέφαλοι που ελέγχουν ο ένας τον άλλο.

Ο Engineer χωρίς την ικανότητα του Developer μπορεί να βλέπει το σωστό σύστημα αλλά να εξαρτάται από άλλους για να το δοκιμάσει. Ο Developer χωρίς τη σκέψη του Engineer μπορεί να δημιουργεί εξαιρετικές λειτουργίες χωρίς να βλέπει πάντα το σύστημα που αυτές επηρεάζουν.

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

Ο Developer μέσα του κάνει το σύστημα να λειτουργεί.
Ο Engineer μέσα του δεν το αφήνει να πιστέψει ότι αυτό αρκεί.