<?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: Babisha S</title>
    <description>The latest articles on DEV Community by Babisha S (@babisha_s).</description>
    <link>https://dev.to/babisha_s</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%2F3404779%2F30f7e96b-8087-490f-b140-4e49a24f29df.png</url>
      <title>DEV Community: Babisha S</title>
      <link>https://dev.to/babisha_s</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/babisha_s"/>
    <language>en</language>
    <item>
      <title>@NotBlank vs @Column(nullable = false) vs @NotNull — Which one should you use?</title>
      <dc:creator>Babisha S</dc:creator>
      <pubDate>Sat, 11 Apr 2026 15:12:38 +0000</pubDate>
      <link>https://dev.to/babisha_s/notblank-vs-columnnullable-false-vs-notnull-which-one-should-you-use-27e9</link>
      <guid>https://dev.to/babisha_s/notblank-vs-columnnullable-false-vs-notnull-which-one-should-you-use-27e9</guid>
      <description>&lt;p&gt;When I started working with Spring Boot, I thought all three did the same thing.&lt;/p&gt;

&lt;p&gt;They don’t.&lt;/p&gt;

&lt;p&gt;Understanding the difference between them helped me write cleaner and safer backend code.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. &lt;code&gt;@NotNull&lt;/code&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Prevents null&lt;/li&gt;
&lt;li&gt;Allow empty string "" and spaces " ".&lt;/li&gt;
&lt;li&gt;Provided by Hibernate Validator, used for application level validation.&lt;/li&gt;
&lt;li&gt;Works both for string and integer.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. &lt;code&gt;@NotBlank&lt;/code&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Prevents null, empty string "" and spaces " ".&lt;/li&gt;
&lt;li&gt;Provided by Bean Validation API(Hibernate Validator), used for application level validation.&lt;/li&gt;
&lt;li&gt;Works only for string.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. &lt;code&gt;@Column(nullable = false)&lt;/code&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;This is not validation. It is database constraint.&lt;/li&gt;
&lt;li&gt;Prevents null&lt;/li&gt;
&lt;li&gt;Allow empty string "" and spaces " ".&lt;/li&gt;
&lt;li&gt;Provided by JPA, used for database level constraints.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Which is better?
&lt;/h2&gt;

&lt;p&gt;Use both &lt;code&gt;@NotBlank&lt;/code&gt; and &lt;code&gt;@Column(nullable = false)&lt;/code&gt; for string to ensure data integrity at both levels.  Use &lt;code&gt;@NotNull&lt;/code&gt; if just presence of value is enough.&lt;/p&gt;

</description>
      <category>java</category>
      <category>springboot</category>
      <category>backend</category>
      <category>validation</category>
    </item>
    <item>
      <title>Implementing Backend Development from scratch!</title>
      <dc:creator>Babisha S</dc:creator>
      <pubDate>Sat, 11 Apr 2026 13:09:08 +0000</pubDate>
      <link>https://dev.to/babisha_s/implementing-backend-development-from-scratch-5am4</link>
      <guid>https://dev.to/babisha_s/implementing-backend-development-from-scratch-5am4</guid>
      <description>&lt;p&gt;Today I built a complete JWT Authentication System in Spring Boot completely from scratch.&lt;/p&gt;

