Contact
Vamos trabalhar juntos
European Sourcing Group

Software Engineer · desenvolvedor PHP Zend Framework

European Sourcing Group

abril de 2009 - setembro de 20134 anos 6 mesesContrato permanente (CDI)Engenheiro de SoftwarePHP Zend Framework
European Sourcing Group
Meilleur-linge.com
Meilleur-nettoyeur.com
Meilleure-enceinte-wifi.com
Meilleur-imprimante.com
Meilleur-climatiseur.com
European Sourcing Group
Sobre a Empresa

O European Sourcing Group e uma empresa familiar fundada por Bernard e Christine Lavigne, operando a maior base de dados europeia de produtos promocionais e têxteis. Sediada inicialmente em Begles e depois em Pessac (Avenue de Canteranne), a empresa opera em um ambiente PME ágil conectando fornecedores e distribuidores do mercado promocional europeu. O grupo também inclui a Medialeads, seu braco tecnológico, e distribui dados de produtos atraves de várias plataformas B2B e B2C. A hospedagem e fornecida pela OVH.

520 000+

Produtos

3 670 000+

Variações

20 700+

Revendedores

71 000+

Clientes

800+

Fornecedores

1 800+

Marcas

2 000+

Bancos MySQL

7

Idiomas

35

Colaboradores

Arquitetura da plataforma

A plataforma European Sourcing e um ecossistema completo composto por vários componentes interconectados: um front office (catálogo público de produtos), um back office (administração interna), um extranet de fornecedores (upload de produtos e assets), um sistema de orçamentos e briefs online, mini-sites personalizaveis para cada revendedor, e gestão de conteúdo multi-idioma. Todo o sistema depende de mais de 2.000 bancos de dados MySQL pre-calculados para otimizar o desempenho das buscas de produtos.

Front Office

Catálogo público

Back Office

Administração interna

Extranet fornecedores

Upload de produtos

Orçamentos & Briefs

Sistema online

Mini-sites

Personalizáveis por revendedor

Multi-idioma

Gestão de conteúdo 7 idiomas

Métricas do codebase

9.1M

Linhas de código

7 510+

Arquivos PHP

4 510+

Arquivos JS

910+

Controladores

2 220+

Views / Templates

Meu Papel e Posicionamento

Em uma equipe de 5 a 6 desenvolvedores, eu era posicionado como desenvolvedor PHP Zend Framework com um escopo amplo. Meu trabalho cobria tanto o desenvolvimento de plataformas web (portal de busca, extranets, gerador de sites) quanto a administração de servidores Linux.

Trabalhava em colaboração direta com as equipes comerciais, fornecedores, design e direção técnica, o que me dava uma visão transversal do produto.

O ambiente PME me concedia autonomia significativa: da concepção ao deploy em produção, incluindo a modelagem de bancos de dados e a redação de toda a documentação do projeto. Na epoca, usavamos SVN (Subversion) para controle de versão e gerenciavamos vários ambientes (desenvolvimento, homologação, produção).

Missões Principais e Responsabilidades
  • Design e desenvolvimento de mecanismos de busca de produtos com Apache Solr e MySQL, indexando a maior base de dados europeia de produtos promocionais
  • Desenvolvimento de extranets ERP e PIM personalizados com integração de feeds de fornecedores via MyEasyImport e reconciliação de formatos heterogeneos
  • Construção do gerador de sites de e-commerce MyEasyWeb com Zend Framework 1.7 e o framework MVC SQLi
  • Arquitetura de software baseada no padrão MVC, design orientado a objetos e design patterns (Factory, Singleton, Observer, Strategy) aplicados ao framework Zend
  • Modelagem de bancos de dados com MySQL Workbench (.mwb): design de esquemas relacionais, otimização de índices, gestão de mais de 2.000 bancos MySQL distintos
  • Configuração de virtualização de servidores com Proxmox VE e OpenVZ, permitindo isolamento de ambientes e gestão de containers de produção
  • Administração da infraestrutura de servidores Linux (Debian/Ubuntu): configuração Apache, segurança iptables, deploy, backups. Hospedagem na Systonic, depois migração para OVH
  • Implementação de estratégias SEM/SEO para maximizar a visibilidade das plataformas nos mecanismos de busca
  • Desenvolvimento de ferramentas de classificação automática de produtos (cores, textos, categorias) baseadas em Machine Learning e NLP - uma abordagem a frente de seu tempo
  • Criação de ferramentas de tradução multilinguais (7 idiomas) com gestão de arquivos .po e .mo via back-office dedicado
  • Concepção de APIs REST seguras para sincronização de dados de produtos com parceiros externos
  • Redação de toda a documentação do projeto: propostas técnicas, documentos de requisitos, especificações funcionais e técnicas, planos de teste de aceitação, rastreabilidade de requisitos, guias de deploy e procedimentos operacionais
