
Software & System Architecture
From PHP monoliths to cloud-native B2B SaaS platforms. 11 years of architectural practice, Master in Software Engineering, Lead Symfony and Lead Magento roles, now CTO at ACCENSEO.
My definition
Software and system architecture, in my practice, is the art of choosing the right boundaries between subsystems, the right contracts between them, and the right operational shape. It is where SOLID, design patterns, REST API design, and DDD meet the realities of cloud, observability, and team topologies. Good architecture makes a codebase grow linearly instead of exponentially; bad architecture turns every new feature into structural debt.
I practise architecture on 4 scales depending on context. Module: SOLID, hexagonal, domain-driven design. System: REST + async + event-driven, inter-service contracts, error handling. Platform: Turborepo monorepo, shared packages, multi-tenant Terraform environments. Ecosystem: B2B integration, external vendors, versioned contracts. 11 years of continuous practice, from PHP monoliths (Joomla, Zend, Symfony 2-7, Magento 1-2) to modern TypeScript SaaS (Next.js 16, Prisma, Payload CMS), with 28 references in the portfolio and the Master ESIEA Expert in Software Engineering as the theoretical foundation.

In 2026, architecture is entering a new phase: regulated vertical SaaS (clinical, defense, energy, accounting) rests on AI-native architectures where workflows are expressed as actions and constraints rather than screens.
The moat is no longer in the stack but in governed data + embedded workflows + deep integrations - exactly what Rob Saker analyses in AI is Eating Enterprise SaaS.
Architecture has become the most defensible technical bet a CTO can make: feature-driven, observability by default, traceable inter-service contracts, and module/core boundaries that survive upgrades.
My evidence
Anecdote 1 : Feature-driven architecture for the ACCENSEO accounting SaaS
When I started the ACCENSEO accounting SaaS in early 2025, I knew I would be the only person coding for 14 months on more than 200K lines of code, with a regulated domain that does not forgive shortcuts (PCG, CGI, 2026-2027 e-invoicing). The classic trap on this kind of codebase is to start with a technical-layer split (controllers / services / repositories) that becomes unmanageable past 30 modules. I needed an architecture that would hold for 2 years without structural debt.
I committed to a feature-driven architecture from the very first commit: 42 autonomous modules under `src/features/` (banking, invoicing, accounting, tax, payroll, AI assistant, reporting, legal, OCR...), each with its own components, hooks, services, models, and types. `src/app/` only holds Next.js routing, never business logic. On the data side, 91 Prisma models organised around domain entities (not around SQL tables), with 63 typed enums, and 6 differentiated roles controlled through Better Auth. Cross-feature contracts go through a single `index.ts` per feature that defines the consumable public surface - everything else stays internal to the module.
382 API routes generated, new features added in days rather than weeks, and the module/feature boundaries survived several major refactors (Next.js 16 upgrade, React 19 migration, Teledec Chrome extension addition) without any need to touch the overall structure.
What I validated on this project is that good architecture makes growth linear instead of exponential: at the 30th feature I was as fast as at the 5th. That is exactly the promise I have to keep on the next CTO scale-up role - and I have now stress-tested it solo, which makes the team transposition far more credible.
Anecdote 2 : Architecting the v2 of the European Sourcing extranet
The European Sourcing extranet was the central back-office of Europe's largest online tradeshow for promotional products - 15 interconnected sub-projects, a shared MySQL database of 15 GB across 97 tables, 7 languages, 800 suppliers, and some catalogues like SOL's carrying 15,000 variations for a single product. The v1, written in 2008-2013 on a homegrown PHP MVC framework, could not keep up anymore: every business addition cost more and more.
On March 14th, 2016, we started the v2 on Symfony 3.1, with PostgreSQL instead of MySQL, RabbitMQ for async messaging, and most importantly 2 shared bundles - ESCoreBundle (entities, auth, file system) and ESSourcingBundle (business logic) - to consolidate what the 15 sub-projects were duplicating. Core development was co-led with Thomas C. on v2, inside a tight 4-developer crew where I was the principal author of v1 and the Supplier BO. To industrialise the admin screens, I built a generic EntityList system with configurable columns, bulk actions, per-row actions, and pagination. On the form side, I shipped more than 70 Symfony Form Types covering products, variants, static and dynamic markings with profiles, simple/multiple/group attributes, categories, keywords, labels with synonyms, subscriptions, and import/export workflows.
The v2 ran for more than 5 years in production (2016-2021), powering 37 automated supplier connectors, and the pattern library laid down on this project was reused by every downstream app without ever requiring an architectural rewrite.
This project taught me how to share without coupling: the shared bundles stayed stable while each sub-project evolved at its own pace. That is the pattern I now replay on the ACCENSEO Turborepo monorepo and that I will impose on the next scale-up platform - the cost of good factoring is low, the cost of bad factoring is toxic over 10 years.
Anecdote 3 : Multi-store Magento Enterprise architecture at Fleurance Nature
On the Fleurance Nature refactor in 2017 at Smile, I inherited a Magento Enterprise Edition 1.10 platform packed to the brim: 1,040 modified PHP files, 60 accumulated custom modules, 3 storefronts (Fleurance Nature France, International, Mincifine) to serve with a shared EAV pricing matrix across 4 customer groups (anonymous, general, loyalty subscribers, works councils) - meaning 12 active pricing combinations. The specs themselves went through 7 versions in 2 months (from 30 to 50 pages) as we discovered the business rules buried in the legacy code.
I refused the big-bang temptation. I drove a clean backend/frontend split across the 3 storefronts, backported ElasticSearch onto Magento EE 1.10 to replace Solr (autocomplete, faceted navigation, virtual categories), and enforced on every custom module the Observer/Strategy patterns to stay PCI-aware without touching the Magento core. To secure releases, I rolled out a full regression suite across the 3 sites before every deployment, because a single module change could ripple through 12 pricing matrices.
The refactored platform held for more than 5 years in production without any further architectural rewrite, zero major security incident during and after the migration, and the Varnish cache stayed operational throughout the process despite the live-site sensitivity.
What I learnt on this project is that module/core boundaries are what makes a codebase survive vendor changes and version upgrades - not the quality of the code itself. On every CTO advisory audit I now run at ACCENSEO, that is the first thing I look at in the customer codebase.
My self-critique
Level Expert. 11 years of architectural practice, from PHP monolith to modern TypeScript SaaS through ESB integration platforms. Master ESIEA as theoretical foundation, 28 portfolio references as practice volume.
Confirmed coverage across the 4 scales:
- module: SOLID, DDD, hexagonal
- system: REST, async, event-driven, partial CQRS
- platform: Turborepo monorepo, shared packages, multi-env Terraform
- ecosystem: B2B integration
What still needs strengthening: pure event sourcing and large-scale service mesh.
Core to my CTO credibility. Without solid architecture, the product does not hold growth, the team does not scale, and debt becomes existential within 18 months. It is also what distinguishes the operational CTO from the advisory one: knowing how to translate a business intent into technical boundaries, inter-team contracts, and a concrete migration plan.

