Η λίστα QA που κανείς δεν θέλει να διαβάσει
Το 91% των bugs που φτάνουν σε πραγματικό χρήστη είναι εκτός του happy path που δοκίμασαν όλοι. Γι' αυτό πριν από κάθε ship τρέχουμε τη λίστα QA που κανείς δεν θέλει να διαβάσει — empty states, double-submits, offline στη μέση, ονόματα με απόστροφο. Να την, με τη σειρά.
από Ρία Π.
Η λίστα QA είναι το λιγότερο αγαπητό έγγραφο στο studio. Είναι αυτό που στέλνει ένα «τελειωμένο» feature πίσω σε αυτόν που το τελείωσε, μια Πέμπτη, για κάτι που ορκίζεται ότι κανένας πραγματικός χρήστης δεν θα έκανε ποτέ. Κάνει λάθος. Οι πραγματικοί χρήστες τα κάνουν όλα, και κι άλλα, και τα κάνουν στο χειρότερο κινητό του κτιρίου. Να η λίστα που κανείς δεν θέλει να διαβάσει — αυτή που τρέχουμε πριν από κάθε ship, με την ίδια σειρά, κάθε φορά.
- Άνοιξε πρώτα το empty state. Κάθε λίστα, πίνακας και dashboard έχει ένα, κανείς δεν το σχεδιάζει, και είναι το πρώτο πράγμα που βλέπει ένας πραγματικός νέος χρήστης. Το «δεν υπάρχουν δεδομένα ακόμα» είναι οθόνη, όχι σκέψη της τελευταίας στιγμής.
- Κάνε το πράγμα δύο φορές. Double-click στο submit. Refresh στη μέση μιας πληρωμής. Πάτα back μετά το checkout και δες τι κάνει η δεύτερη χρέωση. Το idempotency είναι QA finding πριν γίνει backend feature.
- Τράβα το δίκτυο στη μέση της ενέργειας. Το happy path υποθέτει ότι το request θα γυρίσει. Οι πραγματικοί χρήστες μπαίνουν σε ασανσέρ, τούνελ και υπόγεια με μία γραμμή σήμα, και το spinner σου γυρίζει για πάντα εκτός αν κάποιος το έκανε να σταματήσει.
- Γράψε ένα όνομα με απόστροφο μέσα. Ο O'Brien έχει σπάσει περισσότερο λογισμικό από κάθε SQL injection. Μετά πρόσθεσε ένα emoji, ένα επώνυμο εξήντα χαρακτήρων κι ένα κενό στο τέλος, και δες ποιο field το παραμορφώνει σιωπηλά.
- Χρησιμοποίησέ το στο χειρότερο κινητό που μπορείς να βρεις. Ένα αργό Android τεσσάρων ετών, φωτεινότητα χαμηλά, γραμματοσειρά μεγεθυμένη για κάποιον που πραγματικά τη χρειάζεται. Το layout που φαίνεται μια χαρά στο δεκαεξάιντσο Mac του designer δεν είναι το layout που παίρνουν οι περισσότεροι.
- Διάβασε κάθε μήνυμα σφάλματος φωναχτά. Αν λέει «Κάτι πήγε στραβά» ή «Error 500», δεν είναι τελειωμένο — είναι ένα ανασήκωμα ώμων μ' ένα stack trace από πίσω. Ο χρήστης δεν μπορεί να κάνει κάτι μ' ένα ανασήκωμα ώμων.
- Κάνε login με τον λογαριασμό χωρίς permissions, μετά μ' αυτόν που τα έχει όλα. Τα ενδιαφέροντα bugs ζουν στα όρια: το κουμπί που φαίνεται ενώ δεν θα έπρεπε, η σελίδα που κάνει 403 με μια λευκή κενή οθόνη αντί για μια πρόταση.
- Βάλε τους αριθμούς που δεν είναι αριθμοί. Μηδέν. Αρνητικό. Έναν δεκαδικό εκεί που ήθελες ακέραιο. Την ποσότητα 1.000.000. Μια ημερομηνία στο 1900 και μια στο 2099. Η φόρμα που δοκίμασε μόνο το «5» είναι μια φόρμα που δουλεύει μόνο για το 5.
Τίποτα από αυτά δεν είναι έξυπνο, κι αυτή είναι η ένσταση που ακούμε πιο συχνά: «ένας πραγματικός χρήστης δεν θα το έκανε ποτέ αυτό». Η ανάλυση παραπάνω είναι κάθε bug που έφτασε σε πραγματικό χρήστη σε τρία projects πέρυσι, ταξινομημένο με βάση το τι έκανε ο χρήστης όταν έσπασε. Εννέα τοις εκατό ήταν στο happy path — το κομμάτι που δοκίμασαν όλοι. Τα υπόλοιπα ενενήντα ένα ήταν κάπου σε αυτή τη λίστα.
Η καμπύλη παραπάνω είναι ο λόγος που τρέχουμε τη βαρετή λίστα πριν, όχι μετά. Ένα bug που πιάνεται στη λίστα QA κοστίζει σχεδόν τίποτα — μια γραμμή σ' ένα ticket, διορθωμένη το ίδιο απόγευμα. Το ίδιο bug που το πιάνει ένας χρήστης σε production κοστίζει περίπου τριάντα φορές περισσότερο μέχρι ν' απαντήσεις στο support email, να το αναπαράγεις, να βγάλεις hotfix μια Παρασκευή που δεν την είχες σχεδιάσει, και να ζητήσεις συγγνώμη. Η λίστα είναι το φθηνότερο μέρος όπου θα βρεθεί ποτέ ένα bug.
Αυτό που δεν θα κάνουμε είναι να αυτοματοποιήσουμε τη λίστα και να την πούμε καλυμμένη. Τα automated tests είναι υπέροχα και γράφουμε πολλά — αλλά ένα πράσινο CI run σου λέει μόνο ότι τα πράγματα που σκέφτηκες να ελέγξεις περνάνε ακόμα. Δεν σου λέει τίποτα για το empty state που κανείς δεν σχεδίασε ή το μήνυμα σφάλματος που λέει «undefined». Η λίστα είναι ένας άνθρωπος που διαβάζει την οθόνη σαν καχύποπτος ξένος, και κανένα ποσοστό coverage δεν το αντικαθιστά. Γράψαμε το ίδιο για τα security scans: το εργαλείο βρίσκει αυτό που του είπαν να βρει, κι η πραγματική δουλειά είναι το κομμάτι που δεν μπορεί.
Αυτό που άλλαξε από τότε που αρχίσαμε να δίνουμε αυτή τη λίστα στους πελάτες: η αντίρρηση μετακινήθηκε νωρίτερα. Οι ομάδες παλιά διαφωνούσαν με τα QA findings την εβδομάδα πριν το launch, όταν το ν' αλλάξεις οτιδήποτε είναι ακριβό και τα νεύρα κοφτερά. Τώρα διαβάζουν τη λίστα στην αρχή και χτίζουν γι' αυτήν — το empty state σχεδιάζεται, το error copy γράφεται, ο απόστροφος αντιμετωπίζεται τη δεύτερη εβδομάδα αντί για την ενδέκατη. Η λίστα που κανείς δεν θέλει να διαβάσει αποδεικνύεται φθηνότερη όταν τη διαβάζεις πρώτη.