Contact
Travaillons ensemble
European Sourcing Group

Software Engineer · développeur PHP Zend Framework

European Sourcing Group

avril 2009 - septembre 20134 ans 6 moisCDIIngénieur LogicielPHP Zend Framework
European Sourcing Group
Meilleur-linge.com
Meilleur-nettoyeur.com
Meilleure-enceinte-wifi.com
Meilleur-imprimante.com
Meilleur-climatiseur.com
European Sourcing Group
Présentation de l'entreprise

European Sourcing Group est une entreprise familiale fondée par Bernard et Christine Lavigne, spécialisée dans la plus grande base de données européenne d'objets publicitaires et de textile promotionnel. Basée initialement à Bègles puis à Pessac (Avenue de Canteranne), l'entreprise opère dans un environnement PME agile et connecté fournisseurs et distributeurs du marché publicitaire européen. Le groupe comprend également Medialeads, son bras technologique, et diffuse ses données produits à travers plusieurs plateformes B2B et B2C. L'hébergement est assuré par OVH.

520 000+

Produits

3 670 000+

Variations

20 700+

Revendeurs

71 000+

Clients

800+

Fournisseurs

1 800+

Marques

2 000+

Bases MySQL

7

Langues

35

Collaborateurs

Architecture de la plateforme

La plateforme European Sourcing est un écosystème complet compose de plusieurs briques interconnectées : un front office (catalogue produits public), un back office (administration interne), un extranet fournisseurs (dépôt de produits et assets), un système de devis et briefs en ligne, des mini-sites personnalisables pour chaque revendeur, et une gestion de contenu multi-langue. L'ensemble repose sur plus de 2 000 bases MySQL précalculées pour optimiser les performances des recherches produits.

Front Office

Catalogue produits public

Back Office

Administration interne

Extranet fournisseurs

Dépôt produits et assets

Devis & Briefs

Système en ligne

Mini-sites

Personnalisables par revendeur

Multi-langue

Gestion de contenu 7 langues

Métriques du codebase

9.1M

Lignes de code

7 510+

Fichiers PHP

4 510+

Fichiers JS

910+

Contrôleurs

2 220+

Vues / Templates

Mon positionnement et mon rôle

Au sein d'une équipe de 5 à 6 développeurs, j'étais positionné comme développeur PHP Zend Framework avec un périmètre d'action large. Mon travail couvrait à la fois le développement des plateformes web (portail de recherche, extranets, générateur de sites) et l'administration des serveurs Linux.

Je travaillais en collaboration directe avec les équipes commerciales, les fournisseurs, le design et la direction technique, ce qui me donnait une vision transversale du produit.

L'environnement PME me confiait une autonomie importante : de la conception à la mise en production, en passant par la modélisation des bases de données et la rédaction de toute la documentation projet. À l'époque, nous utilisions SVN (Subversion) pour la gestion de version et nous gérions plusieurs environnements (développement, recette, production).

Missions principales et responsabilités
  • Conception et développement de moteurs de recherche produits avec Apache Solr et MySQL, indexant la plus grande base de données européenne d'objets publicitaires
  • Développement d'extranets ERP et PIM sur mesure avec intégration des flux fournisseurs via MyEasyImport et réconciliation de formats hétérogènes
  • Construction du générateur de sites e-commerce MyEasyWeb avec Zend Framework 1.7 et le framework MVC SQLi
  • Architecture logicielle basée sur le pattern MVC, la conception orientée objet et les design patterns (Factory, Singleton, Observer, Strategy) appliqués au framework Zend
  • Modélisation des bases de données avec MySQL Workbench (.mwb) : conception des schémas relationnels, optimisation des index, gestion de plus de 2 000 bases MySQL distinctes
  • Mise en place de la virtualisation des serveurs avec Proxmox VE et OpenVZ, permettant l'isolation des environnements et la gestion des conteneurs de production
  • Administration de l'infrastructure serveurs Linux (Debian/Ubuntu) : configuration Apache, sécurisation iptables, déploiement, sauvegardes. Hébergement chez Systonic puis migration vers OVH
  • Mise en place de stratégies SEM/SEO pour maximiser la visibilité des plateformes clients sur les moteurs de recherche
  • Développement d'outils de classification automatique de produits (couleurs, textes, catégories) basés sur du Machine Learning et du NLP - une approche en avance sur son temps pour l'époque
  • Création d'outils de traduction multilingues (7 langues) avec gestion des fichiers .po et .mo via un back-office dédié
  • Conception d'API REST sécurisées pour la synchronisation de données produits avec les partenaires externes
  • Rédaction de l'ensemble de la documentation projet : propositions techniques et commerciales, cahiers des charges, spécifications fonctionnelles et techniques, cahiers de recette, référentiels d'exigences, guides de déploiement et procédures d'exploitation