Key milestones along the journey: CTO · Founder · technical director (1999) → Technical Project Manager · Co-founder · Early-Stage Startup (2016) → Project Manager / Product Owner · Flows and Products: PIM & DAM & ESB (2021) → CTO · Founder · technical director (2024). Now at 5/5 (Expert). The continuity of these contexts signals a robust acquisition, battle-tested by repetition and diversity.
My arbitration principles
To myself: write an ADR for every irreversible decision and keep a living system diagram.
To others: prefer simplicity until proven otherwise, refuse the pattern by authority ("we do it like Netflix") and require the business criterion that justifies it. Always simulate the operational cost of a split before validating it - a microservice is also a pipeline, a dashboard, and an on-call rotation.
My evolution in this skill
Architecture is what turns a CTO intuition into a defensible 3-year platform. In the 24-month plan, it makes possible the heavy build vs buy arbitrations, the major migrations without product interruption, and the team discipline (code review, ADRs, inter-service contracts). Without it, the organization may grow but debt eventually kills the cadence.
The goal is the event-driven and service-mesh extension: design and implement a monolith-to-autonomous-modules transition without product interruption, and defend that trajectory in front of a board in business terms (risk, cycle, OPEX). Maintaining Expert mastery without decay is the baseline - the effort goes to the frontiers I have not yet operated in production.

Continuous reading: Martin Kleppmann Designing Data-Intensive Applications (annual rotation), Neal Ford / Mark Richards Software Architecture: The Hard Parts, Sam Newman Building Microservices. Daily practice on ACCENSEO codebases. Master in Software Engineering active until 2026.
QCon Paris 2026, possible advanced Domain-Driven Design program (Vlad Khononov or Eric Evans masterclass) in 2027. AWS Solutions Architect Professional certification considered depending on the target CTO context.
My architect routines
- systematic production of an ADR pack + C4 diagram on every new project
- weekly intake of architecture blogs (ThoughtWorks Tech Radar, AWS Architecture Blog, martinfowler.com)
- quarterly study of a reference open-source system. PostgreSQL internals, Linkerd, Temporal



