<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Nicolas Dupont</title>
    <description>The latest articles on DEV Community by Nicolas Dupont (@nidup).</description>
    <link>https://dev.to/nidup</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F363279%2F2240ff8a-af9c-4879-9f62-70778eae2ba5.jpeg</url>
      <title>DEV Community: Nicolas Dupont</title>
      <link>https://dev.to/nidup</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nidup"/>
    <language>en</language>
    <item>
      <title>How to Parse a CSV File in 4 Lines of PHP?</title>
      <dc:creator>Nicolas Dupont</dc:creator>
      <pubDate>Sat, 26 Mar 2022 14:02:43 +0000</pubDate>
      <link>https://dev.to/nidup/how-to-parse-a-csv-file-in-4-lines-of-php-enk</link>
      <guid>https://dev.to/nidup/how-to-parse-a-csv-file-in-4-lines-of-php-enk</guid>
      <description>&lt;p&gt;CSV is a standard format to integrate data in applications; when doing so, we often have to import data based on this format. PHP comes with native functions to open a file and parse CSV rows.&lt;/p&gt;

&lt;p&gt;Let's take the file &lt;code&gt;classic-composers.csv&lt;/code&gt; and its content as an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"First name","Last name","Born","Died"
"Carl Philipp Emanuel","Bach","8 March 1714", "14 December 1788"
"Johann","Stamitz","18 June 1717","27 March 1757"
"Joseph","Haydn","31 March 1732","31 May 1809"
"Johann","Christian Bach","September 5, 1735","January 1, 1782"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can also look at it as a table:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;First name&lt;/th&gt;
&lt;th&gt;Last name&lt;/th&gt;
&lt;th&gt;Born&lt;/th&gt;
&lt;th&gt;Died&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Carl Philipp Emanuel&lt;/td&gt;
&lt;td&gt;Bach&lt;/td&gt;
&lt;td&gt;8 March 1714&lt;/td&gt;
&lt;td&gt;14 December 1788&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Johann&lt;/td&gt;
&lt;td&gt;Stamitz&lt;/td&gt;
&lt;td&gt;18 June 1717&lt;/td&gt;
&lt;td&gt;27 March 1757&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Joseph&lt;/td&gt;
&lt;td&gt;Haydn&lt;/td&gt;
&lt;td&gt;31 March 1732&lt;/td&gt;
&lt;td&gt;31 May 1809&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Johann&lt;/td&gt;
&lt;td&gt;Christian Bach&lt;/td&gt;
&lt;td&gt;September 5, 1735&lt;/td&gt;
&lt;td&gt;January 1, 1782&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;We can parse and display each line using 4 simple lines of PHP code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="c1"&gt;// open the file in read mode&lt;/span&gt;
&lt;span class="nv"&gt;$file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;fopen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'data/classic-composers.csv'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"r"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
&lt;span class="c1"&gt;// browse each csv line&lt;/span&gt;
&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nv"&gt;$row&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;fgetcsv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// print the line content&lt;/span&gt;
 &lt;span class="nb"&gt;var_dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$row&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// close the file&lt;/span&gt;
&lt;span class="nb"&gt;fclose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$handle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is the output of the execution:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
  &lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="s2"&gt;"First name"&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
  &lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="s2"&gt;"Last name"&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
  &lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="s2"&gt;"Born"&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
  &lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="s2"&gt;"Died"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
  &lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="s2"&gt;"Carl Philipp Emanuel"&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
  &lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="s2"&gt;"Bach"&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
  &lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="s2"&gt;"8 March 1714"&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
  &lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="s2"&gt;"14 December 1788"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// and more lines&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it for this simple example using native functions!🚀&lt;/p&gt;

&lt;p&gt;If you want to go further with CSV manipulation in PHP, you can explore this comprehensive guide on &lt;a href="https://www.nidup.io/blog/manipulate-csv-files-in-php"&gt;reading and writing CSV files in PHP&lt;/a&gt;. It explores modern libraries to parse CSV, explain how to read a one million-line CSV file using a minimum of memory, and share advanced tips and tricks.💡&lt;/p&gt;