Objectifs globaux du poste
  • Indexer et rendre accessible la plus grande base de données européenne d'objets publicitaires via des moteurs de recherche performants
  • Automatiser l'import et la réconciliation des flux produits de dizaines de fournisseurs aux formats hétérogènes
  • Permettre aux revendeurs de créer leur boutique en ligne en quelques clics via MyEasyWeb
  • Garantir la disponibilité et la performance d'une infrastructure gérant plus de 2 000 bases de données MySQL

Projets principaux

Portail European Sourcing
Marketplace B2B

Portail de recherche B2B d'objets publicitaires pour les revendeurs européens. Moteur de recherche Apache Solr indexant des centaines de milliers de produits avec facettage avancé (catégories, prix, couleurs, marques). Interface de recherche optimisée pour la découverte produit et la génération de devis.

KadObjet
Marketplace B2C

Marketplace B2C d'objets publicitaires a destination des clients finaux. La plateforme connecté les acheteurs directement aux revendeurs partenaires, avec gestion du catalogue, des commandes et de la mise en relation commerciale.

MyEasyWeb
SaaS E-commerce

Générateur de sites e-commerce clé en main pour les revendeurs d'objets publicitaires. Chaque revendeur pouvait créer rapidement sa propre boutique en ligne personnalisée, connectée au catalogue produit central. Construit avec Zend Framework 1.7 et le framework MVC SQLi.

Extranet ERP / PIM
Back-office

Extranet ERP et PIM sur mesure pour la gestion centralisée des produits, fournisseurs, commandes, stocks, clients et revendeurs. Back-office complet avec système d'import sophistiqué (MyEasyImport) capable de réconcilier les flux de dizaines de fournisseurs aux formats différents.

Portail Salons Professionnels
Portail communautaire

Portail communautaire dédié aux salons professionnels du secteur de l'objet publicitaire. Plateforme de mise en relation entre exposants, visiteurs et organisateurs, avec gestion des événements, des stands et des plannings.

Boutiques PrestaShop & Sites WordPress
E-commerce B2C

Déploiement et personnalisation de nombreuses boutiques en ligne B2C sous PrestaShop pour les revendeurs d'objets publicitaires, ainsi que des sites vitrines et institutionnels sous WordPress. Chaque boutique est connectée au catalogue produit central.

TendanceObject
E-commerce B2C

Boutique en ligne B2C destinée aux revendeurs d'objets publicitaires souhaitant vendre directement aux clients finaux. Catalogue produit connecté au système central avec gestion des commandes et de la logistique.

Focus projet : MyEasyWebEn avance sur son temps

MyEasyWeb etait une plateforme SaaS de generation de sites e-commerce en marque blanche, bien avant que des solutions comme Shopify ou Wix ne democratisent le concept. Chaque revendeur d'objets publicitaires pouvait, en quelques clics, selectionner ses fournisseurs, choisir parmi leurs catalogues de produits, et generer instantanement sa propre boutique en ligne personnalisee - sans aucune competence technique.

Ce qui rendait MyEasyWeb unique :

  • Selection des fournisseurs et catalogues en mode "drag & pick" : le revendeur cochait les fournisseurs souhaites et leurs produits apparaissaient automatiquement dans sa boutique
  • Personnalisation CMS complete : couleurs, logos, mise en page, polices, images d'en-tete, pages corporates - tout etait configurable par le revendeur via un back-office intuitif
  • Systeme de theming avance construit avec des selecteurs jQuery et du CSS dynamique - un defi technique majeur a l'epoque, bien avant les CSS custom properties et les design tokens
  • Architecture multi-tenant : un seul codebase Symfony servait 40+ sites avec chacun son propre nom de domaine, sa charte graphique et sa selection de fournisseurs
  • 7 langues, 32 devises (taux BCE), gestion des marges par revendeur, systeme publicitaire integre (sliders, bannieres), devis en ligne, SEO automatise

108K

Lignes de code

40+

Sites revendeurs

200K+

Produits catalogue

1 506

Commits

Ce projet a represente un effort considerable et une complexite technique rare pour l'epoque. Le systeme de personnalisation visuelle en temps reel, entierement construit avec des selecteurs jQuery, etait une prouesse d'ingenierie front-end bien avant l'avenement des frameworks modernes.