Objetivos Globais
  • Indexar e tornar acessível a maior base de dados europeia de produtos promocionais atraves de mecanismos de busca de alto desempenho
  • Automatizar a importação e reconciliação de feeds de produtos de dezenas de fornecedores com formatos heterogeneos
  • Permitir que revendedores criem sua loja online em poucos cliques via MyEasyWeb
  • Garantir disponibilidade e desempenho de uma infraestrutura gerenciando mais de 2.000 bancos de dados MySQL

Projetos principais

Portal European Sourcing
Marketplace B2B

Portal de busca B2B de produtos promocionais para revendedores europeus. Mecanismo de busca Apache Solr indexando centenas de milhares de produtos com facetagem avancada (categorias, preços, cores, marcas). Interface de busca otimizada para descoberta de produtos e geração de orçamentos.

KadObjet
Marketplace B2C

Marketplace B2C de produtos promocionais para clientes finais. A plataforma conecta compradores diretamente com revendedores parceiros, com gestão de catálogo, pedidos e intermediação comercial.

MyEasyWeb
SaaS E-commerce

Gerador de sites de e-commerce pronto para uso para revendedores de produtos promocionais. Cada revendedor podia criar rapidamente sua própria loja online personalizada, conectada ao catálogo central de produtos. Construído com Zend Framework 1.7 e o framework MVC SQLi.

Extranet ERP / PIM
Back-office

Extranet ERP e PIM sob medida para gestão centralizada de produtos, fornecedores, pedidos, estoques, clientes e revendedores. Back-office completo com sistema de importação sofisticado (MyEasyImport) capaz de reconciliar fluxos de dezenas de fornecedores com formatos diferentes.

Portal de Feiras Profissionais
Portal comunitário

Portal comunitário dedicado a feiras profissionais do setor de produtos promocionais. Plataforma conectando expositores, visitantes e organizadores, com gestão de eventos, alocação de estandes e agendamento.

Lojas PrestaShop & Sites WordPress
E-commerce B2C

Implantação e personalização de diversas lojas online B2C com PrestaShop para revendedores de produtos promocionais, além de sites institucionais e vitrines construídos com WordPress. Cada loja e conectada ao catálogo central de produtos.

TendanceObject
E-commerce B2C

Loja online B2C para revendedores de produtos promocionais que queriam vender diretamente para clientes finais. Catálogo de produtos conectado ao sistema central com gestão de pedidos e logística.

Projeto destaque: MyEasyWebA frente do seu tempo

MyEasyWeb era uma plataforma SaaS de geracao de sites e-commerce em marca branca, muito antes de solucoes como Shopify ou Wix popularizarem o conceito. Cada revendedor de produtos promocionais podia, em poucos cliques, selecionar seus fornecedores, escolher entre seus catalogos de produtos e gerar instantaneamente sua propria loja online personalizada - sem nenhuma competencia tecnica.

O que tornava o MyEasyWeb unico:

  • Selecao de fornecedores e catalogos em modo "drag & pick": o revendedor marcava os fornecedores desejados e seus produtos apareciam automaticamente em sua loja
  • Personalizacao CMS completa: cores, logos, layout, fontes, imagens de cabecalho, paginas corporativas - tudo era configuravel pelo revendedor via um back-office intuitivo
  • Sistema de temas avancado construido com seletores jQuery e CSS dinamico - um grande desafio tecnico na epoca, bem antes das CSS custom properties e design tokens
  • Arquitetura multi-tenant: um unico codebase Symfony servia 40+ sites, cada um com seu proprio dominio, identidade visual e selecao de fornecedores
  • 7 idiomas, 32 moedas (taxas BCE), gestao de margens por revendedor, sistema publicitario integrado (sliders, banners), orcamentos online, SEO automatizado

108K

Linhas de código

40+

Sites revendedores

200K+

Produtos catalogo

