SellTrove is in production, processing real transactions, serving real sellers. It also has decisions baked into its architecture that I would make differently with the benefit of production experience.
What I would change: the data model for product variants. The current design handles the common cases (size, colour) elegantly. It handles unusual variant structures (bundle products, products with conditional options) awkwardly. A more flexible attribute-value model would have cost more to build initially and saved significant complexity in edge cases.
What I would not change: the decision to start with a Laravel monolith rather than microservices. The extraction of services as we identified genuine reasons to separate them has been cleaner than a premature microservices split would have been.
What I am glad I did from day one: the financial code rules (idempotency, audit logging, integer arithmetic, daily reconciliation). Not a single financial discrepancy in production. The cost of those rules was measured in development hours. The alternative cost would have been measured in user trust.
Build with intention. Document the decisions you made and why. Revisit them as you learn. This is how systems improve.
— Dick Bassey | DevDick | 2026