Damien Beaufils

Freelance Software Crafter, owner @ CLWeb Charlevoix

I am a passionate developer for more than 16 years. Convinced that working software is good but not enough, I work with my clients mainly as a Tech Lead in agile projects to build well-crafted software. I have worked as a Tech Lead for high stakes projects such as government websites or international sports tournaments websites.

I also like to share my knowledge and therefore I am a trainer on software development practices such as Test Driven Development, and I regularly present talks in meetups or conferences such as Web À Québec.

Finally, I am a co-founder of the SoCraTes Canada conference.

I can help you if you have one of these symptoms:

  • Difficulties to add new features to an existing legacy codebase
  • More time spent to fix bugs than to add new features
  • No clear definition of what clean code or software quality are
  • Not sure how to write good automated tests and which kind of tests you should write
  • Too much technical debt
  • Having still the same issues even when working on a codebase started less than 1 year ago
  • Willing to create a well-crafted software that you won’t throw away in 3 years

You can find my detailed resume here.

Feel free to contact me using any channel below:


Software development practices
  • Test Driven Development (TDD)
  • Legacy code refactoring
  • Clean Code
  • Code review
  • Pair-programming
  • Mob-programming
  • Clean Architecture
  • Domain-Driven Design (DDD)
Java-ish technologies
  • Java 8+
  • Spring (Core, MVC, Boot)
  • Hibernate
  • JUnit
  • Mockito
  • Maven
  • Gradle
JavaScript-ish technologies
  • JavaScript
  • TypeScript
  • Nuxt.js
  • NestJS
  • Jest
  • Jenkins
  • GitLab CI
  • Clever Cloud
  • OpenShift
  • Docker
  • IntelliJ IDEA
  • WebStorm
  • Linux


A collection of articles, podcasts or talks about software craftsmanship.

Talk - La couverture de code : un indicateur melon d'eau ?

A talk I gave during Web À Québec 2022 about software quality KPI, the wrong ones - like code coverage - and the good ones - like mutation score using mutation testing tools.

May 2022

Article - To DRY or not to DRY?

A blog post about DRY (Don't Repeat Yourself) principle and when not to apply it.

November 2018

Podcast - Café Craft podcast #15 : Renverser la pyramide des tests !

A podcast where I have been interviewed to talk about the Test Pyramid model.

January 2018

Talk - Comment être Tech Lead dans une pizza team XXL sans finir sous l'eau ?

A talk I gave during Devoxx France 2017 about the Tech Lead role and about the Software Craftsmanship practices in a software development team.

April 2017

Wait! There's more..

See all Publications for more examples!


Freelance Senior Consultant

Conseil Logiciel & Web (CLWeb) Charlevoix

Clermont, QC, Canada

December 2022 - present

CTO & Senior Consultant

Zenika Canada

Montreal, QC, Canada

November 2018 - December 2022

Senior Consultant

OCTO Technology

Paris, France

June 2013 - September 2018



Villejuif, France

July 2014 - December 2016

Mobile Engineer & Technical Leader


Paris, France

January 2011 - May 2013

Software engineer

Institut d’Astrophysique Spatiale, CNRS

Orsay, France

Avril 2010 - December 2010

Subsitute teacher

Université Paris-Sud 11

Orsay, France

November 2008 - Mars 2010

Web developer


Charleville-Mézières, France

July 2009 - October 2009


Crédit Agricole Corporate and Investment Bank

Saint-Quentin-en-Yvelines, France

September 2006 - September 2008


SUPINFO International University

Master of Science
Expert in Computer and Information Systems

Paris, France

2008 - 2010

Université Paris-Sud 11

Bachelor of Science
System administrator

Orsay, France

2007 - 2008

Institut Universitaire de Technologie

Associate of Science
Software engineering

Orsay, France

2007 - 2008


This section contains articles migrated from my old Wordpress site.

Server-Sent Events with Nuxt.js (Vue.js) and Nginx proxy

Suppose you have a Nuxt.js (Vue.js) application which calls a backend and which is behind a Nginx reverse proxy. If your backend stream Server-Sent Events (SSE) using text/event-stream content-type, you may have these errors: 504 (Gateway Time-out) or ERR_INCOMPLETE_CHUNKED_ENCODING (in Chrome). If you want to make SSE works with your Nuxt.js application which is behind a Nginx reverse proxy, you have to do 2 things : Enable long running connections in Nginx Add these lines in your Nginx configuration:

November 30, 2017

How to properly encrypt data using JPA converters and Spring Data JPA

TL;DR: all code is directly available on GitHub: https://github.com/damienbeaufils/spring-data-jpa-encryption-example Each time I want to encrypt entity fields values with JPA converters, I end up reading this blog post. This example is clear and functional, but has no unit or integration tests, and I thought the code could be more decoupled to avoid duplication when having multiple converters. So I wrote an example using Spring Boot and Spring Data JPA, with a User entity which have different fields: id (a Long), firstName (a String), lastName (a String), email (a String), birthDate (a LocalDate) and creationDate (a LocalDateTime).

July 21, 2017

Implementing a SOAP client with CXF using Play Framework 2.x

TL;DR: if you want to skip the tutorial, all code is directly available on GitHub: https://github.com/damienbeaufils/soap-client-with-cxf-using-play EDIT June 2016: code on my GitHub repository updated for Play Framework 2.5! Play 2.4 version is still available here. I was working on a new client product, and I had to plug a web application built with Play Framework (and then sbt) to SOAP web services. How to do it? The need: be able to generate Java classes from one or many WSDL files, and use those classes with Play 2.

December 21, 2015

Wait! There's more..

See all Blogs for more examples!

Nifty tech tag lists from Wouter Beeftink | Page content generated from commit: a47d7c1