From 2021 to 2023 I worked for SNCF within a team building digital tools for the operation of the rail network. The context was a rail data platform made of around ten microservices, built by a large mixed team of employees, freelancers and consultants from several firms. This was an engagement inside a client team, not a Business Agile product, and the services described here were built collectively.
The project in detail
I worked as a senior Python back-end developer with a strong DevOps focus. I built REST APIs with Django and Django REST Framework, partly on geographic network data stored in PostGIS and handled with GeoDjango. I also wrote asynchronous processing with Celery and Redis, and secured endpoints between services.
Every service in the team started from a shared project template. I evolved it: the move to Django 4, quality hooks run as soon as a new service is generated, and separate deployment and continuous integration settings. An improvement to the template thus benefited every new service.
Most of my contribution was about industrialisation: GitLab CI pipelines organised into test stages, reorganised Docker images, Kubernetes deployments driven by Helm, secrets management and error tracking with Sentry. I also set up the quality tooling (pytest and coverage, Black, isort, Flake8, mypy) so that every service met the same standards before release.
Day-to-day work followed a clear frame: one ticket per change, one branch per ticket, a merge request reviewed by another team member, then automatic deployment to acceptance environments before production. Geographic data called for special care with spatial query performance and table volume, which the team handled with partitioning and asynchronous jobs.
This engagement taught me to move fast inside a large organisation without giving up rigour: shared conventions, systematic code review, frequent and traceable releases. It is the same standard I now apply to Business Agile projects, at a smaller scale and with a single point of contact.