Το Δρομολόγιο της Ανάπτυξης III: Χτισμένο Γύρω από ένα Αληθινό Ταξίδι

By Miltos Vafiadis

Share:

Αυτός είναι ο τρίτος τόμος. Ο πρώτος χαρτογραφεί τα iterations 1–24, από το πρώτο commit μέχρι ένα προϊόν που δουλεύει· ο δεύτερος τα 25–49, από την ήσυχη beta μέχρι το άνοιγμα στον κόσμο. Το άρθρο υπάρχει και στα αγγλικά.

Ο δεύτερος τόμος τελείωνε στις 11 Σεπτεμβρίου με ένα τρίτο πρόγραμμα πιστότητας ζωντανό και ένα μάθημα για τα δεύτερα ζευγάρια μάτια. Πέντε εβδομάδες αργότερα το κοντέρ γράφει 73 iterations, και αυτό που διαμόρφωσε τον τόμο δεν ήταν κάποιο αίτημα για νέα λειτουργία. Ήταν ένα αεροπορικό εισιτήριο. Είχα κλείσει ένα αληθινό ταξίδι στο Λονδίνο για τις 2 Οκτωβρίου, και τα περισσότερα από όσα ακολουθούν φτιάχτηκαν επειδή ήθελα η εφαρμογή να κουβαλήσει αυτό το ταξίδι — και μετά ξαναφτιάχτηκαν, επειδή το ταξίδι διαφωνούσε με την εφαρμογή.

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

Το Δρομολόγιο της Ανάπτυξης, τόμος III — τα iterations 50 έως 73 του PlanItShare ως κάθετο ταξιδιωτικό δρομολόγιο, σε έξι σκέλη

Σκέλος 1 — Ώρες προσγείωσης και ανταποκρίσεις (iterations 50–53)

Το Will It Be Late? έφτασε στο τέλος του δεύτερου τόμου απαντώντας σε μία ερώτηση: το αεροσκάφος που θα κάνει την πτήση μου τρέχει καθυστερημένο αυτή τη στιγμή κάπου αλλού; Στο πρώτο σκέλος έμαθε να απαντά στην ερώτηση που έχει πραγματικά ο κόσμος: θα προλάβω την ανταπόκρισή μου;

Ξεκίνησε με ένα βράδυ αληθινών πτήσεων. Τις διάλεξα επίτηδες: μια πτήση της Ryanair στην οποία ήταν ένας φίλος, το δρομολόγιο του αδελφού μου, μια πτήση codeshare, μια πτήση που γίνεται μία φορά την εβδομάδα, μερικές αμερικανικές εταιρείες, και αναχωρήσεις της Aegean που μπορούσα να παρακολουθώ στο Flightradar24 την ώρα που μια καταιγίδα περνούσε πάνω από τη Θεσσαλονίκη. Τα fixtures και τα mockups δεν είχαν βρει τίποτα στραβό. Οι αληθινές πτήσεις βρήκαν ώρα απογείωσης τυπωμένη κάτω από λέξεις για την πύλη, μια ένδειξη ζώνης ώρας τυπωμένη τρεις φορές, και μια ώρα άφιξης σε λάθος ρολόι. Και μετά βρήκαν το καλύτερο λάθος της βραδιάς, που δεν ήταν στα δεδομένα: ο AI συμπρογραμματιστής μου κατέληξε «φταίει η αεροπορική», όταν μια Aegean από το Λονδίνο και μια Lufthansa από τη Σιγκαπούρη γύρισαν και οι δύο χωρίς αριθμό αεροσκάφους. Άνοιξα το Flightradar24, που είχε και τους δύο, και ρώτησα μήπως φταίει ο πάροχος δεδομένων. Έφταιγε. Το πείραμα άλλαζε δύο μεταβλητές και κρατούσε σταθερή τη μόνη που μετρούσε.

