<?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: Sourav Dey</title>
    <description>The latest articles on DEV Community by Sourav Dey (@souravdey777).</description>
    <link>https://dev.to/souravdey777</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%2F407413%2F0a0da4ce-26ab-41c2-be88-5fa451d8c3cd.png</url>
      <title>DEV Community: Sourav Dey</title>
      <link>https://dev.to/souravdey777</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/souravdey777"/>
    <language>en</language>
    <item>
      <title>LeetCode #376: Wiggle Subsequence</title>
      <dc:creator>Sourav Dey</dc:creator>
      <pubDate>Tue, 31 Mar 2026 13:59:03 +0000</pubDate>
      <link>https://dev.to/souravdey777/leetcode-376-wiggle-subsequence-46o8</link>
      <guid>https://dev.to/souravdey777/leetcode-376-wiggle-subsequence-46o8</guid>
      <description>&lt;h2&gt;
  
  
  LeetCode Question - 376. Wiggle Subsequence 🧠
&lt;/h2&gt;

&lt;h3&gt;
  
  
  About the Series
&lt;/h3&gt;

&lt;p&gt;Problem-solving is a key skill set for any tech-related stuff you might be working on.&lt;/p&gt;

&lt;p&gt;When it comes to developers it's one of the most crucial skills which is needed in almost any day-to-day code you might be writing.&lt;/p&gt;

&lt;p&gt;So, this series of blogs is all about practicing Daily LeetCode Challenges &amp;amp; Problem-solving. 🚀&lt;/p&gt;

&lt;p&gt;Earlier in this series: &lt;a href="https://souravdey.space/blogs/leetcode-daily-challenge-02" rel="noopener noreferrer"&gt;LeetCode #1465: Maximum Area of Cake After Cuts&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Problem Statement
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://leetcode.com/problems/wiggle-subsequence/" rel="noopener noreferrer"&gt;&lt;strong&gt;Wiggle Subsequence&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A &lt;strong&gt;wiggle sequence&lt;/strong&gt; is a sequence where the differences between successive numbers strictly alternate between positive and negative. The first difference (if one exists) may be either positive or negative. A sequence with one element and a sequence with two non-equal elements are trivially wiggle sequences.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For example, &lt;code&gt;[1, 7, 4, 9, 2, 5]&lt;/code&gt; is a wiggle sequence because the differences &lt;code&gt;(6, -3, 5, -7, 3)&lt;/code&gt; alternate between positive and negative.&lt;/li&gt;
&lt;li&gt;In contrast, &lt;code&gt;[1, 4, 7, 2, 5]&lt;/code&gt; and &lt;code&gt;[1, 7, 4, 5, 5]&lt;/code&gt; are not wiggle sequences. The first is not because its first two differences are positive, and the second is not because its last difference is zero.
A &lt;strong&gt;subsequence&lt;/strong&gt; is obtained by deleting some elements (possibly zero) from the original sequence, leaving the remaining elements in their original order.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Given an integer array &lt;code&gt;nums&lt;/code&gt;, return the length of the longest wiggle subsequence of &lt;code&gt;nums&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Video Explanation
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=mp5-uz6W8MA" rel="noopener noreferrer"&gt;Watch on YouTube&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Solution
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Algorithm&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;First check if the length of the &lt;code&gt;nums&lt;/code&gt; array is smaller than two or not. If yes, we will simply return the length of the array ie. &lt;code&gt;0&lt;/code&gt; for &lt;code&gt;[]&lt;/code&gt; and &lt;code&gt;1&lt;/code&gt; for &lt;code&gt;[x]&lt;/code&gt; (where x can be any value)&lt;/li&gt;
&lt;li&gt;We check the first difference between the &lt;code&gt;1st&lt;/code&gt; from the &lt;code&gt;0th&lt;/code&gt; value in the &lt;code&gt;nums&lt;/code&gt; array and store it in the &lt;code&gt;previousdiff&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;If the values are not equal we will count both the no. for the wiggle sequence thus our counter will be &lt;code&gt;2&lt;/code&gt; and if equal we take our counter to be &lt;code&gt;1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Now, While iterating the &lt;code&gt;nums&lt;/code&gt; array we will compare the compare current difference and the previous difference. If one is positive the other should be negative or vice versa. Now, we will increment the count if the conditions are satisfied and update the previous difference with the current difference.&lt;/li&gt;
&lt;li&gt;Finally return the count of the wiggle sequence.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Code in JS 🧑‍💻&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="cm"&gt;/**
 * @param {number[]} nums
 * @return {number}
 */&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;wiggleMaxLength&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&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;nums&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;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;previousdiff&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;nums&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="nx"&gt;nums&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="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;counter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;previousdiff&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;0&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="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&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;currentDiff&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&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;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;currentDiff&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;previousdiff&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&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="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;currentDiff&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;previousdiff&lt;/span&gt; &lt;span class="o"&gt;&amp;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="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;counter&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nx"&gt;previousdiff&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;currentDiff&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;return&lt;/span&gt; &lt;span class="nx"&gt;counter&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;&lt;strong&gt;Time Complexity : &lt;code&gt;O(n)&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Space Complexity: &lt;code&gt;O(1)&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Similar Questions for practice