</description>
      <category>csv</category>
      <category>php</category>
      <category>file</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>What Is the Next Step in Your Software Developer Career?</title>
      <dc:creator>Nicolas Dupont</dc:creator>
      <pubDate>Wed, 19 Aug 2020 11:51:11 +0000</pubDate>
      <link>https://dev.to/nidup/what-is-the-next-step-in-your-software-developer-career-2i9b</link>
      <guid>https://dev.to/nidup/what-is-the-next-step-in-your-software-developer-career-2i9b</guid>
      <description>&lt;p&gt;You're working as a software developer for a few years and wonder what will be the next step in your career?&lt;/p&gt;

&lt;p&gt;Let's review the different paths, the options you may choose to continue to progress and grow your impact.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Technical Expert Path
&lt;/h2&gt;

&lt;p&gt;You're interested in designing and mastering complex architectures, in teaching technical aspects to your teammates. You like to explain different designs, their pros/cons in the given context, and support solid tech decision making.&lt;/p&gt;

&lt;p&gt;The technical expertise path could be a good fit! It leads you to design some larger systems by taking into account architecture, scalability, and security concerns.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Lead Developer Path
&lt;/h2&gt;

&lt;p&gt;You're interested in leading a technical team and animating this team to collaborate efficiently together. You like to organize the work and to follow the progress on your project. You enjoy making or supporting relevant technical trade-offs. The ones that balance well the business &amp;amp; technical aspects.&lt;/p&gt;

&lt;p&gt;This lead dev path could be an excellent fit! It requires to balance strong technical leadership with an excellent team animation to make the project a success. If you wonder what aspects you need to work on to follow this path, I published an extensive article on &lt;a href="https://www.nidup.io/blog/how-to-become-a-lead-developer"&gt;How to Become a Lead Developer?&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Engineering Manager Path
&lt;/h2&gt;

&lt;p&gt;You're interested in mentoring your teammates and supporting the development team to grow its impact. The business attracts you, and you like to tie the business goals with the technical strategy. You enjoy thinking about team organization. You love to get involved in hiring, onboarding, and training.&lt;/p&gt;

&lt;p&gt;The engineering manager path could be a great fit! It's a significant shift, almost a new career. It requires changing your focus from tech leadership to people leadership, to working a lot on communication and organizational topics. If you wonder what aspects you need to work on to follow this path, I published an extensive article on &lt;a href="https://www.nidup.io/blog/how-to-become-an-engineering-manager"&gt;How to Become an Engineering Manager?&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Last Thoughts
&lt;/h2&gt;

&lt;p&gt;Each developer's journey is different; there is no one-size-fits-all. What matters is to choose a path that matches what you like to do and who you'd like to become.&lt;/p&gt;

&lt;p&gt;Moving into a different position is, first and foremost, a choice. Once you've decided, you'd raise your chance to reach this role with proper preparation. Your current job already offers plenty of opportunities to train yourself, what matters is to identify them, and to be ready to catch them.&lt;/p&gt;

&lt;p&gt;Do you envision any other paths to progress in your developer's career?&lt;/p&gt;

</description>
      <category>career</category>
      <category>leadership</category>
      <category>management</category>
      <category>architecture</category>
    </item>
    <item>
      <title>How to Become a Lead Developer?</title>
      <dc:creator>Nicolas Dupont</dc:creator>
      <pubDate>Sat, 15 Aug 2020 11:42:05 +0000</pubDate>
      <link>https://dev.to/nidup/how-to-become-a-lead-developer-j63</link>
      <guid>https://dev.to/nidup/how-to-become-a-lead-developer-j63</guid>
      <description>&lt;p&gt;Starting in 2009, I've worked as a software engineer, lead developer, engineering manager, vice-president of engineering, and chief product officer. During this journey, I had the opportunity to support talented engineers in different career transitions, from individual contributor to lead developer, from lead developer to engineering manager. I found many shared struggles while mentoring them; that's why I'm writing a series on how to get prepared to move into these positions.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a Lead Developer?
&lt;/h2&gt;

&lt;p&gt;The Lead Developer is the technical leader of a team of developers. She's in charge of the success of a project. She animates the delivery to build the right things, the right way, and on time.&lt;/p&gt;

&lt;p&gt;She is responsible for advocating on best practices, communicating on the progress, mentoring other developers, providing technical guidance to the team, and deciding on technical trade-offs.&lt;/p&gt;

&lt;p&gt;Depending on the organization, we can refer to a lead developer as a lead engineer, a team lead, a technical project manager, or a tech lead.&lt;/p&gt;

&lt;h2&gt;
  
  
  Career Path
