Τον περασμένο χρόνο, τόσο το Codex όσο και το Sora γνώρισαν ταχεία υιοθέτηση, με τη χρήση να ξεπερνά γρήγορα τις αρχικές μας προσδοκίες. Έχουμε παρατηρήσει ένα σταθερό μοτίβο: οι χρήστες βουτούν, βρίσκουν πραγματική αξία και στη συνέχεια συναντούν όρια ρυθμού.
Τα όρια ρυθμού μπορούν να βοηθήσουν στην εξομάλυνση της ζήτησης και στη διασφάλιση δίκαιης πρόσβασης. Ωστόσο, όταν οι χρήστες αποκομίζουν αξία, το να συναντούν μια οριστική διακοπή μπορεί να είναι απογοητευτικό. Θέλαμε οι χρήστες να έχουν έναν τρόπο να συνεχίσουν, και παράλληλα να προστατεύουμε την απόδοση του συστήματος και την εμπιστοσύνη των χρηστών στην προσέγγισή μας.
Για να επιλύσουμε αυτό το ζήτημα, δημιουργήσαμε μια μηχανή πρόσβασης σε πραγματικό χρόνο που μετρά τη χρήση. Ένα από τα επίπεδα σε εκείνη τη μηχανή είναι η δυνατότητα αγοράς μονάδων. Όταν οι χρήστες υπερβαίνουν τα όρια ρυθμού τους, οι πιστώσεις τούς επιτρέπουν να συνεχίσουν να χρησιμοποιούν τα προϊόντα μας, μειώνοντας το υπόλοιπο των μονάδων τους.
Κάτω από αυτό υπάρχει ένα σύνθετο σύστημα που συνδυάζει όρια, παρακολούθηση χρήσης σε πραγματικό χρόνο και υπόλοιπα μονάδων σε ένα ενιαίο μοντέλο πρόσβασης. Αυτή η ανάρτηση εξηγεί γιατί η κλιμάκωση του Codex και του Sora απαίτησε την επανεξέταση του ελέγχου πρόσβασης, πώς ένα αποδεδειγμένα σωστό σύστημα σε πραγματικό χρόνο συνδυάζει όρια ρυθμού και μονάδες ανά αίτημα, και πώς αυτή η βάση πλέον επιτρέπει επιπλέον πρόσβαση και για τα δύο προϊόντα.
Κοιτάζοντας το ευρύτερο πλαίσιο, τα παραδοσιακά μοντέλα πρόσβασης τείνουν να επιβάλλουν μια επιλογή:
- Τα όρια ρυθμού μπορεί να είναι χρήσιμα στην αρχή, αλλά αφήνουν τους χρήστες με κακή εμπειρία όταν τα εξαντλούν: «επιστρέψτε αργότερα»
- Η τιμολόγηση βάσει χρήσης είναι ευέλικτη, αλλά αφήνει τους χρήστες να πληρώνουν από το πρώτο token —δεν είναι ιδανική για την υποστήριξη της αρχικής διερεύνησης
Για το Codex και το Sora, κανένα από τα δύο δεν ήταν επαρκές από μόνο του. Αν απλώς αυξάναμε τα όρια ρυθμού, θα χάναμε σημαντικά στοιχεία ελέγχου της εξομάλυνσης της ζήτησης και της δικαιοσύνης, και θα εξαντλούσαμε τη δυναμικότητα για να τους εξυπηρετήσουμε όλους. Αν βασιζόμασταν αποκλειστικά στην ασύγχρονη τιμολόγηση βάσει χρήσης, θα προκαλούσαμε καθυστερήσεις, υπερβάσεις ή προβλήματα συμφωνίας —ακριβώς τα είδη προβλημάτων που οι χρήστες παρατηρούν όταν είναι πιο αφοσιωμένοι.
Αυτό που χρειαζόμασταν, αντίθετα, ήταν ένα ενιαίο υβριδικό σύστημα που να συνδυάζει όρια σε πραγματικό χρόνο με πρόσβαση πληρωμής ανά χρήση:
Αυτό το σύστημα έπρεπε:
- Επιβολή ορίων ρυθμού μέχρι να επιτευχθούν
- Απρόσκοπτη μετάβαση σε μονάδες μέσα στο ίδιο αίτημα
- Να λαμβάνει αυτή την απόφαση σε πραγματικό χρόνο
- Να έχει στιβαρή ακρίβεια και ελεγξιμότητα κατά την παρακολούθηση της κατανάλωσης μονάδων
Μία από τις βασικές εννοιολογικές αλλαγές που κάναμε ήταν να μοντελοποιήσουμε την πρόσβαση ως καταρράκτη αποφάσεων. Αντί να ρωτάμε «επιτρέπεται αυτό;», ρωτάμε «πόσο επιτρέπεται και από πού;» Όταν μετράται η χρήση, το σύστημα ακολουθεί την εξής σειρά:
Αυτό το μοντέλο αντικατοπτρίζει το πώς οι χρήστες βιώνουν πραγματικά το προϊόν. Τα όρια ρυθμού, τα δωρεάν προγράμματα, οι μονάδες, οι προωθητικές ενέργειες και τα εταιρικά δικαιώματα είναι όλα απλώς επίπεδα στην ίδια στοίβα αποφάσεων. Από την οπτική γωνία του χρήστη, αυτοί δεν «αλλάζουν συστήματα» —απλώς συνεχίζουν να χρησιμοποιούν το Codex και το Sora. Γι' αυτό οι μονάδες φαίνονται αόρατες: είναι απλώς ένα ακόμη στοιχείο στον καταρράκτη.
Αξιολογήσαμε πλατφόρμες τιμολόγησης και μέτρησης χρήσης τρίτων για τη διαχείριση της κατανάλωσης μονάδων. Είναι κατάλληλα για τιμολόγηση και αναφορές, αλλά δεν πληρούν δύο κρίσιμες απαιτήσεις:
Όταν ένας χρήστης φτάσει σε ένα όριο και έχει διαθέσιμες μονάδες, το σύστημα πρέπει να το γνωρίζει άμεσα. Η καταμέτρηση με βέλτιστη προσπάθεια ή καθυστέρηση εμφανίζεται ως απρόσμενοι αποκλεισμοί, ασυνεπή υπόλοιπα και εσφαλμένες χρεώσεις. Για διαδραστικά προϊόντα όπως το Codex και το Sora, οι αστοχίες αυτές καθίστανται εμφανείς και απογοητευτικές.
Χρειαζόμασταν επίσης να παρέχουμε διαφάνεια σε κάθε αποτέλεσμα:
- Γιατί ένα αίτημα επιτράπηκε ή αποκλείστηκε
- Πόση χρήση καταναλώθηκε
- Ποιοι περιορισμοί ή υπόλοιπα εφαρμόστηκαν
Αυτή η δυνατότητα έπρεπε να ενσωματωθεί στενά στη διαδικασία λήψης αποφάσεών μας, αντί να επιλυθεί μεμονωμένα σε μια ξεχωριστή πλατφόρμα τιμολόγησης βάσει χρήσης που έβλεπε μόνο ένα μέρος από όσα συνέβαιναν. Για να επιτρέψουμε στους χρήστες να έχουν πρόσβαση στα προϊόντα μας χωρίς να διακυβεύεται η εμπιστοσύνη, χρειαζόμασταν πλήρη έλεγχο της ορθότητας, του συγχρονισμού και της παρατηρησιμότητας. Αυτό μας ώθησε προς μια εσωτερική λύση.
Για να το υποστηρίξουμε αυτό, δημιουργήσαμε ένα κατανεμημένο σύστημα χρήσης και υπολοίπου, σχεδιασμένο ειδικά για αποφάσεις σύγχρονης πρόσβασης.
Σε υψηλό επίπεδο, το σύστημα:
- Παρακολουθεί τη χρήση ανά χρήστη, ανά λειτουργία
- Διατηρεί τα παράθυρα ορίου ρυθμού
- Διατηρεί υπόλοιπα μονάδων σε πραγματικό χρόνο
- Χρεώνει υπόλοιπα με ταυτοδυναμία μέσω ενός ασύγχρονου επεξεργαστή ροής
Κάθε αίτημα περνά από μία ενιαία διαδρομή αξιολόγησης που λαμβάνει μια απόφαση σε πραγματικό χρόνο σχετικά με το πόση χρήση επιτρέπεται, καταναλώνοντας συγχρονισμένα από τα όρια ρυθμού και, αν χρειαστεί, επαληθεύοντας ότι υπάρχουν επαρκείς μονάδες. Στη συνέχεια επιστρέφει ένα οριστικό αποτέλεσμα, ενώ διεκπεραιώνει τυχόν χρεώσεις μονάδων ασύγχρονα. Αυτό εξασφαλίζει συνεπή συμπεριφορά σε όλα τα προϊόντα και εξαλείφει τη διπλότυπη λογική σε όλες τις ομάδες.
Μία από τις βασικές αρχές σχεδιασμού αυτού του συστήματος είναι ότι πρέπει να μπορούμε να αποδείξουμε ότι η τιμολόγησή μας είναι σωστή. Αυτό αντικατοπτρίζει τις ρίζες της υποστήριξης μονάδων μας, που ξεκίνησαν με εταιρικούς πελάτες. Στο παραπάνω διάγραμμα συστήματος, έχουμε τρία ξεχωριστά σύνολα δεδομένων που συνδέονται όλα μαζί:
- Συμβάντα χρήσης προϊόντος: Τι πραγματικά έκανε ο χρήστης
- Συμβάντα δημιουργίας εσόδων: Τι χρεώνουμε τον χρήστη για τη χρήση του
- Ενημερώσεις υπολοίπου: Πόσο προσαρμόσαμε το υπόλοιπο μονάδων του χρήστη και γιατί
Αυτά τα σύνολα δεδομένων δεν είναι ένα τυχαίο παραπροϊόν. Στην πραγματικότητα, καθοδηγούν το σύστημα, με κάθε σύνολο δεδομένων να ενεργοποιεί το επόμενο. Ο διαχωρισμός μεταξύ του τι συνέβη, των σχετικών χρεώσεων και του τι χρεώσαμε μάς παρέχει τη δυνατότητα για ανεξάρτητο έλεγχο, επανάληψη και συμφωνία σε κάθε επίπεδο. Αυτός είναι ένας σκόπιμος συμβιβασμός, όπου δίνουμε προτεραιότητα στην αποδεδειγμένη ορθότητα, με αντάλλαγμα οι ενημερώσεις του υπολοίπου πίστωσης να καθυστερούν ελαφρώς. Πώς το καταφέραμε αυτό:
- Τα συμβάντα χρήσης προϊόντος δημοσιεύονται για κάθε δραστηριότητα χρήστη, είτε οδηγεί σε κατανάλωση μονάδων είτε όχι. Αυτό παρέχει ένα ίχνος ελέγχου για τη δραστηριότητα των χρηστών και μας επιτρέπει να εξηγήσουμε γιατί χρεώσαμε ή δεν χρεώσαμε μονάδες.
- Κάθε συμβάν φέρει ένα σταθερό κλειδί ταυτοδυναμίας, ώστε οι επαναλήψεις, οι επαναλήψεις ή οι επανεκκινήσεις εργαζομένων να μην μπορούν ποτέ να προκαλέσουν διπλή χρέωση σε ένα υπόλοιπο, κάτι που αποτρέπει τη διπλή χρέωση. Αυτό μας επιτρέπει επίσης να εκτελέσουμε μια μαζική συμφωνία για να επαληθεύσουμε την εργασία μας εκτός σύνδεσης.
- Κάνουμε ασύγχρονες (αλλά και πάλι σχεδόν σε πραγματικό χρόνο) ενημερώσεις υπολοίπου αντί για σύγχρονες ενημερώσεις, ώστε να δημιουργήσουμε ένα ίχνος ελέγχου. Ανεχόμαστε μια μικρή καθυστέρηση στην ενημέρωση του υπολοίπου του χρήστη, ώστε να μπορούμε να αποδείξουμε ότι το σύστημα λειτουργεί και να διαβεβαιώσουμε τους χρήστες μας ότι δεν τους τιμολογούμε λανθασμένα. Όταν αυτή η σύντομη καθυστέρηση μας κάνει να υπερβούμε το υπόλοιπο μονάδων ενός χρήστη, το επιστρέφουμε αυτόματα. Επιλέγουμε την αποδεδειγμένη ορθότητα και την εμπιστοσύνη των χρηστών έναντι της αυστηρής επιβολής.
- Μειώνουμε το Υπόλοιπο Μονάδων και καταχωρούμε μια εγγραφή Ενημέρωσης Υπολοίπου σε μία ενιαία ατομική συναλλαγή βάσης δεδομένων. Οι ενημερώσεις υπολοίπου σειριοποιούνται ανά λογαριασμό, ώστε οι ταυτόχρονες αιτήσεις να μην μπορούν ποτέ να ανταγωνίζονται για την κατανάλωση των ίδιων μονάδων. Η εγγραφή Ενημέρωσης Υπολοίπου περιέχει τόσο το ποσό χρέωσης όσο και την απόδοση στο συμβάν δημιουργίας εσόδων που προκάλεσε την ενημέρωση. Η ενσωμάτωση αυτού σε μία ενιαία συναλλαγή βάσης δεδομένων εγγυάται ότι διαθέτουμε ένα ίχνος ελέγχου για κάθε προσαρμογή στο υπόλοιπο μονάδων.
Όλη αυτή η αυστηρότητα υποστηρίζει έναν στόχο: να καταστήσει την πρόσβαση απλή και ασφαλή. Όταν οι άνθρωποι δημιουργούν ή γράφουν κώδικα, δεν θα πρέπει να χρειάζεται να αναρωτιούνται αν ένα αίτημα θα περάσει, αν θα χρεωθούν υπερβολικά ή αν το υπόλοιπό τους είναι ακριβές. Με το να διασφαλίζουμε ότι η χρήση, η τιμολόγηση και τα υπόλοιπα είναι αποδεδειγμένα σωστά, παρέχουμε στους χρήστες ένα σύστημα που δεν αποσπά την προσοχή από την εμπειρία τους. Αυτό είναι που μας επιτρέπει να αντικαθιστούμε τις οριστικές διακοπές με συνεχή πρόσβαση —και αυτό είναι που καθιστά τις μονάδες αξιοποιήσιμες κατά τη διάρκεια της πραγματικής εργασίας, όχι μόνο σε ένα τιμολόγιο.
Η κατευθυντήρια αρχή της προσέγγισής μας είναι η προστασία της δυναμικής των χρηστών. Κάθε αρχιτεκτονική απόφαση συνδέεται με ένα αποτέλεσμα που αφορά τον χρήστη: τα υπόλοιπα σε πραγματικό χρόνο αποτρέπουν περιττές διακοπές, η ατομική κατανάλωση αποτρέπει τη διπλή χρέωση και η ενοποιημένη λογική πρόσβασης διασφαλίζει προβλέψιμη συμπεριφορά. Το αποτέλεσμα είναι ότι οι άνθρωποι μπορούν να εργάζονται για μεγαλύτερο χρονικό διάστημα, να εξερευνούν πιο βαθιά και να προωθούν τα έργα τους περαιτέρω, χωρίς να αντιμετωπίζουν οριστικές διακοπές ή πρόωρες αλλαγές σχεδίων.
Όταν οι χρήστες είναι αφοσιωμένοι, το σύστημα θα πρέπει να τους βοηθά να συνεχίζουν, όχι να τους εμποδίζει. Τα όρια και οι μονάδες εξαφανίζονται στο παρασκήνιο.
Η δημιουργία αυτής της εμπειρίας απαιτούσε την επανεξέταση της πρόσβασης, της χρήσης και της τιμολόγησης ως ενός ενιαίου συστήματος και την ανάπτυξη υποδομής που θεωρεί την ορθότητα ως χαρακτηριστικό ενός προϊόντος πρώτης ποιότητας. Η ίδια βάση μπορεί να επεκταθεί σε περισσότερα προϊόντα με την πάροδο του χρόνου. Το Codex και το Sora είναι μόνο η αρχή.