&lt;p&gt;Here's what I implemented:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Integrated a PasswordEncoder with BCrypt to hash user credentials before persistence.&lt;/li&gt;
&lt;li&gt;Login API that generates a real JWT token.&lt;/li&gt;
&lt;li&gt;JwtAuthFilter that validates token on every request.&lt;/li&gt;
&lt;li&gt;Used Spring Security configuration to enforce authentication on protected endpoints while exposing selected APIs publicly.&lt;/li&gt;
&lt;li&gt;Secured endpoint that returns logged in user's name.&lt;/li&gt;
&lt;li&gt;Added validation for user input fields and Handled Exception using Global Handler.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bugs I faced:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Field name mismatch between DTO and entity.&lt;/li&gt;
&lt;li&gt;Got 403 Forbidden even with correct token, realized I was using parseClaimsJwt() instead of parseClaimsJws() — one letter difference that broke everything.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The journey is slow but every debug made me sharper.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;User Registration:&lt;/code&gt;&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%2Fujaoeiooqror47wic0db.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%2Fujaoeiooqror47wic0db.png" alt="User Registration" width="800" height="450"&gt;&lt;/a&gt;             &lt;code&gt;User Login:&lt;/code&gt;&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%2Frhuegyxazqm7itmca0rd.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%2Frhuegyxazqm7itmca0rd.png" alt="User Login " width="800" height="450"&gt;&lt;/a&gt;&lt;code&gt;Getting Logged in User Name:&lt;/code&gt;&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%2F61s76u1i55f4di9rulbs.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%2F61s76u1i55f4di9rulbs.png" alt="Getting Logged in User Name" width="800" height="450"&gt;&lt;/a&gt;&lt;code&gt;Global Exception Handling:&lt;/code&gt;&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%2Fkvknd76i3e7w8oikg1e6.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%2Fkvknd76i3e7w8oikg1e6.png" alt="Global Exception Handling" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>springboot</category>
      <category>jwt</category>
      <category>backenddevelopment</category>
      <category>develcorex</category>
    </item>
    <item>
      <title>How Insertion Works in Red-Black Trees</title>
      <dc:creator>Babisha S</dc:creator>
      <pubDate>Thu, 04 Sep 2025 14:49:23 +0000</pubDate>
      <link>https://dev.to/babisha_s/how-insertion-works-in-red-black-trees-26k2</link>
      <guid>https://dev.to/babisha_s/how-insertion-works-in-red-black-trees-26k2</guid>
      <description>&lt;p&gt;&lt;strong&gt;INTRODUCTION&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Red Black Tree is a self balancing binary search tree.  Each node in RB tree is colored using either red or black.  AVL tree requires for rotations during insertion and deletion because it is more balanced than RB tree.  RB tree is used for applications which require more frequent insertion and deletion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Red Property&lt;/strong&gt;: A Red node cannot have red children.&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%2F9mj8lnwg46xm1xsb2doh.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%2F9mj8lnwg46xm1xsb2doh.png" width="800" height="292"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Black Property:&lt;/strong&gt; Each path from a node to its leaves should have equal number of black nodes.&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%2F1gltrklwldkzo1qjaiqj.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%2F1gltrklwldkzo1qjaiqj.png" width="798" height="309"&gt;&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%2Ft9xpcyxj60qb2oueyuqr.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%2Ft9xpcyxj60qb2oueyuqr.png" alt=" " width="762" height="223"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Therefore, in this example from root node to its descendant null nodes there are 2 black nodes in every &lt;br&gt;
path.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;INSERTION&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;New Node is red in color.&lt;/li&gt;
&lt;li&gt;Root nodes are always black.&lt;/li&gt;
&lt;/ol&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%2Fxv3ytatjc6b5t1bg8zny.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%2Fxv3ytatjc6b5t1bg8zny.png" alt=" " width="213" height="70"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; If the node to be inserted is not a root node, then check color of parent,
I)  if parent is black, then simply insert the node.&lt;/li&gt;
&lt;/ol&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%2F97hwwwoc6az723gy69je.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%2F97hwwwoc6az723gy69je.png" alt=" " width="310" height="125"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;II)  if parent is red,  then check parent’s sibling&lt;br&gt;
   a.  if parent’s sibling is red, change the color of parent and parent’s sibling to black, and grandparent&lt;br&gt;
 to red. If grandparent is root don’t change to red. If its not root repeat the same for grandparent. &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%2F8vvdgpwhnda90kpwxhta.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%2F8vvdgpwhnda90kpwxhta.png" alt=" " width="800" height="291"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;b.  if parents sibling is black, &lt;/p&gt;