Το iteration 51 συμπίεσε έπειτα όλη την κάρτα σε έναν αριθμό και μία λέξη βεβαιότητας, γιατί ο κανόνας από την αρχή ήταν: το εργαλείο δεν είναι για τους aviation geeks, είναι για τον συχνό ταξιδιώτη που τον νοιάζει το τέταρτο και για όποιον έχει στενή ανταπόκριση. Κάτω από τον αριθμό κάθεται ο έλεγχος ανταπόκρισης: η απαισιόδοξη ώρα προσγείωσής μας απέναντι στον ελάχιστο δημοσιευμένο χρόνο ανταπόκρισης του κόμβου για το συγκεκριμένο ζευγάρι terminals, με ένα λεωφορείο ή τρένο ανάμεσά τους να κατεβάζει την ετυμηγορία μία βαθμίδα. Μέχρι το iteration 52 κάλυπτε 39 κόμβους της Star Alliance, καθένας με μια σελίδα που μπορεί να διαβάσει ο ταξιδιώτης — επειδή όταν ρώτησα «μπορεί κανείς να διαβάσει κάπου αυτά τα επιμελημένα δεδομένα;», η ειλικρινής απάντηση ήταν όχι.

Στο ίδιο σκέλος, ένα ταξίδι μπορεί πλέον να πει τίνος μίλια κερδίζει. Το πρόγραμμα πιστότητας ήταν μια στήλη που δεν μπορούσε να πει «όχι»· τώρα μπορεί, και ένα κουμπί συγκρίνει μια πτήση και στα τρία προγράμματα, με το καλύτερο πρώτο και πουθενά κόκκινο — το δεύτερο καλύτερο πρόγραμμα δεν είναι λάθος.

Σκέλος 2 — Ένας κανόνας για τα γραφεία επιμέλειας (iterations 54–56)

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

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

Το iteration 56 πρόσθεσε από πάνω το Restore, και μου έμαθε κάτι για τα ίδια μου τα specs. Το spec έλεγε ότι το Restore θα ήταν φτηνό «επειδή το "πριν" το κρατάει κάθε πρόταση». Η πρόταση ήταν μισή αλήθεια: η εγγραφή ενός υπερχρήστη δεν κάνει πρόταση, και τρεις από τις δεκαέξι ενέργειες δεν κρατούσαν κανένα «πριν». Είχε γραφτεί με το μυαλό στο μονοπάτι που μόλις είχαμε χτίσει, όχι σε εκείνο που υπήρχε ήδη — και την ενέκρινα. Η λύση ήταν να χτιστεί πρώτα το αρχείο και μετά το Restore.

Ένα πράγμα από αυτό το σκέλος που βλέπει ο ταξιδιώτης και που μου αρέσει ιδιαίτερα: οι επιλογές ναύλου στο Smart Search μετονομάστηκαν σε «τι θα γινόταν αν». Η γραμμή σε στέλνει στο Google Flights, που μπορεί να δείξει άλλον ναύλο ή άλλον πωλητή, άρα «αν κλείσεις την Aegean ως Flex…» είναι η μόνη ειλικρινής διατύπωση. Και ένα κουμπί που μετέτρεπε την εικασία ενός ταξιδιώτη σε ψευδώνυμο για όλο το site αφαιρέθηκε εντελώς — ένα «τι θα γινόταν αν» δεν είναι απόδειξη για το τι σημαίνει το όνομα ενός ναύλου.

Σκέλος 3 — Σχέδια που αλλάζουν γνώμη (iterations 57–60)

Μέχρι το iteration 57, τα δεδομένα ενός ταξιδιού ξεκινούσαν αφού είχε τελειώσει το ζύγισμα. Μια προωθημένη επιβεβαίωση, και τίποτα για το τι θα κόστιζε να την ακυρώσεις. Για το Λονδίνο ήθελα και το άλλο μισό, οπότε κάθε σχέδιο απέκτησε μια διπλωμένη ενότητα Τιμή και ακύρωση, με τους όρους σε βήματα: μέχρι αυτή τη στιγμή, η ακύρωση κοστίζει τόσο. Η σελίδα του ταξιδιού απαντά στο «τι γίνεται αν ακυρώσουμε;» ανά νόμισμα, ποτέ αθροίζοντας νομίσματα. Και επειδή ο αναλυτής των email έδινε ήδη από μόνος του τις πολιτικές ακύρωσης ως ελεύθερο κείμενο, τώρα τις διαβάζει ως δομημένα βήματα — με σήμανση «από το email, έλεγξέ το» μέχρι να τις αποθηκεύσει άνθρωπος.

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