&lt;/h3&gt;

&lt;p&gt;Now it is time to try more similar questions&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://leetcode.com/problems/rearrange-array-elements-by-sign/" rel="noopener noreferrer"&gt;Rearrange Array Elements by Sign&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  You can find me on the web 🌍
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Souravdey777" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/in/souravdey777" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Souravdey777" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Add your solution or approach in the comments below. Also, show your love by Sharing the blog. 🤗&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Dream big. Start small. But most of all, start."&lt;/p&gt;

&lt;p&gt;~ Simon Sinek&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;em&gt;Originally published on July 3, 2022 at &lt;a href="https://souravdey.space/blogs/leetcode-daily-challenge-03" rel="noopener noreferrer"&gt;souravdey.space&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>algorithms</category>
      <category>javascript</category>
    </item>
    <item>
      <title>LeetCode #1465: Maximum Area of Cake After Cuts</title>
      <dc:creator>Sourav Dey</dc:creator>
      <pubDate>Tue, 31 Mar 2026 13:59:01 +0000</pubDate>
      <link>https://dev.to/souravdey777/leetcode-1465-maximum-area-of-cake-after-cuts-36ac</link>
      <guid>https://dev.to/souravdey777/leetcode-1465-maximum-area-of-cake-after-cuts-36ac</guid>
      <description>&lt;h2&gt;
  
  
  LeetCode Question - 1465. Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts 🍰
&lt;/h2&gt;

&lt;h3&gt;
  
  
  About the Series
&lt;/h3&gt;

&lt;p&gt;Problem-solving is a key skill set for any tech-related stuff you might be working on.&lt;/p&gt;

&lt;p&gt;When it comes to developers it's one of the most crucial skills which is needed in almost any day-to-day code you might be writing.&lt;/p&gt;

&lt;p&gt;So, this series of blogs is all about practicing Daily LeetCode Challenges &amp;amp; Problem-solving. 🚀&lt;/p&gt;

&lt;p&gt;Earlier in this series: &lt;a href="https://souravdey.space/blogs/leetcode-daily-challenge-01" rel="noopener noreferrer"&gt;LeetCode #1710: Maximum Units on a Truck&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Problem Statement
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://leetcode.com/problems/maximum-area-of-a-piece-of-cake-after-horizontal-and-vertical-cuts/" rel="noopener noreferrer"&gt;&lt;strong&gt;Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts 🍰&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You are given a rectangular cake of size &lt;code&gt;h x w&lt;/code&gt; and two arrays of integers &lt;code&gt;horizontalCuts&lt;/code&gt; and &lt;code&gt;verticalCuts&lt;/code&gt; where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;horizontalCuts[i]&lt;/code&gt; is the distance from the top of the rectangular cake to the &lt;code&gt;ith&lt;/code&gt; horizontal cut and similarly, and&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;verticalCuts[j]&lt;/code&gt; is the distance from the left of the rectangular cake to the &lt;code&gt;jth&lt;/code&gt; vertical cut.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Return the maximum area of a piece of cake after you cut at each horizontal and vertical position provided in the arrays &lt;code&gt;horizontalCuts&lt;/code&gt; and &lt;code&gt;verticalCuts&lt;/code&gt;. Since the answer can be a large number, return this &lt;code&gt;modulo 109 + 7&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Video Explanation
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=gErjVSkoKDA" rel="noopener noreferrer"&gt;Watch on YouTube&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Solution
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Algorithm&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Push &lt;code&gt;0&lt;/code&gt; and &lt;code&gt;h&lt;/code&gt; in the &lt;code&gt;horizontalCuts&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Sort the &lt;code&gt;horizontalCuts&lt;/code&gt; array in Ascending Order.&lt;/li&gt;
&lt;li&gt;Take the maximum difference between the cuts by iterating on the list of &lt;code&gt;horizontalCuts&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Push &lt;code&gt;0&lt;/code&gt; and &lt;code&gt;h&lt;/code&gt; in the &lt;code&gt;horizontalCuts&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Sort the &lt;code&gt;horizontalCuts&lt;/code&gt; array in Ascending Order.&lt;/li&gt;
&lt;li&gt;Take the maximum difference between the cuts by iterating on the list of &lt;code&gt;horizontalCuts&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Multiply both the max values and return the modulo &lt;code&gt;10^9 + 7&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Now, we got the largest piece of Cake 🍰&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Code in JS 🧑‍💻&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="cm"&gt;/**
 * @param {number} h
 * @param {number} w
 * @param {number[]} horizontalCuts
 * @param {number[]} verticalCuts
 * @return {number}
 */&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;maxArea&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;horizontalCuts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;verticalCuts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;horizontalCuts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&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="nx"&gt;h&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;horizontalCuts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;maxH&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;verticalCuts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&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="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;verticalCuts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;maxW&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;horizontalCuts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;maxH&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;maxH&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;horizontalCuts&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;horizontalCuts&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&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="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;verticalCuts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;maxW&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;maxW&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;verticalCuts&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;verticalCuts&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&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="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;BigInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;maxH&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nc"&gt;BigInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;maxW&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="nc"&gt;BigInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="nx"&gt;e9&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;7&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;&lt;strong&gt;Time Complexity : &lt;code&gt;O(nlogn)&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Space Complexity: &lt;code&gt;O(1)&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  You can find me on the web 🌍
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Souravdey777" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/in/souravdey777" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Souravdey777" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Add your solution or approach in the comments below.&lt;/p&gt;