1 506

Commits

Este projeto representou um esforco consideravel e uma complexidade tecnica rara para a epoca. O sistema de personalizacao visual em tempo real, inteiramente construido com seletores jQuery, foi uma proeza de engenharia front-end bem antes do surgimento dos frameworks modernos.

Regras de negocio: complexidade fora do comum

Alem do codigo, o verdadeiro desafio na European Sourcing estava na modelagem e implementacao de regras de negocio de uma complexidade rara para uma PME. Cada funcionalidade do sistema precisava lidar com dezenas de casos especiais ligados ao modelo economico B2B multi-pais. Aqui estao alguns exemplos entre muitos outros:

Precificacao sede / filiais
  • Ate 50+ grades tarifarias degressivas por produto (preco fixo, variavel, reduzido) com formulas dinamicas de calculo
  • Precos totalmente diferentes por pais de conexao: um mesmo produto exibia tarifas distintas para um revendedor frances, alemao ou espanhol - sistema sede/filiais por fornecedor (Mid Ocean Brands: 10 entidades, Plastoria: 4 paises, BIC Graphic: variantes por pais)
  • Margens especificas por revendedor conectado: cada revendedor aplicava seus proprios coeficientes, com 32 moedas e taxas BCE automaticas
Variações de produto
  • Produtos com milhares de variacoes: cores, tamanhos, materiais, comprimentos de manga (camisetas), tipos de cola, gramaturas - alguns produtos ultrapassavam 15 000 combinacoes possiveis
  • 32+ campos por ficha produto/variante com tabelas de cor, tamanho e material distintas - cada variante com seus proprios precos, estoques e imagens
Marcacao & Personalizacao
  • 36 campos por opcao de marcacao: tecnica (serigrafia, bordado, gravacao, impressao...), posicao no produto, dimensoes, numero de cores, numero de logos, preco base, taxas diversas
Embalagem & Logística
  • Calculos de embalagem em cascata: pecas por caixa, caixas por caixa maior, caixas por palete - com regras diferentes por fornecedor, produto e variante
  • Taxas variaveis por fornecedor: BAT (prova), frete, embalagem, taxas de cliche - cada fornecedor com suas proprias grades e condicoes comerciais
Fornecedores multi-entidades
  • 37 conectores de fornecedores distintos (FTP, HTTP, API REST) com formatos heterogeneos reconciliados diariamente - cada fornecedor com potenciais filiais europeias com catalogos e tarifas especificas
Explosão combinatória
  • Calculo do produto cartesiano de todas as variantes disponiveis (cor x tamanho x material x manga x gramatura) para gerar e exibir dinamicamente na interface todas as combinacoes possiveis - alguns produtos atingiam 15 000+ combinacoes
  • Cada combinacao carregava seus proprios precos degressivos, estoque, imagens, opcoes de marcacao e taxas - tudo pre-calculado em batch e armazenado em tabelas desnormalizadas para manter tempos de resposta aceitaveis

Essa complexidade de negocio forjou um rigor de modelagem e uma disciplina de arquitetura de software que se tornaram reflexos permanentes. Traduzir um modelo economico tao intrincado em codigo mantivel, performante e confiavel - tudo em 2 000+ bancos MySQL - representava um desafio de engenharia diario.

Evolução do mecanismo de busca

O mecanismo de busca de produtos passou por quatro gerações tecnológicas sucessivas, cada uma respondendo aos limites da anterior conforme o catálogo crescia e as exigencias de desempenho aumentavam.

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

Busca inicial baseada em consultas SQL LIKE e FULLTEXT nas tabelas de produtos MySQL. Funcional para alguns milhares de referências, mas os tempos de resposta se degradavam rapidamente com o crescimento do catálogo. Sem facetagem, sem tolerância a erros de digitação, relevância limitada a correspondência exata.

PostgreSQL Full-Text Search
Ger. 2

Migração para PostgreSQL e seu mecanismo de busca full-text nativo (tsvector / tsquery). Adição de stemming, ponderação por campos (título, descrição, marca) e operadores booleanos. Uma melhoria notável na relevância, mas o desempenho de facetagem em centenas de milhares de produtos permanecia insuficiente.

Apache Solr
Ger. 3