Το iteration 58 ξεκίνησε με ερώτηση αντί για εργασία: αν σε ένα ταξίδι είμαι μόνο εγώ, ποιος ψηφίζει; Η απάντηση έγινε ο κανόνας για όλα τα επόμενα. Ταξιδιώτης είναι το μέλος με λογαριασμό που όντως πηγαίνει. Οι ταξιδιώτες ψηφίζουν· άποψη μπορεί να γράψει όποιος είναι στο ταξίδι, ακόμη και σε ταξίδι ενός ατόμου, όπου η άποψη είναι σημείωση προς τον εαυτό σου. Δύο ή περισσότεροι ταξιδιώτες κάνουν ομαδικό ταξίδι, που έχει γραμμή ψηφοφορίας· λιγότεροι κάνουν προσωπικό, που δεν έχει. Τα σχέδια μπορούν πλέον να είναι επιλογές που ζυγίζει η παρέα — με διακεκομμένο περίγραμμα στο πρόγραμμα, ψήφος ναι / ίσως / όχι με όνομα, και μετά οριστικοποίηση ή παραμερισμός — και μια επιλογή δεν μετράει ως κομμάτι του ταξιδιού: ούτε κάρτα χώρας, ούτε έλεγχος καθυστέρησης, ούτε έξοδο.

Το iteration 60 έβαλε νήμα σχολίων σε κάθε σχέδιο και έδωσε στους διοργανωτές μια σελίδα που λέγεται Σε τι φάση είναι το ταξίδι. Χτίστηκε σε μια συνεδρία στο cloud που δεν μπορούσε να συνδεθεί πουθενά, βγήκε χωρίς να το δει κανείς, και το πρώτο μου κλικ κρέμασε τη σελίδα. Το handoff το έγραψε καθαρά: το «lint και build πράσινα» είχε προσφερθεί σαν να σήμαινε «δουλεύει».

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

Σκέλος 4 — Μετακίνηση μέσα σε μια πόλη (iterations 61–63)

Το iteration 61 δεν ήταν το προγραμματισμένο iteration. Προσπάθησα να προσθέσω ένα ποταμόπλοιο του Τάμεση στο ταξίδι του Λονδίνου, και κάθε απάντηση έφερνε την επόμενη ερώτηση. Μέχρι να κλείσει, η εφαρμογή είχε έναν παγκόσμιο τύπο σχεδίου Αστική συγκοινωνία, διαδρομές με στάσεις, αλλαγές και περπάτημα, και διαδρομές στο Λονδίνο σχεδιασμένες από τον ίδιο τον πλανητή του Transport for London — με έναν κανόνα που χρειάστηκε να πω δύο φορές: το TfL δεν θα διαρρεύσει ποτέ στους επιλογείς του υπόλοιπου κόσμου. Οι τοπικοί πάροχοι εμφανίζονται μόνο σε ταξίδι του οποίου τα μέρη πέφτουν μέσα στην περιοχή τους.

Το δικό μου σχέδιο, Heathrow προς West Silvertown, βρήκε τα περισσότερα ελαττώματα. Το Mapbox έστειλε το «London Heathrow Terminal 2» στο Τενεσί. Ο πλανητής του TfL διάβασε το αναγνωριστικό του κόμβου Heathrow ως Camden Town. Μια παρτίδα 25 στάσεων απορρίφθηκε επειδή το όριο είναι 20. Τίποτα από αυτά δεν εμφανίστηκε στα fixtures, επειδή τα fixtures είχαν γραφτεί από τα σχήματα που περιμέναμε.

Το iteration 63 είναι αυτό από το οποίο θα δίδασκα: ο δεύτερος πάροχος είναι εκεί που φαίνονται οι υποθέσεις του πρώτου. Ο πλανητής του Λονδίνου είχε σχεδιαστεί να απέχει «μία εγγραφή στο μητρώο» από οποιαδήποτε πόλη. Η προσθήκη της Στοκχόλμης μετέτρεψε το νόμισμα του TfL, τη ζώνη ώρας του, τη χώρα των σταθμών του, τα φίλτρα μέσων που σέβεται, ακόμη και την ελληνική πρόθεση, σε πεδία. Εκείνη η αναδιάρθρωση ήταν το πραγματικό παραδοτέο· η Στοκχόλμη, η Νέα Νότια Ουαλία και η Ελβετία είναι αυτά που έκανε φτηνά. Η Ελβετία απάντησε και σε μια δική μου ερώτηση — «δεν θα έπρεπε να εμφανίζεται και σε άλλους τύπους σχεδίου;» — με ελβετικό επιχείρημα: τα υπεραστικά τρένα, τα PostBus και τα πλοιάρια στις λίμνες δεν θέλουν κράτηση, οπότε εκεί εμφανίζεται και στα σχέδια Τρένο, Λεωφορείο και Πλοίο. Και οι ελβετικοί σταθμοί δεν κουβαλούν χώρα, επειδή τα αναγνωριστικά τους βάζουν τα λεωφορεία του Λιχτενστάιν στην Ελβετία. Μια κάρτα που λείπει δεν ισχυρίζεται τίποτα· μια λάθος κάρτα ονομάζει χώρα.

