Recenziile despre Odoo sunt scrise fie de cei care o vând, fie de cei care au deschis demo-ul douăzeci de minute. Textul acesta nu e niciuna dintre variante. Urmează cifre din sisteme care rulează zilnic: un magazin cu un catalog de șase cifre, patruzeci de vitrine într-o instanță, treceri de versiune cu date reale. Unde e rău, scrie că e rău.
Ce duce fără să se plângă
Mai întâi: dimensiunea nu e problema pe care lumea o crede. Un catalog de o sută zece mii de produse trăiește în Odoo fără dramă - ORM-ul îl duce, back-office-ul îl duce, depozitul îl duce. Patruzeci de vitrine rulează într-o singură instanță: o bază, un deploy, un singur loc de patch-uit. Aș construi la fel din nou, pentru că alternativa înseamnă patruzeci din toate.
Actualizările se întâmplă și ele. Versiunile 15 până la 19 în producție, uneori două deodată pe proiecte diferite: un client nu se mută doar pentru că a apărut un release. Datele supraviețuiesc unui upgrade. Ce nu supraviețuiește de la sine este codul dumneavoastră - și acesta e prețul onest al personalizării, nu un defect.
Unde începe să se împiedice
Prima care nu mai scalează este căutarea. Căutarea full-text din Postgres peste un catalog de șase cifre, cu filtre și fațete, încetinește într-un fel pe care niciun index nu îl repară: în cel mai rău moment o căutare dura opt secunde, în timp ce de cealaltă parte a tejghelei aștepta depozitul. Mutarea căutării în Elasticsearch a adus-o la o secundă - și asta e rescriere, nu o bifă în setări.
A doua este partea de front-end. Odoo livrează un site care pornește de la ideea că ați putea porni oricând magazin, chat, forum și editor, iar browserul plătește această presupunere pe fiecare pagină. Chiar și după ce a fost tăiat tot ce unei pagini de prezentare nu îi trebuie, pe o pagină a cărei treabă e să afișeze text ajunge jumătate de megabyte de JavaScript comprimat.
Este amânat, nu blocant, așa că primul ecran e rapid dacă te ocupi de asta. Dar „amânat” nu înseamnă „inexistent”: se descarcă, se parsează și se execută și pe un telefon cu procesor slab. La Core Web Vitals, diferența dintre un site Odoo „așa cum a venit” și unul demontat este diferența dintre roșu și verde.
Cât costă de fapt un upgrade
Un upgrade al unui Odoo gol este un weekend. Un upgrade al unui Odoo cu modulele dumneavoastră este un proiect, iar estimarea depinde de un singur lucru: cât din ce s-a construit stă în cod pe care îl controlați. Studio și automatizările făcute din clicuri sunt partea scumpă - nu pot fi citite ca un diff și nu pot fi verificate înainte de apăsarea butonului.
Procedura care funcționează e plictisitoare. Fiecare upgrade începe cu o rulare pe staging cu o copie a datelor de producție - toată baza, nu un eșantion, pentru că se strică mereu pe rândul la care nu se aștepta nimeni. Apoi lista de stricăciuni se repară în module, nu în bază. Apoi aceeași rulare se repetă până devine plictisitoare. Abia după aceea se mută sistemul viu.
Aceste trei cifre sunt ordinul de mărime al sistemelor din care vin notele. Nu sunt recorduri - există instalări Odoo mult mai mari. Este mărimea la care setările implicite nu mai ajung și fiecare decizie începe să aibă un preț.
Patru lucruri care nu sunt în manual
Unele lucruri se învață doar pierzând o zi pe ele. HTML-ul gata al unei pagini de site se ține în cache o oră: modificați o înregistrare în back-office, pagina nu se schimbă, și plecați să căutați o eroare care nu există. Se repară cu o linie care golește cache-ul când se schimbă conținutul dumneavoastră - dar trebuie să știți că acel cache există.
O constrângere declarată în vechiul fel, prin _sql_constraints, este ignorată în tăcere în Odoo 19: modulul se instalează, logul e curat, iar în bază nu există nicio constrângere. Dublurile vin mai târziu și pe nesimțite. Un script adăugat în bundle-ul de front-end poate să nu ruleze niciodată: ajunge în bundle-ul lazy, care sosește după DOMContentLoaded - evenimentul pe care îl așteaptă listener-ul s-a petrecut demult.
Iar un modul poate fi în listă, descris în documentație, și tot să nu se instaleze: modulele Enterprise apar în Community ca substituenți marcați ca neinstalabili. Appointments e unul dintre ele - de aceea pagina de programări de pe acest site este un modul propriu, nu o bifă.
Suportul și ce îl înlocuiește
Suportul este lucrul pe care l-aș schimba primul. Când problema e la Odoo, așteptați - și așteptați cu dovezi: loguri, măsurători, aceeași întrebare pusă de trei ori. Pe un proiect, o limită a platformei a făcut ca Googlebot să adune 429-uri luni la rând, magazinele au ieșit din index, și au trebuit trei runde până s-au ridicat limitele. Povestea e scrisă pe larg în altă parte, și este cel mai corect reproș care i se poate aduce lui Odoo.
Același an e salvat de celălalt capăt al aceluiași sistem: arhitectura nu trebuie aprobată de nimeni. Căutarea a plecat în Elasticsearch pentru că așa am decis. Front-end-ul e subțire pentru că l-am demontat. Pagina de programări există pentru că modulul a fost scris într-o seară. Într-un sistem închis fiecare dintre acestea e un tichet; aici e un commit.
Cui i se potrivește și cui nu
Odoo vi se potrivește dacă aveți nevoie de un singur sistem pentru toată firma și aveți - sau puteți angaja - pe cineva care scrie cod. Se potrivește prost dacă vreți ca totul să meargă din cutie și să nu fie atins niciodată: nu asta oferă o platformă deschisă. Raportarea consolidată peste zece entități juridice, verticalele industriale certificate, o licitație care cere un furnizor din cadranul Gartner - nu sunt luptele ei.
Dacă cântăriți chiar acum, nu vă ajută încă o recenzie. Vă ajută o jumătate de oră cu ecranul și cifrele dumneavoastră: ce merge încet, ce s-a blocat, cât ar costa schimbarea. Această jumătate de oră este gratuită, iar la final vă spun sincer dacă sarcina e a mea.
Alegeți nu doar sistemul, ci și pe cine îl va lucra? Partener Odoo sau dezvoltator independent: care e diferența cu adevărat.