Adoção do Apache Solr como mecanismo de busca dedicado. Indexação de centenas de milhares de produtos com facetagem avancada (categorias, cores, preços, fornecedores), sugestões de busca, correção ortografica e scoring de relevância personalizado. Essa geração permitiu que a plataforma escalasse no mercado europeu.

Elasticsearch
Ger. 4

Evolução para Elasticsearch por sua escalabilidade horizontal, API REST nativa e capacidades de análise em tempo real. Implementação de busca multi-idioma (7 idiomas), analisadores linguisticos dedicados, sinonimos de negócio e agregações complexas para filtragem dinâmica do catálogo.

Stack Tecnológico

Linguagens & Frameworks

PHPZend Framework 1.7SmartyPrestaShopWordPressjQueryJavaScriptBash

Bancos de dados & Busca

MySQLApache SolrSQLite

Servidores & Virtualização

Linux (Debian/Ubuntu)ApacheProxmox VEOpenVZMemcache

Ferramentas & Modelagem

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

Rede & Segurança

iptablesOpenVPNSSH/SCP/SFTPSSL/HTTPS

Serviços

PostfixProFTPDBIND9Cron
Gerenciar 2.000+ bancos MySQL: as exigencias da escala

A infraestrutura da European Sourcing representava um volume de dados colossal para uma PME: mais de 2.000 bancos de dados MySQL distintos, centenas de milhares de fichas de produtos, milhões de linhas de dados distribuídas em dezenas de tabelas interconectadas. Cada banco era pre-calculado para servir consultas de busca em tempo real.

Nessa escala, o menor erro de concepção era fatal. Um índice faltando em uma tabela de 500.000 linhas podia transformar uma consulta de 50ms em um timeout de 30 segundos. Passavamos horas no EXPLAIN ANALYZE, estudando cada plano de execução, cada full table scan, cada filesort. As formas normais (1NF, 2NF, 3NF, BCNF) não eram um assunto acadêmico - eram uma necessidade diária para evitar redundância e anomalias de atualização em volumes tao grandes.

A otimização era constante: estratégias de indexação composta, tabelas de junção pre-calculadas, desnormalização direcionada para as consultas mais críticas, particionamento de tabelas, tuning de parâmetros MySQL (buffer pool, query cache, sort buffer, join buffer). Os batchs de recalculo de estoques, preços e promoções rodavam várias horas todas as noites - cada segundo economizado por consulta se multiplicava por milhões de execuções.

Esse contexto exigia domínio completo dos design patterns (Factory, Singleton, Observer, Strategy, Repository), dos princípios SOLID, da modelagem UML e do design orientado a objetos aplicado ao framework Zend. Nenhum atalho era possível quando cada decisão de arquitetura impactava diretamente o desempenho em produção.

Tudo isso em um ambiente PME que me dava liberdade total sobre as decisões técnicas e domínio de ponta a ponta: da modelagem de banco de dados a administração de servidores Linux, do código aplicativo ao tuning de consultas SQL. Essa autonomia total, em um sistema nessa escala, foi a experiência mais formativa da minha carreira.

Fluxo de deploy

Antes da era CI/CD, nossa cadeia de deploy dependia do SVN e scripts Bash. O fluxo era: commit SVN (subversion.europeansourcing.com) -> script de deploy (.sh) -> export SVN para /var/www/esv3 -> Apache serve a produção. Cada desenvolvedor (jose, vincent, mathieu, fabien, thomas) commitava no repositório central, e os scripts de deploy automatizavam a exportação e publicação.

SVN Commit
Script .sh
SVN Export
/var/www/
Apache
Production
Documentação de projeto produzida
Propostas Técnicas e Comerciais
Documentos de Requisitos Funcionais e Tecnicos
Especificações Funcionais Detalhadas
Especificações Técnicas Detalhadas
Documentação do Usuário
Documentação de Arquitetura do Sistema
Planos de Teste de Aceitação Funcional e Técnica
Planos de Testes Unitarios e de Integração
Guias de Deploy e Manutenção
Matriz de Rastreabilidade de Requisitos
Relatórios de reuniões do comite de projeto
Procedimentos operacionais (reinicio de servidores, execução de batchs)
Padronização de formatos de troca

Em um ecossistema competitivo e privado como o de produtos promocionais, impor um formato de troca padronizado entre fornecedores e revendedores e um grande desafio. Cada fornecedor possui seu próprio formato de catálogo (CSV, XML, bancos proprietarios), suas próprias nomenclaturas e suas próprias regras de negócio.