Regles de gestion : une complexite hors norme

Au-dela du code, le vrai defi chez European Sourcing residait dans la modelisation et l'implementation de regles de gestion d'une complexite rare pour une PME. Chaque fonctionnalite du systeme devait composer avec des dizaines de cas particuliers lies au modele economique B2B multi-pays. Voici quelques exemples parmi tant d'autres :

Tarification siege / filiales
  • Jusqu'a 50+ grilles tarifaires degressives par produit (prix fixe, prix variable, prix reduit) avec des formules dynamiques de calcul
  • Prix totalement differents selon le pays de connexion : un meme produit affichait des tarifs distincts pour un revendeur francais, allemand ou espagnol - systeme siege/filiales par fournisseur (Mid Ocean Brands : 10 entites, Plastoria : 4 pays, BIC Graphic : variantes par pays)
  • Marges specifiques par revendeur connecte : chaque revendeur appliquait ses propres coefficients sur les prix fournisseur, avec 32 devises et taux BCE automatiques
Variations produit
  • Des produits avec des milliers de declinaisons : couleurs, tailles, matieres, longueurs de manches (T-shirts), types de colle, grammages - certains produits depassaient 15 000 combinaisons possibles
  • 32+ champs par fiche produit/variante avec tables de couleur, taille et matiere distinctes - chaque variante portant ses propres prix, stocks et images
Marquage & Personnalisation
  • 36 champs par option de marquage : technique (serigraphie, broderie, gravure, impression...), position sur le produit, dimensions, nombre de couleurs, nombre de logos, prix de base, frais divers (BAT, livraison, emballage)
Colissage & Logistique
  • Calculs de colissage en cascade : nombre de pieces par boite, boites par carton, cartons par palette - avec des regles differentes par fournisseur, par produit et par variante
  • Frais variables par fournisseur : BAT (bon a tirer), frais de livraison, emballage, frais de cliche - chaque fournisseur imposant ses propres grilles et conditions commerciales
Fournisseurs multi-entites
  • 37 connecteurs fournisseurs distincts (FTP, HTTP, API REST) avec des formats heterogenes a reconcilier quotidiennement - chaque fournisseur ayant potentiellement plusieurs filiales europeennes avec catalogues et tarifs specifiques
Explosion combinatoire
  • Calcul du produit cartesien de toutes les variantes disponibles (couleur x taille x matiere x manche x grammage) pour generer et afficher dynamiquement dans l'IHM l'ensemble des declinaisons possibles - certains produits atteignaient 15 000+ combinaisons
  • Chaque combinaison portait ses propres prix degressifs, son stock, ses images, ses options de marquage et ses frais - le tout precalcule en batch et stocke dans des tables denomalisees pour maintenir des temps de reponse acceptables

Cette complexite metier a forge une rigueur de modelisation et une discipline d'architecture logicielle qui sont devenues des reflexes permanents. Traduire un modele economique aussi tortueux en code maintenable, performant et fiable - le tout reparti sur 2 000+ bases MySQL - representait un defi d'ingenierie quotidien.

Evolution du moteur de recherche

Le moteur de recherche produit a connu quatre générations technologiques successives, chacune répondant aux limites de la précédente face a la croissance du catalogue et aux exigences de performance.

MySQL LIKE / FULLTEXT
PostgreSQL Full-Text Search
Apache Solr
Elasticsearch
MySQL LIKE / FULLTEXT
Gen. 1

Recherche initiale basee sur des requêtes SQL LIKE et FULLTEXT sur les tables produits MySQL. Fonctionnel pour quelques milliers de références, mais les temps de reponse se dégradaient rapidement avec la croissance du catalogue. Pas de facettage, pas de tolerance aux fautes de frappe, pertinence limitee au matching exact.

PostgreSQL Full-Text Search
Gen. 2

Migration vers PostgreSQL et son moteur de recherche plein texte natif (tsvector / tsquery). Apport du stemming, de la ponderation par champs (titre, description, marque) et des operateurs booleens. Un gain de pertinence notable, mais les performances de facettage sur des centaines de milliers de produits restaient insuffisantes.

Apache Solr
Gen. 3

Adoption d'Apache Solr comme moteur de recherche dédié. Indexation de centaines de milliers de produits avec facettage avance (categories, couleurs, prix, fournisseurs), suggestions de recherche, correction orthographique et scoring de pertinence personnalisé. C'est cette génération qui a permis a la plateforme de passer a l'échelle sur le marché europeen.

Elasticsearch
Gen. 4