&lt;p&gt;Show your love by Sharing the blog. 🤗&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“The best way to predict the future is to create it.”&lt;/p&gt;

&lt;p&gt;~ Peter Drucker&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;em&gt;Originally published on July 2, 2022 at &lt;a href="https://souravdey.space/blogs/leetcode-daily-challenge-02" rel="noopener noreferrer"&gt;souravdey.space&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>algorithms</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Product Engineering: The Only Skill That Survives AI 🏗️</title>
      <dc:creator>Sourav Dey</dc:creator>
      <pubDate>Mon, 30 Mar 2026 08:16:54 +0000</pubDate>
      <link>https://dev.to/souravdey777/product-engineering-the-only-skill-that-survives-ai-2pad</link>
      <guid>https://dev.to/souravdey777/product-engineering-the-only-skill-that-survives-ai-2pad</guid>
      <description>&lt;p&gt;I've been building customer-facing products for seven years now. From the Test Creation Experience used across 1.9M+ tests at HackerRank to GPT-4o powered features in production, I've seen what separates products that stick from those that get shelved after three months of development.&lt;/p&gt;

&lt;p&gt;Here's what I've learned: &lt;strong&gt;the only limitation in the AI era is product thinking.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The AI Acceleration Problem
&lt;/h2&gt;

&lt;p&gt;Everyone's talking about AI making us 10x faster. Write a prompt, get a component. Describe a feature, get working code. The demos are compelling. The productivity gains are real.&lt;/p&gt;

&lt;p&gt;But here's what nobody's talking about: &lt;strong&gt;speed without direction is just expensive motion.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I see engineers shipping faster than ever and wondering why their features don't land. They can build anything now. The question they can't answer is: what should I build? 🤔&lt;/p&gt;

&lt;p&gt;That gap is product engineering.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Product Engineering Actually Means
&lt;/h2&gt;

&lt;p&gt;Product engineering isn't about choosing React over Vue. It's not about microservices architecture or deployment pipelines.&lt;/p&gt;

&lt;p&gt;Product engineering is &lt;strong&gt;building with the user's problem as your north star&lt;/strong&gt;, not the technology.&lt;/p&gt;

&lt;p&gt;Back in 2023, I was discussing my promotion with my manager at HackerRank. Around the same time, I stumbled upon Gergely Orosz's &lt;a href="https://blog.pragmaticengineer.com/the-product-minded-engineer/" rel="noopener noreferrer"&gt;The Product-Minded Software Engineer&lt;/a&gt; on The Pragmatic Engineer blog. Reading it felt like someone had written down exactly what I do. Every trait he described, from proactive product ideas to end-to-end feature ownership, mapped to how I have been working for years. That article became my pitch for the promotion. I've never been the strongest "pure coder" in the room, but I've always been a solid product engineer. That's what sets me apart 💪 There is another book on this, &lt;a href="https://www.oreilly.com/library/view/the-product-minded-engineer/9781098173722/" rel="noopener noreferrer"&gt;The Product-Minded Engineer&lt;/a&gt; (November 2025) by Drew Hoskins, and it reinforces the same core truth: the engineers who have the most impact are the ones who care deeply about the product, not just the code.&lt;/p&gt;

&lt;p&gt;When we built the Test Creation Experience at HackerRank, the engineering challenge wasn't the hardest part. The hard part was understanding that recruiters weren't failing to create tests because our UI was clunky. They were failing because they didn't know what good technical questions looked like in the first place.&lt;/p&gt;

&lt;p&gt;The feature that moved the needle wasn't better form validation. It was a question recommendation engine that suggested problems based on the role they were hiring for.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Product engineering is seeing the gap between what users say they want and what they actually need.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For the longer career arc behind that idea, see &lt;a href="https://souravdey.space/blogs/7-years-being-a-software-engineer" rel="noopener noreferrer"&gt;seven years as a software engineer&lt;/a&gt;. For shipping under a brutal clock with a product-shaped goal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why AI Makes This More Critical, Not Less
&lt;/h2&gt;

&lt;p&gt;In 2019, if you wanted to build a feature, you needed to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Design the database schema&lt;/li&gt;
&lt;li&gt;Write the API endpoints&lt;/li&gt;
&lt;li&gt;Build the frontend components&lt;/li&gt;
&lt;li&gt;Handle edge cases and error states&lt;/li&gt;
&lt;li&gt;Deploy and monitor&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That took weeks. The friction forced you to think: is this worth building?&lt;/p&gt;

&lt;p&gt;In 2026, I can describe a feature to Claude and have working code in 20 minutes. The friction is gone. &lt;strong&gt;The forcing function for good judgment disappeared.&lt;/strong&gt; 🫠&lt;/p&gt;

&lt;p&gt;Now anyone can build anything. The engineers who survive aren't the ones who can prompt better. They're the ones who know what's worth building.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Obsession With "Great Engineering"
&lt;/h2&gt;