Σκέλος 5 — Το αληθινό ταξίδι (iterations 64–68)

Πέντε iterations σε πέντε μέρες, το καθένα αναδιαμορφωμένο από μία αληθινή εγγραφή.

Το iteration 64 ξεπλήρωσε έναν έλεγχο ασφαλείας που χρωστούσαμε δέκα iterations (το handoff έλεγε έξι· το εύρος της προηγούμενης αναφοράς έλεγε δέκα — μέτρα από το αρχείο, όχι από την αφήγηση). Το χειρότερο εύρημά του: η επανάληψη της ανάγνωσης ενός προωθημένου email διέγραφε και ξανακαταχωρούσε κάθε σχέδιο που είχε φτιάξει ποτέ, πράγμα που, τώρα που τα σχέδια κουβαλούσαν ψήφους, σχόλια και ακυρώσεις, τα έσβηνε όλα. Στο ίδιο iteration, ένα bug ορθότητας που βρέθηκε στον δρόμο: η τιμή 19,99 απορριπτόταν επί πέντε μέρες, επειδή ένας έλεγχος στρογγυλοποίησης που φαίνεται προφανώς σωστός είναι ψευδής για αυτήν. Και μια νέα Αρχική: το επόμενο ταξίδι σου ως boarding pass, οι αριθμοί σου δίπλα του, πλακίδια για όσα δεν έχεις δοκιμάσει ακόμη.

Μετά έφτασε ένα αληθινό email. Η Aegean επανεξέδωσε το εισιτήριό μου μετά από αναβάθμιση, και ο εισαγωγέας καταχώρησε τις τέσσερις πτήσεις μου δεύτερη φορά. Η σύγκριση βρήκε έξι πραγματικές αλλαγές δίπλα σε καμιά δωδεκαριά που απλώς διαβάζονταν διαφορετικά, και τρία πράγματα που μια αφελής αντικατάσταση θα είχε καταστρέψει. Δύο iterations αργότερα, οι αλλαγές κράτησης βγήκαν ζωντανές: το email κρατιέται, συγκρίνεται με τις αποθηκευμένες πτήσεις — ποτέ με το παλιό email — και εφαρμόζεται μόνο ό,τι εγκρίνεις, με Αναίρεση σε κάθε πτήση. Το τεστ αποδοχής ήταν η ίδια επανέκδοση, ξανασταλμένη. Και μετά το ίδιο email ήρθε δεύτερη φορά, συγκρίθηκε με την ήδη ενημερωμένη γραμμή, και θα είχε κάνει την κλάση της αναβάθμισης τον ναύλο με τον οποίο υπολογίζονται τα μίλια. Ο έλεγχος τώρα ξανατρέχει τη συγχώνευση πάνω στο ίδιο της το αποτέλεσμα. Οι αεροπορικές ξαναστέλνουν· μια ενημέρωση σωστή την πρώτη φορά μπορεί να είναι λάθος τη δεύτερη.

Το iteration 66 έφερε και τον καιρό σε κάθε μέρα του ταξιδιού, για το μέρος όπου τελειώνει η μέρα, με πορτοκαλί για δυνατό άνεμο και έντονη βροχή, γιατί αυτά καθυστερούν μια ανταπόκριση. Η αληθινή πρόβλεψη για την Αθήνα στις 2 Οκτωβρίου μου έδειξε ριπές 77 χλμ./ώρα την ίδια μέρα. Το iteration 68 πρόσθεσε πρόβλεψη ανά ώρα με ένα πάτημα και προτάσεις για τη βαλίτσα στη λίστα Προετοιμασίας — που, στην πρώτη επαφή με το ταξίδι, μου πρότεινε αντιανεμικό για μια δίωρη αναμονή μέσα στο αεροδρόμιο της Αθήνας. Διορθώθηκε: μετράει μόνο το μέρος όπου τελειώνει κάθε μέρα.