Evolution vers Elasticsearch pour sa scalabilité horizontale, son API REST native et ses capacités d'analyse en temps réel. Mise en place de recherche multi-langue (7 langues), d'analyseurs linguistiques dédiés, de synonymes métier et d'aggregations complexes pour le filtrage dynamique du catalogue.

Stack technique

Langages & Frameworks

PHPZend Framework 1.7SmartyPrestaShopWordPressjQueryJavaScriptBash

Bases de données & Recherche

MySQLApache SolrSQLite

Serveurs & Virtualisation

Linux (Debian/Ubuntu)ApacheProxmox VEOpenVZMemcache

Outils & Modélisation

SVN (Subversion)MySQL Workbench (.mwb)Eclipse PDTZend StudiophpMyAdminAWStats

Réseau & Sécurité

iptablesOpenVPNSSH/SCP/SFTPSSL/HTTPS

Services

PostfixProFTPDBIND9Cron
Gerer 2 000+ bases MySQL : l'exigence du passage a l'échelle

L'infrastructure European Sourcing representait un volume de données colossal pour une PME : plus de 2 000 bases de données MySQL distinctes, des centaines de milliers de fiches produits, des millions de lignes de données réparties sur des dizaines de tables interconnectées. Chaque base était précalculée pour servir les requêtes de recherche en temps réel.

A cette échelle, la moindre erreur de conception était fatale. Un index manquant sur une table de 500 000 lignes pouvait transformer une requete de 50 ms en timeout de 30 secondes. On passait des heures sur EXPLAIN ANALYZE, a etudier chaque plan d'exécution, chaque full table scan, chaque filesort. Les formes normales (1NF, 2NF, 3NF, BCNF) n'étaient pas un sujet academique - c'était une nécessité quotidienne pour eviter la redundance et les anomalies de mise a jour sur des volumes aussi importants.

L'optimisation était permanente : stratégies d'indexation composites, précalcul de tables de jointure, denormalisation ciblee pour les requêtes les plus critiques, partitionnement de tables, tuning des parametres MySQL (buffer pool, query cache, sort buffer, join buffer). Les batchs de recalcul de stocks, prix et promotions tournaient plusieurs heures chaque nuit - chaque seconde gagnee par requete se multipliait par des millions d'exécutions.

Ce contexte imposait une maîtrise complète des design patterns (Factory, Singleton, Observer, Strategy, Repository), des principes SOLID, de la modélisation UML et de la conception orientée objet appliquée au framework Zend. Pas de raccourcis possibles quand chaque choix d'architecture impacte directement les performances en production.

Le tout dans un environnement PME qui me donnait une liberté totale sur les choix techniques et une maîtrise de bout en bout : de la modélisation de la base de données a l'administration des serveurs Linux, du code applicatif au tuning des requêtes SQL. Cette autonomie complete, sur un système a cette échelle, a été l'expérience la plus formatrice de ma carrière.

Workflow de déploiement

À l'époque, avant l'ère du CI/CD, notre chaîne de déploiement reposait sur SVN et des scripts Bash. Le workflow était : commit SVN (subversion.europeansourcing.com) -> script de déploiement (.sh) -> export SVN vers /var/www/esv3 -> Apache sert la production. Chaque développeur (jose, vincent, mathieu, fabien, thomas) commitait sur le dépôt central, et les scripts de déploiement automatisaient l'export et la mise en ligne.

SVN Commit
Script .sh
SVN Export
/var/www/
Apache
Production
Documentation projet produite
Propositions Techniques et Commerciales (PTC)
Cahiers des Charges Fonctionnels et Techniques
Spécifications Fonctionnelles Détaillées
Spécifications Techniques Détaillées
Documentation Utilisateur
Documentation d'Architecture Système
Cahiers de Recette Fonctionnelle et Technique
Plans de Tests Unitaires et d'Intégration
Guides de Déploiement et de Maintenance
Référentiels d'Exigences
Comptes rendus du comité de projet
Procédures d'exploitation (redémarrage serveurs, exécution batchs)
Standardisation des formats d'échange

Dans un écosystème concurrentiel et prive comme celui de l'objet publicitaire, imposer un format d'échange normalisé entre fournisseurs et revendeurs est un defi de taille. Chaque fournisseur possede son propre format de catalogue (CSV, XML, bases propriétaires), ses propres nomenclatures et ses propres règles métier.

Nous avons consacre un travail considerable a la conception d'un format normalisé d'export fournisseur et d'import revendeur. L'objectif était de créer un standard commun permettant a chaque acteur de la chaîne de transmettre et recevoir les données produits de manière uniforme - références, descriptions, prix, visuels, stocks.

