2025

Teads (MPL)

Software Engineer @ SSP

Mar. 2025 - today

Stack: Scala, AWS, Terraform, Grafana
  • ๐Ÿ‘€

Software Engineer @ Format

Sep. 2024 - Feb. 2025

Stack: Scala, Typescript, GitHub Actions, Terraform, Jenkins, AWS, Grafana & Loki, Kibana
  • Migrated the CI pipeline from Jenkins to GitHub Actions & adapted it to better match our needs:
    • More than one CI at the same time
    • Labels to handle PR state
    • Rich job summary to quickly understand why a CI run failed
  • Migrated the deployment pipeline to GitHub Actions
    • Made several backups (just in case ๐Ÿ˜…)
    • A/B tested the new deployment with ramp-ups (ramp-up was useless as it was black or white, it was for my paranoia)
    • Merge & deployed with GitHub Actions ๐Ÿš€
  • Finished the encoding service migration. With one downtime due to an error in the double-run process. We were able to find a quick fix. After that, we were able to clean up the code from the old service and decomission now unused services ๐Ÿงน
  • Started refactoring (another one!) the way we track ad events (playing, visibility, completion...) to simplify it and make contributions easier.
    • Deduplicated code
    • Usage of native constructs instead of custom ones
  • Initiated the new way to encode ads, with AWS Mediaconvert. Set up the infrastructure (event bus, queues...) with some observability (dashboard).
    • Templatize encoding jobs for better reproducibility
    • Versionized templates for quick reverts in case of hazards
    • Started with backward compatible encodings, going towards newer, more performant encodings

Assistant Software Engineer @ Format

Mar. 2024 - Aug. 2024

Stack: Scala, Typescript, Terraform, Jenkins, AWS, Kibana
  • Migration of the service we use to encode ads from a legacy, discontinued API to a newer one so we could move forward and introduce newer & more performant encodings.
    • Refactored the flow (more straightforward)
    • Optimized SQL transactions (batch writes), and parallelized what could be
    • Double run between the old and new implementation to find potential discrepancies
  • Began cleaning up some legacy parts of the format (the ads integration & trackings for visibility, duration played...) to reduce accidental complexity and improve development speed, as well as confidence in the codebase. Since it's a critical part of the delivery each change affecting the codebase is going through an A/B test to ensure there's no regression.

End of studies project

Conecs.io, Montpellier, France

Dec. 2023 - Feb. 2024

Stack: Rust, Advanced Encryption Methods
  • POC on a privacy-preserving storage for clinical data with special encryption methods. The goal is to allow re-using & sharing data easily across multiple actors, only if the patient allows it.
  • Reviewed several research papers to understand how these methods work, their use cases, limitations, risks, etc.
  • Implemented a small POC with Rust:
    • Extremely CPU-efficient
    • A POC isn't used in production, so it was a nice opportunity to learn a new language :)

2023

Software Engineer Intern

Scala Center, Lausane, Switzerland

Apri. 2023 - Aug. 2023

Tech: Scala, JVM, Scala-Java interop, Reflection

Improved the Scala debugger in VS Code with a new evaluation mode, using runtime reflection. It is limited to expressions that can be correctly evaluated at runtime (e.g., in the case of an overridden method, using reflection we could pick a method different from what the compiler would have chosen).

The evaluation is performed in 2 phases:

  1. Validate the expression: correct syntax, evaluable using reflection. Transform the expression AST into a custom ADT representing the expression, that can later be evaluated.
  2. Evaluate the expression.

This evaluation includes a pre-evaluation mode. Instead of using the compile-time type of a value, if possible we evaluate it and use its runtime type. It eases the access to runtime information during debugging.

I particularly enjoyed the compiler-related part of the project: ASTs, type checking, overload resolution, etc.

As a secondary project, I helped with the implementation of Hot Code Replacement (HCR). This means that we can now launch a debug session, change the code, and just reload the session (so we keep the "progress" made +/-) instead of restarting from the beginning.

2022

Assistant Software Engineer

Teads, Montpellier, France

Jun. 2022 - Aug. 2022

Stack: Scala, Typescript, gRPC, React, Git, GitHub, Cypress, Jenkins

2-month internship where I worked on the V2 of their demo application. I did some backend development with Scala & the Typelevel ecosystem (Cats-effect, doobie...) followed by a more front-end part (in the end I worked on both backend & frontend at the same time).

For each feature I developed, I was responsible for the whole lifecycle: code, test, deploy, refactor, fix bugs...