<?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: Victor A. Barzana</title>
    <description>The latest articles on DEV Community by Victor A. Barzana (@vbarzana).</description>
    <link>https://dev.to/vbarzana</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%2F137338%2F28619182-0985-4d32-8ffc-88f4e447b7b1.jpeg</url>
      <title>DEV Community: Victor A. Barzana</title>
      <link>https://dev.to/vbarzana</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vbarzana"/>
    <language>en</language>
    <item>
      <title>I Threw Away My Dev Coffee Cup This Morning</title>
      <dc:creator>Victor A. Barzana</dc:creator>
      <pubDate>Wed, 07 May 2025 07:44:41 +0000</pubDate>
      <link>https://dev.to/vbarzana/i-threw-away-my-dev-coffee-cup-this-morning-1o8i</link>
      <guid>https://dev.to/vbarzana/i-threw-away-my-dev-coffee-cup-this-morning-1o8i</guid>
      <description>&lt;p&gt;This morning, during my usual coffee routine, I finally decided to get rid of my old developer cup. I had been thinking about it for a while. It used to have that iconic meme: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"My code works, I don't know why. My code doesn't work, I don't know why."&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiotvwhk04tvy0v786fwd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiotvwhk04tvy0v786fwd.png" alt="Coffee Cup Developers" width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I realized I no longer resonate with that quote. In fact, I felt weird even showing that cup during meetings. Why? Because it’s not true anymore.&lt;br&gt;
I always know why my code works.&lt;/p&gt;

&lt;p&gt;After 9 years of formal study, 4 as a Computer Technician and 5 as a Software Engineer in Cuba, followed by 13 years in the industry working in Germany, Latvia, and Finland, I’ve built software for companies of all sizes and developed a deep-rooted expertise in the craft. From creating games in C#, to building full-stack frameworks from scratch in PHP, developing real-time WebSocket demos for the community, building scalable SaaS applications and and tackling complex projects for both startups and big cap enterprises, I’ve simply outgrown that meme long time ago!&lt;/p&gt;

&lt;h2&gt;
  
  
  The Early Years: Embracing Chaos
&lt;/h2&gt;

&lt;p&gt;In your first few years of software development, things often feel like magic. You write code, and sometimes it works—even when you don't understand how. Other times, it doesn't work, and no amount of Googling, Stack Overflow diving, or rubber ducking seems to help.&lt;/p&gt;

&lt;p&gt;This is normal. Every developer goes through it.&lt;/p&gt;

&lt;p&gt;When you're just starting, your mental model of how systems work is incomplete. Programming languages, frameworks, compilers, async behavior, state management, edge cases, and debugging tools are still new territory. You're learning to drive while also trying to build the car.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mid-Level Mastery: Patterns Start to Emerge
&lt;/h2&gt;

&lt;p&gt;Eventually, things begin to make more sense. You start to see recurring problems and recognize common solutions. Your bug reports get more precise. You rely less on hope and more on logic. You learn to read stack traces, track memory leaks, and use tools like debuggers and profilers effectively.&lt;/p&gt;

&lt;p&gt;You still hit unknowns, but now you know how to approach them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Senior Level and Beyond: Clarity Over Luck
&lt;/h2&gt;

&lt;p&gt;When you become truly experienced, the days of "I don’t know why" become rare. Instead of guessing, you investigate. You build systems with observability in mind. You write tests to cover edge cases before they bite you. You review logs and metrics before bugs become critical. You code defensively, architect with intention, and apply experience to avoid known pitfalls.&lt;/p&gt;

&lt;p&gt;You no longer celebrate when your code works – you &lt;em&gt;expect&lt;/em&gt; it to, because you've built it deliberately.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Meme Still Resonates (And That’s Okay)
&lt;/h2&gt;

&lt;p&gt;Even the best developers hit walls. APIs change, infrastructure evolves, and no one is immune to edge cases or integration nightmares. But the key difference is: experts have the mindset, tools, and experience to &lt;em&gt;figure out why&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;So next time your code works and you don’t know why, laugh it off—and then dig in to understand it. Every bug is a chance to learn. Every surprise is an opportunity to grow.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Personal Note from the Trenches
&lt;/h2&gt;

&lt;p&gt;Now, I’m riding the wave of the AI coding trend. People criticize it a lot, but it's an incredibly powerful tool. You can build full applications in just hours. This not only shifts the market but redefines the developer role. I believe that soon developers will evolve from writing code to reviewing it. No matter how deep your knowledge of syntax, data structures, algorithms, or architecture goes, AI will eventually surpass it all. There's no stopping it.&lt;/p&gt;