Dedicamos um trabalho considerável ao design de um formato padronizado de exportação de fornecedor e importação de revendedor. O objetivo era criar um padrão comum permitindo que cada ator da cadeia transmitisse e recebesse dados de produtos de maneira uniforme - referências, descrições, preços, visuais, níveis de estoque.

Apesar de nossos esforcos, nunca conseguimos impor esse formato de padronização. A posição dominante de certos fornecedores, que não tinham interesse em adaptar suas exportações, tornou a adoção impossível. O pivot foi construir um back-office dedicado (extranet de fornecedores) permitindo que cada fornecedor fizesse upload de seus produtos e assets em seu próprio formato, com um sistema de API padronizado do lado da plataforma para reconciliar e normalizar os dados internamente.

Essa experiência me ensinou que em um mercado privado, a padronização não pode ser imposta por um único ator - ela deve ser conduzida coletivamente ou contornada com soluções de adaptação inteligentes.

Minha Visão da Empresa

A European Sourcing foi meu verdadeiro batismo de fogo como desenvolvedor.

O ambiente PME familiar me deu uma autonomia e responsabilidade que eu nunca teria em uma grande organização. Cada desenvolvedor tinha impacto direto no produto.

Descobri o poder de um mecanismo de busca bem projetado para conectar fornecedores e distribuidores, e a complexidade de gerenciar mais de 2.000 bancos de dados MySQL em paralelo.

Execuções de batchs de várias horas para recalcular estoques, preços e promoções me ensinaram paciência e o rigor da otimização em grande escala.

A proximidade com as equipes comerciais e os fornecedores também me deu uma visão de produto de ponta a ponta, muito além de apenas escrever código.

Habilidades Relacionadas

17 Competência técnica · 7 Competência humana

Competência técnica

Desenvolvimento de software5/5Desenvolvimento full-stack

Dev full-stack PHP Zend Framework de plataformas B2B, extranets ERP/PIM e gerador de sites e-commerce MyEasyWeb.

Arquitetura & Design5/5Arquitetura de sistemas

Arquitetura de um ecossistema de 15+ sub-aplicações interconectadas para sourcing de brindes corporativos.

DevOps & Cloud3/5DevOps e CI/CD

Deploys SVN com scripts Bash, gestão dos ambientes dev/homologação/produção em servidores Linux.

Dados & IA5/5Banco de dados

Gestão de 2.000+ bases MySQL, modelagem com MySQL Workbench, otimização de índices e batchs de cálculo.

DevOps & Cloud4/5Virtualização e cloud computing

Implementação de Proxmox VE e OpenVZ para virtualização dos servidores de produção.

DevOps & Cloud3/5Scripting e automação

Scripts Bash de deploy, batchs PHP de recalculo de estoques, preços e promoções.

Infraestrutura & Redes3/5Infraestrutura de rede

Configuração de rede de servidores, gestão de hospedagem Systonic e migração para OVH.

Segurança4/5Segurança de rede e ciberseguranca

Proteção iptables, configuração Apache, gestão de acessos a servidores Linux.

Infraestrutura & Redes4/5Administração de sistemas

Administração de servidores Linux (Debian/Ubuntu), configuração Apache, backups.

DevOps & Cloud3/5Implantação e continuidade de serviço

Deploys SVN para produção, procedimentos de publicação, backups regulares.

DevOps & Cloud3/5Monitoramento e supervisão

Acompanhamento do desempenho dos motores de busca Solr e dos batchs de cálculo.

Arquitetura & Design2/5Padrões de arquitetura de software

Padrão MVC Zend Framework, design patterns (Factory, Singleton, Observer, Strategy).

Arquitetura & Design2/5Design patterns GoF

Aplicação dos design patterns GoF no contexto Zend Framework.

Arquitetura & Design3/5Modelagem UML

Modelagem UML para concepção das plataformas, diagramas de classes e de sequências.

Arquitetura & Design2/5Concepção de APIs REST

Concepção de API REST para sincronização de dados de produtos com parceiros externos.

Segurança2/5Segurança aplicativa OWASP

Proteção de aplicações web, proteção contra injeções SQL e XSS.

Comunicação & Colaboração3/5Vigilia tecnológica

Vigilia tecnológica sobre PHP, Zend Framework, motores de busca e virtualização.

Competência humana