&lt;p&gt;I've worked with brilliant engineers who could optimize a database query from 200ms to 15ms, architect systems that handle millions of requests, and debug race conditions in distributed systems.&lt;/p&gt;

&lt;p&gt;Some of them built features nobody used. 😅&lt;/p&gt;

&lt;p&gt;The ones who had impact? They started every conversation with: &lt;strong&gt;"What problem are we solving, and for whom?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;They asked questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who specifically has this problem?&lt;/li&gt;
&lt;li&gt;How do they solve it today?&lt;/li&gt;
&lt;li&gt;What would make them change their workflow?&lt;/li&gt;
&lt;li&gt;How do we know if we fixed it?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those questions matter more than knowing the latest JavaScript framework.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Product Engineering Principles
&lt;/h2&gt;

&lt;p&gt;After seven years and dozens of shipped features, here's what I've learned:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Fall in love with the problem, not your solution.&lt;/strong&gt;&lt;br&gt;
I've killed features I spent months building because user research showed we were solving the wrong problem. It hurt. But shipping the wrong thing perfectly is worse than not shipping at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Build for one person first.&lt;/strong&gt;&lt;br&gt;
Every successful feature I've shipped started with understanding one specific user's workflow in detail. Generic "user personas" don't build products. Real humans with real problems do.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. The best code is code you don't write.&lt;/strong&gt;&lt;br&gt;
Before building anything, ask: what's the simplest thing that could work? Half the features I thought I needed to build turned out to be configuration changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Measure behavior, not opinions.&lt;/strong&gt;&lt;br&gt;
Users will tell you they want feature X. Then you build feature X and nobody uses it. Watch what they do, not what they say they'll do.&lt;/p&gt;

&lt;h2&gt;
  
  
  The AI Era Divide
&lt;/h2&gt;

&lt;p&gt;I predict a split in our industry:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI-Assisted Code Writers:&lt;/strong&gt; Fast at implementation, focused on technical craft. They can build anything you spec out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Product Engineers:&lt;/strong&gt; Focused on what to build and why. They use AI as a tool to ship faster, but they're solving the right problems.&lt;/p&gt;

&lt;p&gt;Both roles matter. But if you're building customer-facing products, &lt;strong&gt;you need to be in the second category.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The companies that win in the AI era won't be the ones with the best AI engineers. They'll be the ones with the best product engineers who happen to use AI. 🚀&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd Do Differently
&lt;/h2&gt;

&lt;p&gt;If I were starting my career today, I wouldn't spend time learning every new framework or AI tool that comes out.&lt;/p&gt;

&lt;p&gt;I'd spend time with users. I'd sit in customer support calls. I'd read every piece of feedback. I'd understand how people actually work, not how I think they should work.&lt;/p&gt;

&lt;p&gt;The frameworks change every two years. Understanding humans compounds forever.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Product engineering isn't a nice-to-have anymore. In the AI era, it's how you stay relevant.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The future belongs to engineers who can think like builders, not just coders. AI will handle the coding part. &lt;strong&gt;The building part still needs humans.&lt;/strong&gt; ✨&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on March 30, 2026 at &lt;a href="https://souravdey.space/blogs/product-engineers-and-the-ai-era" rel="noopener noreferrer"&gt;souravdey.space&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>product</category>
      <category>ai</category>
      <category>engineering</category>
      <category>career</category>
    </item>
    <item>
      <title>7 Years as a Software Engineer: What Actually Changed 💼</title>
      <dc:creator>Sourav Dey</dc:creator>
      <pubDate>Wed, 25 Mar 2026 14:10:14 +0000</pubDate>
      <link>https://dev.to/souravdey777/7-years-as-a-software-engineer-what-actually-changed-341i</link>
      <guid>https://dev.to/souravdey777/7-years-as-a-software-engineer-what-actually-changed-341i</guid>
      <description>&lt;p&gt;Green build. Staging fine. I still walked away feeling off 💻&lt;/p&gt;

&lt;p&gt;The code did what we agreed on. &lt;strong&gt;The agreement was the broken part.&lt;/strong&gt; That week stuck with me more than any refactor I have shipped since.&lt;/p&gt;

&lt;p&gt;Seven years in, I still write code. I also still Google things I have looked up a hundred times, and I am fine admitting that. The job stopped being mostly syntax ages ago. It moved into requirements nobody wrote down, roadmaps that pretend six things are one thing, and the gap between what product imagines and what the system can honestly do. You feel that gap in your calendar before you feel it in the compiler.&lt;/p&gt;

&lt;p&gt;I am not going to give you a promotion timeline or a framework bingo card.&lt;/p&gt;

&lt;p&gt;Here is what moved in how I work, and what I would say to the version of me who was scared of sounding dumb in standup 🙈&lt;/p&gt;

&lt;h2&gt;
  
  
  🧭 The first shift: when “it runs” is not the win
&lt;/h2&gt;

&lt;p&gt;Early on I treated success like a checklist. Tests pass ✅ PR merged. Done. That bar matters. You cannot skip it.&lt;/p&gt;

&lt;p&gt;The first time it failed me was ordinary. Everything behaved in staging, users were still unhappy, and the bug was the assumption behind the feature, not a null pointer.&lt;/p&gt;

