Μετάβαση στο περιεχόμενο

Case study · Email

Πώς μειώσαμε το κόστος του Mailchimp

Μια επιχείρηση έστελνε newsletters μέσω Mailchimp για δώδεκα χρόνια. Το κόστος μεγάλωνε μαζί με τη λίστα. Της μεταφέραμε όλο το ιστορικό σε self-hosted πλατφόρμα ανοιχτού κώδικα, χωρίς απώλεια ενεργών δεδομένων.

Case studyEmail & open source12 χρόνια ιστορικού

Για δώδεκα χρόνια ο πελάτης έστελνε τα newsletters του μέσω Mailchimp. Η πλατφόρμα έκανε τη δουλειά της· το πρόβλημα δεν ήταν η ποιότητα, ήταν το κόστος και η ιδιοκτησία. Το αρχείο, οι συνδρομητές και ο λογαριασμός ήταν προσαρτημένα σε ένα εργαλείο που χρέωνε όλο και περισσότερο όσο μεγάλωνε η λίστα.

Μας ζήτησε να μειώσουμε το κόστος χωρίς να χάσει το ιστορικό ή τη λειτουργικότητα.

Από ένα ενοικιαζόμενο αρχείο σε μία self-hosted πλατφόρμα ανοιχτού κώδικα: ίδιες λειτουργίες, δικό του ιστορικό, προβλέψιμο κόστος.

Το πρόβλημα

Όχι επειδή το Mailchimp είναι κακό. Δεν είναι, και δεν είναι το θέμα. Το θέμα είναι ότι το αρχείο όλων όσων έχει δημοσιεύσει ποτέ μια επιχείρηση στους πελάτες της δεν πρέπει να είναι ενοικιαζόμενο. Αν κοπεί η συνδρομή, τα χρόνια των newsletters δεν γίνονται απλώς άβολα — χάνονται: οι σελίδες, οι εικόνες, το αρχείο του τι ειπώθηκε και πότε.

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

Μαζί με τον πελάτη θέσαμε τέσσερις όρους, όχι έναν:

Καμία απώλεια ενεργών δεδομένων.

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

Μικρότερο και προβλέψιμο κόστος.

Συντήρηση που δεν εξαρτάται από το ticket queue ενός vendor.

Το case study: τι κάναμε

Η δουλειά δεν ήταν «εξαγωγή, εισαγωγή, τέλος». Είχε τέσσερα μέρη, και το πρώτο ήταν να καταλάβουμε τι έπρεπε να μείνει ίδιο.

01

182
καμπάνιες

02

911
εικόνες (785 MB)

03

14.586
εγγραφές

04

13.034
ενεργοί συνδρομητές

Επιλέξαμε το Notifuse, μια πλατφόρμα με ανοιχτό κώδικα υπό Business Source License 1.1, και τη στήσαμε σε υποδομή που διαχειριζόμαστε για τον πελάτη. Κρατήσαμε fork στο v40.0, ώστε να μην υπάρχει χρέωση ανά συνδρομητή ή ανά λίστα.

01

Οι καμπάνιες

Κάθε καμπάνια έγινε επεξεργάσιμο πρότυπο στη νέα πλατφόρμα. Οι εικόνες αντιγράφηκαν από το CDN του Mailchimp σε αποθήκευση που ελέγχει ο πελάτης και κάθε σύνδεσμος ξαναγράφτηκε. Τίποτα δεν εξαρτάται πια από το αν το Mailchimp είναι προσβάσιμο.

02

Οι ημερομηνίες

Μια εγγραφή που δημιουργήθηκε σήμερα λέει «σήμερα». Ένα newsletter όμως γραμμένο το 2014 πρέπει να λέει 2014. Κάθε πρότυπο, κάθε σελίδα αρχείου και κάθε πρόχειρο broadcast φέρει πλέον την πραγματική ημερομηνία αποστολής του.

03

Οι συνδρομητές

Οι εγγραφές εισήχθησαν μέσω του API του Mailchimp και όχι μέσω CSV, γιατί το API ξέρει την κατάσταση κάθε μέλους — ένα φύλλο ξέρει μόνο τι υπήρχε στη στήλη όταν κάποιος πάτησε «εξαγωγή». Πέρασαν μόνο όσοι είχαν κατάσταση subscribed. Όσοι είχαν διαγραφεί, όσοι είχαν καθαριστεί από σκληρά bounces και όσοι δεν επιβεβαίωσαν ποτέ, έμειναν εκτός σκόπιμα.

Το να εισαγάγεις κάποιον που δήλωσε «όχι» σαν να είχε πει «ναι» είναι το μόνο λάθος που δεν διορθώνεται.

04

Το αρχείο

Το κομμάτι που είχε τη μεγαλύτερη σημασία, και το μόνο που δεν έδινε δωρεάν κανένα εργαλείο αποστολής. Το Mailchimp δίνει σε κάθε καμπάνια μια δημόσια σελίδα, για πάντα — η διακριτική λειτουργία που την προσέχεις μόνο όταν λείπει. Η πλατφόρμα είχε ένα blog και μια κονσόλα· καμία δεν είναι αυτή η σελίδα. Οπότε τη φτιάξαμε:

Το /archive/<workspace>/ παραθέτει κάθε καμπάνια που εστάλη ποτέ, με τη νεότερη πρώτη, ομαδοποιημένη ανά έτος.

Το /archive/<workspace>/<slug> σερβίρει την καμπάνια από το ακριβές πρότυπο και την έκδοση που εστάλη — δείκτης, όχι αντίγραφο.

Οι σελίδες παράγονται μέσω του καναλιού web, χωρίς το pixel παρακολούθησης ανοίγματος.

Υπάρχει γραμμή εργαλείων με Εγγραφή, Προηγούμενα τεύχη, RSS και Μετάφραση.

Το αποτέλεσμα

Το αποτέλεσμα δεν είναι απλώς ένα διαφορετικό λογότυπο στο footer.

01

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

02

Ίδια λειτουργικότητα. Αποστολή, επεξεργάσιμα πρότυπα, αρχείο, εγγραφή, RSS και μετάφραση. Η διαφορά είναι ποιος ελέγχει το backend, όχι τι μπορεί να κάνει ο χρήστης.

03

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

04

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

Τι χρειάστηκε να λύσουμε

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

Ένα εισαγωγικό σε μια γραμματοσειρά. Το Mailchimp είχε κωδικοποιήσει τα εισαγωγικά μέσα σε style ως &quot;. Ο parser MJML αποκωδικοποιεί την οντότητα πριν διαβάσει το attribute, οπότε το εισαγωγικό έκλεινε πρόωρα την τιμή.

Έλεγχος σε bytes, όχι χαρακτήρες. Ένα ελληνικό preview 148 χαρακτήρων είναι 296 bytes, και το API απορρίπτει ό,τι ξεπερνά τα 255.

Μια κάθετος σε έναν τίτλο. Ο διαχωρισμός εξόδου SQL με | είναι μια χαρά, μέχρι μια καμπάνια να λέγεται ΧΡΩΜΑ || ΔΙΑΥΓΕΙΑ || ΕΥΚΡΙΝΕΙΑ.

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

Γιατί open source

Το Notifuse διανέμεται με την Business Source License 1.1: η παραγωγική χρήση επιτρέπεται, αλλά μια χούφτα «Licensed Features» απαιτούν πληρωμένο κλειδί. Σεβόμαστε αυτό το όριο — το fork μας μένει στο v40.0 και αρνηθήκαμε την αναβάθμιση σε 42.1 εν μέρει επειδή προσθέτει έκτο Licensed Feature.

Το open source δεν σημαίνει «μηδενικό κόστος». Σημαίνει ότι το κόστος είναι προβλέψιμο και ο έλεγχος δεν ανήκει σε έναν vendor.

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

Το fork είναι δημόσιο, με το ημερολόγιο κατασκευής, τα αδιέξοδα και τους λόγους: github.com/agelospanagiotakis/notifuse.

Πώς να φύγετε από το Mailchimp χωρίς να χάσετε δεδομένα

Αν το newsletter archive σας ζει σε μια κλειστή πλατφόρμα, το ερώτημα δεν είναι μόνο πόσο κοστίζει τον μήνα. Είναι τι θα μείνει δικό σας αν αύριο αλλάξει η τιμή, κλείσει ο λογαριασμός ή χρειαστείτε μια λειτουργία που ο vendor δεν έχει στο roadmap του.

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

01

Πριν φύγετε

Καταγράψτε τι έχετε. Καμπάνιες, πρότυπα, εικόνες, λίστες, custom fields, tags, automations, φόρμες και integrations.

Ελέγξτε τις καταστάσεις των συνδρομητών. Το subscribed δεν είναι το ίδιο με το unsubscribed, το cleaned ή το pending.

Κατεβάστε τα assets. Οι εικόνες που σερβίρονται από το CDN του vendor δεν είναι δικές σας αν αύριο κλείσει ο λογαριασμός.

Ελέγξτε τι θα σπάσει. Κάθε integration, form και link πρέπει να δοκιμαστεί πριν κλείσει η παλιά πλατφόρμα.

02

Κατά τη μετανάστευση

Χρησιμοποιήστε το API, όχι μόνο CSV, όπου υπάρχει. Το API μεταφέρει την κατάσταση και τα metadata, όχι μόνο τη στήλη του email.

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

Στήστε domain authentication (SPF, DKIM, DMARC) πριν την πρώτη αποστολή.

Δοκιμάστε με seed addresses και ελέγξτε τα bounces πριν στείλετε σε πραγματικό κοινό.

03

Μετά

Ελέγξτε ότι όλα έφτασαν. Συγκρίνετε αριθμούς, δείγματα και παλιά links. Μια οθόνη που λέει «ολοκληρώθηκε» δεν είναι απόδειξη.

Κρατήστε ένα αντίγραφο ασφαλείας και ένα σχέδιο επιστροφής για το διάστημα της μετάβασης.

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

Έχετε ένα archive ή μια πλατφόρμα που σας κοστίζει πολλά;

Δείτε πώς μπορεί να γίνει και στο δικό σας project.

Μιλήστε μαζί μας