Contact
Let's work together
Back to home
experience
European Sourcing Group

Software Engineer · PHP Zend Framework Developer

European Sourcing Group

April 2009 - September 20134 years 6 monthsPermanent contract (CDI)Software EngineerPHP Zend Framework
European Sourcing Group
Meilleur-linge.com
Meilleur-nettoyeur.com
Meilleure-enceinte-wifi.com
Meilleur-imprimante.com
Meilleur-climatiseur.com
European Sourcing Group
About the Company

European Sourcing Group is a family-owned company founded by Bernard and Christine Lavigne, operating Europe's largest promotional product and textile database. Based initially in Begles then Pessac (Avenue de Canteranne), the company operates in an agile SME environment connecting suppliers and distributors across the European promotional market. The group also includes Medialeads, its technology arm, and distributes product data through multiple B2B and B2C platforms. Hosting is provided by OVH.

520 000+

Products

3 670 000+

Variations

20 700+

Resellers

71 000+

Clients

800+

Suppliers

1 800+

Brands

2 000+

MySQL Databases

7

Languages

35

Employees

Platform Architecture

The European Sourcing platform is a complete ecosystem composed of several interconnected components: a front office (public product catalog), a back office (internal administration), a supplier extranet (product and asset upload), an online quote and brief system, customizable mini-sites for each reseller, and multi-language content management. The entire system relies on over 2,000 pre-computed MySQL databases to optimize product search performance.

Front Office

Public product catalog

Back Office

Internal administration

Supplier Extranet

Product & asset upload

Quotes & Briefs

Online system

Mini-sites

Customizable per reseller

Multi-language

7-language content management

Codebase Metrics

9.1M

Lines of Code

7 510+

PHP Files

4 510+

JS Files

910+

Controllers

2 220+

Views / Templates

My Role & Positioning

Within a team of 5 to 6 developers, I was positioned as a PHP Zend Framework developer with a broad scope. My work covered both web platform development (search portal, extranets, site generator) and Linux server administration.

I worked in direct collaboration with sales teams, suppliers, design and technical management, giving me a cross-functional product vision.

The SME environment granted me significant autonomy: from design to production deployment, including database modeling and authoring all project documentation. At the time, we used SVN (Subversion) for version control and managed multiple environments (development, staging, production).

Key Missions & Responsibilities
  • Designed and developed product search engines using Apache Solr and MySQL, indexing Europe's largest promotional product database
  • Developed custom ERP and PIM extranets with supplier feed integration via MyEasyImport and reconciliation of heterogeneous formats
  • Built the MyEasyWeb e-commerce site generator using Zend Framework 1.7 and the SQLi MVC framework
  • Software architecture based on the MVC pattern, object-oriented design and design patterns (Factory, Singleton, Observer, Strategy) applied to the Zend framework
  • Database modeling with MySQL Workbench (.mwb): relational schema design, index optimization, management of over 2,000 distinct MySQL databases
  • Server virtualization setup with Proxmox VE and OpenVZ, enabling environment isolation and production container management
  • Managed Linux server infrastructure (Debian/Ubuntu): Apache configuration, iptables security, deployment, backups. Hosting at Systonic then migration to OVH
  • Implemented SEM/SEO strategies to maximize platform visibility on search engines
  • Developed automatic product classification tools (colors, text, categories) powered by Machine Learning and NLP - an approach ahead of its time
  • Created multilingual translation tools (7 languages) with .po and .mo file management via a dedicated back-office
  • Designed secure REST APIs for product data synchronization with external partners
  • Authored all project documentation: technical proposals, requirements documents, functional and technical specifications, acceptance test plans, requirements traceability, deployment guides and operational procedures
Global Objectives
  • Index and make accessible Europe's largest promotional product database through high-performance search engines
  • Automate the import and reconciliation of product feeds from dozens of suppliers with heterogeneous formats
  • Enable resellers to create their online store in a few clicks via MyEasyWeb
  • Guarantee availability and performance of an infrastructure managing over 2,000 MySQL databases

Main Projects

European Sourcing Portal
B2B Marketplace

