<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Welcome to my blog on Arnaud Langlade</title><link>https://www.arnaudlanglade.com/blog/</link><description>Recent content in Welcome to my blog on Arnaud Langlade</description><generator>Hugo</generator><language>en</language><managingEditor>contact@arnaudlanglade.com (Arnaud Langlade)</managingEditor><webMaster>contact@arnaudlanglade.com (Arnaud Langlade)</webMaster><copyright>© Arnaud Langlade</copyright><lastBuildDate>Tue, 14 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.arnaudlanglade.com/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Build less to deliver better: the real cost of unnecessary features</title><link>https://www.arnaudlanglade.com/unnecessary-features-software-complexity/</link><pubDate>Tue, 14 Apr 2026 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/unnecessary-features-software-complexity/</guid><description>&lt;p>When a product grows, teams often think their problems come from technical complexity.&lt;/p>
&lt;p>People often blame technical debt, complex code, or the lack of tests.&lt;/p></description></item><item><title>Building software is not just writing code</title><link>https://www.arnaudlanglade.com/building-software-not-just-writing-code/</link><pubDate>Sun, 05 Apr 2026 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/building-software-not-just-writing-code/</guid><description>&lt;p>I have seen many teams produce code, sometimes of very good quality, without really delivering value.&lt;/p>
&lt;p>Not because they lacked skills. But because the conditions to deliver properly were not there: a feature that was too big, no user feedback, a fragile technical foundation, or deployments that were too risky.&lt;/p></description></item><item><title>Fullstack: someone who is expert in nothing?</title><link>https://www.arnaudlanglade.com/fullstack-vs-specialization-tech-teams/</link><pubDate>Sat, 28 Mar 2026 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/fullstack-vs-specialization-tech-teams/</guid><description>&lt;p>You have probably already heard this sentence:&lt;/p>
&lt;p>“A fullstack developer is someone who is expert in nothing.”&lt;/p>
&lt;p>A few years ago, I thought the same.&lt;/p></description></item><item><title>The repository design pattern</title><link>https://www.arnaudlanglade.com/repository-design-pattern/</link><pubDate>Mon, 08 Apr 2024 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/repository-design-pattern/</guid><description>&lt;p>The repository is a valuable design pattern for managing the persistence and retrieval of domain objects. It ensures a clean separation between the domain model and the persistence model, aiming to hide the complexity of the object’s state storing.&lt;/p></description></item><item><title>SOLID principles: Understanding the single responsibility principle</title><link>https://www.arnaudlanglade.com/solid-single-responsibility-principle/</link><pubDate>Mon, 18 Mar 2024 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/solid-single-responsibility-principle/</guid><description>&lt;p>The single responsibility principle (SRP) is the first of the five SOLID principles. It may be the simplest SOLID principles to understand, but it is not always easy to apply, especially if you’re a junior developer. What does this principle say?&lt;/p></description></item><item><title>SOLID principles: Understanding the dependency inversion principle</title><link>https://www.arnaudlanglade.com/solid-dependency-inversion-principle/</link><pubDate>Mon, 26 Feb 2024 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/solid-dependency-inversion-principle/</guid><description>&lt;p>The dependency inversion principle (DIP) is one of the SOLID principles. It is a crucial concept in object-oriented programming (OOP) because it highlights the importance of decoupling high-level modules from low-level modules. It helps to make code more modular, flexible, and maintainable by ensuring that high-level modules depend on abstractions rather than concrete implementations. Let’s have a look at the wikipedia definition and understand its meaning:&lt;/p></description></item><item><title>How I built MikadoApp, an open-source application for the Mikado Method</title><link>https://www.arnaudlanglade.com/built-mikadoapp-open-source/</link><pubDate>Mon, 05 Feb 2024 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/built-mikadoapp-open-source/</guid><description>&lt;p>In this blog post, I will explain how I built MikadoApp and the choices I made. If you are not familiar with the Mikado Method, I encourage you to read the blog I’ve written to understand how you can break down a big task into smaller ones:&lt;/p></description></item><item><title>Three types of React components for an effective testing strategy</title><link>https://www.arnaudlanglade.com/react-testing-strategy/</link><pubDate>Mon, 15 Jan 2024 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/react-testing-strategy/</guid><description>&lt;p>Automated tests are crucial for building robust software. They allow you to enhance existing features or add new ones without pressure because they ensure the application works without regression.&lt;/p></description></item><item><title>Testing a React application: Secure your tests from internationalization impact</title><link>https://www.arnaudlanglade.com/test-strategy-i18n-react-application/</link><pubDate>Mon, 11 Dec 2023 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/test-strategy-i18n-react-application/</guid><description>&lt;p>In my previous company, we automated the translation process. We used Lokalise, a cloud-based localization and translation management system. The developers imported all translation keys into the system, while the OPS team was responsible for translating all the keys.&lt;/p></description></item><item><title>The Mikado Method: Small Steps, Big Improvements</title><link>https://www.arnaudlanglade.com/mikado-method/</link><pubDate>Mon, 27 Nov 2023 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/mikado-method/</guid><description>&lt;p>In this blog post, I will introduce the Mikado Method. This method helps solve complex problems without breaking your codebase, even if you need to introduce significant changes.&lt;/p></description></item><item><title>Open-Closed principle: Enhancing code modularity</title><link>https://www.arnaudlanglade.com/solid-open-close-principle/</link><pubDate>Mon, 13 Nov 2023 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/solid-open-close-principle/</guid><description>&lt;p>Have you missed my last blog post about the &lt;a href="https://www.arnaudlanglade.com/oop-inheritance-pitfalls.html">pitfalls of inheritance&lt;/a>
? I explain how it could be a bad idea to use it too much. Applying composition prevents this problem; it is better to work with small classes to easily assemble. In this blog post, I will talk about the open-closed principle. This principle facilitates composition and helps avoid relying too much on inheritance.&lt;/p></description></item><item><title>The pitfalls of OOP's inheritance: Why simple isn't always better</title><link>https://www.arnaudlanglade.com/oop-inheritance-pitfalls/</link><pubDate>Mon, 23 Oct 2023 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/oop-inheritance-pitfalls/</guid><description>&lt;p>In OOP, the simplest way to change the behavior of a class A is to create a class B that extends class A. Extensions allow you to override any public and protected methods of the parent class. That‘s quite simple, right?&lt;/p></description></item><item><title>Why breaking encapsulation is not a good idea</title><link>https://www.arnaudlanglade.com/oop-breaking-encapsulation-bad-idea/</link><pubDate>Tue, 19 Sep 2023 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/oop-breaking-encapsulation-bad-idea/</guid><description>&lt;p>In this blog post, I would like to speak about an important concept in Oriented Object Programming which is the encapsulation principle.&lt;/p></description></item><item><title>Don’t test private methods</title><link>https://www.arnaudlanglade.com/software-testing-private-methods/</link><pubDate>Mon, 17 Jul 2023 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/software-testing-private-methods/</guid><description>&lt;p>It is pretty easy to make mistakes when you start testing your code. One of the first mistakes I made was to test private methods. Spoiler alert: it was a bad idea because I had to use reflection to make them public to access them. If you need to test a private method, it probably means that your code is not well designed&lt;/p></description></item><item><title>Ease testing thanks to the dependency inversion design pattern</title><link>https://www.arnaudlanglade.com/software-testing-dependency-injection/</link><pubDate>Mon, 19 Jun 2023 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/software-testing-dependency-injection/</guid><description>&lt;p>In this new blog post, I would like to speak about the dependency inversion design pattern. This pattern makes your code more modular and helps to improve codebase testability. It’s quite simple and super powerful.&lt;/p></description></item><item><title>Use composition instead of props drilling</title><link>https://www.arnaudlanglade.com/react-composition-instead-of-props-drilling/</link><pubDate>Mon, 22 May 2023 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/react-composition-instead-of-props-drilling/</guid><description>&lt;p>In this blog post, I would like to speak about how composition can improve your React codebase. It’s easy to add a lot of props to your component to make them configurable but it’s not a good idea.&lt;/p></description></item><item><title>How to use custom React hook to increase application testability</title><link>https://www.arnaudlanglade.com/software-testing-react-hook/</link><pubDate>Tue, 04 Apr 2023 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/software-testing-react-hook/</guid><description>&lt;p>In my previous blog, I spoke about reducing coupling in a React app to improve testing. Now I will show you how a custom React hook can increase testability.&lt;/p></description></item><item><title>How to reduce coupling in your React app</title><link>https://www.arnaudlanglade.com/react-dependency-injection/</link><pubDate>Mon, 06 Mar 2023 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/react-dependency-injection/</guid><description>&lt;p>Today, I would like to cover dependency injection in React. I worked with several frameworks using tools to build and inject dependencies. It is pretty convenient if you apply the dependency inversion principle because you can easily change a dependency with another one.&lt;/p></description></item><item><title>What is the difference between CQS and CQRS patterns?</title><link>https://www.arnaudlanglade.com/difference-between-cqs-and-cqrs-patterns/</link><pubDate>Mon, 06 Feb 2023 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/difference-between-cqs-and-cqrs-patterns/</guid><description>&lt;p>I recently found out that I did not grasp those design patterns. There are a lot of resources on the Internet about them but they are not always accurate. That’s a shame because they are pretty simple. I will share my understanding of them with you.&lt;/p></description></item><item><title>Hexagonal architecture by example</title><link>https://www.arnaudlanglade.com/hexagonal-architecture-by-example/</link><pubDate>Mon, 09 Jan 2023 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/hexagonal-architecture-by-example/</guid><description>&lt;p>In this blog post, I would like to explain the basics of hexagonal architecture thanks to a simple example: a product catalogue. The catalogue manager can add new products through a user interface and the nightly cron task imports new products from the ERP.&lt;/p></description></item><item><title>What is the event sourcing pattern?</title><link>https://www.arnaudlanglade.com/event-sourcing-pattern/</link><pubDate>Mon, 28 Nov 2022 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/event-sourcing-pattern/</guid><description>&lt;p>Event sourcing consists in storing all changes that happened to an application as a sequence of events instead of only storing the current state of the application. The sum of all events is the current application state. When I heard about this pattern a few years ago, I was really confused. I used to only persist the current application state in a database and that was fine! So I asked myself do I need that?&lt;/p></description></item><item><title>My feedback about example mapping</title><link>https://www.arnaudlanglade.com/my-feedback-about-example-mapping/</link><pubDate>Mon, 31 Oct 2022 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/my-feedback-about-example-mapping/</guid><description>&lt;p>Example mapping is a workshop that gathers tech and non-tech people to ensure everyone has the same understanding of the domain problem. It also helps clarify the acceptance criteria for a given story. Because it’s always better to understand what is expected and raise all bottlenecks before developing a story.&lt;/p></description></item><item><title>How I have learned programming by myself</title><link>https://www.arnaudlanglade.com/self-taught-learn-programming-by-myself/</link><pubDate>Mon, 17 Oct 2022 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/self-taught-learn-programming-by-myself/</guid><description>&lt;p>I am, what we call, a self-taught. I studied telecommunications and networks at school, unfortunately, I only learned the basics of programming. I had to learn and improve my skills by myself for many years during my free time. I did not take the easiest path to learn! That’s why I wanted to share with you my own experience and what I did to learn software development. I hope this post will help some of you.&lt;/p></description></item><item><title>Increase your test quality thanks to builders or factories</title><link>https://www.arnaudlanglade.com/software-testing-builders-factories/</link><pubDate>Mon, 10 Oct 2022 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/software-testing-builders-factories/</guid><description>&lt;p>In a previous &lt;a href="http://arnolanglade.github.io/you-should-not-expose-objects-state-to-test-them.html" target="_blank" rel="nofollow noopener noreferrer">blog post&lt;/a>
, I explained why it’s better to compare object instances instead of exposing their state to test them. This avoids breaking encapsulation and it does not have any impact on their design.&lt;/p></description></item><item><title>How to handle user permissions through command bus middleware</title><link>https://www.arnaudlanglade.com/permissions-command-bus-middleware/</link><pubDate>Mon, 26 Sep 2022 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/permissions-command-bus-middleware/</guid><description>&lt;p>Applying user permissions might be very complex and can lead to introducing a lot of accidental complexity to your application. In this blog post, I want to share with you how to do it by simply adding a middleware to your command bus.&lt;/p></description></item><item><title>The command bus design pattern</title><link>https://www.arnaudlanglade.com/command-bus-design-pattern/</link><pubDate>Mon, 12 Sep 2022 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/command-bus-design-pattern/</guid><description>&lt;h2 id="what-is-a-bus">What is a bus?&lt;/h2>
&lt;p>Let’s start with the basics, what is a bus? In computer science, a bus is a system that connects several components and transfers data between them. In software, those components are called middleware. A middleware processes an incoming request and returns a response. As you can see in the schema below, the main advantage of a bus is that it is highly customizable as you can add as many middleware as you want.&lt;/p></description></item><item><title>Objective: set up your projects more easily</title><link>https://www.arnaudlanglade.com/makefile-setup-your-symfony-projects-more-easily/</link><pubDate>Wed, 02 Jun 2021 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/makefile-setup-your-symfony-projects-more-easily/</guid><description>&lt;p>For the last decade I worked on several more or less complex projects. I often had problems with their installation. Sometimes, the project was not documented or the existing documentation was not up to date. I had to run commands but I did not understand all of them. When I got errors it was hard to understand what happened. That was not always simple.&lt;/p></description></item><item><title>Why unit testing can be hard?</title><link>https://www.arnaudlanglade.com/unit-testing-common-mistakes/</link><pubDate>Mon, 03 May 2021 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/unit-testing-common-mistakes/</guid><description>&lt;blockquote>
&lt;p>Unit tests are typically automated tests written and run by software developers to ensure that a section of an application (known as the &amp;ldquo;unit&amp;rdquo;) meets its design and behaves as intended&lt;/p></description></item><item><title>Why you should not expose objects' state to test them</title><link>https://www.arnaudlanglade.com/software-testing-do-not-break-encapsulation/</link><pubDate>Tue, 13 Apr 2021 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/software-testing-do-not-break-encapsulation/</guid><description>&lt;p>To introduce this topic, let’s have a look at the PHP documentation to understand how object comparison works using the comparison and identity operators.&lt;/p></description></item><item><title>Symfony, Hexagonal architecture and CQRS</title><link>https://www.arnaudlanglade.com/hexgonal-architecture-and-cqrs-with-symfony/</link><pubDate>Tue, 30 Mar 2021 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/hexgonal-architecture-and-cqrs-with-symfony/</guid><description>&lt;p>In this blog post, I will explain how I organized my last Symfony projects.I mainly use Hexagonal Architecture and CQRS. Keep in mind that I did not aim to implement these architectures strictly by the book. I only took concepts that helped me to create a straightforward and well-organized codebase.&lt;/p></description></item><item><title>Persisting entities without ORM</title><link>https://www.arnaudlanglade.com/repository-persisting-entity-without-orm/</link><pubDate>Tue, 23 Mar 2021 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/repository-persisting-entity-without-orm/</guid><description>&lt;p>Today, I will talk about persisting entities without ORM. First, I will introduce the repository pattern because it provides a good abstraction to manage object persistence. Then, we will see what are the impacts on the entity design.&lt;/p></description></item><item><title>OOP: how to build an object</title><link>https://www.arnaudlanglade.com/oop-primary-and-secondary-constructors/</link><pubDate>Wed, 10 Mar 2021 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/oop-primary-and-secondary-constructors/</guid><description>&lt;p>In this new blog post, I want to talk about object building more specifically about primary and secondary constructors. The primary constructor is the default way to build an object with all its dependencies. The secondary constructors provide other ways to build objects depending on use cases.&lt;/p></description></item><item><title>How to validate a command?</title><link>https://www.arnaudlanglade.com/how-to-validate-a-command/</link><pubDate>Thu, 04 Mar 2021 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/how-to-validate-a-command/</guid><description>&lt;p>In my previous &lt;a href="http://arnolanglade.github.io/command-handler-patterns.html" target="_blank" rel="nofollow noopener noreferrer">blog post&lt;/a>
, I talked about command and command handler design patterns. I got several questions about data validation and how to give feedback to users. We are going to talk about several kinds of data validation in this blog post. We will start with domain validation, this validation ensures we can build our domain objects in a good state depending on business rules. Then, we will talk about command validation and how we can use it to give feedback to users when they submit data to the application.&lt;/p></description></item><item><title>Command and command handler design pattern</title><link>https://www.arnaudlanglade.com/command-handler-patterns/</link><pubDate>Thu, 25 Feb 2021 00:00:00 +0000</pubDate><author>contact@arnaudlanglade.com (Arnaud Langlade)</author><guid>https://www.arnaudlanglade.com/command-handler-patterns/</guid><description>&lt;p>This pattern is really interesting; it can help you handle use cases. A command represents the user&amp;rsquo;s intent, while the command handler performs the actions needed to achieve the use case. Let’s dig a bit into these two concepts.&lt;/p></description></item></channel></rss>