Και μετά το Bring It Home: πέντε τυπικά πράγματα να πάρεις μαζί σου από έναν τόπο, και πού τα αγοράζουν οι ντόπιοι, πάνω στην ίδια μηχανή με το B-Side. Το δοκιμαστικό script πήρε το πρώτο αποτέλεσμα του Mapbox για το «Chiang Mai» και έβγαλε μια άψογη λίστα για το Chiang Rai. Μια μηχανή επαναχρησιμοποιείται· οι κρίσεις που έχουν καλωδιωθεί μέσα της, όχι.

Σκέλος 6 — Γρήγορο, και μετά προσωπικό (iterations 69–73)

Ένας φίλος που φτιάχνει λογισμικό για να ζει είπε ότι το site «φαίνεται αργό». Μία κεφαλίδα απάντησης το εξήγησε: ο κώδικας έτρεχε στην Ουάσινγκτον ενώ η βάση καθόταν στην Ιρλανδία, και κάθε ερώτημα περνούσε τον Ατλαντικό δύο φορές. Ήδη από το iteration 67 οι συναρτήσεις μετακόμισαν στο Δουβλίνο και οι δεκαοκτώ διαδοχικές αναμονές της σελίδας του ταξιδιού έγιναν τρία στάδια. Το iteration 69 πέρασε μετά από είκοσι ακόμη σημεία του ελέγχου, καθένα με έναν αριθμό πριν και μετά, και έβαλε τις δημόσιες σελίδες στο CDN· το 70 έκανε το ίδιο για το blog. Η σελίδα του ταξιδιού έπεσε από 1.075 KB JavaScript στα 598. Οι δημόσιες σελίδες φτάνουν πλέον σε περίπου 0,13 δευτερόλεπτα.

Η μετακόμιση του blog έβγαλε στην επιφάνεια το πιο αθόρυβο bug του τόμου. Οι κλήσεις «ξέχνα αυτές τις σελίδες» από το iteration 69 ονόμαζαν τη διαδρομή χωρίς τον φάκελό της, άρα δεν ταίριαζαν με τίποτα — μεταγλωττίζονταν, έτρεχαν χωρίς σφάλμα, και δεν ανανέωναν τίποτα. Μια κλήση που ξεχνάει με κλειδί πετυχαίνει είτε υπάρχει το κλειδί είτε όχι.

Το iteration 71 γύρισε από το Λονδίνο με τρία specs κάτω από μία ιδέα: ένα ταξίδι δεν είναι μία διαδρομή που κάνουν όλοι μαζί. Μια μεγάλη ενδιάμεση στάση ρωτάει πλέον «θα βγεις στην πόλη;» και καταχωρεί ένα κανονικό σχέδιο αν πεις ναι. Το «Έχασες ή άλλαξες την πτήση;» υπάρχει επειδή έχασα την A3 608 στις 2 Οκτωβρίου και η Aegean δεν έστειλε τίποτα που να αξίζει να προωθηθεί. Και ένα σχέδιο μπορεί να αφορά μόνο μερικούς από τους ταξιδιώτες — πράγμα που το iteration 72 έβαλε μετά κάθε αναγνώστη γεγονότων να σέβεται. Πριν από αυτό, σε μια συνάντηση φίλων της οποίας η πρώτη κλεισμένη πτήση ξεκινούσε από το Λονδίνο, τρεις φίλοι που ξεκινούσαν από την Ελλάδα «επισκέπτονταν» την Ελλάδα, και στους πέντε γινόταν ερώτηση για τη Σερβία, από την οποία περνούν οδικώς οι δύο. Τώρα η Προετοιμασία ρωτάει τον καθένα για τη δική του διαδρομή, και οι κάρτες χωρών λένε ποιος μένει, ποιος πάει, ποιος περνάει.