&lt;p&gt;i) Left Left case&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; When a node is inserted in the left sub tree of the left child. &lt;/li&gt;
&lt;li&gt; Perform right rotation on grandparent, then swap colors of grandparent and parent.&lt;/li&gt;
&lt;/ul&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%2Fh3ljq53knf1oq0gpcn5v.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%2Fh3ljq53knf1oq0gpcn5v.png" alt=" " width="800" height="196"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the above example, the new node =8, Parent node=20, grand parent=25, parent’s Sibling=30.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  In RB tree red node cannot have red children. Inserting 8 violates this property.&lt;/li&gt;
&lt;li&gt;  Parent 20 is red and parent’s sibling 30 is black so perform rotations.&lt;/li&gt;
&lt;li&gt;  In this case perform right rotation on grandparent 25. and swap colors of 25 and 28&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ii)  Left Right case&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  When a node is inserted in the right subtree of the left child. &lt;/li&gt;
&lt;li&gt;  Left rotate parent p and apply LL rotation case.&lt;/li&gt;
&lt;/ul&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%2F8m1v4laz687x1exzugq4.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%2F8m1v4laz687x1exzugq4.png" alt=" " width="602" height="311"&gt;&lt;/a&gt;&lt;br&gt;
 In this example,  new node=21, parent=20, grandparent=25, parent’s sibling=30.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  If we insert new node 21, RB property violates because red node can never have red children.&lt;/li&gt;
&lt;li&gt;  As the parent 20 is red and parent sibling 30 is black perform rotations.&lt;/li&gt;
&lt;li&gt;  In this case perform left rotation on parent.  Then right rotate 25 and swap colors of grand 
parent 25 and new node 21.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;iii) Right Right Case&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; when a node is inserted in the right subtree of the right child. &lt;/li&gt;
&lt;li&gt;  Left rotate grandparent  and swap colors of grand parent and parent.&lt;/li&gt;
&lt;/ul&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%2Flep55kfxllyp3x9g8zy9.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%2Flep55kfxllyp3x9g8zy9.png" alt=" " width="783" height="245"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the above example, the new node =30, Parent node=28, grand parent=25, parent’s Sibling=21&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  In RB tree red node cannot have red children. Inserting 30 violates this property.&lt;/li&gt;
&lt;li&gt;  Parent(28) is red and parent’s sibling(21) is black so perform rotations.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In this case perform left rotation on grandparent 25. and swap colors of 25 and 28.&lt;br&gt;
iv)  Right Left Case&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When a node is inserted in the left sub tree of the right child. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Right rotate parent and apply RR rotation.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&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%2Fbib2r949o35x1z30gen2.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%2Fbib2r949o35x1z30gen2.png" alt=" " width="476" height="182"&gt;&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%2F7emz8c3m25xicn67apce.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%2F7emz8c3m25xicn67apce.png" alt=" " width="301" height="195"&gt;&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%2Ftdpfop9tjyre90g99njz.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%2Ftdpfop9tjyre90g99njz.png" alt=" " width="409" height="150"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this example, new node=30, parent= 32, grandparent=28, parent sibling=21&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;when we insert 30, it violates RB property of no red node can have red children.&lt;/li&gt;
&lt;li&gt;  The parent 32 is red and sibling of parent 21 is black. So perform rotations.&lt;/li&gt;
&lt;li&gt;  In this case right rotate parent 32.  Then Left rotate grandparent 28, then swap colors of inserted
node 30 and grandparent 28.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
In RB tree rules are always consistent. It maintains no consecutive red nodes and ensure that every path has the same number of black nodes. By applying recoloring and rotations , the tree rebalances itself automatically.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Self-Learning Burnout is Real: Here’s How I Beat It</title>
      <dc:creator>Babisha S</dc:creator>
      <pubDate>Fri, 01 Aug 2025 05:40:18 +0000</pubDate>
      <link>https://dev.to/babisha_s/self-learning-burnout-is-real-heres-how-i-beat-it-1a6g</link>
      <guid>https://dev.to/babisha_s/self-learning-burnout-is-real-heres-how-i-beat-it-1a6g</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br&gt;
     I have been self-learning for the past 2 years through trial, error, burnout, and breakthroughs.  Whether you are preparing for placements, building projects, studying for exams, you are probably learning on your own, just like me.&lt;br&gt;
     But somewhere in the process of watching tutorials, taking notes, and solving problems we may burn out.&lt;br&gt;
     I have been through phases where I tried to learn everything all at once. It started with motivation, but ended in burnout, guilt, and inconsistency.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; In this blog, I will share how I self-learn without burning out, based on real struggles and working solutions.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;What Causes Burnout While Self-Learning?&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Not Knowing Where You Stand&lt;br&gt;
  In institutions, we follow a well-structured syllabus to our level. We get curated materials, structured classes, and clear guidance on what to study and when.&lt;br&gt;
  But in self-learning, we often have no idea where to start, which topics to choose next, or how to learn something more practically. Without a proper road map we are unsure about the next step.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No Visible Progress&lt;br&gt;
 Self-learning doesn’t give regular feedback like tests or grades. We may be learning for weeks and still feel like knowing nothing. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Resource Overload&lt;br&gt;
 When we search any topic, we have multiple options like YouTube videos, blog articles, online courses, and books. Choosing quality content becomes more challenging.  We may open YouTube for one course, but end up with 10 different channels. &lt;br&gt;
 Sometimes one resource seems good, but then if we find another article with extra details we are tempted to switch. This constant switching breaks focus and slows real progress. Also:&lt;br&gt;