&lt;p&gt;These days I slow down before I type. Who is this actually for? What happens at 10x traffic? What is the cheapest way to prove we are wrong? I used to think those questions were someone else’s job.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;They are the job&lt;/strong&gt; 🎯&lt;/p&gt;

&lt;p&gt;Hackathons taught me scope is the real villain 🏃 Side projects taught me demos follow their own physics. HackerRank taught me the expensive problems sit between intent and reality. Same muscle, different costumes.&lt;/p&gt;

&lt;h2&gt;
  
  
  🌫️ Ambiguity stopped feeling like a personal failure
&lt;/h2&gt;

&lt;p&gt;Junior me assumed if I asked enough questions in one Slack thread, uncertainty would pack up and leave.&lt;/p&gt;

&lt;p&gt;It does not work that way. Some fog only lifts after there is a real thing to poke at.&lt;/p&gt;

&lt;p&gt;I stopped pretending I had it all figured out on day one. I try to pick a step we can undo, say the tradeoff out loud, and invite correction early. A rough prototype still beats a three-day thread. A written assumption beats a silent guess every time ✍️&lt;/p&gt;

&lt;p&gt;I mentored at a hackathon once (&lt;a href="https://souravdey.space/blogs/mentoring-hackathon-experience" rel="noopener noreferrer"&gt;notes from CentuRITon&lt;/a&gt;), on the other side of the table. The struggling teams were rarely lazy. They were drowning in parallel goals 🌊 Helping them kill features felt like coaching courage, not debugging. I still use that instinct when a roadmap tries to ship six epics like they are one.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚖️ Speed, quality, and the lie of having both for free
&lt;/h2&gt;

&lt;p&gt;You have heard both sermons.&lt;/p&gt;

&lt;p&gt;Move fast and break things. Quality is non-negotiable. Real teams live in the middle and rarely say the quiet part out loud.&lt;/p&gt;

&lt;p&gt;What helped me was naming the tradeoff in a room full of people. If we optimize for learning speed, we accept rough edges and we instrument them. If we optimize for reliability, we skip shortcuts and we staff for that choice. The painful failure mode is when leadership says one priority and the calendar and incentives say another. Then you get slow and brittle together.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No prize&lt;/strong&gt; 💥&lt;/p&gt;

&lt;p&gt;I still misread that alignment sometimes. I just catch it faster.&lt;/p&gt;

&lt;p&gt;Sounds tiny. It cost a lot of Tuesday evenings to get there 🩹&lt;/p&gt;

&lt;h2&gt;
  
  
  💬 Communication is not fluff. It is part of the ship.
&lt;/h2&gt;

&lt;p&gt;I am not the person who “only wants to code.” Not because I love calendars 📅 Because when alignment drifts, it shows up as reverts, sharp tickets, and that quiet distrust nobody puts in writing.&lt;/p&gt;

&lt;p&gt;A decent PR description. A diagram someone can find next month. A short note on why we picked this shape. Those things feel soft until you pay for not having them.&lt;/p&gt;

&lt;p&gt;When I &lt;a href="https://souravdey.space/blogs/portfolio-website-development-part-1" rel="noopener noreferrer"&gt;built this portfolio&lt;/a&gt; in public, I realized people read the thinking, not only the pixels. Same thing shows up in code review and design feedback. They are judging whether they can trust your judgment.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧠 Competence and confidence refuse to stay in sync
&lt;/h2&gt;

&lt;p&gt;Call it imposter syndrome or call it a brain that loves your mistakes more than your wins.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Same glitch.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I stopped waiting for the doubt to vanish. I keep boring receipts now. What shipped. What broke. What I fixed. What someone else shipped because I unblocked them.&lt;/p&gt;

&lt;p&gt;Loud moments under pressure helped once. They do not cure anything. They just remind you that you have done hard things before. Without the small receipts, one bad deploy on a random Tuesday eats the whole story 📉&lt;/p&gt;

&lt;h2&gt;
  
  
  🧰 What actually aged well
&lt;/h2&gt;

&lt;p&gt;Syntax turns over. Tools churn 🔄&lt;/p&gt;

&lt;p&gt;The skills that kept paying were unglamorous. Reading a stack trace without ego. Tracing a bug across services and saying which layer lied 🐛 Knowing when a library saves time and when it hides the learning you still need.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Any fool can write code that a computer can understand. Good programmers write code that humans can understand.&lt;/p&gt;

&lt;p&gt;— Martin Fowler&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I still enjoy a gnarly bug.&lt;/p&gt;

&lt;p&gt;I enjoy it less when the gnarl exists because nobody wrote how the system is supposed to behave. Docs are not admin homework. They are kindness to whoever is on call at 11 PM 🌙 Future you counts.&lt;/p&gt;

&lt;h2&gt;
  
  
  🤝 Leadership without the title
&lt;/h2&gt;

&lt;p&gt;Influence is not a level on a ladder.&lt;/p&gt;

&lt;p&gt;It shows up in a clearer ticket, a safer rollback plan, a review comment that teaches instead of scores points. Sometimes it is saying I do not know when everyone else is improvising confidence 🤷&lt;/p&gt;

