I difetti di Magento

È quasi un anno che sto lavorando a tempo pieno su un e-commerce basato su Magento. Quando ho iniziato non lo conoscevo, e quindi mi limitavo a leggere in giro che fosse la migliore piattaforma open source per vendita online disponibile sul mercato, e ci ho creduto. D'altronde sulla carta sembrava ottima, moltissime funzionaltà, supporto multilingue, multivaluta e multi-negozio, gestione di migliaia di prodotti, newsletter, coupon, etc etc, insomma se ci si limitava a leggere le specifiche sembrava il software perfetto.

Ora dopo la mia esperienza, posso dire che in futuro eviterò a tutti i costi di usare Magento, ne sono rimasto così deluso che scrivo anche questo post per ricordarmi tutti i difetti che ha perchè sarebbe impossibile tenerli a mente:

  • Magento è lento. Ma molto lento, e non è lento perchè hai caricato i tuoi 1000 prodotti, è lento pure quando è ancora vuoto. Questo per la sua progettazione astrusa tramite configurazione con tonnellate di XML che estendono XML che sovrascrivono XML, che Magento deve leggere ad ogni richiesta.
  • Il database di Magento è un'offesa all'intelligenza umana. Centinaia di tabelle, 132 (centotrendadue!) solo per gestire il catalogo! L'idea di usare EAV non era sbagliata, ma è stata implementata malissimo, con una tabella per ogni tipo di valore (stringe, decimali, date, testo), facendo diventare il database illegibile, ma anche inusabile. Impossibile scrivere una query, sono necessarie decine di join.
  • Per aggirare questa lentezza, Magento ha un sistema di cache di vari livelli, che però non fa altro che complicare le cose. C'è la cache per i prezzi dei prodotti, la cache per gli attributi dei prodotti, la cache per la ricerca, la cache per la giacenza. Poi c'è la cache delle pagine, della configurazione etc etc. Tutto ciò funziona così male che sono nati migliaia di plugin per il caching, tutti migliori delle soluzioni integrate, ma che aggiungono un altro livello di cache! Questo significa che quello che vede il cliente sul sito, potrebbe risultare sbagliato e non ancora aggiornato. E tra l'altro alcuni livelli di cache interni rallentano il sito invece che velocizzarlo! Nella mia esperienza la cache delle configurazioni e dei layout la tenevo disablitata perchè rallentava il sito.
    Quando viene rilasciata una modifica del sito, oppure un aggiornamento dei prezzi di tutto il catalogo, bisogna svuotare tutti i livelli di cache, rischiando di bloccare il sito.
    C'è anche la possibilità di utilizzare il catalogo flat, invece che quello con EAV, ma questo può essere fatto solo in fase di installazione iniziale, perchè poi qualsiasi modifica o integrazione viene fatta al sistema deve contare su questa scelta. Nel mio caso all'inizio non era stato scelto il catalogo flat, e viste le pesanti personalizzazioni che erano state fatte successivamente, non si poteva più tornare indietro.
  • Non c'è modo di default di filtrare tutti i prodotti in offerta. Assurdo per una piattaforma così avanzata e piena di funzioni, che un utente base non sia in grado di creasi la sua paginetta "Offerte".
  • I prezzi dei prodotti non vengono bloccati quando inseriti nel carrello, e neanche in fase di checkout! Questa è una vera assurdità che dovrebbe essere considerato un vero BUG. Se vengono modificati dei prezzi dei prodotti mentre gli utenti stanno facendo shopping, questi si vedranno modificato il totale del loro carrello. Non solo, se la modifica prezzi avviene poco prima che l'utente abbia finito il checkout, il malcapitato si vedrà addebitata una cifra diversa rispetto a quella che aveva visto nel carrello. Situazione capitata varie volte ai miei clienti.
  • Non c'è modo di avere nel backend un listino dei prodotti con il prezzo effettivo finale che stiamo praticando al cliente. Assurdo, l'amministratore del sito per vedere a che prezzo sta vendendo un prodotto, deve per forza usare il frontend pubblico, navigare qundi come un cliente e cercare il prodotto. Nel catalogo nel backend viene infatti mostrato soltanto il prezzo di partenza, non quello finale al netto di prezzi speciali e sconti! E' assurdo ma io ho dovuto sviluppare un listino parallelo che elenca tutti i prodotti col loro prezzo finale. E assurdo dell'assurdo, non c'è una funzione del framework che restituisca sempre il prezzo finale corretto di un prodotto! Nella logica dell'OOP, uno si aspetterebbe una funzione del tipo $product->getPrice(), ma no, non esiste (esiste ma non restituisce il prezzo finale corretto). Ho dovuto sviluppare io una funzione che gestisse bene i bundle e i prezzi speciali.
  • Bug ridicolo per un e-commerce che da solo dovrebbe bastare a sconsigliarne l'uso a chiunque: con Paypal a volte entrano ordini doppi, pagati una sola volta. Avete capito bene, se usate Magento, rischiate di regalare la merce ai vostri clienti. Auguri. Il bug è presente nella versione 1.x e anche nella versione 2.x e non è ancora stato risolto! Bug su github

Solo queste ultime due cose dovrebbero far desistere chiunque nell'utilizzare questa piattaforma così pachidermica nelle funzioni, ma ridicola nello svolgere quelle basilari.
Non ho menzionato molti altri difetti che uno sviluppatore potrà testare sulla propria pelle, come la delirante struttura delle cartelle, con annidamenti fino a 10 livelli, che rende frustrante la ricerca di un qualsiasi file, oppure l'elevato numero di files in generale, senza un motivo, e per finire la difficoltà nello scrivere delle estensioni.

Non sono l'unico che la pensa così, il web è pieno di critiche a questo software orribile:

Fuck you Magento
Magento Sucks
Top 5 annoying things in magento
The cons of magento
Why I hate magento 1
Your opinions on Magento , Mine stay away