Το βράδυ που βγήκε το 72, το χρησιμοποίησαν άλλοι άνθρωποι. Τα email εγγραφής δύο φίλων κατέληξαν στα Ανεπιθύμητα, επειδή το domain δεν είχε εγγραφή DMARC. Η σελίδα διαχείρισης για μια δοκιμάστρια έδειχνε τους δύο συνιδιοκτήτες του ταξιδιού της με «0 ταξίδια», και το ίδιο κοίταγμα έδειξε ότι η χρήση AI όλων είχε παγώσει από την 1η Οκτωβρίου — μια ανάγνωση είχε σταματήσει σιωπηλά στη σελίδα των χιλίων γραμμών της βάσης. Και η δοκιμάστρια, προσθέτοντας ένα σχέδιο με AI, συμπλήρωσε όλη τη φόρμα, στάλθηκε «στο B-Side» να απαντήσει τις ερωτήσεις του, και γύρισε για να τα ξαναγράψει όλα. Το ένα της βράδυ έβγαλε τέσσερις διορθώσεις που κανένα fixture, καμία ανασκόπηση και καμία δική μου βόλτα δεν θα μπορούσε να βρει.

Έτσι το iteration 73 χτίστηκε ανάποδα: πρώτα από τα δεδομένα. Από τους πρώτους έντεκα που έπαιζαν το Been There Done That, οι επτά είχαν τσεκάρει μόνο χώρες, και κάθε άξονας του ραντάρ μετρούσε πόλεις ή μέρη, άρα το διάγραμμά τους ήταν μια κουκκίδα είτε είχαν δει μία χώρα είτε πενήντα έξι. Μια όψη Ταξιδιώτη μετράει πλέον αυτό που κάνει πραγματικά ο κόσμος — ηπείρους, τις δέκα χώρες και τις δέκα πόλεις με τους περισσότερους επισκέπτες (δέκα, γιατί τόσες δημοσιεύει η πηγή), το ορόσημο των εκατό χωρών. Και τα δύο παιχνίδια απέκτησαν το Συγχρονισμός με τα παλιά μου ταξίδια: είχες ήδη πει στην εφαρμογή πού πήγες, όταν σχεδίαζες το ταξίδι· τα παιχνίδια απλώς δεν είχαν ρωτήσει ποτέ. Και μετά μια βόλτα με ολοκαίνουργιο λογαριασμό, σε πλάτος κινητού, στα ελληνικά, βρήκε ένα «0%» για την πρώτη χώρα, ακριβώς στην οθόνη που υπάρχει για να σε κάνει να νιώσεις καλά. Τώρα γράφει «<1%».

Τα νούμερα

Είκοσι τέσσερα iterations σε τριάντα δύο μέρες, εκδόσεις 1.50 έως 1.73. Τριάντα εννέα κόμβοι της Star Alliance με επιμελημένα δεδομένα ανταποκρίσεων, καθένας με δημόσια σελίδα. Πέντε πόλεις και μία χώρα με συνδεδεμένους πλανητές συγκοινωνιών: Λονδίνο, Στοκχόλμη, Σίδνεϊ, Παρίσι, Σιγκαπούρη, και ολόκληρη η Ελβετία. Ένα αληθινό ταξίδι, πέντε ημερών, που έβγαλε περισσότερες διορθώσεις από κάθε spec του τόμου. Η σελίδα του ταξιδιού από 460 KB στα 139. Δημόσιες σελίδες σε περίπου 0,13 δευτερόλεπτα. Μία πρόβλεψη «υψηλής βεβαιότητας» δυόμισι ώρες πριν, που έπεσε έξω κατά 93 λεπτά εξαιτίας μιας θυρίδας ελέγχου εναέριας κυκλοφορίας που κανείς δεν μπορούσε να δει τόσο νωρίς. Μία τιμή, 19,99, που απορριπτόταν επί πέντε μέρες.

Τέσσερα πράγματα που μου έμαθε αυτός ο τόμος

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

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

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

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

Όλος ο τόμος σε μία σελίδα

Για μοιράσιμο, και για τον τοίχο:

Ολόκληρο το χρονολόγιο των 24 iterations του τρίτου τόμου ως ενιαίο οριζόντιο πόστερ, σε έξι εποχές

Υπάρχει και boarding pass για κάθε iteration — η τράπουλα φτάνει πλέον και στα εβδομήντα τρία — που θα συνεχίσω να ανεβάζω όσο προχωράει το ταξίδι.

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

Comments

No comments yet — be the first.