&lt;p&gt;I have spent five years at HackerRank now 🌱 Sustained product engineering, for me, is not heroics. It is &lt;strong&gt;ownership.&lt;/strong&gt; It is the quiet work of keeping a platform understandable while it grows.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✉️ What I would tell past me
&lt;/h2&gt;

&lt;p&gt;Ask earlier. Ship smaller. Write down why you chose something, not only what you built.&lt;/p&gt;

&lt;p&gt;Guard your attention the way you guard uptime, because it is the same finite resource.&lt;/p&gt;

&lt;p&gt;Busy is not the same as useful. I am still learning that last one ⏳&lt;/p&gt;

&lt;h2&gt;
  
  
  🪨 What still feels hard
&lt;/h2&gt;

&lt;p&gt;Saying no without becoming the villain in someone else’s story. Estimating when the information is incomplete, without faking precision. Staying curious when the backlog is shouting. Remembering the win is not owning the thread. It is leaving the system less confusing than you found it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Seven years is not mastery&lt;/strong&gt; 🎓&lt;/p&gt;

&lt;p&gt;It is enough repetitions to spot the same traps: fake urgency, complexity sold as intelligence, teams confusing motion for progress. Enough time, too, to feel grateful for people who raised the bar 🙏 and a little gentler with myself when I was the bottleneck.&lt;/p&gt;

&lt;p&gt;If you are earlier in the curve, the takeaway is smaller than everyone makes it sound.&lt;/p&gt;

&lt;p&gt;Show up. Say the risky true thing. Make the next step obvious. Keep building.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The code is only one part of the craft&lt;/strong&gt; ✨&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on March 25, 2026 at &lt;a href="https://souravdey.space/blogs/7-years-being-a-software-engineer" rel="noopener noreferrer"&gt;souravdey.space&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>engineering</category>
      <category>reflection</category>
    </item>
    <item>
      <title>⚡ Flexbox-Guide 🚀 Flexbox layout made simple with an Interactive tool</title>
      <dc:creator>Sourav Dey</dc:creator>
      <pubDate>Wed, 14 Apr 2021 08:49:49 +0000</pubDate>
      <link>https://dev.to/souravdey777/flexbox-guide-flexbox-layout-made-simple-with-an-interactive-tool-5g77</link>
      <guid>https://dev.to/souravdey777/flexbox-guide-flexbox-layout-made-simple-with-an-interactive-tool-5g77</guid>
      <description>&lt;h2&gt;
  
  
  TLDR
&lt;/h2&gt;

&lt;p&gt;An &lt;code&gt;Interactive Tool&lt;/code&gt; for the concept of Flexbox and Responsive Design. Simply set the attributes as needed and copy the CSS code. 🎉&lt;/p&gt;

&lt;p&gt;Website Link -  &lt;a href="http://flexbox-guide.vercel.app/" rel="noopener noreferrer"&gt;http://flexbox-guide.vercel.app/&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Github Repo -  &lt;a href="https://github.com/Souravdey777/flexbox-guide" rel="noopener noreferrer"&gt;https://github.com/Souravdey777/flexbox-guide&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Docs Link -  &lt;a href="https://souravdey777.github.io/flexbox-guide/" rel="noopener noreferrer"&gt;https://souravdey777.github.io/flexbox-guide/&lt;/a&gt; &lt;/p&gt;




&lt;h3&gt;
  
  
  About &lt;code&gt;Flexbox-Guide&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Flexbox-Guide is a website developed for web developers and Coding newbies learning &lt;code&gt;CSS Flexbox Layout&lt;/code&gt;. This website can be used for both learnings or generating the code. Simply arrange the flex items as you need and copy the CSS to your code.&lt;/p&gt;

&lt;p&gt;Before the Flexbox Layout module, there were four layout modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Block, for sections in a webpage&lt;/li&gt;
&lt;li&gt;Inline, for text&lt;/li&gt;
&lt;li&gt;Table, for two-dimensional table data&lt;/li&gt;
&lt;li&gt;Positioned, for the explicit position of an element&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Flexible Box Layout Module makes it easier to design a flexible responsive layout structure without using float or positioning.&lt;/p&gt;

&lt;p&gt;For a detailed explanation please check &lt;a href="https://css-tricks.com/snippets/css/a-guide-to-flexbox/" rel="noopener noreferrer"&gt;A Complete Guide to Flexbox&lt;/a&gt; by &lt;code&gt;Chris Coyier&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why wait? Straightaway go to the website and join the Awesomeness&lt;/strong&gt; 😎&lt;br&gt;
&lt;a href="https://flexbox-guide.vercel.app" rel="noopener noreferrer"&gt;https://flexbox-guide.souravdey777.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;p&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%2Fpgoyuz8wjhn6magif2kh.gif" 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%2Fpgoyuz8wjhn6magif2kh.gif" alt="flexbox-guide.gif" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Inspiration 💡
&lt;/h3&gt;