B2B promotional product search portal for European resellers. Apache Solr search engine indexing hundreds of thousands of products with advanced faceting (categories, prices, colors, brands). Search interface optimized for product discovery and quote generation.

KadObjet
B2C Marketplace

B2C promotional product marketplace for end customers. The platform connects buyers directly with partner resellers, handling catalog management, orders and commercial matchmaking.

MyEasyWeb
SaaS E-commerce

Turnkey e-commerce site generator for promotional product resellers. Each reseller could quickly create their own customized online store connected to the central product catalog. Built with Zend Framework 1.7 and the SQLi MVC framework.

ERP / PIM Extranet
Back-office

Custom ERP and PIM extranet for centralized management of products, suppliers, orders, stock, clients and resellers. Full back-office with a sophisticated import system (MyEasyImport) capable of reconciling feeds from dozens of suppliers with different formats.

Trade Show Portal
Community Portal

Community portal dedicated to professional trade shows in the promotional products industry. Platform connecting exhibitors, visitors and organizers, with event management, booth allocation and scheduling.

PrestaShop Stores & WordPress Sites
B2C E-commerce

Deployment and customization of numerous B2C online stores using PrestaShop for promotional product resellers, along with showcase and corporate websites built on WordPress. Each store is connected to the central product catalog.

TendanceObject
B2C E-commerce

B2C online store for promotional product resellers wanting to sell directly to end customers. Product catalog connected to the central system with order management and logistics.

Project Spotlight: MyEasyWebAhead of its time

MyEasyWeb was a white-label SaaS e-commerce site generator, well before solutions like Shopify or Wix popularized the concept. Each promotional product reseller could, in just a few clicks, select their suppliers, pick from their product catalogs, and instantly generate their own customized online store - with zero technical skills required.

What made MyEasyWeb unique:

  • Supplier and catalog selection in "drag & pick" mode: the reseller checked their desired suppliers and products automatically appeared in their store
  • Full CMS customization: colors, logos, layout, fonts, header images, corporate pages - everything was configurable by the reseller through an intuitive back-office
  • Advanced theming system built with jQuery selectors and dynamic CSS - a major technical challenge at the time, well before CSS custom properties and design tokens
  • Multi-tenant architecture: a single Symfony codebase served 40+ sites, each with its own domain name, branding and supplier selection
  • 7 languages, 32 currencies (ECB rates), per-reseller margin management, built-in advertising system (sliders, banners), online quotes, automated SEO

108K

Lines of Code

40+

Reseller Sites

200K+

Catalog Products

1 506

Commits

This project represented a considerable effort and a rare level of technical complexity for the time. The real-time visual customization system, built entirely with jQuery selectors, was a front-end engineering feat well before the advent of modern frameworks.

Business Rules: Extraordinary Complexity

Beyond the code, the real challenge at European Sourcing was modeling and implementing business rules of rare complexity for an SME. Every system feature had to handle dozens of edge cases tied to the multi-country B2B business model. Here are just a few examples among many others:

HQ / Subsidiary Pricing
  • Up to 50+ degressive price tiers per product (fixed, variable, reduced) with dynamic calculation formulas
  • Completely different prices per connection country: the same product displayed distinct rates for French, German or Spanish resellers - HQ/subsidiary system per supplier (Mid Ocean Brands: 10 entities, Plastoria: 4 countries, BIC Graphic: per-country variants)
  • Per-reseller margin management: each connected reseller applied their own coefficients on supplier prices, with 32 currencies and automatic ECB rates
Product Variations
  • Products with thousands of variants: colors, sizes, materials, sleeve lengths (T-shirts), glue types, weights - some products exceeded 15,000 possible combinations
  • 32+ fields per product/variant record with separate color, size and material tables - each variant carrying its own prices, stock and images
Marking & Customization
  • 36 fields per marking option: technique (screen printing, embroidery, engraving, printing...), position on product, dimensions, number of colors/logos, base price, miscellaneous fees (proof, shipping, packaging)
Packaging & Logistics
  • Cascading packaging calculations: pieces per box, boxes per carton, cartons per pallet - with different rules per supplier, per product and per variant
  • Variable fees per supplier: proof charges, shipping, packaging, plate fees - each supplier imposing their own rate grids and commercial conditions