• Just reading from articles, books often lacks hands on implementation, so the knowledge does not stick.&lt;br&gt;
• Watching YouTube videos only in native languages can make it harder to pick up standard technical terms used in the industry.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;As a result of hopping between resources without mastering anything, our learning remains surface level.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Over planning Instead of Taking Action&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We often set overly ambitious goals like “I will master this topic in 30 days” or “I will watch 10 videos every day” without considering our actual capacity or consistency.&lt;br&gt;
Planning is important, but spending too much time crafting the perfect schedule or listing out tasks beyond our potential can backfire. We might end up planning more than doing.&lt;br&gt;
Eventually, the excitement fades because the plan felt good but no real action happened. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Inconsistent Learning&lt;/p&gt;

&lt;p&gt;We may study one day then take a one week break. When we come back, we don’t even remember where the head and tail of the topic are. We are confused, disconnected, and often have to start all over again.  It drains our motivation and wastes time relearning instead of building on what you already know. Our progress feels slow and may end up in quitting.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;My Practical Strategies to Avoid Burnout&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Step 1: Get the Overall Roadmap &lt;br&gt;
     Before jumping into random tutorials, understand the big picture.&lt;br&gt;
    • Find an over all road map for the skill you want to learn. You can even use AI tools to generate a roadmap. &lt;br&gt;
    • This helps you see the path ahead and track your position clearly.&lt;/p&gt;

&lt;p&gt;Step 2: One Topic a Day &lt;br&gt;
      Avoid binge-learning. Instead, learn one focused topic per day, and implement it.&lt;br&gt;
    • Instead of reading what is what try it out, code it, or explain it to someone.&lt;br&gt;
    • Practical learning sticks longer in memory than passive reading or watching.&lt;/p&gt;

&lt;p&gt;Step 3: Consistency Matters&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; While learning a new skill consistency matters a lot.  Going for gym and having a proper diet for 5 days a month, do not produce any results. Similarly, learning a skill without consistency generate no progress.

• Use habit trackers to build and maintain streaks.
• Don’t miss the streaks even if you are tired or not in the mood, do just 2 minutes of study. That small effort still counts and keeps the momentum alive.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Step 4: Track What You Learn, Not Just What You Plan &lt;/p&gt;

&lt;p&gt;Instead of planning an entire month’s schedule and not achieving it. Just track what you learn each day and maintain a sheet for topics you have learned each day and analyze the progress each month.  This creates a sense of progress and helps to stay motivated &lt;/p&gt;

&lt;p&gt;Step 5: Focus on Quality Resources &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;• Choose a YouTube channel where the tutor is known for their expertise in that specific skill. Do a quick background check read comments, reviews, or see how well they explain concepts. Avoid constantly his switching between tutorials.
• Alongside videos, use a trustworthy website like GeeksforGeeks, MDN, or official documentation to read and take notes. 
• The number of videos you watch doesn’t equal the knowledge you gain.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Instead of focusing on finishing the video, focus on what you actually understood and applied from it. &lt;/p&gt;

&lt;p&gt;Step 6: Take breaks Not Quitting&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; Good things take time.  Take sufficient breaks rather than quitting.  Trust the process don’t only focus on results.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>productivity</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