&lt;p&gt;I got the Idea while I was explaining flexbox to a few of the interns in my office. I was explaining to them with three sample cards that how to make responsive cards with flexbox. And I have seen a lot of web developers using static &lt;code&gt;paddings&lt;/code&gt; and &lt;code&gt;margins&lt;/code&gt; and handling it with a lot of media queries. But, why go for such a mess when we have the &lt;code&gt;CSS flexbox layout&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This tool was also created with the same thought process. So that all the budding software developers can learn flexbox layout with an interactive tool, where you can set the attributes and check the layout as well as It will generate the CSS code for it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Technologies 🔨
&lt;/h3&gt;

&lt;p&gt;Built with Reactjs and Love ❤️&lt;/p&gt;

&lt;p&gt;Hosted in Vercel Cloud.&lt;/p&gt;

&lt;h3&gt;
  
  
  Accomplishment 🚀
&lt;/h3&gt;

&lt;p&gt;I have integrated 📈 analytics with &lt;a href="https://plausible.io/" rel="noopener noreferrer"&gt;plausible&lt;/a&gt; with the website recently on the 29th of Jan and here are the stats &lt;a href="https://plausible.io/flexbox-guide.vercel.app" rel="noopener noreferrer"&gt;https://plausible.io/flexbox-guide.vercel.app&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;It also got published in a &lt;code&gt;Weekly Magzine for Designers&lt;/code&gt; 🎉&lt;br&gt;
&lt;a href="https://speckyboy.com/weekly-news-for-designers-577/" rel="noopener noreferrer"&gt;https://speckyboy.com/weekly-news-for-designers-577/&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://speckyboy.com/weekly-news-for-designers-577/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1612687433048%2FmsEKE347P.png" alt="Group 31.png" width="800" height="1115"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The greatest of all is that It will help the community. &lt;/p&gt;

&lt;h3&gt;
  
  
  License
&lt;/h3&gt;

&lt;p&gt;📝 Distributed under the &lt;code&gt;MIT&lt;/code&gt; License. See &lt;a href="https://github.com/Souravdey777/flexbox-guide/blob/main/LICENSE" rel="noopener noreferrer"&gt;LICENSE&lt;/a&gt; for more information.&lt;/p&gt;

&lt;h3&gt;
  
  
  Contribution and Support
&lt;/h3&gt;

&lt;p&gt;Upvote Flexbox-Guide in 🚀 &lt;strong&gt;Product Hunt&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.producthunt.com/posts/flexbox-guide?utm_source=badge-featured&amp;amp;utm_medium=badge&amp;amp;utm_souce=badge-flexbox-guide" rel="noopener noreferrer"&gt;&lt;br&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fapi.producthunt.com%2Fwidgets%2Fembed-image%2Fv1%2Ffeatured.svg%3Fpost_id%3D281660%26theme%3Dlight" alt="Flexbox-Guide - Flexbox-Guide : A flexbox code generator | Product Hunt" width="250" height="54"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Souravdey777/flexbox-guide/pulls" rel="noopener noreferrer"&gt;Open a Pull Request&lt;/a&gt; or &lt;a href="https://github.com/Souravdey777/flexbox-guide/issues" rel="noopener noreferrer"&gt;Raise an Issue&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;👨‍🚀 Contributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.&lt;/p&gt;

&lt;p&gt;Hope you Loved it! Do let me know in the comments.&lt;/p&gt;

&lt;p&gt;Want to learn more about flexbox?? Check the below link&lt;br&gt;
&lt;a href="https://souravdey777.github.io/flexbox-guide/#learn-more-about-flexbox" rel="noopener noreferrer"&gt;https://souravdey777.github.io/flexbox-guide/#learn-more-about-flexbox&lt;/a&gt;  &lt;/p&gt;

&lt;h3&gt;
  
  
  Contact me
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Souravdey777/" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/in/souravdey777" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Souravdey777" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>100daysofcode</category>
      <category>css</category>
      <category>codenewbie</category>
      <category>flexbox</category>
    </item>
    <item>
      <title>Creating your own npm package</title>
      <dc:creator>Sourav Dey</dc:creator>
      <pubDate>Sun, 11 Apr 2021 12:18:17 +0000</pubDate>
      <link>https://dev.to/souravdey777/creating-your-own-npm-package-4f4g</link>
      <guid>https://dev.to/souravdey777/creating-your-own-npm-package-4f4g</guid>
      <description>&lt;h4&gt;
  
  
  First of all, &lt;strong&gt;What is npm?&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;npm&lt;/strong&gt; is two things: first and foremost, it is an online repository for the publishing of open-source Node.js projects; second, it is a command-line utility for interacting with a said repository that aids in package installation, version management, and dependency management. A plethora of Node.js libraries and applications are published on npm, and many more are added every day.&lt;/p&gt;

&lt;p&gt;☝ This is not out of my brain. 🧠 &lt;/p&gt;

&lt;p&gt;Reference to the definition &lt;br&gt;
 &lt;a href="https://nodejs.org/en/knowledge/getting-started/npm/what-is-npm/" rel="noopener noreferrer"&gt;https://nodejs.org/en/knowledge/getting-started/npm/what-is-npm/&lt;/a&gt; &lt;/p&gt;
&lt;h2&gt;
  
  
  Setting the things up
&lt;/h2&gt;