Multi-Entity Suppliers
  • 37 distinct supplier connectors (FTP, HTTP, REST API) with heterogeneous formats reconciled daily - each supplier potentially having multiple European subsidiaries with specific catalogs and rates
Combinatorial Explosion
  • Cartesian product calculation of all available variants (color x size x material x sleeve x weight) to dynamically generate and display in the UI every possible combination - some products reached 15,000+ combinations
  • Each combination carried its own degressive prices, stock, images, marking options and fees - all pre-calculated in batch and stored in denormalized tables to maintain acceptable response times

This business complexity forged a modeling rigor and software architecture discipline that became permanent reflexes. Translating such an intricate business model into maintainable, performant and reliable code - across 2,000+ MySQL databases - was a daily engineering challenge.

Search Engine Evolution

The product search engine went through four successive technology generations, each addressing the limits of the previous one as the catalog grew and performance requirements increased.

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

Initial search based on SQL LIKE and FULLTEXT queries against MySQL product tables. Functional for a few thousand references, but response times degraded rapidly as the catalog grew. No faceting, no typo tolerance, relevance limited to exact matching.

PostgreSQL Full-Text Search
Gen. 2

Migration to PostgreSQL and its native full-text search engine (tsvector / tsquery). Added stemming, field-level weighting (title, description, brand) and boolean operators. A noticeable relevance improvement, but faceting performance across hundreds of thousands of products remained insufficient.

Apache Solr
Gen. 3

Adoption of Apache Solr as a dedicated search engine. Indexing of hundreds of thousands of products with advanced faceting (categories, colors, prices, suppliers), search suggestions, spell checking and custom relevance scoring. This generation enabled the platform to scale across the European market.

Elasticsearch
Gen. 4

Evolution to Elasticsearch for its horizontal scalability, native REST API and real-time analytics capabilities. Implementation of multi-language search (7 languages), dedicated linguistic analyzers, business synonyms and complex aggregations for dynamic catalog filtering.

Technology Stack

Languages & Frameworks

PHPZend Framework 1.7SmartyPrestaShopWordPressjQueryJavaScriptBash

Databases & Search

MySQLApache SolrSQLite

Servers & Virtualization

Linux (Debian/Ubuntu)ApacheProxmox VEOpenVZMemcache

Tools & Modeling

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

Network & Security

iptablesOpenVPNSSH/SCP/SFTPSSL/HTTPS

Services

PostfixProFTPDBIND9Cron
Managing 2,000+ MySQL databases: the demands of scaling

The European Sourcing infrastructure represented a colossal data volume for an SME: over 2,000 distinct MySQL databases, hundreds of thousands of product records, millions of data rows spread across dozens of interconnected tables. Each database was pre-computed to serve real-time search queries.

At this scale, the slightest design error was fatal. A missing index on a 500,000-row table could turn a 50ms query into a 30-second timeout. We spent hours on EXPLAIN ANALYZE, studying every execution plan, every full table scan, every filesort. Normal forms (1NF, 2NF, 3NF, BCNF) were not an academic topic - they were a daily necessity to avoid redundancy and update anomalies on such large volumes.

Optimization was constant: composite indexing strategies, pre-computed join tables, targeted denormalization for the most critical queries, table partitioning, MySQL parameter tuning (buffer pool, query cache, sort buffer, join buffer). Stock, price and promotion recalculation batches ran several hours every night - every second saved per query multiplied across millions of executions.

This context required complete mastery of design patterns (Factory, Singleton, Observer, Strategy, Repository), SOLID principles, UML modeling and object-oriented design applied to the Zend framework. No shortcuts were possible when every architectural decision directly impacted production performance.

All of this in an SME environment that gave me complete freedom over technical decisions and end-to-end ownership: from database modeling to Linux server administration, from application code to SQL query tuning. This total autonomy, on a system at this scale, was the most formative experience of my career.

Deployment Workflow

Before the CI/CD era, our deployment chain relied on SVN and Bash scripts. The workflow was: SVN commit (subversion.europeansourcing.com) -> deployment script (.sh) -> SVN export to /var/www/esv3 -> Apache serves production. Each developer (jose, vincent, mathieu, fabien, thomas) committed to the central repository, and deployment scripts automated the export and go-live process.

