The default is the decision

Γράφει ο Panagiotis Athanasakopoulos · Παναγιώτης Αθανασακόπουλος

Engineering14 Σεπτεμβρίου 20262 min

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

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

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

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

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

Το ίδιο ισχύει πολύ πέρα από τις φόρμες. Χρόνοι αναμονής (timeouts), αριθμός επαναλήψεων, μέγεθος σελίδας, ακτίνα αναζήτησης: το καθένα είναι μια προεπιλογή που διαμορφώνει σιωπηλά την εμπειρία του χρήστη. Μια ακτίνα αναζήτησης που ταιριάζει σε μια πόλη είναι λάθος για ένα νησί. Ένας χρόνος αναμονής αρκετά γενναιόδωρος για έναν προμηθευτή κρύβει ότι ένας άλλος έχει σταματήσει να απαντά. Καμία από αυτές δεν ανακοινώνει την ύπαρξή της. Είναι απλώς ο τρόπος που συμπεριφέρεται το σύστημα.

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

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

Common questions

Τι είναι μια ασφαλής προεπιλογή στον σχεδιασμό λογισμικού;
Η τιμή που κάνει τη μικρότερη ζημιά στους χρήστες που ξέρετε λιγότερο. Στην πράξη: η πιο ευρέως κατανοητή επιλογή για τη γλώσσα, «όχι» για τη συγκατάθεση, «απαγορεύεται» για τα δικαιώματα πρόσβασης, και μια συγκεκριμένη τιμή μόνο όταν το σύστημα ξέρει με βεβαιότητα ότι ισχύει για τον συγκεκριμένο χρήστη.
Μια άγνωστη τιμή πρέπει να αποθηκεύεται ως null ή να παίρνει προεπιλογή;
Να αποθηκεύεται ως άγνωστη. Μια κενή τιμή λέει σε κάθε επόμενο κομμάτι του συστήματος ότι η πληροφορία λείπει, ώστε το καθένα να το χειριστεί συνειδητά. Μια προεπιλογή αντικαθιστά την πληροφορία που λείπει με μια εικασία που μοιάζει αληθινή, δεν ξεχωρίζει από τα πραγματικά δεδομένα και δεν μπορεί να διορθωθεί αργότερα.
Πώς βρίσκετε τις προεπιλογές που δημιουργούν προβλήματα;
Συγκρίνετε το πεδίο με ανεξάρτητα στοιχεία και δείτε την κατανομή των τιμών. Αν σχεδόν κάθε εγγραφή έχει την ίδια τιμή, και άλλες ενδείξεις λένε ότι οι χρήστες δεν είναι τόσο ομοιόμορφοι, το πεδίο δείχνει μια προεπιλογή και όχι την πραγματικότητα.

More from Panagiotis Athanasakopoulos

Initiate the blueprint

Talk to him directly.

Στην TWENTYONE δεν υπάρχει account manager. Πείτε μας τι ετοιμάζετε. Την πρώτη κουβέντα θα την κάνετε με τον άνθρωπο που θα αποφασίσει πώς θα φτιαχτεί.

Honestly? You’re going to regret switching tabs.

Δύσκολα θα βρείτε κορυφαίους custom developers που να νοιάζονται πραγματικά για το πώς θα μεγαλώσει η επιχείρησή σας.

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

Με πείσατε.
Ας μιλήσουμε.