&lt;/h2&gt;

&lt;p&gt;In an &lt;a href="https://www.nidup.io/garden/engineering-career-ladders"&gt;engineering career ladder&lt;/a&gt;, the lead developer position often sits between the individual contributor track and the people manager track. &lt;/p&gt;

&lt;p&gt;It's not an engineering manager position as engineering management includes people management responsibilities. However, moving into a lead developer position is a solid first step in engineering management.&lt;/p&gt;

&lt;p&gt;Moving into a lead developer role is also a significant progression in the technical leadership track. It's an excellent way to get prepared to become a software architect, a staff engineer, or a principal engineer.&lt;/p&gt;

&lt;p&gt;This role opens a lot of opportunities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Become a Lead Developer? 
&lt;/h2&gt;

&lt;p&gt;If you want to become a lead developer, a critical aspect to consider is the shift of responsibilities.&lt;/p&gt;

&lt;p&gt;A lead dev is responsible for the result of a team on a project. It's not anymore about your own technical excellence, or what you individually build or contribute to building. It's now about the success of the development team. Let's discuss the main areas to work on to be prepared to move to a lead developer position.&lt;/p&gt;

&lt;h3&gt;
  
  
  Technical guidance
&lt;/h3&gt;

&lt;p&gt;You can usually pretend to become a lead developer after a few years of experience as a developer or software engineer. These first years are critical to consolidate your technical skills and learn to be autonomous in your developments.&lt;/p&gt;

&lt;p&gt;You start to have a solid sense of how to build things to answer the business needs, and you did it with success on several projects.&lt;/p&gt;

&lt;p&gt;A useful exercise is to discover how to articulate larger pieces of software. You need to understand the technical decisions and the trade-offs regarding a given architecture. You can muscle your tech decision-making by reviewing existing projects and chatting with current tech leaders on how and why we build this way.&lt;/p&gt;

&lt;h3&gt;
  
  
  Be a role model
&lt;/h3&gt;

&lt;p&gt;As for any leadership position, it's critical to embody the excellence and the behavior that your organization expects for developers.&lt;/p&gt;

&lt;p&gt;If you lead a team of developers, you become their representative, and they deserve to be well represented. To become a lead developer, you need to become first a great developer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Work organization
&lt;/h3&gt;

&lt;p&gt;A critical success factor is how the team collaborates.&lt;/p&gt;

&lt;p&gt;Get interested in project management practices. How to prepare the work? How to slice the tasks? How to measure and communicate on the progress?&lt;/p&gt;

&lt;p&gt;Get interested in each other skills. Who is comfortable doing what? What your teammates like or not like? What do they want to learn?&lt;/p&gt;

&lt;p&gt;Any teamwork requires some upfront preparation and a proper animation to collaborate efficiently. Ask if you can contribute in a way or another in these aspects. Your tech lead or manager should be happy to delegate you some parts of it, and it will be an enjoyable exercise to train your leadership muscle.&lt;/p&gt;

&lt;h3&gt;
  
  
  Be a mentor
&lt;/h3&gt;

&lt;p&gt;A lead developer contributes actively in helping her teammates to learn, to become better software engineers.&lt;/p&gt;

&lt;p&gt;There are plenty of opportunities to strengthen your mentoring skills. You can improve by explaining an intricate part of the tech stack. You can also help to onboard a new developer on the team. You can mentor a junior developer or an intern.&lt;/p&gt;

&lt;p&gt;The most important aspect is to have the proper attitude: be always willing to help. You can evaluate your progress by how often your teammates are coming to you to ask for your help or work with you.&lt;/p&gt;

&lt;h3&gt;
  
  
  Communication
&lt;/h3&gt;

&lt;p&gt;The foundation of efficient teamwork is efficient communication. As a team, we need a shared understanding: why we do things, what's our mission, what our goals are. &lt;/p&gt;

&lt;p&gt;Frictions, duplicate work, or a waste of effort often come from a few misunderstandings between team members. To mitigate this inherent challenge, you'll need to work on your communication skills.&lt;/p&gt;

&lt;p&gt;You can improve by training yourself to be crystal clear when communicating. Listen carefully, ask genuine questions to ensure you understand correctly, re-phrase with your own words. Adapt your message to the audience's knowledge and domain of expertise. &lt;/p&gt;