SVN Commit
Script .sh
SVN Export
/var/www/
Apache
Production
Project Documentation Produced
Technical and Commercial Proposals
Functional and Technical Requirements Documents
Detailed Functional Specifications
Detailed Technical Specifications
User Documentation
System Architecture Documentation
Functional and Technical Acceptance Test Plans
Unit and Integration Test Plans
Deployment and Maintenance Guides
Requirements Traceability Matrix
Project committee meeting reports
Operational procedures (server restart, batch execution)
Exchange Format Standardization

In a competitive, private ecosystem like the promotional products industry, imposing a standardized exchange format between suppliers and resellers is a major challenge. Each supplier has its own catalog format (CSV, XML, proprietary databases), its own naming conventions and its own business rules.

We dedicated considerable work to designing a standardized supplier export and reseller import format. The goal was to create a common standard allowing every actor in the chain to transmit and receive product data uniformly - references, descriptions, prices, visuals, stock levels.

Despite our efforts, we never managed to impose this standardization format. The dominant position of certain suppliers, who had no interest in adapting their exports, made adoption impossible. The pivot was to build a dedicated back-office (supplier extranet) allowing each supplier to upload their products and assets in their own format, with a platform-side standardized API system to reconcile and normalize data internally.

This experience taught me that in a private market, standardization cannot be imposed by a single actor - it must be driven collectively or worked around with smart adaptation solutions.

My View of the Company

European Sourcing was my true trial by fire as a developer.

The family SME environment gave me autonomy and responsibility I would never have had in a large organization. Every developer had direct impact on the product.

I discovered the power of a well-designed search engine to connect suppliers and distributors, and the complexity of managing over 2,000 MySQL databases in parallel.

Multi-hour batch runs to recalculate stock, prices and promotions taught me patience and the rigor of large-scale optimization.

Working closely with sales teams and suppliers also gave me an end-to-end product vision, far beyond just writing code.

Related Skills

17 Technical Skill · 7 Soft Skill

Technical Skill

Software Development5/5Fullstack Development

Fullstack PHP Zend Framework development of B2B platforms, ERP/PIM extranets, and the MyEasyWeb e-commerce site builder.

Architecture & Design5/5System Architecture

Architecture of an ecosystem of 15+ interconnected sub-applications for promotional product sourcing.

DevOps & Cloud3/5DevOps and CI/CD

SVN deployments with Bash scripts, managing dev/staging/production environments on Linux servers.

Data & AI5/5Databases

Managing 2,000+ MySQL databases, modeling with MySQL Workbench, index optimization and batch computations.

DevOps & Cloud4/5Virtualization and Cloud Computing

Setting up Proxmox VE and OpenVZ for production server virtualization.

DevOps & Cloud3/5Scripting and Automation

Bash deployment scripts, PHP batch jobs for stock, pricing, and promotion recalculation.

Infrastructure & Networks2/5Network Infrastructure

Server network configuration, hosting management at Systonic then migration to OVH.

Security4/5Network Security and Cybersecurity

iptables hardening, Apache configuration, Linux server access management.

Infrastructure & Networks4/5System Administration

Linux server administration (Debian/Ubuntu), Apache configuration, backups.

DevOps & Cloud2/5Service Deployment and Business Continuity

SVN-to-production deployments, release procedures, regular backups.

DevOps & Cloud2/5Monitoring and Supervision

Monitoring Solr search engine and batch computation performance.

Architecture & Design3/5Software Architecture Patterns

Zend Framework MVC pattern, design patterns (Factory, Singleton, Observer, Strategy).

Architecture & Design2/5GoF Design Patterns

Applying GoF design patterns in the Zend Framework context.

Architecture & Design2/5UML Modeling

UML modeling for platform design, class and sequence diagrams.

Architecture & Design2/5REST API Design

REST API design for product data synchronization with external partners.

Security2/5Web Application Security (OWASP)

Web application security hardening, protection against SQL injection and XSS.

Communication & Collaboration2/5Technology Watch

Technology watch on PHP, Zend Framework, search engines, and virtualization.

Soft Skill