&lt;p&gt;Sometimes I build complete designs in Lovable.dev, download them locally, continue development in Cursor, and integrate prototypes with any backend framework I need. And the most important skill? Experience. The more you have, the better your reviews of AI-generated code will be.&lt;/p&gt;

&lt;p&gt;Sure, AI messes up sometimes. But that’s what the review process is for. I have AI make pull requests, and then I use tools like Coderabbit to review that AI-generated code—yes, AI reviewing AI. Add a strict code coverage policy on top of that, and I can rest easy knowing any change is well-tested and safe.&lt;/p&gt;

&lt;p&gt;Welcome to the new age of development. Review-driven. AI-accelerated. Experience-backed.&lt;br&gt;
Thank you for reading!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Enhancing Pino to Support (Message, Payload) Logging Without Breaking Pretty Logs</title>
      <dc:creator>Victor A. Barzana</dc:creator>
      <pubDate>Wed, 19 Mar 2025 12:14:04 +0000</pubDate>
      <link>https://dev.to/vbarzana/enhancing-pino-to-support-message-payload-logging-without-breaking-pretty-logs-2hjb</link>
      <guid>https://dev.to/vbarzana/enhancing-pino-to-support-message-payload-logging-without-breaking-pretty-logs-2hjb</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://getpino.io/" rel="noopener noreferrer"&gt;Pino&lt;/a&gt; is a &lt;strong&gt;blazing-fast logging library&lt;/strong&gt; for Node.js, built for &lt;strong&gt;structured logs&lt;/strong&gt; and high performance. However, one common frustration developers face is that &lt;strong&gt;Pino does not natively support logging a message alongside an object&lt;/strong&gt; the way &lt;code&gt;console.log&lt;/code&gt; does.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; this is my approach and a solution that works well for me. If you have any suggestions, improvements, or use a different method in your projects, I’d love to hear your thoughts!&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Migrating to Pino: Common Pitfalls and Issues&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;When migrating an existing codebase to Pino—whether from Winston, another logging framework, or even the raw console API—you may expect it to work similarly. However, Pino handles logging differently, requiring adjustments to your log statements.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1️⃣ See for example, logs that work in console or Winston but fail in Pino&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;User created&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;123&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;User created&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;123&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt; &lt;span class="c1"&gt;// Winston&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Expected Output:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;INFO  [12:30:45]  User created { userId: 123 }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Pino Output (Incorrect):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;INFO  [12:30:45]  User created
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🚨 The second argument is ignored because Pino expects an object as the first argument.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;2️⃣ Using &lt;code&gt;%j&lt;/code&gt; to Force JSON Logging&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;User created %j&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;123&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🚨 While this works, it &lt;strong&gt;flattens the JSON into a string&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DEBUG  [12:30:45]  User created {"userId": 123}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This &lt;strong&gt;prevents structured log processors from parsing the data properly&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;3️⃣ Moving Messages Inside JSON&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;To properly log both the message and object, you might be forced to rewrite logs like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;User created&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;123&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ This works with structured logging but requires changing every log statement in your codebase.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;4️⃣ The &lt;code&gt;%j&lt;/code&gt; Issue With Errors&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;If you log errors using &lt;code&gt;%j&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;hello %j&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;some crazy error&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🚨 The error &lt;strong&gt;loses its stack trace&lt;/strong&gt; and serializes incorrectly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DEBUG  [12:30:45]  hello {"error":{}}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With our fix:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;hello&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;some crazy error&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ Logs correctly in &lt;strong&gt;dev mode with &lt;code&gt;pino-pretty&lt;/code&gt;&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DEBUG  [12:30:45]  hello 
{
  "error": {
    "type": "Error",
    "message": "some crazy error",
    "stack": "Error: some crazy error
 at file.js:12:34"
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  ✅ &lt;strong&gt;Fixed Behavior: Error Serializer Works in Dev Mode&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;With our fix:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;hello&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;some crazy error&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🎉 Logs correctly in &lt;strong&gt;development environments with &lt;code&gt;pino-pretty&lt;/code&gt;&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DEBUG  [12:30:45]  hello 
{
  "error": {
    "type": "Error",
    "message": "some crazy error",
    "stack": "Error: some crazy error
 at file.js:12:34"
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Preserves the error stack trace&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Works seamlessly in &lt;code&gt;pino-pretty&lt;/code&gt; and JSON logs&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;The Right Fix: Supporting &lt;code&gt;(message, payload)&lt;/code&gt; While Preserving Pino's Structure&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To &lt;strong&gt;fix this behavior&lt;/strong&gt;, we need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Detect when the first argument is a string and second is an object&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Ensure &lt;code&gt;%s&lt;/code&gt;, &lt;code&gt;%d&lt;/code&gt;, and &lt;code&gt;%j&lt;/code&gt; placeholders still work correctly&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Preserve Pino’s structured JSON logging&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Ensure compatibility with &lt;code&gt;pino-pretty&lt;/code&gt;, transports, and serializers&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Let's fix your logger.ts file with just a few lines&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;pino&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;LogFn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Logger&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;LoggerOptions&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pino&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;isDevelopment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NEXT_PUBLIC_NODE_ENV&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;development&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NODE_ENV&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;development&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pinoConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;LoggerOptions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;level&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;LOG_LEVEL&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;debug&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="c1"&gt;// We recommend using pino-pretty in development environments only&lt;/span&gt;
  &lt;span class="p"&gt;...(&lt;/span&gt;&lt;span class="nx"&gt;isDevelopment&lt;/span&gt;
    &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;transport&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pino-pretty&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;options&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;colorize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;translateTime&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;HH:MM:ss Z&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;sync&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&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="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{}),&lt;/span&gt;
  &lt;span class="na"&gt;hooks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;logMethod&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;pino&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stdTimeFunctions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isoTime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;serializers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;err&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;pino&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stdSerializers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;pino&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stdSerializers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;err&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;logger&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;pino&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pinoConfig&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;logMethod&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Logger&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Parameters&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;LogFn&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;LogFn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// If two arguments: (message, payload) -&amp;gt; Format correctly&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;args&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;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;args&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;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;object&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;args&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="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;%&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;args&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="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;args&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="p"&gt;};&lt;/span&gt;

    &lt;span class="c1"&gt;// If the object is an Error, serialize it properly&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;args&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="k"&gt;instanceof&lt;/span&gt; &lt;span class="nb"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="nx"&gt;args&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="p"&gt;}&lt;/span&gt;

    &lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// any other amount of parameters, or order of parameters will be considered here&lt;/span&gt;
    &lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;apply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;args&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="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;How This Fix Works&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ &lt;strong&gt;(Message, Payload) Now Works as Expected&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;User created&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;123&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;➡️ Logs correctly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;INFO  [12:30:45]  User created { userId: 123 }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Before: ❌ Second argument ignored&lt;br&gt;&lt;br&gt;
Now: ✅ Structured properly.&lt;/p&gt;


&lt;h3&gt;
  
  
  ✅ &lt;strong&gt;Preserves String Interpolation&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;When a string interpolation is present in the message, we fallback to the default behavior of Pino to handle string interpolations. See pino docs for more details: &lt;a href="https://github.com/pinojs/pino/blob/main/docs/api.md#logmethod" rel="noopener noreferrer"&gt;https://github.com/pinojs/pino/blob/main/docs/api.md#logmethod&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;User %s created with ID %d&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;John&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;123&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;➡️ Logs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;INFO  [12:30:45]  User John created with ID 123
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  ✅ &lt;strong&gt;Ensures Error Serialization Works&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Something went wrong&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Oops!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;➡️ Logs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ERROR [12:30:45]  Something went wrong { error: { msg: 'Oops!', stack: '...' } }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Before: ❌ Pino didn't include the error in the logs&lt;br&gt;
Now: ✅ Uses Pino's error serializer.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Why I believe This Fix is The Right Approach&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Respects Pino’s structured logging&lt;/strong&gt; (doesn’t mutate logs).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fully supports &lt;code&gt;pino-pretty&lt;/code&gt; formatting&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Doesn’t break child loggers, transports, or serializers&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Makes Pino more intuitive without hacks&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Final Thoughts&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;With this fix:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pino behaves the way you expect&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Messages and objects log together properly&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pino remains fast, structured, and developer-friendly&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If you have a big codebase based on console logging API or Winston, your transition to Pino will be very smooth&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Happy coding!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Big news, I was ascended from Team Lead to CTO of tourware GmbH</title>
      <dc:creator>Victor A. Barzana</dc:creator>
      <pubDate>Wed, 01 Dec 2021 05:17:26 +0000</pubDate>
      <link>https://dev.to/vbarzana/big-news-i-was-ascended-from-team-lead-to-cto-of-tourware-gmbh-52l3</link>
      <guid>https://dev.to/vbarzana/big-news-i-was-ascended-from-team-lead-to-cto-of-tourware-gmbh-52l3</guid>
      <description>&lt;p&gt;This definitely got me by surprise, &lt;a href="https://tourware.net/de/tourware-technik-in-besten-haenden-victor-barzana-wird-cto/" rel="noopener noreferrer"&gt;today I was told that I am gonna be the new CTO of tourware GmbH&lt;/a&gt;. I really wasn't expecting that so many years of dedication and love into this project would give me such an opportunity and when less you think of it, bum, CTO in one day.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is tourware GmbH?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://tourware.net/de/" rel="noopener noreferrer"&gt;tourware GmbH&lt;/a&gt; is a small startup with big dreams, one of the German leading tour operator software providers with a growing customer base. At tourware we implement cutting edge technologies and we love what we do, by the looks of it our customers too :) We have launched in less than a year of work, a brand new cloud for tourism agencies and a complete integration with customer websites in different platforms (Wordpress, Angular, Vue) and other technologies. With the help of our team we have developed an API that allows our customers to access their travels via a REST API allowing us to expand fast.&lt;br&gt;
Our main packages offer under a suitable monthly price for tour operators, a brand new website or integration with the existing customer websites and a fully featured backoffice where users can customize their website, create travel packages, itineraries, manage their contacts, accommodations, suppliers, prices, and everything is publicly online in customers website once you click save. If you are in the tourism industry, you may know that any tourism software will cost you big money and you not always get the best out of it. What I like the most about tourware is that our product is simple, modern and very solid.&lt;/p&gt;

&lt;h2&gt;
  
  
  As the CTO what will be my job from now on?
&lt;/h2&gt;

&lt;p&gt;With many years developing Software Applications, focusing on the budget has not been my main goal, but mostly orchestrate things to work good and performant. However, from now on, my biggest goal should be to focus on saving costs to the company by taking life changing decisions not only for me, but for the complete infrastructure, for our team, and more importantly for our customers.&lt;br&gt;
As many of you may already know, dealing with tourism sector is always complex, especially when you deal with multiple tour operators all in one cloud. Everyone has different needs, and let's not even get started talking about prices calculation, everyone does it different. Now imagine writing an endpoint that does this in a way that suits everyone.&lt;br&gt;
I still need to learn a lot about being a CTO, this is definitely going to be a wonderful experience and a looooooong career.&lt;/p&gt;

&lt;h2&gt;
  
  
  Will I be able to get back to the code?
&lt;/h2&gt;

&lt;p&gt;I have been thinking about this, but I would say this is mostly a question for the community, it would be nice to hear your story the pros and cons and maybe what and what not to do being a CTO. I think that from now on, I should not only emphasize on code quality, but for sure I can't block myself anymore in coding tasks, the most important is to be able to pass on to my colleagues my experience, explain what I think is correct and what is not, but more importantly listen to everyone and be the connector between business and technology, something that we have been striving for.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the future awaits...
&lt;/h2&gt;

&lt;p&gt;With a growing customer base at tourware, we have many chances to become the next multimillion tourism industry, we just have to keep working hard as we have proven so far, increase our team and keep an eye on costs to not explode. I am sure that I will be able to manage my new role, can't be happier and more thankful to our CEO Simon Milz for giving me this opportunity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's meet in ITB Berlin
&lt;/h2&gt;

&lt;p&gt;This will also be my first year when I join to the &lt;a href="https://www.itb.com/en/" rel="noopener noreferrer"&gt;ITB Berlin&lt;/a&gt; event, so if you are around I will be happy to talk with you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusions
&lt;/h2&gt;

&lt;p&gt;I am thrilled with this new opportunity, happy to be able to sail this boat alongside my team, I am still a newby in the CTO field, but for sure will be able to handle this as I did before in other fields of my career. &lt;br&gt;
If any of you have experience with being CTO and you want to give me an advice, I am open to listen to everybody. Thank you for reading.&lt;/p&gt;

&lt;p&gt;PS: Next article goes to our infrastructure and how we manage to scale NodeJS/MongoDB to the heaven :)&lt;/p&gt;

</description>
      <category>cto</category>
      <category>javascript</category>
      <category>tourism</category>
      <category>tourismsoftware</category>
    </item>
  </channel>
</rss>