&lt;p&gt;Contribute to helping the team communicate well, document the significant changes, and amplify the essential pieces of information.&lt;/p&gt;

&lt;h3&gt;
  
  
  Earn Trust
&lt;/h3&gt;

&lt;p&gt;Last but not least, to move to a lead developer position, you will need to earn your teammates' and manager' trust.&lt;/p&gt;

&lt;p&gt;We build trust by our actions and our behavior, by being consistent, by being reliable, by helping others.&lt;/p&gt;

&lt;p&gt;A lot of small and concrete actions will contribute to building the strong grounds, the foundations of the team's trust. And if you want to become a lead developer, you can start making these actions right now!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I formerly published the &lt;a href="https://www.nidup.io/blog/how-to-become-a-lead-developer"&gt;How to Become a Lead Developer&lt;/a&gt; story on my blog. I write a couple of articles per month; about software engineering, product management, and work organization.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>leaddeveloper</category>
      <category>leadengineer</category>
      <category>teamlead</category>
      <category>leadership</category>
    </item>
    <item>
      <title>Your Error Messages Deserve Some Love</title>
      <dc:creator>Nicolas Dupont</dc:creator>
      <pubDate>Sun, 26 Apr 2020 14:59:06 +0000</pubDate>
      <link>https://dev.to/nidup/your-error-messages-deserve-some-love-g9j</link>
      <guid>https://dev.to/nidup/your-error-messages-deserve-some-love-g9j</guid>
      <description>&lt;p&gt;I recently attended a compelling presentation. 😍&lt;/p&gt;

&lt;p&gt;In our distributed company, English is a second or third language for most of the teammates. We have a dedicated English teacher. Camille runs training and workshops to help us to improve.&lt;/p&gt;

&lt;p&gt;Camille recently worked on our products' error messages with our product management team.&lt;/p&gt;

&lt;p&gt;The first goal was to ensure the correctness of these messages.&lt;/p&gt;

&lt;p&gt;She pushed the exercise at a far more advanced level.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Error messages&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When running into an error message, the experience is, most of the time, frustrating.&lt;/p&gt;

&lt;p&gt;Something unexpected happened, and it breaks your productivity flow. You now have to understand why this piece of software does not work the way it's supposed to. You have to figure out what to do to be able to move on. And you have more interesting to do.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;An error message has to be crystal clear&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Each message has to guide the user and must be self-explanatory, concise, and accurate.&lt;/p&gt;

&lt;p&gt;When we write error messages, the temptation is high to detail as much as possible. What happened, what are the business rules. We should focus on helping the user to work around the issue and to move on.&lt;/p&gt;

&lt;p&gt;Error messages don't have to be boring or impersonal. An error message is a way to engage with your users. It can be user friendly, using "you" and "we" pronouns creates a more human feeling.&lt;/p&gt;

&lt;p&gt;For instance:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Cannot remove this attribute used as a variant axis in a family variant."&lt;/p&gt;

&lt;p&gt;"You cannot remove this attribute because it is used as a variant axis in a family variant."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Our messages have to be consistent across your whole application. We can adapt their content depending on the user persona we're talking too. But keeping a consistent tone of voice is essential.&lt;/p&gt;

&lt;p&gt;Another good practice is to write them positively and to avoid negative sentences.&lt;/p&gt;

&lt;p&gt;For instance:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This value should not be blank."&lt;/p&gt;

&lt;p&gt;"This value is required."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Conciliate these pieces of advice can be challenging, what to do when in doubt?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The Platinium rule, if you're not sure, the rule overriding all the others, is your message has to be crystal clear." (Camille B.)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Error messages are a critical part of the User eXperience&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Looking at most of the software I use, error messages appear to me as a second class citizen of the UX.&lt;/p&gt;

&lt;p&gt;We can fix this in our industry. We can improve. We can craft great error messages. We can make them more engaging and as enjoyable as success messages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Last words&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Dear Camille, thank you! For pointing out this problem, for evangelizing and training our teams. Write great error messages is a step forward to deliver a more engaging experience to our users. 🦄&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I formerly published the &lt;a href="https://www.nidup.io/blog/write-engaging-error-messages"&gt;Your Error Messages Deserve Some Love&lt;/a&gt; story on my blog; it gathers short stories about product management, software engineering, and work organization. 📝&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ux</category>
      <category>writing</category>
      <category>tips</category>
    </item>
  </channel>
</rss>