Malgre nos efforts, nous n'avons jamais réussi a imposer ce format de standardisation. La position dominante de certains fournisseurs, qui n'avaient aucun interet a adapter leurs exports, a rendu l'adoption impossible. Le pivot a été de construire un back-office dédié (extranet fournisseurs) permettant a chaque fournisseur de deposer ses produits et assets dans son propre format, avec un système d'API standardisé cote plateforme pour réconcilier et normaliser les données en interne.

Cette expérience m'a appris que dans un marché prive, la standardisation ne peut pas etre imposee par un seul acteur - elle doit etre portee collectivement ou contournee par des solutions d'adaptation intelligentes.

Mon regard sur l'entreprise

European Sourcing a été mon véritable baptême du feu en tant que développeur.

L'environnement PME familiale m'a donné une autonomie et une responsabilité que je n'aurais jamais eue dans une grande structure. Chaque développeur avait un impact direct sur le produit.

J'y ai découvert la puissance d'un moteur de recherche bien conçu pour connecter fournisseurs et distributeurs, et la complexité de gérer plus de 2 000 bases de données MySQL en parallèle.

Les exécutions de batchs de plusieurs heures pour recalculer stocks, prix et promotions m'ont appris la patience et la rigueur de l'optimisation à grande échelle.

La proximité avec les équipes commerciales et les fournisseurs m'a aussi donné une vision produit de bout en bout, bien au-delà du simple code.

Compétences associées

17 Compétence technique · 7 Compétence humaine

Compétence technique

Développement logiciel5/5Développement fullstack

Dev full-stack PHP/Zend Framework 1.7 avec jQuery. Plateformes B2B European Sourcing, extranets ERP/PIM, générateur de sites MyEasyWeb, boutiques PrestaShop.

Architecture & Conception5/5Architecture système

Contribution a l'architecture d'un écosystème de 15+ sous-applications interconnectées (front, back, extranet, mini-sites, devis, traduction).

DevOps & Cloud3/5DevOps et CI/CD

Déploiements SVN avec scripts Bash sur serveurs Linux, gestion des environnements dev/recette/production.

Données & IA5/5Bases de données

Gestion de 2 000+ bases MySQL précalculées, modélisation avec MySQL Workbench, optimisation des index et batchs de recalcul stocks/prix.

DevOps & Cloud4/5Virtualisation et cloud computing

Mise en place de Proxmox VE et OpenVZ pour la virtualisation et l'isolation des environnements de production.

DevOps & Cloud3/5Scripting et automatisation

Scripts Bash de déploiement SVN, batchs PHP de recalcul de stocks, prix et promotions exécutant plusieurs heures.

Infrastructure & Réseaux3/5Infrastructure réseau

Configuration réseau des serveurs dédiés, migration de l'hébergement Systonic vers OVH, gestion DNS et Apache.

Sécurité4/5Sécurité réseau et cybersécurité

Sécurisation iptables des serveurs Linux, configuration Apache, gestion des accès et des certificats.

Infrastructure & Réseaux4/5Administration système

Administration serveurs Linux Debian/Ubuntu, configuration Apache, sauvegardes et procédures d'exploitation.

DevOps & Cloud4/5Déploiement et continuité de service

Déploiements SVN vers production, procédures de mise en ligne validées, sauvegardes régulières des 2 000+ bases.

DevOps & Cloud3/5Monitoring et supervision

Surveillance des performances du moteur Apache Solr et des batchs de calcul multi-heures.

Architecture & Conception5/5Patterns d'architecture logicielle

Pattern MVC Zend Framework et framework SQLi, conception orientée objet appliquée aux plateformes B2B.

Architecture & Conception4/5Design patterns GoF

Application des design patterns Factory, Singleton, Observer et Strategy dans le contexte Zend Framework.

Architecture & Conception2/5Modelisation UML

Modelisation UML des plateformes, diagrammes de classes et de sequences pour les spécifications techniques détaillées.

Architecture & Conception3/5Conception d'API REST

Conception d'API REST sécurisée pour la synchronisation de données produits avec les partenaires et fournisseurs externes.

Sécurité3/5Sécurité applicative web (OWASP)

Sécurisation des applications web PHP, protection contre les injections SQL et XSS sur les plateformes exposées aux fournisseurs.

Communication & Collaboration3/5Veille technologique

Veille active sur PHP, Zend Framework, Apache Solr, virtualisation Proxmox et les pratiques de l'écosystème e-commerce.

Compétence humaine