&lt;p&gt;What you need to start is with simple Node.js installation and yes, that is it.&lt;br&gt;
Refer to the below links 👇&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nodejs.dev/learn/how-to-install-nodejs" rel="noopener noreferrer"&gt;How to install Node.js&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nodejs.org/en/download/" rel="noopener noreferrer"&gt;Download link for Node.js&lt;/a&gt; &lt;/p&gt;
&lt;h2&gt;
  
  
  Let us break this down into simple steps
&lt;/h2&gt;
&lt;h4&gt;
  
  
  1. Creating the package.json file
&lt;/h4&gt;

&lt;p&gt;For publishing an npm package you don't need anything apart from package.json. But, yeah it will not be having any functionalities.&lt;/p&gt;

&lt;p&gt;There are two ways to create the &lt;strong&gt;package.json&lt;/strong&gt; file. You can simply open any code editor and go for the good old-fashioned way of editing it yourself. I will suggest trying it once. You will get to know how to and what to add as key-value pair in the JSON file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
    "name": "your-amazing-package",
    "version": "1.0.0",
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the minimum key-value pair that is required to publish a package&lt;/p&gt;

&lt;p&gt;But, again if you want things to be done efficiently. Create the package.json with the below command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1617826535417%2FhfogJLNk8.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1617826535417%2FhfogJLNk8.jpeg" alt="Capture.JPG"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Follow the instructions and enter the details one after another and after that just select enter after confirming the details.&lt;/p&gt;

&lt;p&gt;This is how your &lt;strong&gt;Package.json&lt;/strong&gt; is going to look after that 👇&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "name": "awesome-npm",
  "version": "1.0.0",
  "description": "the awesome package",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" &amp;amp;&amp;amp; exit 1"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/YOUR_Git_USERNAME/awesome-npm.git"
  },
  "keywords": [
    "awesome"
  ],
  "author": "Sourav Dey",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/YOUR_Git_USERNAME/awesome-npm/issues"
  },
  "homepage": "https://github.com/YOUR_Git_USERNAME/awesome-npm#readme"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We have the package.json ready. Now, index.js comes to the picture that is defined in pacakge.json as "main": "index.js"&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Creating the index.js file.
&lt;/h4&gt;

&lt;p&gt;Let's create a simple function in the &lt;strong&gt;index.js&lt;/strong&gt; file. 👇&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function awesomeEmojiLog(message) {
    if (message === undefined) throw new Error("No Message Found");
    console.log("😎", message)
};

module.exports = awesomeEmojiLog
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It is any day better to test your function before publishing it.&lt;br&gt;
It can be easily called inside index.js as&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;awesomeEmojiLog("This is awesome emoji")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Test it with a simple command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node index.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output will be&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;😎 This is awesome emoji
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once done. It is now time to publish it.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Publish the npm package
&lt;/h4&gt;

&lt;p&gt;To publish an npm package you first need to create an account in the npm registry with this link 👉 &lt;a href="https://www.npmjs.com/signup" rel="noopener noreferrer"&gt;Signup for npm&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Done. Cool. &lt;/p&gt;

&lt;p&gt;Log in to npm using the terminal with any of these two commands&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm adduser
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enter the &lt;strong&gt;username&lt;/strong&gt;, &lt;strong&gt;password&lt;/strong&gt;, and &lt;strong&gt;email ID&lt;/strong&gt; as asked.&lt;/p&gt;

&lt;p&gt;After that, you are one command away from your npm package. Just type this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm publish
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note- If your package name starts with "@Your-username/packageName"&lt;/p&gt;

&lt;p&gt;use the below command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm publish --access=public
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🎉🥳 The npm package is Published. You will get a mail for the same and You can check your list of packages in the npm registry if you are logged in.&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Create the Github Repo for your package.
&lt;/h4&gt;

&lt;p&gt;Create your repo &lt;strong&gt;awesome-npm&lt;/strong&gt; and push the code. &lt;/p&gt;

&lt;p&gt;Follow the command to push the code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo "# awesome-npm" &amp;gt;&amp;gt; README.md
git init
git add .
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/Souravdey777/awesome-npm.git
git push -u origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add the Licence for your package. I have used MIT.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1617877466920%2F0-GJeGt2Q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1617877466920%2F0-GJeGt2Q.png" alt="tempsnip.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Write the package's basic details in the Readme file like how to use it and what it does. Now, you can &lt;strong&gt;Create a new release&lt;/strong&gt; for the npm package with proper versioning.&lt;/p&gt;

&lt;p&gt;you can check the repo for reference 👉&lt;br&gt;
&lt;a href="https://github.com/Souravdey777/awesome-npm" rel="noopener noreferrer"&gt;https://github.com/Souravdey777/awesome-npm&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;and the npm package 👉&lt;br&gt;
 &lt;a href="https://www.npmjs.com/package/awesome-npm" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/awesome-npm&lt;/a&gt; &lt;/p&gt;

&lt;h1&gt;
  
  
  😎
&lt;/h1&gt;

&lt;p&gt;Your awesome npm package is ready. 🎉🎉&lt;/p&gt;

&lt;p&gt;Hope you Loved it! Do let me know in the comments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contact me
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Souravdey777/" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/in/souravdey777" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Souravdey777" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>npm</category>
      <category>javascript</category>
      <category>node</category>
      <category>100daysofcode</category>
    </item>
  </channel>
</rss>
