<?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>Forem: Juan Emilio</title>
    <description>The latest articles on Forem by Juan Emilio (@juanemilio31323).</description>
    <link>https://forem.com/juanemilio31323</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%2F1699995%2F348b1ba7-0e8d-45f7-87ff-d5ff25d0cb7c.jpeg</url>
      <title>Forem: Juan Emilio</title>
      <link>https://forem.com/juanemilio31323</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/juanemilio31323"/>
    <language>en</language>
    <item>
      <title>This AI App Made My Trades Smarter — Try It FREE Before Everyone Else!</title>
      <dc:creator>Juan Emilio</dc:creator>
      <pubDate>Wed, 11 Jun 2025 22:48:44 +0000</pubDate>
      <link>https://forem.com/juanemilio31323/this-ai-app-made-my-trades-smarter-try-it-free-before-everyone-else-o07</link>
      <guid>https://forem.com/juanemilio31323/this-ai-app-made-my-trades-smarter-try-it-free-before-everyone-else-o07</guid>
      <description>&lt;p&gt;Hi everyone! 👋&lt;br&gt;&lt;br&gt;
I'm Juan, and for the last few months I've been working on a &lt;a href="https://assistantrading.social/" rel="noopener noreferrer"&gt;project&lt;/a&gt; to improve my trading win rate by leveraging &lt;em&gt;Social Arbitrage&lt;/em&gt; and &lt;em&gt;AI&lt;/em&gt;.&lt;br&gt;&lt;br&gt;
I used to lose money trading—even when holding solid assets—but thanks to this project, I went from losing to winning really quickly.&lt;/p&gt;

&lt;p&gt;This is my PnL from just the last 30 days:&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%2F6btz7i0s4hbi0ul2p9jo.jpg" 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%2F6btz7i0s4hbi0ul2p9jo.jpg" alt="PnL Binance" width="800" height="1236"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🥳 For a limited time, you can do the same
&lt;/h2&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%2Fuhacp0lnr1ivpbsrjsiq.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%2Fuhacp0lnr1ivpbsrjsiq.png" alt="App herosection" width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This &lt;a href="https://assistantrading.social/" rel="noopener noreferrer"&gt;project&lt;/a&gt; is still in its early stages and &lt;strong&gt;not officially released yet&lt;/strong&gt;, which is why &lt;strong&gt;I'm offering the chance to join as a beta tester and get free early access&lt;/strong&gt; in &lt;strong&gt;exchange for your feedback&lt;/strong&gt; on the current version.&lt;/p&gt;

&lt;p&gt;I’m also opening a &lt;strong&gt;waiting list&lt;/strong&gt; for those who are interested but would prefer to wait for the full launch.&lt;/p&gt;

&lt;p&gt;If you decide to participate, you’ll get access to all the app’s current features:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Global event notifications&lt;/strong&gt; – Stay updated on all events worldwide that directly or indirectly affect the assets you’re tracking
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Thesis mode&lt;/strong&gt; – Automatically validate your market hypotheses like “Bitcoin is going up” or “Tesla will drop”
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sentiment trends&lt;/strong&gt; – Track the current sentiment of most assets and companies around the globe
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Social Agent&lt;/strong&gt; – A custom AI agent with access to our event graph database. It understands complex investment strategies and real-world scenarios. Ask things like:

&lt;ul&gt;
&lt;li&gt;“Should I invest in Apple now?”
&lt;/li&gt;
&lt;li&gt;“When should I enter this trade?”&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you’d rather wait, you can still register and you’ll receive an automatic notification when the app is fully launched.&lt;/p&gt;

&lt;h2&gt;
  
  
  📰 More Information
&lt;/h2&gt;

&lt;p&gt;For more updates about the project, visit &lt;a href="https://x.com/indie_juanE" rel="noopener noreferrer"&gt;my X account&lt;/a&gt; or &lt;a href="https://x.com/Social_AI25" rel="noopener noreferrer"&gt;the project's official account&lt;/a&gt;, where we also share predictions generated with &lt;a href="https://assistantrading.social/" rel="noopener noreferrer"&gt;Social&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Finally, a question for you, reader:&lt;br&gt;&lt;br&gt;
Would you be interested in weekly posts here sharing progress on the project and sneak peeks at upcoming features?&lt;/p&gt;

&lt;h2&gt;
  
  
  🙏 Thanks for reading
&lt;/h2&gt;

&lt;p&gt;I know this post may feel a little like an advertisement—and that’s because it is.&lt;br&gt;&lt;br&gt;
This is a bootstrapped project (which means I’m funding it myself), and I’m putting my heart and soul into it.&lt;br&gt;&lt;br&gt;
If you can give it a try or help spread the word, that would mean the world to me.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>typescript</category>
      <category>python</category>
      <category>cryptocurrency</category>
    </item>
    <item>
      <title>Trading Was Beating Me - So I Fought Back with Code</title>
      <dc:creator>Juan Emilio</dc:creator>
      <pubDate>Fri, 06 Jun 2025 15:29:57 +0000</pubDate>
      <link>https://forem.com/juanemilio31323/trading-was-beating-me-so-i-fought-back-with-code-3n4o</link>
      <guid>https://forem.com/juanemilio31323/trading-was-beating-me-so-i-fought-back-with-code-3n4o</guid>
      <description>&lt;p&gt;Something that always fascinated me was trading. I remember being 15 and seeing all these apparently successful people on the internet talking about trading. Back then I tried to become a trader myself, but it was a disaster; I got really stressed (and obsessed) and I lost all my savings trying to catch any market moves. So I came to the conclusion that it wasn't for me... &lt;em&gt;Until now&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;A couple of months ago, I found myself watching YouTube and stumbled upon the unbelievable story of a guy called Jim Simons, a mathematician who beat the market by creating an incredible, unique, and mysterious AI algorithm that no one knows how it works (if you don't know this guy, go and check his story). This got me interested, and I started investigating even more. Then I started to follow a guy called Chris Camillo, a trader who claims made his fortune trading options and derivatives by following sentiment trends. From that author, I jumped to another one and another one and... another one. The list is huge, so I said to myself: "Why not try again?"&lt;/p&gt;

&lt;h2&gt;
  
  
  The idea
&lt;/h2&gt;

&lt;p&gt;The idea was simple: create an app with all of the things I thought could help me catch market moves, sentiment trends, hidden events in the world, and game-changing information hidden in plain sight. From my previous experience, I know that technical analysis is a dark magic that for some reason doesn't work for me, so I didn't spend too much time building things around it.&lt;/p&gt;

&lt;p&gt;From that was born a project that I called &lt;em&gt;Social&lt;/em&gt;. A set of tools based on graph algorithms, sentiment analysis, LLMs, tons of web scraping, and internet crawling. That was my solution.&lt;/p&gt;

&lt;h2&gt;
  
  
  The results
&lt;/h2&gt;

&lt;p&gt;Probably you, who are reading, are asking the obvious and most important question: &lt;em&gt;"Did it work?"&lt;/em&gt; and the surprising answer is... &lt;strong&gt;Yes.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Crazy! I know, but I've been playing with this thing since the end of January and the results have been amazing. The rules I used to test the project were simple: I'm gonna give it a limited budget, and I'm gonna follow the information that Social gave me. To make everything simpler, I created an app and connected everything to an AI Agent, so I can write questions whenever I need more information or I can check the multiple dashboards, where I can inspect the sentiment trend of almost all the companies in the world and track the events that are happening everywhere.&lt;/p&gt;

&lt;h3&gt;
  
  
  The first hit
&lt;/h3&gt;

&lt;p&gt;The first hit of the project was at the end of February. It was gold. The project told me that I should buy gold because the economic situation in the US wasn't looking right. Also, there were "hidden" events of countries starting to demand more gold, not to mention that the sentiment in the US and the dollar weren't that good.  &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%2F4ilbrcy3h5qio6y0g4tl.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%2F4ilbrcy3h5qio6y0g4tl.png" alt="PAXG Bill" width="720" height="830"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So I followed, and I bought approximately $300 of PAXG (a crypto that follows gold). To my surprise, gold hasn’t stopped increasing in value since February.&lt;/p&gt;

&lt;p&gt;I also traded GME before it went vertical, AAPL, and BTC (sadly I took profit too soon in all these trades because I was testing).  &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%2Ffx4lfxnvzm6hwn13hc8a.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%2Ffx4lfxnvzm6hwn13hc8a.png" alt="Binance Trades" width="800" height="91"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Current state
&lt;/h3&gt;

&lt;p&gt;The project is still in an early phase and I continue doing testing. I'm thinking of releasing the project soon in a closed beta in order for users to start testing it. I share almost daily some information gathered by Social. So, if you are interested in trading or seeing what's going on in the market, &lt;a href="https://x.com/Social_AI25" rel="noopener noreferrer"&gt;follow Social on X&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I've learned a lot doing trading and working on this project, and the results got me really excited. I still need to do more testing, but I feel really motivated. If you wanna see more of the project or get more information, &lt;a href="https://x.com/indie_juanE" rel="noopener noreferrer"&gt;I opened an X account&lt;/a&gt; where I'll be posting more information about this project and my other ideas.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>rag</category>
      <category>programming</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>My Personal Experience Working in Big Tech - How to Avoid the Stress</title>
      <dc:creator>Juan Emilio</dc:creator>
      <pubDate>Sun, 28 Jul 2024 13:16:05 +0000</pubDate>
      <link>https://forem.com/juanemilio31323/my-personal-experience-working-in-big-tech-how-to-avoid-the-stress-37nj</link>
      <guid>https://forem.com/juanemilio31323/my-personal-experience-working-in-big-tech-how-to-avoid-the-stress-37nj</guid>
      <description>&lt;p&gt;Hi👋 I'm Juan, and probably as you already know if you have been reading my posts, I've been working at a new place for a couple of months now. I've joined a big tech company with more than 29,000 employees, and let me tell you, it hasn't been easy. For that reason, today I want to help you avoid not only the stress that I felt while entering but also once I got in. So if you are interested, prepare yourself and enjoy.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Selection Process 💤
&lt;/h2&gt;

&lt;p&gt;It's worth mentioning that this wasn't my first rodeo, but man! It's amazing how much the selection process can change from one company to another, depending on the size.&lt;/p&gt;

&lt;p&gt;I was looking for a new job (I was already working somewhere else) and I encountered this company that is basically the biggest in my country and one of the biggest around the world (I have signed a confidentiality agreement, so I’ll avoid mentioning the name). I sent my resume, and only one week later, the recruiter contacted me. We scheduled an appointment for a personal interview, and after that, it was just a matter of time to get my first technical interview.&lt;/p&gt;

&lt;p&gt;That's how I ended up in a meeting that took an hour and a half, discussing everything related to &lt;strong&gt;TS, JS, Functional Programming, and OOP&lt;/strong&gt;. We also talked about &lt;strong&gt;React, Angular, and Vue&lt;/strong&gt; (this was a senior frontend developer position). In total, I had four interviews and one code challenge. All the interviews required me to solve some code problems (nothing hard, especially if you read my last article on &lt;a href="https://dev.to/juanemilio31323/the-best-book-to-learn-about-algorithms-and-data-structures-take-your-developer-skills-to-the-next-level-4b81"&gt;Algorithms and Data Structures&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;After all that, which took about a month (mainly because I didn’t have time to do the interviews and had to reschedule), they got back to me, and I got in. And after that...&lt;/p&gt;

&lt;h3&gt;
  
  
  They Rejected Me
&lt;/h3&gt;

&lt;p&gt;Yep, as you read. They told me that everything was awesome, that I was going to start, and just after a week of not having any response, they contacted me to tell me that they chose to go with another developer.&lt;/p&gt;

&lt;p&gt;Damn! I was frustrated. They didn’t give me any explanation, and the feedback was all positive. Never in my life, not even with girls, had I felt so confused.&lt;/p&gt;

&lt;p&gt;To my surprise, after another month, the same recruiter contacted me to tell me that there was another open position for a similar role. At first, I doubted it, but after the recruiter insisted, I reluctantly accepted. Despite my personal experience, all I had heard about the company was positive.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Advice
&lt;/h2&gt;

&lt;p&gt;These are some of the things that I would advise my past self from this experience and also things that I knew but are important to keep in mind.&lt;/p&gt;

&lt;h3&gt;
  
  
  1st - It’s Slow
&lt;/h3&gt;

&lt;p&gt;Don’t expect it to be fast. It’s going to take time, no matter the size of the company.&lt;/p&gt;

&lt;h3&gt;
  
  
  2nd - Learn More About the Company
&lt;/h3&gt;

&lt;p&gt;I knew nothing about the company when the recruiter first called me, except that they had good salaries, a gym in the office, and bowling 🤦.&lt;/p&gt;

&lt;h3&gt;
  
  
  3rd - Take Notes
&lt;/h3&gt;

&lt;p&gt;Probably this is the best one. Obviously, you’ll have to prepare for your interviews, check common topics, and things that you may have forgotten. But besides that, always be ready to take notes about the things they ask you in the interview, especially the ones you don’t know or would answer differently. They’ll likely repeat in the future.&lt;/p&gt;

&lt;h3&gt;
  
  
  4th - Be Respectful
&lt;/h3&gt;

&lt;p&gt;Always be respectful, even when they do something like rejecting you after telling you that you are the one. Keep calm; you may need them in the future, or maybe they’ll need you.&lt;/p&gt;

&lt;h3&gt;
  
  
  5th - Negotiate Your Vacations
&lt;/h3&gt;

&lt;p&gt;Before signing anything, remember to negotiate your vacations. You’ll thank me later.&lt;/p&gt;

&lt;h3&gt;
  
  
  6th - Do Your Interview with Ease
&lt;/h3&gt;

&lt;p&gt;If you feel like you need more help with your interviews, consider checking &lt;a href="https://amzn.to/3LHGupq" rel="noopener noreferrer"&gt;Programming Interviews Exposed&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  We Are In - First Week 🥳
&lt;/h2&gt;

&lt;p&gt;Great, I got in, and it’s my first week. I have a ton of meetings where they explain everything about the company structure and who to consult in every case.&lt;br&gt;
I saw no code for almost a week, and the only thing I had to do was enter endless meetings with people explaining important things that I didn’t care about.&lt;/p&gt;

&lt;p&gt;You may be asking why I’m explaining this, and it’s because I want you to know what your first week at a big-tech company is likely to be like. I won’t spend much more time on this because there isn’t much to say here.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Advice
&lt;/h2&gt;

&lt;p&gt;The first week was simple, but I made a ton of mistakes this week.&lt;/p&gt;

&lt;h3&gt;
  
  
  1st - Pay Attention
&lt;/h3&gt;

&lt;p&gt;OMG! I hate meetings, like any other human being. But you know what I hate more? Getting information that I’m not looking for. Because of this, when they were explaining the company structure, the people to consult, and many other important aspects for the future, I didn’t pay attention. Due to that, weeks later, I didn’t know what to do with my paperwork or my doubts.&lt;/p&gt;

&lt;p&gt;So next time, pay attention and take notes about everything and save the presentations.&lt;/p&gt;

&lt;h3&gt;
  
  
  2nd - Do Your Paperwork!!!
&lt;/h3&gt;

&lt;p&gt;Another thing we all hate: paperwork and bureaucracy. It’s a big company with great benefits, so don’t expect it to be without bureaucracy or tons of paperwork. Follow my advice and do it as soon as you receive it.&lt;/p&gt;

&lt;p&gt;Take advantage of this first "free week" that they give you because you won’t have a better opportunity to finish all this, and more will come.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Month In 🆘
&lt;/h2&gt;

&lt;p&gt;A month went by, and I was completely lost. I was doing some tasks, sure, but I didn’t understand the project structure. The number of repositories was ridiculous, and every time I needed to start a new task, it was a pain. So I decided to systematize the process that I had been following to solve each task.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Advice
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1st - Consider the Investigation
&lt;/h3&gt;

&lt;p&gt;You are new; you know little to nothing about the project. You’ll need to explore, ask, collect information, and only then will you know what you are dealing with. Take that into consideration when your manager asks you for a time estimation. Stay accountable and deal with the investigation as soon as you can. After that, you’ll be able to focus.&lt;/p&gt;

&lt;h3&gt;
  
  
  2nd - Find the Right People
&lt;/h3&gt;

&lt;p&gt;One of the easiest and most powerful soft skills you can develop is knowing who the right person is for every problem. If you master that, you’ll be able to ask and execute, solving problems way over your head and learning a ton during the process.&lt;/p&gt;

&lt;h3&gt;
  
  
  3rd - Know How to Ask
&lt;/h3&gt;

&lt;p&gt;Finding the right person can be complicated, but there’s a trick. Find the highest person in charge that you can reach and ask, &lt;em&gt;"Who do you think is someone who can help me with this?"&lt;/em&gt; Go to that person, briefly explain what you need, and always add something like, &lt;em&gt;"{Person who gave you their name} told me that you are the best person to help me."&lt;/em&gt; This always makes everything smoother, appealing directly to their ego. Finally, if that is not the right person, you can always ask if they know someone who can help you, and you repeat this recursive process.&lt;/p&gt;

&lt;h3&gt;
  
  
  4th - Find Your Place
&lt;/h3&gt;

&lt;p&gt;Pay attention to what you are learning and what you do better than your peers. Probably the intersection between those things is the place where you can get the most out of yourself. For example, I’m really good at refactoring code, and I love doing it. I also like investigating; it makes me feel like a detective. So the best place for me now is solving defects.&lt;/p&gt;

&lt;h2&gt;
  
  
  The End
&lt;/h2&gt;

&lt;p&gt;I hope you found my post useful and entertaining. Did it help you in any way? Yes 🥳, amazing. &lt;strong&gt;Did you know that you can help me?&lt;/strong&gt; If you want to know more, click on the green button 👇.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://buymeacoffee.com/juanemilio" rel="noopener noreferrer"&gt;&lt;img src="https://media.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%2Fsnp40px4etoe0crydrll.png" alt="Help me button"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are going through a hard time yourself because you changed your job or you just want to share your opinion, I’m reading your comments.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://buymeacoffee.com/juanemilio/e/277947" rel="noopener noreferrer"&gt;&lt;img src="https://media.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%2F0l7y48egsopb1fq8pr63.png" alt="Contact button"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>My Personal Experience Working in Big Tech - How to Avoid the Stress</title>
      <dc:creator>Juan Emilio</dc:creator>
      <pubDate>Sun, 28 Jul 2024 13:16:04 +0000</pubDate>
      <link>https://forem.com/juanemilio31323/my-personal-experience-working-in-big-tech-how-to-avoid-the-stress-2iof</link>
      <guid>https://forem.com/juanemilio31323/my-personal-experience-working-in-big-tech-how-to-avoid-the-stress-2iof</guid>
      <description>&lt;p&gt;Hi👋 I'm Juan, and probably as you already know if you have been reading my posts, I've been working at a new place for a couple of months now. I've joined a big tech company with more than 29,000 employees, and let me tell you, it hasn't been easy. For that reason, today I want to help you avoid not only the stress that I felt while entering but also once I got in. So if you are interested, prepare yourself and enjoy.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Selection Process 💤
&lt;/h2&gt;

&lt;p&gt;It's worth mentioning that this wasn't my first rodeo, but man! It's amazing how much the selection process can change from one company to another, depending on the size.&lt;/p&gt;

&lt;p&gt;I was looking for a new job (I was already working somewhere else) and I encountered this company that is basically the biggest in my country and one of the biggest around the world (I have signed a confidentiality agreement, so I’ll avoid mentioning the name). I sent my resume, and only one week later, the recruiter contacted me. We scheduled an appointment for a personal interview, and after that, it was just a matter of time to get my first technical interview.&lt;/p&gt;

&lt;p&gt;That's how I ended up in a meeting that took an hour and a half, discussing everything related to &lt;strong&gt;TS, JS, Functional Programming, and OOP&lt;/strong&gt;. We also talked about &lt;strong&gt;React, Angular, and Vue&lt;/strong&gt; (this was a senior frontend developer position). In total, I had four interviews and one code challenge. All the interviews required me to solve some code problems (nothing hard, especially if you read my last article on &lt;a href="https://dev.to/juanemilio31323/the-best-book-to-learn-about-algorithms-and-data-structures-take-your-developer-skills-to-the-next-level-4b81"&gt;Algorithms and Data Structures&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;After all that, which took about a month (mainly because I didn’t have time to do the interviews and had to reschedule), they got back to me, and I got in. And after that...&lt;/p&gt;

&lt;h3&gt;
  
  
  They Rejected Me
&lt;/h3&gt;

&lt;p&gt;Yep, as you read. They told me that everything was awesome, that I was going to start, and just after a week of not having any response, they contacted me to tell me that they chose to go with another developer.&lt;/p&gt;

&lt;p&gt;Damn! I was frustrated. They didn’t give me any explanation, and the feedback was all positive. Never in my life, not even with girls, had I felt so confused.&lt;/p&gt;

&lt;p&gt;To my surprise, after another month, the same recruiter contacted me to tell me that there was another open position for a similar role. At first, I doubted it, but after the recruiter insisted, I reluctantly accepted. Despite my personal experience, all I had heard about the company was positive.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Advice
&lt;/h2&gt;

&lt;p&gt;These are some of the things that I would advise my past self from this experience and also things that I knew but are important to keep in mind.&lt;/p&gt;

&lt;h3&gt;
  
  
  1st - It’s Slow
&lt;/h3&gt;

&lt;p&gt;Don’t expect it to be fast. It’s going to take time, no matter the size of the company.&lt;/p&gt;

&lt;h3&gt;
  
  
  2nd - Learn More About the Company
&lt;/h3&gt;

&lt;p&gt;I knew nothing about the company when the recruiter first called me, except that they had good salaries, a gym in the office, and bowling 🤦.&lt;/p&gt;

&lt;h3&gt;
  
  
  3rd - Take Notes
&lt;/h3&gt;

&lt;p&gt;Probably this is the best one. Obviously, you’ll have to prepare for your interviews, check common topics, and things that you may have forgotten. But besides that, always be ready to take notes about the things they ask you in the interview, especially the ones you don’t know or would answer differently. They’ll likely repeat in the future.&lt;/p&gt;

&lt;h3&gt;
  
  
  4th - Be Respectful
&lt;/h3&gt;

&lt;p&gt;Always be respectful, even when they do something like rejecting you after telling you that you are the one. Keep calm; you may need them in the future, or maybe they’ll need you.&lt;/p&gt;

&lt;h3&gt;
  
  
  5th - Negotiate Your Vacations
&lt;/h3&gt;

&lt;p&gt;Before signing anything, remember to negotiate your vacations. You’ll thank me later.&lt;/p&gt;

&lt;h3&gt;
  
  
  6th - Do Your Interview with Ease
&lt;/h3&gt;

&lt;p&gt;If you feel like you need more help with your interviews, consider checking &lt;a href="https://amzn.to/3LHGupq" rel="noopener noreferrer"&gt;Programming Interviews Exposed&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  We Are In - First Week 🥳
&lt;/h2&gt;

&lt;p&gt;Great, I got in, and it’s my first week. I have a ton of meetings where they explain everything about the company structure and who to consult in every case.&lt;br&gt;
I saw no code for almost a week, and the only thing I had to do was enter endless meetings with people explaining important things that I didn’t care about.&lt;/p&gt;

&lt;p&gt;You may be asking why I’m explaining this, and it’s because I want you to know what your first week at a big-tech company is likely to be like. I won’t spend much more time on this because there isn’t much to say here.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Advice
&lt;/h2&gt;

&lt;p&gt;The first week was simple, but I made a ton of mistakes this week.&lt;/p&gt;

&lt;h3&gt;
  
  
  1st - Pay Attention
&lt;/h3&gt;

&lt;p&gt;OMG! I hate meetings, like any other human being. But you know what I hate more? Getting information that I’m not looking for. Because of this, when they were explaining the company structure, the people to consult, and many other important aspects for the future, I didn’t pay attention. Due to that, weeks later, I didn’t know what to do with my paperwork or my doubts.&lt;/p&gt;

&lt;p&gt;So next time, pay attention and take notes about everything and save the presentations.&lt;/p&gt;

&lt;h3&gt;
  
  
  2nd - Do Your Paperwork!!!
&lt;/h3&gt;

&lt;p&gt;Another thing we all hate: paperwork and bureaucracy. It’s a big company with great benefits, so don’t expect it to be without bureaucracy or tons of paperwork. Follow my advice and do it as soon as you receive it.&lt;/p&gt;

&lt;p&gt;Take advantage of this first "free week" that they give you because you won’t have a better opportunity to finish all this, and more will come.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Month In 🆘
&lt;/h2&gt;

&lt;p&gt;A month went by, and I was completely lost. I was doing some tasks, sure, but I didn’t understand the project structure. The number of repositories was ridiculous, and every time I needed to start a new task, it was a pain. So I decided to systematize the process that I had been following to solve each task.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Advice
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1st - Consider the Investigation
&lt;/h3&gt;

&lt;p&gt;You are new; you know little to nothing about the project. You’ll need to explore, ask, collect information, and only then will you know what you are dealing with. Take that into consideration when your manager asks you for a time estimation. Stay accountable and deal with the investigation as soon as you can. After that, you’ll be able to focus.&lt;/p&gt;

&lt;h3&gt;
  
  
  2nd - Find the Right People
&lt;/h3&gt;

&lt;p&gt;One of the easiest and most powerful soft skills you can develop is knowing who the right person is for every problem. If you master that, you’ll be able to ask and execute, solving problems way over your head and learning a ton during the process.&lt;/p&gt;

&lt;h3&gt;
  
  
  3rd - Know How to Ask
&lt;/h3&gt;

&lt;p&gt;Finding the right person can be complicated, but there’s a trick. Find the highest person in charge that you can reach and ask, &lt;em&gt;"Who do you think is someone who can help me with this?"&lt;/em&gt; Go to that person, briefly explain what you need, and always add something like, &lt;em&gt;"{Person who gave you their name} told me that you are the best person to help me."&lt;/em&gt; This always makes everything smoother, appealing directly to their ego. Finally, if that is not the right person, you can always ask if they know someone who can help you, and you repeat this recursive process.&lt;/p&gt;

&lt;h3&gt;
  
  
  4th - Find Your Place
&lt;/h3&gt;

&lt;p&gt;Pay attention to what you are learning and what you do better than your peers. Probably the intersection between those things is the place where you can get the most out of yourself. For example, I’m really good at refactoring code, and I love doing it. I also like investigating; it makes me feel like a detective. So the best place for me now is solving defects.&lt;/p&gt;

&lt;h2&gt;
  
  
  The End
&lt;/h2&gt;

&lt;p&gt;I hope you found my post useful and entertaining. Did it help you in any way? Yes 🥳, amazing. &lt;strong&gt;Did you know that you can help me?&lt;/strong&gt; If you want to know more, click on the green button 👇.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://buymeacoffee.com/juanemilio" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsnp40px4etoe0crydrll.png" alt="Help me button" width="389" height="90"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are going through a hard time yourself because you changed your job or you just want to share your opinion, I’m reading your comments.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://buymeacoffee.com/juanemilio/e/277947" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0l7y48egsopb1fq8pr63.png" alt="Contact button" width="389" height="90"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The Best Book to Learn About Algorithms and Data Structures - Take Your Developer Skills to the Next Level</title>
      <dc:creator>Juan Emilio</dc:creator>
      <pubDate>Wed, 24 Jul 2024 13:02:09 +0000</pubDate>
      <link>https://forem.com/juanemilio31323/the-best-book-to-learn-about-algorithms-and-data-structures-take-your-developer-skills-to-the-next-level-4b81</link>
      <guid>https://forem.com/juanemilio31323/the-best-book-to-learn-about-algorithms-and-data-structures-take-your-developer-skills-to-the-next-level-4b81</guid>
      <description>&lt;p&gt;No matter if you are a software developer who wants to get into AI, frontend, backend, or databases. Wherever you go, you'll have to deal with Data Structures and Algorithms, and learning them will not only give you an incredible advantage over your competition but also help you write better code and have a wider understanding of how the biggest and most amazing pieces of code work behind the scenes.&lt;/p&gt;

&lt;p&gt;That's why today I want to present to you the book that changed my life in this regard:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://amzn.to/3LzM3Gb" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcca1obc9oo4ewzl8lxqm.jpg" alt="Book Cover" width="800" height="1004"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://amzn.to/3LzM3Gb" rel="noopener noreferrer"&gt;Groking Algorithms&lt;/a&gt; is probably the best book ever created to introduce anyone to the world of algorithms or even expand your current understanding if you already know something about it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Book Structure
&lt;/h2&gt;

&lt;p&gt;This is not the common CS book that will teach with over-complicated examples or will take for granted that you have been studying this topic for the last two months in college. No, no, this book will take you from 0, giving you interesting and appealing examples, like: &lt;em&gt;"How Facebook verifies your account, How to track the main character in a video game, how Google Maps works"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It is worth mentioning that all the examples are fun, they are accompanied by Python code and beautiful and entertaining illustrations.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Can You Expect to Learn?
&lt;/h2&gt;

&lt;p&gt;Obviously, you'll learn about algorithms, data structures, and performance. But here you have a longer and more detailed list of the main topics:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Binary Search&lt;/li&gt;
&lt;li&gt;Big O Notation&lt;/li&gt;
&lt;li&gt;How Memory Works&lt;/li&gt;
&lt;li&gt;Arrays and Linked Lists&lt;/li&gt;
&lt;li&gt;Recursion&lt;/li&gt;
&lt;li&gt;Quick Sort&lt;/li&gt;
&lt;li&gt;Hash Tables&lt;/li&gt;
&lt;li&gt;Breadth-First Search (&lt;strong&gt;really helpful for AI&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Dijkstra's Algorithm (&lt;strong&gt;will blow your mind and you'll want to study math&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Greedy Algorithms&lt;/li&gt;
&lt;li&gt;Dynamic Programming&lt;/li&gt;
&lt;li&gt;K-Nearest Neighbors&lt;/li&gt;
&lt;li&gt;Trees&lt;/li&gt;
&lt;li&gt;Inverted Indexes&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The book goes deep into these topics and will explain how they were developed, how they work, their applications, and their history. You'll be amazed at how simple the author makes these topics seem. &lt;strong&gt;If you don't get it with this book... I don't know how you'll do it&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My Suggestions
&lt;/h2&gt;

&lt;p&gt;Once you start reading this book, I strongly encourage you to start practicing with code, not only in Python but in any language that you want, creating your own implementations of these algorithms.&lt;/p&gt;

&lt;p&gt;Also, &lt;a href="https://leetcode.com/" rel="noopener noreferrer"&gt;LeetCode&lt;/a&gt; is an excellent place to keep practicing some of the concepts that are introduced in the book. Anyway, it is most likely that after this book you'll have to keep reading about it.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience
&lt;/h2&gt;

&lt;p&gt;I've been working in software development for something around 7 years now and I've dealt with many problems. I would have never imagined how much this book would help me. From implementing an algorithm to make searches over a custom tree to working with a RAG (Retrieval Augmented Generation) system, having to implement many algorithms to achieve the desired result. &lt;strong&gt;This book has changed my life, and there is no day where I regret having bought it&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Book to Read After
&lt;/h2&gt;

&lt;p&gt;I would suggest continuing with &lt;a href="https://amzn.to/3WeiZcl" rel="noopener noreferrer"&gt;Introduction to Algorithms&lt;/a&gt;. It is a more extensive book but will help you continue learning.&lt;/p&gt;

&lt;h2&gt;
  
  
  The End
&lt;/h2&gt;

&lt;p&gt;This is a short post that has the sole intention of helping those who lack the technical knowledge that one normally acquires in college. I have many friends who are self-taught developers, and they want to acquire this information. For that reason, I wrote this post because this is something that I've shared with them, and it really helps.&lt;/p&gt;

&lt;p&gt;If you found this post helpful, consider donating to me and helping me buy a book. It's something that I really appreciate, and you have no idea how helpful it is.&lt;/p&gt;

&lt;p&gt;[-----------------------------------------------------] 0% of $60, &lt;a href="https://buymeacoffee.com/juanemilio" rel="noopener noreferrer"&gt;Let's buy me a book&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://buymeacoffee.com/juanemilio/e/277947" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fft8rm19uupvbe5stdgm4.png" alt="Button" width="389" height="90"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As always, I hope you like it, and I'm reading your comments in the comment section.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>datastructures</category>
      <category>books</category>
      <category>frontend</category>
    </item>
    <item>
      <title>How to Create Wealth and Passive Income - All That I Learned From the Millionaire Fastlane</title>
      <dc:creator>Juan Emilio</dc:creator>
      <pubDate>Tue, 23 Jul 2024 02:12:10 +0000</pubDate>
      <link>https://forem.com/juanemilio31323/how-to-create-wealth-and-passive-income-how-to-create-wealth-and-passive-income-2e4k</link>
      <guid>https://forem.com/juanemilio31323/how-to-create-wealth-and-passive-income-how-to-create-wealth-and-passive-income-2e4k</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Wealth is a process, not an event - MJ DeMarco&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Today, I want to share with you all that I learned from &lt;a href="https://amzn.to/3LAdZtB" rel="noopener noreferrer"&gt;"The Millionaire Fastlane"&lt;/a&gt;, a book that promises to help you create wealth, but not in the traditional way. This book was written by &lt;em&gt;MJ DeMarco&lt;/em&gt;, an entrepreneur who created multiple successful businesses and went from nothing to millionaire. He shares a philosophy where he tries to teach that you can be a nobody and still create an &lt;em&gt;"asymmetrical growing business"&lt;/em&gt;. If this sounds interesting, keep reading.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I'm a &lt;strong&gt;nobody&lt;/strong&gt;. And that's important—because you can be a "nobody" too—a &lt;strong&gt;nobody&lt;/strong&gt; who lives like a king - MJ DeMarco&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Lesson 1 - The Slowlane, The Sidewalk, and The Fastlane
&lt;/h2&gt;

&lt;p&gt;If you have grown up in a conservative family like mine, where there has never been too much money around, you have probably heard advice like: &lt;em&gt;"You need to save money", "Don't waste too much", "Buy real estate", "Get a stable job and don't let it go"&lt;/em&gt; and many other things like that. And although I don't think all of this advice is necessarily wrong, there is something that MJ DeMarco tries to tell us that is true.&lt;/p&gt;

&lt;p&gt;In the book, we are presented with the idea that wealth is not built through events but through a process that we need to endure. This process can be described as a "road trip" that we all drive, either consciously or not.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Slowlane
&lt;/h3&gt;

&lt;p&gt;This map is the one that most of us follow. Trying to find a stable job, working hard to climb the corporate ladder, and saving every penny we can to hopefully someday live the life that we truly want.&lt;/p&gt;

&lt;p&gt;I don't know how you feel when I talk about this, but personally, this is not a plan that resonates with me, nor with MJ. We can summarize his opinion and destroy this perspective with only one phrase from the book:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Unfortunately, wheelchairs don't fit in the trunks of Lamborghinis - Page 67&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Sidewalk
&lt;/h2&gt;

&lt;p&gt;This is probably the saddest of all plans. MJ DeMarco tells us that there are people who feel incapable of playing the money game, so they decide to step aside and live a life pretending to be someone they are not. Buying expensive things out of their budget, making poor decisions, and waiting for a spectacular event to happen to make them rich and full of purpose. Like winning the lottery or all of a sudden inventing something amazing that changes the world.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Fastlane
&lt;/h2&gt;

&lt;p&gt;Forget about funds, playing it safe, working 9 - 5, waiting for an exceptional event, or saving for the rest of your life, hoping someday to be happy. MJ proposes a third way, a way that can make us rich young.&lt;/p&gt;

&lt;p&gt;The author affirms throughout the book that he spent many years trying to understand how there are people in their 20s or 30s who are rich. For sure, they didn't do it through index funds or investing in mutual funds. So how?&lt;/p&gt;

&lt;p&gt;He concluded that they have found a way to create asymmetrical growing ventures, capable of producing gigantic amounts of money per month, that normally at the end conclude in a &lt;em&gt;"Liquidation-Event"&lt;/em&gt; (converting all their physical assets and the company itself into money).&lt;/p&gt;

&lt;p&gt;But how can this be achieved? Keep reading...&lt;/p&gt;

&lt;h2&gt;
  
  
  Lesson 2 - Create, Refine, and Systematize the Steps to Wealth
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;How to be rich?&lt;/strong&gt; That's the question that most of us are asking right now. MJ DeMarco seems to have an answer. The steps that we need to follow to be rich are described around chapter 17, and I've summarized them as follows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create or Solve&lt;/li&gt;
&lt;li&gt;Sell it&lt;/li&gt;
&lt;li&gt;Earn enough to quit&lt;/li&gt;
&lt;li&gt;Quit&lt;/li&gt;
&lt;li&gt;Repeat and enjoy&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Probably most of the juice is in the &lt;em&gt;create or solve&lt;/em&gt;. But what does it mean? This means that we need to find a problem that needs a solution, a complex and repetitive problem.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Virgin Ideas Are Absurd
&lt;/h3&gt;

&lt;p&gt;When we are looking for something to invent, it is really complex to come up with an original idea, and probably if you are something like me, you have found yourself amazed with an invention that you could bring to life, only to figure out a couple of minutes later that it already exists.&lt;/p&gt;

&lt;p&gt;That's why, when I read this phrase, I was happily surprised:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;They seek virgin ideas, perfect and new, ones that would be unveiled to the world in grandiose events. Rarely does that happen - Page 248&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The author tries to tell us something that hides right in front of us: millionaire ideas surround us all the time. The light bulb, first created in 1879, used to be expensive, energetically inefficient, and hard to produce. Now we have light bulbs that produce less heat, are more efficient, can change their color, are easier to produce, and are cheaper. &lt;strong&gt;That's the heart of capitalism!!!&lt;/strong&gt; We need to seek out those things that bother us and try to think of ways to make them better, even if there is already another solution.&lt;/p&gt;

&lt;h3&gt;
  
  
  Compete with an Advantage
&lt;/h3&gt;

&lt;p&gt;Have you ever called a service and thought, &lt;em&gt;"Wow, I'm never calling again"?&lt;/em&gt; That has happened to me many times. Wouldn't it be great if the services we know and enjoy could give us better customer service? Ding ding ding, there you go. That's something you can use to your advantage.&lt;/p&gt;

&lt;p&gt;The book is telling us that even the smallest thing, well done, can be a big opportunity, and it's even better if the customer doesn't expect it. So look for things that your competition is forgetting and could be better executed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Execute Fast and Learn from Your Customers
&lt;/h3&gt;

&lt;p&gt;Finally, don't waste too much time thinking about the perfect execution. Go, do it, and get feedback from your customers. They'll teach you the next steps ahead. That's what I did with my coffee shop, and I'm surprised how far away I was from perfection.&lt;/p&gt;

&lt;h2&gt;
  
  
  Passive Income is the Key
&lt;/h2&gt;

&lt;p&gt;We already know that we need a plan, that the escape from the &lt;strong&gt;rat race&lt;/strong&gt; is not through funds or savings, that we need to create something, but what? I like the analogy the book has chosen. We need a tree. A money tree. There are not many places where they can grow, and they require a substantial amount of care and effort. &lt;strong&gt;The places where they can grow are&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Rental Systems -&amp;gt; Anything that you can lend and get paid for&lt;/li&gt;
&lt;li&gt;Computer Systems -&amp;gt; Any software that can make money by itself&lt;/li&gt;
&lt;li&gt;Content Systems -&amp;gt; Anything that distributes information e.g. TikTok, A book, Instagram&lt;/li&gt;
&lt;li&gt;Distribution Systems -&amp;gt; Any means that helps to distribute something&lt;/li&gt;
&lt;li&gt;Human Resource Systems -&amp;gt; A crowd of people working together to fulfill a necessity&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It has to be one of these because these are the only kinds of systems that "easily" can make money on their own, even if you are in bed resting.&lt;/p&gt;

&lt;h3&gt;
  
  
  Once You Have Your Tree, Save the Seeds
&lt;/h3&gt;

&lt;p&gt;Once the tree is healthy and growing, we need to take care of it. And like any good farmer, we will reap what we sow and prepare for the next season.&lt;/p&gt;

&lt;p&gt;What I'm trying to explain is that it's important that once the system is up and running, we need to take advantage of the money it is producing and use it to produce passive income. This applies once you reach the point where your system itself is producing a good amount of money, because remember, you won't be rich from an index fund. This is only a way to take advantage of the money that you are not spending.&lt;/p&gt;

&lt;h2&gt;
  
  
  If Everyone Is Doing It, It's Not Worth It
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;I failed at network marketing four times because subconsciously, I possessed the truth: The road violated the Commandment of Entry - Page 214&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The commandment of entry is simple: if everyone is doing it, it's not worth it. Think about it for a second: is everyone rich? No, most of us are poor, so if there is something easy and accessible out there, why are most of us poor? It's because there is no such thing. This reminds me of when crypto mining exploded. I was mining, my friends were mining, an uncle of mine was mining. And you know what? Most of them are still poor.&lt;/p&gt;

&lt;p&gt;If everyone is doing it, it's a bad omen. Get the hell out of there.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Your Free Number
&lt;/h2&gt;

&lt;p&gt;The book takes a while to get here, around chapter 37, is where it introduces the &lt;strong&gt;free number&lt;/strong&gt;. This is a common concept among most entrepreneurs, which is basically how much money you need to quit your job and live the life you deserve.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The steps to get your free number are&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Define the lifestyle: What do you want?&lt;/li&gt;
&lt;li&gt;Assess the cost: How much do your dreams cost?&lt;/li&gt;
&lt;li&gt;Make it real: Execute the escape&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Assessing the Cost:
&lt;/h3&gt;

&lt;p&gt;Take your cost of living (&lt;em&gt;CL&lt;/em&gt;), in my case something around $1200. Yeah, I'm cheap.&lt;br&gt;&lt;br&gt;
Now do &lt;em&gt;CL&lt;/em&gt; * 1.60 = 1920. This is the Cost of Living with Taxes (&lt;em&gt;CLT&lt;/em&gt;).&lt;br&gt;&lt;br&gt;
If we do &lt;em&gt;(CLT * 12) / 0.5 = $46,080&lt;/em&gt;, this is how much money I'm going to need to live just from my savings by putting that into some fund or bond.&lt;br&gt;&lt;br&gt;
Finally, if we do &lt;em&gt;CLT * 5 = $9600&lt;/em&gt;, this is the amount of money that our business needs to return per month to keep us alive.&lt;/p&gt;

&lt;p&gt;This is better explained in the book on page 255.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Conclusion
&lt;/h2&gt;

&lt;p&gt;I think "The Millionaire Fastlane" is a great book for those who are just starting in any kind of business. I feel that it spends too much time giving you the mindset you need to succeed. But besides that, the book does a great job of revealing the basics.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In conclusion, if you are just starting, it's a great place to get perspective. If you are interested, here's the link&lt;/strong&gt; &lt;a href="https://amzn.to/3LAdZtB" rel="noopener noreferrer"&gt;The Millionaire Fastlane&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The End
&lt;/h2&gt;

&lt;p&gt;If you enjoyed the post or found it interesting, remember that you can help me with a donation. Books are not free&lt;br&gt;&lt;br&gt;
[---------------------------------------] 0% of $60, &lt;a href="https://buymeacoffee.com/juanemilio" rel="noopener noreferrer"&gt;Let's buy me a book&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://buymeacoffee.com/juanemilio/e/277947" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu7taolue08xf3hubclvo.png" alt="Button" width="389" height="90"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>saas</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>help</category>
    </item>
    <item>
      <title>You may have imposter syndrome</title>
      <dc:creator>Juan Emilio</dc:creator>
      <pubDate>Sat, 20 Jul 2024 20:56:16 +0000</pubDate>
      <link>https://forem.com/juanemilio31323/you-may-have-imposter-syndrome-3bi0</link>
      <guid>https://forem.com/juanemilio31323/you-may-have-imposter-syndrome-3bi0</guid>
      <description>&lt;p&gt;Have you ever felt like you have achieved more than you deserved, or maybe that the people around you think you are someone you believe you are not? Do you fear being discovered or have you felt doubt about your own experience? Do you feel incompetent doing your job? If the answer to some of these questions is yes, then you may have imposter syndrome, and hopefully, this post can help you.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Imposter syndrome (IS) is a behavioral health phenomenon described as self-doubt of intellect, skills, or accomplishments among high-achieving individuals. &lt;a href="https://www.ncbi.nlm.nih.gov/books/NBK585058/" rel="noopener noreferrer"&gt;National Library of Medicine&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Or in simpler words, you feel like you are living a life that is not yours. Feeling that all your success is thanks to an external force, but all failures belong to you. &lt;/p&gt;

&lt;h2&gt;
  
  
  How can it affect you?
&lt;/h2&gt;

&lt;p&gt;Imposter syndrome is a significant problem that is rarely mentioned in any space due to the shameful nature that hides behind this phenomenon. Here are some of the effects it can bring:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Anxiety and fear of being discovered&lt;/li&gt;
&lt;li&gt;Job quitting&lt;/li&gt;
&lt;li&gt;Work dissatisfaction&lt;/li&gt;
&lt;li&gt;Atychiphobia (Fear of Failure)&lt;/li&gt;
&lt;li&gt;Achievemephobia (Fear of Success)&lt;/li&gt;
&lt;li&gt;Depression&lt;/li&gt;
&lt;li&gt;Burnout&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And much more. That's why I decided to write about it. All of us have suffered from anxiety at some point in our lives. But some of us have experienced this phenomenon and didn't know what to do. We didn't even know that this is something that can be talked about.&lt;/p&gt;

&lt;h2&gt;
  
  
  My personal experience
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;According to a 2011 research published in the &lt;em&gt;International Journal of Behavioral Science&lt;/em&gt;, an estimated &lt;a href="https://www.tci-thaijo.org/index.php/IJBS/article/view/521/pdf?ref=teamblind.com" rel="noopener noreferrer"&gt;70 percent&lt;/a&gt; of people experience impostor syndrome at one point in their lives. &lt;a href="https://www.teamblind.com/blog/58-percent-of-tech-workers-feel-like-impostors/" rel="noopener noreferrer"&gt;Team Blind&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Did you know that &lt;a href="https://www.teamblind.com/blog/58-percent-of-tech-workers-feel-like-impostors/" rel="noopener noreferrer"&gt;58% of tech workers feel like impostors&lt;/a&gt;? I didn't know, and I would have liked to know it a few years ago.&lt;/p&gt;

&lt;p&gt;This was my first serious job working for a tech company. I started as a Frontend developer, and a couple of months later, nine to be exact, I was working as a Team Leader. It was crazy; there were people who reported to me. I was in planning meetings, directly interacting with the client, proposing solutions, and solving problems on a bigger scale. And it's true that I was enjoying it; in the end, I was doing what I love. But there was something in the back of my mind that took a will to stop appearing, a year to be exact. The feeling of not being enough. To make things even worse, the voice wasn't only in my mind. There were people who were furious because I, with just nine months inside the company, was a team leader with a higher seniority than them. &lt;/p&gt;

&lt;p&gt;I felt anxious. At some point, I considered quitting or even telling my boss that I wasn't the right person for the position. But I decided to continue, motivated by something that my mom used to say.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We are forged in the flames of the circumstances. - My mom&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What helped me and what can help you
&lt;/h2&gt;

&lt;p&gt;Before moving on, what I would suggest is that if you are feeling like this, the best thing you can do is not to come to hasty conclusions, and first of all, consult a professional. A good therapist is always great.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introspection and self-reflection
&lt;/h2&gt;

&lt;p&gt;This is by far one of the best weapons that everybody has in their arsenal when it comes to dealing with IS. Just be alone, be quiet, and make enough silence and time for your mind to talk to you. Once it comes, listen and analyze and think about the things it says as objectively and seriously as you can. The root of imposter syndrome is connected with the lack of responsibility that we attribute to ourselves when it comes to success. When you practice this exercise, try to keep that in mind. &lt;/p&gt;

&lt;h2&gt;
  
  
  Challenge your inner critic
&lt;/h2&gt;

&lt;p&gt;Another way to attack the root of the problem is by looking for evidence. If you are feeling like an impostor, stop, breathe, calm down, and then ask yourself if you have evidence to confirm what you are saying about yourself and your own success. Probably, you won't be able to find anything worth mentioning, and that is fantastic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Be grateful
&lt;/h2&gt;

&lt;p&gt;This is easy but really good, not only for people experiencing IS, but for all of us. Celebrate your milestones, celebrate your success, and try to keep in mind that the most important thing in life is enjoying the journey. &lt;/p&gt;

&lt;p&gt;In order to do this, you can keep a diary, or notes, or anything really that you can come back to later and that will help you remember all the things you have achieved. While you are writing these memories, try to keep in mind that you need to enjoy the moment because the goal will always move, and even if you reach it, something else will come after that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Self-compassion
&lt;/h2&gt;

&lt;p&gt;Last but not least, try to treat yourself with the same compassion and love that you would treat a friend who is having a hard time. The last thing you need when you are feeling down is yourself not helping you. &lt;/p&gt;

&lt;h2&gt;
  
  
  The end
&lt;/h2&gt;

&lt;p&gt;I wanted to write this post because many of us have heard the term Imposter Syndrome before, but even then, most of us ignore the deep meaning of it. Hopefully, this post will help someone to avoid falling into the trap of IS.&lt;/p&gt;

&lt;p&gt;If you enjoyed the post, consider sharing, liking, and commenting. And if it was helpful in any way, please help me to:&lt;/p&gt;

&lt;p&gt;[---------------------------------------] 0% of $60, &lt;a href="https://buymeacoffee.com/juanemilio" rel="noopener noreferrer"&gt;Let's buy me a book&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Before you go
&lt;/h2&gt;

&lt;p&gt;I almost forgot, if you need help with your personal projects, have an idea, and want to consult with someone, I have seven years of experience as a software developer, more than two years playing the entrepreneurship game, and I try to learn something new every day. So: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://buymeacoffee.com/juanemilio/e/277947" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhwcdyl8ehtonlog06rgv.png" alt="Button" width="389" height="90"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Image Credit
&lt;/h2&gt;

&lt;p&gt;Go check &lt;a href="https://unsplash.com/photos/man-in-gray-dress-shirt-eTNtXTEB2Jg" rel="noopener noreferrer"&gt;Gianfranco Grenar&lt;/a&gt; work, he is amaizing.&lt;/p&gt;

</description>
      <category>entrepreneurship</category>
      <category>productivity</category>
      <category>mentalhealth</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Learning Has to Be Fun - How I Learn</title>
      <dc:creator>Juan Emilio</dc:creator>
      <pubDate>Wed, 17 Jul 2024 18:33:06 +0000</pubDate>
      <link>https://forem.com/juanemilio31323/learning-has-to-be-fun-how-i-learn-5akd</link>
      <guid>https://forem.com/juanemilio31323/learning-has-to-be-fun-how-i-learn-5akd</guid>
      <description>&lt;p&gt;Hey 👋 I'm Juan, and lately I've encountered myself with a question that doesn't stop repeating in different ways. Why don't we learn? How do we learn? How do I learn? This is a reflection of mine where I want to share how I learn and why. So if you are interested, keep reading 👇&lt;/p&gt;

&lt;h2&gt;
  
  
  Why 🤔?
&lt;/h2&gt;

&lt;p&gt;The other day I found myself arguing with my partner. We talked, and I went for a walk to think. While I was walking, this question came to my mind. Why do I always find myself arguing over the same things? Why don't I learn? How do we learn? I started wondering, and to be honest, the only answer that I could find to this question is... because it hurts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Learning Always Hurts 🤕
&lt;/h3&gt;

&lt;p&gt;I remember when I started to learn how to play the piano. I was so excited. For some reason, most of the time, I have this wonderful idea in my mind where I imagine myself being awesome on the first try. But in the end, it always strikes me. It's almost impossible to be good or at least as good as we want on the first try. If I had to compare the feeling, I would say that it is like when you like someone and your feelings are not reciprocated. It's frustrating; it destroys you.&lt;/p&gt;

&lt;h3&gt;
  
  
  How Do We Keep Going? 🚶‍♂️
&lt;/h3&gt;

&lt;p&gt;If we accept that conclusion, that learning always hurts, how is it possible that there are things that we learn and others that just don't seem to be understandable or acquirable? That was my second thought. A couple of days later, it came to me—it’s because there are things that are worth it and some that are not.&lt;/p&gt;

&lt;p&gt;Let's say I have the cure for a sickness that has been torturing you for years, but the cure will make you suffer even worse pain for months. Would you take it? I say yes, but I had to think about it for a while before answering. I guess the same happens in life; sometimes there are things that are worth tolerating just because we value what is at the end of the line much more.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Is at the End of the Line? 🏁
&lt;/h3&gt;

&lt;p&gt;But now there's another question (yep, another one). What's at the end of the line and why do some of us value it so much?&lt;/p&gt;

&lt;p&gt;When I was learning to play the piano, it was hard, harder than most of the things that I've done before. It’s funny because I've done things that most people would say are more complicated. I won against obesity and got the physique that most of us want. I learned English, some Japanese, and I've been learning new things almost daily for the last few years. I've confronted death and my social awkwardness. These are really hard things that required planning, discipline, and a ton of effort.&lt;/p&gt;

&lt;p&gt;But most of the time, there was something bigger at the end of the line. Learning to play the piano, solve the Rubik's cube in less than 15 seconds, or program was motivated by an ideal, a dream, or even fun. The frustration was surpassed by what was at the end.&lt;/p&gt;

&lt;p&gt;I know this may seem obvious when we put it into words, but as you keep reading, you'll notice how we disparage this concept when we have to learn, either from experience or because of a goal.&lt;/p&gt;

&lt;p&gt;After analyzing all these points, I noticed that in all the hard things that I've conquered, I always repeat the same pattern.&lt;/p&gt;

&lt;p&gt;When I was learning how to program, there were a bunch of things at the end of the line. I needed the money, I wanted to create things of my own, my friends were developers, and I had a dream. I'll never forget how I started learning Japanese. I didn’t want to, but you know what I wanted? To prove my mother wrong. She told me that I couldn't do it, that it was too hard for me, and that I would quit. Surprise, surprise, it’s the end of the year, and I’m the best student in the entire course.&lt;/p&gt;

&lt;p&gt;So if you want to learn something and you don't know why you are not learning or keeping up with the process, ask yourself what's at the end of the line?&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Do It 🎉
&lt;/h2&gt;

&lt;p&gt;Nice, we had a beautiful walk around my past and childhood traumas. Now we can talk about how I do it. It’s worth mentioning that what I'm going to explain now are things that I noticed I do unconsciously, without looking for them. But they appear in every skill that I've conquered.&lt;/p&gt;

&lt;h3&gt;
  
  
  Surround Yourself 🌍
&lt;/h3&gt;

&lt;p&gt;If you had peeked at my phone when I was trying to learn piano, you’d have seen that my entire YouTube feed was: "How to learn piano faster," "How to read music sheets," "Basic piano chords," and so on. If you had talked to me back then, I would explain to you how I spent hours practicing.&lt;/p&gt;

&lt;p&gt;I had my piano in my office, in front of my desk, so each time I looked away, there it was, my piano calling me. I forced myself to be obsessed with it, always thinking about it. I started taking classes, and I practiced every weekend for hours.&lt;/p&gt;

&lt;p&gt;That's what I mean when I say surround yourself. Give yourself the ease of always thinking about that thing that you want to conquer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Make the Process Fun⛷️
&lt;/h3&gt;

&lt;p&gt;Most of us come to this conclusion that it has to be hard or horrible to learn or conquer something. Why?&lt;/p&gt;

&lt;p&gt;When I was learning how to solve the Rubik's cube, I had to practice for hours. So each time I had to start practicing, I would have a new playlist to listen to or an interesting podcast to hear. So in that way, it was way funnier and more entertaining to practice.&lt;/p&gt;

&lt;p&gt;But probably the best way to learn something new is by combining this new thing with some of your other passions. For example, now my girlfriend is trying to learn how to create better logos. She needs to practice quite a lot. She loves photography and social media. In fact, she is also trying to become a community manager. So I suggested that she combine the three things together, making learning all of them a much funnier and easier process.&lt;/p&gt;

&lt;p&gt;How can she combine it? I said, take pictures of things that catch your attention when we walk on the street, make a logo with it, and upload it to social media, pretending that it is your own client that you have to manage.&lt;/p&gt;

&lt;p&gt;Probably now, you are saying that in this case, it is easy and that you can't combine your new skill with your current set. I would strongly disagree; you need to think outside the box. Another example would be when I was learning trading (I don’t like trading; it’s too stressful, I don’t have the mindset or the character). I was also learning programming, so I decided to venture into a world I had never visited before: trading bots with Python and cryptos. I learned three new things looking for one.&lt;/p&gt;

&lt;p&gt;By the way, you can start a project to learn, and that doesn't mean that you have to finish it. I see a bunch of people stressing out because they started a project to learn and didn’t finish. Why? Did you learn? If the answer is yes, great, you did it. Move on.&lt;/p&gt;

&lt;p&gt;Last but not least, get to know yourself. For me, it is easier to learn something if I can transform it into a mechanical process that I can grind and repeat over and over again. But maybe you are more creative and enjoy learning while creating something new. Pay attention to these things and try to adapt whatever you want to learn.&lt;/p&gt;

&lt;h3&gt;
  
  
  Find Competition 🏎️
&lt;/h3&gt;

&lt;p&gt;This advice is not for everyone, but just for those like me who love the motivation of knowing that out there, someone is doing better than you.&lt;/p&gt;

&lt;p&gt;When I was learning how to solve the Rubik's cube, there was a boy at my school, younger than me, who did it faster. I came to resent him. This was an excellent motivation. I couldn't stop thinking about winning against him, so I practiced and practiced and practiced until the point where I was so fast that there was no way for him to win.&lt;/p&gt;

&lt;p&gt;In the end, we never really competed. When I went looking for him to compete, he had gotten bored and stopped practicing. So the competition was always in my mind.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summarizing📝
&lt;/h2&gt;

&lt;p&gt;So in the end, I came to the conclusion that we all learn because we find motives that emotionally connect with us. These motives are greater than the frustration that comes with learning something new, and some ways to make your learning process easier are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Systematize - Make it repeatable and create patterns to repeat.&lt;/li&gt;
&lt;li&gt;Find motivation - Get to know yourself and ask how you learn.&lt;/li&gt;
&lt;li&gt;Force yourself to obsess over your goal - Find a way to always think about that thing.&lt;/li&gt;
&lt;li&gt;Introspection - Look at yourself and pay attention to your experience learning.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Did You Enjoy It?
&lt;/h2&gt;

&lt;p&gt;If you enjoyed it and found something useful in this post, please take a minute and make a donation. You have no idea how helpful and motivating this is for me.&lt;/p&gt;

&lt;p&gt;[----------------------------------------] 0% of $20, &lt;a href="https://buymeacoffee.com/juanemilio" rel="noopener noreferrer"&gt;let's buy me a book&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, if you want to start a SAAS, need help with your code, or with your learning process, talk to me -&amp;gt; &lt;a href="https://buymeacoffee.com/juanemilio/e/277947" rel="noopener noreferrer"&gt;let's talk&lt;/a&gt;. I'm sure we can make something together.&lt;/p&gt;

&lt;p&gt;As always, I would really appreciate it if you could follow me or give me a like.&lt;/p&gt;

&lt;h2&gt;
  
  
  Credit
&lt;/h2&gt;

&lt;p&gt;Did you like the picture in the post? Why don't you go and check out &lt;a href="https://unsplash.com/@cedarwheeler" rel="noopener noreferrer"&gt;Cedar Wheeler&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>entrepreneurship</category>
      <category>beginners</category>
    </item>
    <item>
      <title>React is not hard - React from 0 to expert</title>
      <dc:creator>Juan Emilio</dc:creator>
      <pubDate>Wed, 17 Jul 2024 02:49:03 +0000</pubDate>
      <link>https://forem.com/juanemilio31323/react-is-not-hard-react-from-0-to-expert-2ge</link>
      <guid>https://forem.com/juanemilio31323/react-is-not-hard-react-from-0-to-expert-2ge</guid>
      <description>&lt;p&gt;Hi! 👋 I'm Juan, I have more than 6 years of experience working with React, and I think it's not that hard. For that reason, I've decided to create a series that will teach you React from 0, and if you already know React, it will help you go to the next level. We'll talk about really basic things in depth and really advanced topics. My objective at the end of this series is to give you enough context and knowledge so you can create your own React project, like a library.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are we going to learn in this series?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;How to build a React library the easy way&lt;/li&gt;
&lt;li&gt;Interesting React helpers and React methods&lt;/li&gt;
&lt;li&gt;Strange exports that can make your code more reusable&lt;/li&gt;
&lt;li&gt;File systems to organize your project&lt;/li&gt;
&lt;li&gt;Obviously, how to build a React project &lt;/li&gt;
&lt;li&gt;Much more...&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What level do you need to start?
&lt;/h2&gt;

&lt;p&gt;Do you know how to write code in any language? Pay attention to my words: "Know how to write code." I didn't say: "How to write good code." If the answer is yes, you are good to go. You'll start to get it sooner or later. And if you do not, leave a message with any doubt you have.&lt;/p&gt;

&lt;p&gt;With all of this said, we can finally start.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's JS and why is it amazing?
&lt;/h2&gt;

&lt;p&gt;JS is one of the greatest pieces of art ever created. It is a single-threaded, cross-platform, easy-to-use, and understandable programming language. It was primarily designed to run code on the web, inspired by its bigger brother C#, sharing many syntactical aspects (they have similar writing). It's really helpful for projects that are just starting because, thanks to the use of an engine that implements an interpreter and a compiler, JS can run almost anywhere: your phone, your computer, your smartwatch, and your browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  Playing with the browser
&lt;/h2&gt;

&lt;p&gt;I've mentioned that JS was originally intended to run on the web and indeed, it is one of the fundamental pieces of the modern web that we all enjoy these days. Let me show an example of JS running in the browser:&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="c1"&gt;// Function to get the window size and set it into the &amp;lt;p&amp;gt; tag&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;updateWindowSize&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;width&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerWidth&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;height&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHeight&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;sizeText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`Width: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;px, Height: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;px`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Get the &amp;lt;p&amp;gt; tag by its id&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;windowSizeElement&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;window-size&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Set the window size text into the &amp;lt;p&amp;gt; tag&lt;/span&gt;
  &lt;span class="nx"&gt;windowSizeElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;sizeText&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Update window size on load&lt;/span&gt;
&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;load&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;updateWindowSize&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Update window size on resize&lt;/span&gt;
&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;resize&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;updateWindowSize&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here we can see a function that gets the size of the window and sets it into a &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; tag. This is something that until recent times was only possible with JS. This is because this was the only code that was able to run on the client side. &lt;/p&gt;

&lt;p&gt;Besides accessing the browser properties like the Window Object, JS also can modify the DOM and add elements. That enables the possibility of dynamically rendering different parts of the application. Let me show you:&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="c1"&gt;// Function to render a form with fields: name, last name, and password&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;renderForm&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Create form element&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;form&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;form&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Create name field&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nameLabel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;label&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;nameLabel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Name: &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;nameInput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;input&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;nameInput&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;nameInput&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;nameInput&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;nameLabel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nameInput&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nameLabel&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;br&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// Line break for better layout&lt;/span&gt;

  &lt;span class="c1"&gt;// Create last name field&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;lastNameLabel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;label&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;lastNameLabel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Last Name: &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;lastNameInput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;input&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;lastNameInput&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;lastNameInput&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;last_name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;lastNameInput&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;last_name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;lastNameLabel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lastNameInput&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lastNameLabel&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;br&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// Line break for better layout&lt;/span&gt;

  &lt;span class="c1"&gt;// Create password field&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;passwordLabel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;label&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;passwordLabel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Password: &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;passwordInput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;input&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;passwordInput&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;password&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;passwordInput&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;password&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;passwordInput&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;password&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;passwordLabel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;passwordInput&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;passwordLabel&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;br&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// Line break for better layout&lt;/span&gt;

  &lt;span class="c1"&gt;// Create submit button&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;submitButton&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;submitButton&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;submit&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;submitButton&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Submit&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;submitButton&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Append the form to the container&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;formContainer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;form-container&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;formContainer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Call the function to render the form&lt;/span&gt;
&lt;span class="nf"&gt;renderForm&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a function that is able to render a form on the screen, but probably you are thinking: &lt;em&gt;"Man!!! This is huge"&lt;/em&gt; yep, it is. In fact, this function has 47 lines of code that are not easy to read.&lt;/p&gt;

&lt;h2&gt;
  
  
  How's that happening?
&lt;/h2&gt;

&lt;p&gt;If you are something like me, probably you are asking yourself: &lt;em&gt;"How can JS change the DOM?"&lt;/em&gt;  or even &lt;em&gt;"What's the DOM?"&lt;/em&gt; Let's be honest, nobody is asking these questions, but stay with me. Those are great questions, let me show you:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1egjednmnlm9lhedc927.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1egjednmnlm9lhedc927.png" alt="Dom draw" width="800" height="1064"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This tree-like structure is the skeleton of our page, and JS is naturally prepared to interact with it.&lt;/p&gt;

&lt;h2&gt;
  
  
  It's not that good
&lt;/h2&gt;

&lt;p&gt;We’ve been seeing how amazing JS is and all the power that it has, but there's a caveat. It's not that good. As we already have seen, the syntax to do modifications on the DOM is kind of hard to read, easy to break, and difficult to scale into bigger ventures. Not to mention the &lt;strong&gt;HORRIBLE&lt;/strong&gt; performance that comes with directly manipulating the DOM.&lt;/p&gt;

&lt;p&gt;Each time you make a modification to the DOM, it triggers a re-rendering on the screen, which also produces recalculation of the sizes of the elements, checking on the style sheets all over again, and it’s really hard to tell the possible side effects of some modifications. For that reason, directly manipulating the DOM at a bigger scale can be really complex. &lt;/p&gt;

&lt;p&gt;If you want to know more about it, here is an excellent resource: &lt;a href="https://borstch.com/blog/development/performance-considerations-when-manipulating-the-dom" rel="noopener noreferrer"&gt;Performance considerations when manipulating the DOM&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's React and why is it amazing?
&lt;/h2&gt;

&lt;p&gt;React is a library—mark my words: &lt;em&gt;"A library"&lt;/em&gt;, not a framework nor magic, &lt;strong&gt;Library&lt;/strong&gt;. Great, now that we’ve made that clear, we can continue. React was created as a solution for the problems previously mentioned, trying to implement a solution that is easy to use, understand, and grow in order to create more sustainable and complex applications on the client side. But what does that mean? It means that React is easy, scalable (I might disagree with this one), and performant (Yes and no, we’ll understand it later).&lt;/p&gt;

&lt;p&gt;Let's see React in action:&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="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&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;react&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;FormComponent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;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;handleSubmit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&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;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;preventDefault&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&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;Form submitted:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;formData&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;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;form&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;onSubmit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;handleSubmit&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;label&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Name:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;input&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;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&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="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;br&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;label&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Last Name:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;input&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;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;lastName&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="p"&gt;),&lt;/span&gt;
    &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;br&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;label&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Password:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;input&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;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;password&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;password&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="p"&gt;),&lt;/span&gt;
    &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;br&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;button&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;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;submit&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;Submit&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="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;FormComponent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This ugly piece of art is React creating the same form that we were seeing just before in plain JS. And I know, I know, many of you out there may be saying that this is not React and that React should look something more like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&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;react&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;FormComponent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;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;handleSubmit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&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;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;preventDefault&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="c1"&gt;// Handle form submission&lt;/span&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;Form submitted:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;formData&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="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;form&lt;/span&gt; &lt;span class="na"&gt;onSubmit&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handleSubmit&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        Name:
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt;
          &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt;
          &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;
          &lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handleChange&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;br&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        Last Name:
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt;
          &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt;
          &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"lastName"&lt;/span&gt;
          &lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handleChange&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;br&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        Password:
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt;
          &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"password"&lt;/span&gt;
          &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"password"&lt;/span&gt;
          &lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handleChange&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;br&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Submit&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;form&lt;/span&gt;&lt;span class="p"&gt;&amp;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;FormComponent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And you are almost right, with the little caveat that this is not React, it is React DOM (something independent from React), React and a compiler working together. Let's try to understand.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's going on?
&lt;/h2&gt;

&lt;p&gt;I know, the previous point was a little confusing, but it’s just about to make sense. Before, we need to understand how React is working behind the scenes.&lt;/p&gt;

&lt;h3&gt;
  
  
  React
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;button&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;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;submit&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;Submit&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;This, my friends, is plain React. Most of the code that you will see when writing React will transform into this. And a really good question to ask now would be: "What does this code do?" And the answer is: It mutates the VDOM (Virtual DOM).&lt;/p&gt;

&lt;h3&gt;
  
  
  What's the VDOM?
&lt;/h3&gt;

&lt;p&gt;We mentioned before that mutating the DOM was expensive and extremely slow, and that React is the solution to this problem (one of many solutions). This is because the React method "createElement" doesn't directly manipulate the DOM; it manipulates the VDOM. &lt;/p&gt;

&lt;p&gt;The VDOM is a tree-like data structure and conceptual representation of the real DOM that keeps track of our React components, like, for example, the button that we just created. It also keeps track of metadata that helps React to more efficiently mutate the UI.&lt;/p&gt;

&lt;p&gt;The process that React follows is: each time something changes in the UI, for example, when we mount or unmount (mount refers to inserting the component into the VDOM) our button component, it’s compared to the last VDOM render with the current version, and updates the parts affected by our actions, in this case the div element and the button. It would look something like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2mgqf7wxttyyv2vnkln5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2mgqf7wxttyyv2vnkln5.png" alt="VDOM Draw" width="800" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This part that I just explained here is called &lt;em&gt;reconciliation&lt;/em&gt;. If you want to know more, go and check &lt;a href="https://react.dev/learn/preserving-and-resetting-state" rel="noopener noreferrer"&gt;React documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's React DOM?
&lt;/h2&gt;

&lt;p&gt;React DOM is a library that is mostly used with React to render elements on the screen, giving us the tools and methods required to render our components (our React code). A method that we normally use is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;ReactDOM&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createRoot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;root&lt;/span&gt;&lt;span class="dl"&gt;"&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="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This method creates the so-called "mounting point," which is the basic element that will contain our entire application. In this case, and most often, our mounting point is a div with the id: "root".&lt;/p&gt;

&lt;h2&gt;
  
  
  What's a compiler?
&lt;/h2&gt;

&lt;p&gt;Before some people jump to my neck, let me do a little clarification here. Explaining what a compiler is can be really complex, and in this case, it doesn't make sense. Not to mention that the definition of a compiler and a transpiler is blurry. So for the purpose of keeping this post more understandable, I'll keep it simple and won't dive into the details.&lt;/p&gt;

&lt;p&gt;Most often, you will see React and React DOM used in this way:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        //our code
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This, my friend, is JSX. And we are able to write this understandable and beautiful code because of a compiler. A compiler is a program that translates code into some other code. It can be low-level code or just any other code. It doesn't even need to change the programming language, like in this case. We are transforming React JSX, which is just JavaScript with a special syntax, into normal JavaScript, giving us the possibility to combine a markup language like XML with JavaScript, hence the name: JSX (JavaScript XML).&lt;/p&gt;

&lt;p&gt;There are many compilers that can transform JSX into JS, but the one that you probably are going to hear of is Babel.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's the state and why should you care?
&lt;/h2&gt;

&lt;p&gt;We mentioned before that React keeps track of the modifications that we do on the VDOM, but something that I didn't mention was that modifying the VDOM doesn't only mean that we are going to mount or unmount parts and React is going to notice that. React also keeps track of the mutations that happen to the &lt;strong&gt;state&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The state is a data structure where you can store almost anything (there are some limitations, but we are going to check them in the next chapter). React keeps track of this "store," and each time you modify it, it's going to notice and will &lt;em&gt;reconcile&lt;/em&gt; (if you don't understand this term, go back to &lt;em&gt;"What's the VDOM"&lt;/em&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  How do we manipulate the state?
&lt;/h3&gt;

&lt;p&gt;To manipulate the state, we will use the React Hook &lt;strong&gt;useState&lt;/strong&gt; (Hooks are just pieces of code that execute some logic that uses React, like a function-helper but with React code). Let's see:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;useState&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;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setAmount&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&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;const&lt;/span&gt; &lt;span class="nx"&gt;increaseAmount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;setAmount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;amount&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;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;increaseAmount&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;This is our amount &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;amount&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here we are using the state to store a number that each time we click on our button will increase the amount. &lt;/p&gt;

&lt;h2&gt;
  
  
  The final piece for reconciliation
&lt;/h2&gt;

&lt;p&gt;So far, we have seen that reconciliation happens when we alter the VDOM structure by mounting or unmounting, when we alter the state, and finally when we change the props of a component.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's a prop?
&lt;/h3&gt;

&lt;p&gt;React was created with code-splitting in mind, so in order to make our components more flexible, we can use props. Props are just values that we pass down from one component to another. Something just like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;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;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;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;Button&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&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;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Button&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;./Button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Landing&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;counter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setCounter&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&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="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt; &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"I'm a button"&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setCounter&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="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;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;As you can see, we are moving the state up. This is known as lifting up the state, and also we customized our button.&lt;/p&gt;

&lt;h3&gt;
  
  
  Default props:
&lt;/h3&gt;

&lt;p&gt;There are some props that come by default in React, they are really helpful&lt;/p&gt;

&lt;h3&gt;
  
  
  The key
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ImageGrid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;images&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;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;images&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;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 key is normally used when you are doing a map to dynamically transform data into a bunch of elements, like in this case, where I'm rendering images by mapping over a list of them and I want to help React keep track of them, in case these images change. The key is always a unique identifier.&lt;/p&gt;

&lt;h3&gt;
  
  
  Children
&lt;/h3&gt;

&lt;p&gt;This is used to pass a component inside another one. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;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;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;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;Button&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Icon&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;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;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;svg&lt;/span&gt; &lt;span class="p"&gt;/&amp;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;Icon&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Button&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;./Button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Landing&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;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="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Icon&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;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;If you change any prop, expect React to know it. The only exception to this is when you are passing a value by reference, but we’ll talk about it in the next chapter of the series. Follow me to don't loose it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before moving on...
&lt;/h2&gt;

&lt;p&gt;If you are really enjoying this post and consider that my effort is worth promoting, take one minute to give me a hand &lt;a href="https://buymeacoffee.com/juanemilio" rel="noopener noreferrer"&gt;buying me a coffee&lt;/a&gt;. You have no idea how helpful and motivating this is.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why so much drama?
&lt;/h2&gt;

&lt;p&gt;The name of this library is really descriptive, and you are just about to understand why. We now know that React code creates a visual representation of our UI, compares it between the different updates that we can do, and updates it as efficiently as it possibly can.&lt;/p&gt;

&lt;p&gt;But let's be honest, isn't this a little bit overkill to just write some weird HTML? Yes, it is, but we are not just writing weird HTML; we are overcharging it with React, giving us a powerful interface to dynamically render elements on the screen and connecting them with our JS code, all in the same place.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Button and Message&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"show-message-button"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Show/Hide Message&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"message-container"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"script.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Function to toggle the &amp;lt;p&amp;gt; tag with a message&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;toggleMessage&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;messageContainer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;message-container&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;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;message&lt;/span&gt;&lt;span class="dl"&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;message&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 message exists, remove it&lt;/span&gt;
    &lt;span class="nx"&gt;messageContainer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;removeChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&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;// If the message does not exist, create and mount it&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;p&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;message&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hello, this is your message!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;messageContainer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;p&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="c1"&gt;// Add event listener to the button&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;show-message-button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;toggleMessage&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is all the code that we need to render a button on the screen that will work like a switch: when it's on, it will render a message on the screen; when it's off, it will hide it. It's not that complex, but let's see how this can be done with React.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&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;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;MessageSwitch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;show&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setShow&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&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="p"&gt;&amp;lt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setShow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;show&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;show&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hide&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;Show&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; Message
            &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="si"&gt;{&lt;/span&gt;
                &lt;span class="nx"&gt;show&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Hello, this is your message!&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;
            &lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&amp;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;MessageSwitch&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Yep, this is all the code that you need. That's why React is amazing. At this point, you should now understand what React is, what the state is, what the VDOM is, and what reconciliation is. You now have all the basics, so you are ready to start working with React.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to start a project?
&lt;/h2&gt;

&lt;p&gt;Probably you are asking yourself: "Now I have to install React DOM, React, and Babel to start the project?" Nope, there are scaffolding projects and frameworks that implement all these technologies for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vite
&lt;/h2&gt;

&lt;p&gt;If you are asking what Vite is, let's give them the opportunity to tell you:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Vite (French word for "quick", pronounced &lt;code&gt;/vit/&lt;/code&gt;, like "veet") is a build tool that aims to provide a faster and leaner development experience for modern web projects&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This build tool is incredibly fast and super easy to use. It will configure a React project with the options that you choose, avoiding the need to configure a compiler, a bundler, hot reloading, and many other things. To use Vite, run the command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm create vite@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Insert your project name, select your framework (React), and select either JavaScript + SWC or Typescript + SWC, go into the folder, and do npm i. You should have something like this (I chose Typescript + SWC):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frrbo09zoz6mpx6mjywcd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frrbo09zoz6mpx6mjywcd.png" alt="Vite basic project structure" width="399" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congratulations, now let's dive into the project:&lt;/p&gt;

&lt;h2&gt;
  
  
  index.html
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3x0hdt5jv90ena2myc02.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3x0hdt5jv90ena2myc02.png" alt="Index HTML React Project" width="800" height="246"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can see our mounting point and the React implementation. That's all the HTML that the client is going to render when they first enter the application. Later, the script tag will run and the page will be populated with our React code.&lt;/p&gt;

&lt;h2&gt;
  
  
  src/main.tsx
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foh8hmu7d9s6y2uw0x5y5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foh8hmu7d9s6y2uw0x5y5.png" alt="Main tsx" width="800" height="216"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  src/App.tsx
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpsapwivi6jqn8p45jbm9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpsapwivi6jqn8p45jbm9.png" alt="App tsx" width="800" height="845"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the default code that comes pre-implemented with Vite. Let's see it. To run the React application in development mode, we have to run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That will start the project on port 5173 and it will display this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpvew39w7xbypx1063c3d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpvew39w7xbypx1063c3d.png" alt="Vite run dev" width="800" height="741"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Structure
&lt;/h2&gt;

&lt;p&gt;I remember when I was a beginner, I hated that no one told me how to structure my files, and to be honest, it took me a while to figure out a way to do it properly. There are many ways to do it, and how you do it will depend on the kind of project that you are building, but I'll give you one that is good enough for most cases.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnv1d17py1mqgv4gm8k9l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnv1d17py1mqgv4gm8k9l.png" alt="Project structure src" width="354" height="764"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You'll add two new folders: pages and components. In components, you are going to store the code that you are going to reuse all across the application. Something like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F84yocz7aj6ih256dp1sv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F84yocz7aj6ih256dp1sv.png" alt="Project structure components" width="373" height="930"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Probably you'll want to reuse your input and button across your application. You probably noticed that I created the component: Input, and the Logic. That's because ideally, we don't want our JSX and our Logic together. Let me show you how to do this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ChangeEvent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useState&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="s2"&gt;react&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;regex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;[&lt;/span&gt;&lt;span class="sr"&gt;!@#$%^&amp;amp;*(),.?":{}|&amp;lt;&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;]&lt;/span&gt;&lt;span class="sr"&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;Logic&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setValue&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&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;handleChange&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ChangeEvent&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;HTMLInputElement&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;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;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currentTarget&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&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;regex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&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="p"&gt;}&lt;/span&gt;
    &lt;span class="nf"&gt;setValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&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="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;handleChange&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;Logic&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the Logic component of the button, we use all the things that are not directly part of the JSX. In this case, we have a function that handles the change in the input value and changes the state. We are also validating for special characters, not setting the values if it is the case.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Logic&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./Logic&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;Input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;handleChange&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Logic&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;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handleChange&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt;&lt;span class="p"&gt;&amp;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;Input&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And here we have our Input component with the special Logic that we wanted to implement. This is a pattern that we are going to repeat all over our application. And yes, this Logic component is some kind of custom-hook (Go back to &lt;em&gt;"How we manipulate the state"&lt;/em&gt;)&lt;/p&gt;

&lt;p&gt;Finally, in the pages folder, we will have a recursive structure (recursive means that it repeats) with folders that will describe features of the application, having on them multiple components that refer to that page specifically. Let's see:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvi8bmc5ezyqazjgdjf8q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvi8bmc5ezyqazjgdjf8q.png" alt="Pages folder" width="364" height="973"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Coming to an end
&lt;/h2&gt;

&lt;p&gt;If you have reached this point, it means that you now have the basics to start working with React. Go and keep practicing, creating something of your own and applying these concepts. In the next couple of days, I'm going to bring you chapter two, where I'll talk about more complex topics and advanced techniques.&lt;/p&gt;

&lt;h2&gt;
  
  
  You have doubts - Get in touch with me?
&lt;/h2&gt;

&lt;p&gt;If you have any doubts or you need help pushing your project or knowledge one step forward, contact me. I'm starting a new project where you can talk with me for an hour, and I'll try to help you to make the progress you are looking for:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://buymeacoffee.com/juanemilio/e/277947" rel="noopener noreferrer"&gt;Get in touch&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The end
&lt;/h2&gt;

&lt;p&gt;If you really enjoyed this post, please share it, follow, and like it. Thanks for reading and I hope I'll see you again.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/juanemilio" rel="noopener noreferrer"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wYWufrCi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" width="545" height="153"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Credit
&lt;/h2&gt;

&lt;p&gt;If you like the picture of the post consider checking the work of &lt;a href="https://unsplash.com/@lautaroandreani" rel="noopener noreferrer"&gt;Lautaro&lt;/a&gt; his the owner.&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>react</category>
      <category>backend</category>
      <category>webdev</category>
    </item>
    <item>
      <title>You life is not complicated you are unorganized</title>
      <dc:creator>Juan Emilio</dc:creator>
      <pubDate>Thu, 11 Jul 2024 16:43:19 +0000</pubDate>
      <link>https://forem.com/juanemilio31323/you-life-is-not-complicated-you-are-unorganized-bh7</link>
      <guid>https://forem.com/juanemilio31323/you-life-is-not-complicated-you-are-unorganized-bh7</guid>
      <description>&lt;p&gt;Hey 👋 I'm Juan, and today I want to share something that happened to me this week. Recently, I started working in a new place, I moved, I’m working on multiple personal projects at the same time, I started writing, I’m still reading almost every day, and I’m trying to have a personal and social life. Complicated, as you may understand. I started to feel really stressed; I was losing my mind. So I did one of the things that calms me the most: go for a walk. The solution to my problem, and maybe yours too, is right below.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why 🤔?
&lt;/h2&gt;

&lt;p&gt;Maybe you are asking yourself why I wrote this post. For two reasons: 1st, I might forget how I organized my calendar and my routine, the mindset I need to stay calm, and why I'm doing it. 2nd, because I’m quite sure there are people out there just like me who are coming to hasty conclusions when they are just unorganized.&lt;/p&gt;

&lt;h2&gt;
  
  
  How 😎?
&lt;/h2&gt;

&lt;p&gt;The system that I’m going to share is born from the combination of my own experience trying to schedule my life and the knowledge of Noah Kagan in &lt;a href="https://www.amazon.com/-/es/Noah-Kagan/dp/059353977X" rel="noopener noreferrer"&gt;Million Dollar Weekend&lt;/a&gt;. So let's divide it into easy, understandable steps:&lt;/p&gt;

&lt;h3&gt;
  
  
  What Do You Need to Do 🗺️?
&lt;/h3&gt;

&lt;p&gt;If you are like me or my girlfriend, you get lost among all the things you want or have to do. That's why we need to define long-term goals that help us stay focused. We want to make a list of the things that need to be done in the future. In our case, we look 6 months ahead, but you can go even further if you want. If you don’t want to think about it, just stay with 6 months.&lt;/p&gt;

&lt;p&gt;Great, here’s my list:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Write 100 posts on Medium and Dev&lt;/li&gt;
&lt;li&gt;Finish 6 more books&lt;/li&gt;
&lt;li&gt;Finish 3 applications&lt;/li&gt;
&lt;li&gt;Travel around Argentina&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These are some of the things that I need to finish in 6 months. I hope you did yours.&lt;/p&gt;

&lt;h3&gt;
  
  
  Steps 👣
&lt;/h3&gt;

&lt;p&gt;On my list, I have four goals; you can have as many as you need or want. Now we need to divide them into things that we can repeat in order to reach our goals. In my case, it would be:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Work on my own applications&lt;/li&gt;
&lt;li&gt;Write&lt;/li&gt;
&lt;li&gt;Read&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These three easy activities may seem silly at the time, but they'll make more sense once we put everything together.&lt;/p&gt;

&lt;h3&gt;
  
  
  Schedule 📅
&lt;/h3&gt;

&lt;p&gt;We have our goals, we have our steps, and we are almost there. Now we need to schedule, but before doing that, you need to make another list, yep, another one. We need to write down our goals for the end of the week. These are more specific things that should be done in the time of the steps we defined before.&lt;/p&gt;

&lt;p&gt;In my case, for this week, I need to have done these things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Finish the Customers screen; it should be responsive.&lt;/li&gt;
&lt;li&gt;[ ] Connect the Customers UI with the DB.&lt;/li&gt;
&lt;li&gt;[ ] Finish the authentication.&lt;/li&gt;
&lt;li&gt;[ ] Make a list of future posts.&lt;/li&gt;
&lt;li&gt;[ ] Check for new books.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And so on... The point is, these are some of the tasks that I should finish before Saturday, and they should be done in the steps/time categories we defined before.&lt;/p&gt;

&lt;p&gt;Connect Customers UI with the DB -&amp;gt; Work on my own applications&lt;br&gt;
Make a list of future posts -&amp;gt; Write&lt;br&gt;
Check for new books -&amp;gt; Read&lt;/p&gt;

&lt;p&gt;Easy, right? Now let’s give them space in our calendar, but before that, I want you to take into consideration that you should dedicate more time in your day to the activity that will get you closer to your most important goal for the next 6 months. In my case, my most important goal is finishing my applications, so I’ll spend more time working on my apps than anything else.&lt;/p&gt;

&lt;p&gt;Finally, your calendar should look something like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjjqsv7pr23dvlyiuupji.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjjqsv7pr23dvlyiuupji.png" alt="One day of my calendar" width="264" height="1056"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My day is not always like that, and it depends on the way I want to handle my workload.&lt;/p&gt;

&lt;h3&gt;
  
  
  Special Events 🎂
&lt;/h3&gt;

&lt;p&gt;There are times when you have to do something just once. Those things are your priority number one. Put them at the top of your list, create a task on Google Calendar, and get them out of your roadmap as soon as possible. Don’t do like me because I’ve come to notice that these are things that can explode in your face if you don't handle them on time and keep postponing them. Do you need to go to the doctor? Schedule the task, get the appointment, and go. Don’t waste peace of mind telling yourself, “I’ll do it once I finish this.” You and I both know that time will never come.&lt;/p&gt;

&lt;h2&gt;
  
  
  Perfect It 🔁
&lt;/h2&gt;

&lt;p&gt;Every Saturday, reserve 15 or 30 minutes to check your performance over the week. Check if you could accomplish what you set out to do. If you did and felt okay with the workload, keep going. If you couldn't finish most of the things you listed, don’t worry, you need to reschedule. Pay attention to the details and ask yourself what went wrong. Maybe you just need to move your time categories/steps in the calendar to find a better place, or maybe you need to lower your expectations. Maybe you are overestimating the amount of work you can handle.&lt;/p&gt;

&lt;p&gt;It’s worth mentioning that you shouldn’t fill your schedule completely. You want to leave empty space for yourself, your loved ones, or the unforeseen events that will inevitably happen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mindset 🧠
&lt;/h2&gt;

&lt;p&gt;As I told you at the beginning of this post, I found myself really stressed. When I finished my schedule, I felt really calm because I realized that there wasn't as much to do as I thought. Besides that, I also realized that I had become used to overthinking what I have to do, constantly asking myself if I’m doing the right thing. We can’t control everything; it’s better to get a plan, find things that you can control, and stick to them.&lt;/p&gt;

&lt;p&gt;I would love to create a really successful application, but I can’t really control success. Instead, I can control how many applications I create. So that’s what I do: I focus my mind and my effort on developing as many applications as I can, trying to learn as much as I can from each one of them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Time for Being a 👦 and Time for Being a 🤖
&lt;/h3&gt;

&lt;p&gt;There is a time to think, to feel, to analyze, and to dream, but extend that too much, and you'll find yourself trapped in a storm in your own mind. Always looking for a solution, preventing, visualizing, analyzing, optimizing. Being a victim of your own thoughts for nothing to happen in the end. No more. I propose something different: get a dream, get a plan, get a limit or a line. Stick to your plan and do, do, and keep doing. Once you get to the line, you can start analyzing again to get a new plan, a new limit, and start all over again. I’ve found that to be the best solution for my constant and paralyzing anxiety.&lt;/p&gt;

&lt;h2&gt;
  
  
  The End 🏁
&lt;/h2&gt;

&lt;p&gt;You’ve found the line, which means we’ve reached the end. Thanks for reading. If you enjoyed it, consider following me, liking, and if you really enjoyed or found it useful, please help me to buy a new book, with just $20 would be enough for me to get &lt;a href="https://www.amazon.com/-/es/Nicolas-Cole-ebook/dp/B08GZK274F/ref=tmm_kin_swatch_0?_encoding=UTF8&amp;amp;qid=&amp;amp;sr=" rel="noopener noreferrer"&gt;The Art and Business of Online Writing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[---------------------------------------------------------] 0% of $20, &lt;a href="https://buymeacoffee.com/juanemilio" rel="noopener noreferrer"&gt;let's buy me a book&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, let me know if you want me to keep my posts short like this one or if you prefer them longer like before.&lt;/p&gt;

&lt;h2&gt;
  
  
  Credit
&lt;/h2&gt;

&lt;p&gt;If you like the picture of the post consider checking the work of &lt;a href="https://unsplash.com/@punttim" rel="noopener noreferrer"&gt;Tim&lt;/a&gt; his the owner.&lt;/p&gt;

</description>
      <category>entrepreneurship</category>
      <category>sass</category>
      <category>startup</category>
      <category>productivity</category>
    </item>
    <item>
      <title>12 Lessons for a better UI - Refactoring UI The Book</title>
      <dc:creator>Juan Emilio</dc:creator>
      <pubDate>Tue, 09 Jul 2024 21:16:44 +0000</pubDate>
      <link>https://forem.com/juanemilio31323/12-lessons-for-a-better-ui-refactoring-ui-the-book-4ea1</link>
      <guid>https://forem.com/juanemilio31323/12-lessons-for-a-better-ui-refactoring-ui-the-book-4ea1</guid>
      <description>&lt;p&gt;Hello everyone, I'm Juan, and today I want to share some of the things that I've learned while reading &lt;a href="https://www.refactoringui.com/" rel="noopener noreferrer"&gt;Refactoring UI&lt;/a&gt;. It's amazing how much you can learn from the right book.&lt;/p&gt;

&lt;p&gt;Not so long ago, I started working on a new project of my own, and to my surprise, I found myself trapped and blocked with the UI that I was designing. I couldn't decide on colors, sizes—basically anything important for a UI was escaping me. So I decided to do what I always do when I don't know how to proceed: find a book that I think has the answer to my problem. Worst case scenario, I'll learn something new. To my surprise, &lt;em&gt;Refactoring UI&lt;/em&gt; wasn't just the solution I was looking for; it also rekindled my interest in UI design. So if you need something like that, prepare yourself, because we are going to check out the most disruptive and interesting lessons I learned from this book.&lt;/p&gt;

&lt;p&gt;From now on, I invite you to check out the book and buy it because there's no waste. With that said, let's proceed.&lt;/p&gt;

&lt;h2&gt;
  
  
  1 - Do It and Do It Fast
&lt;/h2&gt;

&lt;p&gt;Probably the reason why this lesson struck me as so interesting is because lately, I've been talking and &lt;a href="https://medium.com/@theprof301/48hs-is-all-you-need-15083345c5d5" rel="noopener noreferrer"&gt;writing&lt;/a&gt; nonstop about the importance of finishing a project before obsessing over the details.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In the earliest stages of designing a new feature, it’s important that you don’t get hung up making low-level decisions about things like typefaces, shadows, icons, etc.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;\ - Page 10&lt;/p&gt;

&lt;p&gt;I found this reaffirming, and not only that, but the book proposes an exercise to make this process even easier. Take a sharpie and draw on paper; it's really hard to obsess over the details.&lt;/p&gt;

&lt;h2&gt;
  
  
  2 - Not the Layout but Instead the Feature
&lt;/h2&gt;

&lt;p&gt;What is an app? Try to come up with an answer before moving on. An app is a collection of features, at least that's what &lt;em&gt;Refactoring UI&lt;/em&gt; tells us:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The thing is, an “app” is actually a collection of features...&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;\ - Page 7&lt;/p&gt;

&lt;p&gt;This answer was a breakthrough for me. It made perfect sense—we are designing an app, not a layout. So we shouldn't waste so much time starting the house by the roof because the details will be clearer once we have a collection of features to fill that layout.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The easiest way to find yourself frustrated and stuck when working on a new design is to start by trying to “design the app.” When most people think about “designing the app,” they’re thinking about the shell.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;\ - Page 7&lt;/p&gt;

&lt;h2&gt;
  
  
  3 - First in Scale of Grays
&lt;/h2&gt;

&lt;p&gt;This is something that most of us probably know but ignore, I don't know why.&lt;/p&gt;

&lt;p&gt;We are still in chapter one, and the book keeps telling us to stop worrying so much about things that can be polished once the features are ready. The aspect that we are "neglecting" now is &lt;strong&gt;color&lt;/strong&gt;, and I couldn't feel more at peace about it. I can't even count how many times I found myself stressing over the colors of my application. So instead of spending so much time thinking about the colors, the book suggests developing the features in a scale of grays, always keeping in mind the hierarchy that we are transmitting with contrast, size, and space.&lt;/p&gt;

&lt;h2&gt;
  
  
  4 - Get Some Personality
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Every design has some sort of personality. A banking site might try to communicate secure and professional, while a trendy new startup might have a design that feels fun and playful.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;\ - Page 17&lt;/p&gt;

&lt;p&gt;This is something we normally underestimate, forgetting to choose a personality before starting to design. In my case, the application I am currently working on wasn't looking quite right; it didn't have any personality. Finally, I decided to go for something formal, conveying that characteristic sense of "We know what we are talking about."&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxk2ya5hz3r1ngkdmj7zj.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxk2ya5hz3r1ngkdmj7zj.png" alt="Landing page example"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's still a work in progress.&lt;/p&gt;

&lt;h2&gt;
  
  
  5 - Systematize Everything
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;The more systems you have in place, the faster you’ll be able to work, and the less you’ll second-guess your own decisions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;\ - Page 27&lt;/p&gt;

&lt;p&gt;How many times have you found yourself asking: "What size should this be?" or maybe repeating a decision over and over again? The book strongly encourages us to develop following a system. I might add that a good solution to avoid falling into the complicated task of creating your own system is to copy someone else's system, like the one Tailwind is using.&lt;/p&gt;

&lt;h2&gt;
  
  
  6 - What's the Priority?
&lt;/h2&gt;

&lt;p&gt;Have you felt that you don't know why your UI seems flat? I've asked myself that many times. I used to think it was because of the lack of animation in my app, so I added animations. That didn't solve it, so I thought it was the color scheme; it wasn't. This book gave me the answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Visual hierarchy refers to how important the elements in an interface appear in relation to one another, and it’s the most effective tool you have for making something feel “designed.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;\ - Page 30&lt;/p&gt;

&lt;p&gt;There you have the answer: visual hierarchy, reducing the noise in our design, helping the user to pay attention to what is most important on the screen. Playing with contrast, color, size, and space—those are our tools to achieve it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before moving on
&lt;/h2&gt;

&lt;p&gt;If you are enjoying my content or find it useful, give me a follow and leave me a comment or like—that's always helpful. I don't want to stop you, so enjoy the post, and thanks for reading.&lt;/p&gt;

&lt;h2&gt;
  
  
  7 - Don’t Use Gray Text on Colored Backgrounds
&lt;/h2&gt;

&lt;p&gt;I've included this because it is an error that I used to make when trying to create hierarchy in my UI.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Making the text closer to the background color is what actually helps create hierarchy, not making it light gray.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;\ - Page 37&lt;/p&gt;

&lt;p&gt;Just a little hint, worth mentioning.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6stf04r13qk09l41ishr.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6stf04r13qk09l41ishr.png" alt="Gray text over colored background example wrong"&gt;&lt;/a&gt;&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fervf84r3ahexrd6w016b.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fervf84r3ahexrd6w016b.png" alt="Gray text over colored background right"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  8 - Balance Weight and Contrast
&lt;/h2&gt;

&lt;p&gt;Have you ever noticed that when you add an icon to your app, especially the ones that are filled, they jump out of the screen? Well, that's because the icon is covering more surface in the same amount of space because it uses the empty space inside it. This can break your hierarchy, and as we saw before, it is probably the most important aspect for a UI in order to look "designed."&lt;/p&gt;

&lt;p&gt;To avoid this happening, we are going to reduce the contrast with the background by changing the color of the icon to a closer color to the background.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frs55z1dfa782ltvquhwe.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frs55z1dfa782ltvquhwe.png" alt="Wrong Balance"&gt;&lt;/a&gt;&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd8gsyczumzmgmsfyd4tk.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd8gsyczumzmgmsfyd4tk.png" alt="Right Balance"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  9 - Start with Too Much Space and Go Down
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;One of the easiest ways to clean up a design is to simply give every element a little more room to breathe.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;\ - Page 56&lt;/p&gt;

&lt;p&gt;It may sound absurd, but every time you start to design something, add a little bit more space than you would initially. For example, normally I start with padding-4 on Tailwind; now I'm starting with padding-8.&lt;/p&gt;

&lt;p&gt;Increase your gap, increase your padding, and increase your margin. Later, you can go down, but let's start with more empty space.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8i632swt2sgj5n43h7b2.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8i632swt2sgj5n43h7b2.png" alt="Not enough space"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  10 - How Much Width Do You Need?
&lt;/h2&gt;

&lt;p&gt;I love designing for mobile—it's much easier, less space, less content. Just properly position your items on the screen, and everything works perfectly. Try to take that same approach to desktop, and surprise, surprise, your application feels strange.&lt;/p&gt;

&lt;p&gt;The book gives us a solution:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you only need 600px, use 600px. Spreading things out or making things unnecessarily wide just makes an interface harder to interpret, while a little extra space around the edges never hurt anyone.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;\ - Page 65&lt;/p&gt;

&lt;p&gt;In the same way, just because you shrink your canvas doesn't mean that everything has to behave that way. You might use full width on your navbar, but shrink your dashboard. Play with combining these ideas and remember:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Instead of sizing elements like this based on a grid, give them a max-width so they don’t get too large, and only force them to shrink when the screen gets smaller than that max-width.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;\ - Page 77&lt;/p&gt;

&lt;h2&gt;
  
  
  11 - Hide Actions for Data the User Hasn't Created
&lt;/h2&gt;

&lt;p&gt;Another thing that may be obvious but that at least in my case, I always forgot to take into consideration. Let me show you something from my application again:&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm7fxpwkbrk8puqx1s9e7.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm7fxpwkbrk8puqx1s9e7.png" alt="Customers list example"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the customers' dashboard on mobile, and this is what's going to be displayed once the user loads data. But what is he going to see if there is no data?&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F31nrjgbi8vn429l1frn0.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F31nrjgbi8vn429l1frn0.png" alt="Customer List empty example"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Not that pretty, right? But that's the default state of the application. What do you say if we contemplate this state?&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flpdjm84b6wmqi0x3tczq.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flpdjm84b6wmqi0x3tczq.png" alt="Customer list add button example"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Much better. That's basically what the book is telling us to do—contemplate these little but important states.&lt;/p&gt;

&lt;h2&gt;
  
  
  12 - Use Fewer Borders
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;When you need to create separation between two elements, try to resist immediately reaching for a border.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;\ - Page 206&lt;/p&gt;

&lt;p&gt;Using borders can add noise to the UI, something that we are trying to avoid. So instead of adding borders, a better approach would be:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What better way to create separation between elements than to simply increase the separation?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;\ - Page 209&lt;/p&gt;

&lt;p&gt;That extra space automatically causes the visual effect of differentiation between elements.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4vccfld82z0ivx77t37j.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4vccfld82z0ivx77t37j.png" alt="Border wrong"&gt;&lt;/a&gt;&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftvib7el68tu3sjvqrzsk.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftvib7el68tu3sjvqrzsk.png" alt="Border right"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;I hope you find this post useful. This was an exercise for myself, trying to summarize a 300-page book into the things that were most helpful for me. Originally, this post was going to have 25 lessons, but I think it's better if I leave it at just 12 lessons because these are the most helpful, at least for me.&lt;/p&gt;

&lt;p&gt;Once again, I invite you to buy the book because it has a lot more information and beautiful examples than the ones I mentioned here. So please take a &lt;a href="https://www.refactoringui.com/" rel="noopener noreferrer"&gt;look&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before You Go
&lt;/h2&gt;

&lt;p&gt;Thank you for reading, and if you really enjoyed the post, would you help me pay my rent?&lt;/p&gt;

&lt;p&gt;[---------------------------------------------------------------------------] 0% of $400, &lt;a href="https://buymeacoffee.com/juanemilio" rel="noopener noreferrer"&gt;let's pay my rent&lt;/a&gt;&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>ui</category>
      <category>ux</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Working on Something You Hate for 7 Years - How to Escape a Professional Crisis</title>
      <dc:creator>Juan Emilio</dc:creator>
      <pubDate>Mon, 08 Jul 2024 01:13:08 +0000</pubDate>
      <link>https://forem.com/juanemilio31323/working-on-something-you-hate-for-7-years-how-to-escape-a-professional-crisis-5892</link>
      <guid>https://forem.com/juanemilio31323/working-on-something-you-hate-for-7-years-how-to-escape-a-professional-crisis-5892</guid>
      <description>&lt;p&gt;Have you ever found yourself with a feeling of emptiness, feeling some kind of melancholy that you can't explain? If the answer is yes, let me tell you that I have felt it too, and it hasn't been easy to turn it off. In this post, I want to share the personal and professional crisis that I'm going through and the things that I'm doing to escape it.&lt;/p&gt;

&lt;p&gt;Before continuing, let me tell you that I know how crazy this story is going to sound and how hard it is to believe it, but it's mine and it's the only one I've got.&lt;/p&gt;

&lt;h2&gt;
  
  
  Context and Guide
&lt;/h2&gt;

&lt;p&gt;Hey, if you are looking for a &lt;strong&gt;bullet-list or guide&lt;/strong&gt;, jump straight to the part of this article called: &lt;strong&gt;"What I'm doing to solve it"&lt;/strong&gt;. If you want to know my story and maybe get some context from there, just keep reading.&lt;/p&gt;

&lt;p&gt;I'm Juan, and I'm a few days away from celebrating my birthday. Let me tell you that the last three years have been crazy for me. I've changed my job, almost died, and found myself deep in a professional crisis. Now I live with my girlfriend, and I think I'm pretty close to getting what I want for my life, but before going there, let me give you some context about how I am.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Everything Started
&lt;/h2&gt;

&lt;p&gt;If you'd asked me what I wanted to be when I was just 12 years old, I would have answered that I wanted to be a physicist. I loved science and especially physics. I spent most of my childhood playing video games and reading physics books, hoping someday to make a scientific contribution.&lt;/p&gt;

&lt;p&gt;Things didn't go that way. When I was 13 years old, my parents asked me what I wanted to study, and I gave that same answer. To my surprise, my parents gently explained to me that they couldn't afford such an education and that I should forget it. Anyway, physicists don't make any money, or at least that's what my parents taught me back then.&lt;/p&gt;

&lt;p&gt;Just one year later, I got to know one of my now best friends, Natz (this is a nickname, not his real name). I was playing video games, and he was streaming the match. I entered his Twitch channel, and we became good friends; that's the story in a nutshell. We got so close that we talked almost daily. Natz was around 30 years old back then and worked from home, so most of the time, he was available to talk and play. I was a teenager with nothing to do—perfect friends. At that time, I also realized for the first time that the economic state of my country, Argentina, was going through a hard time, and it didn't seem like it was going to change anytime soon. So, like any teenager who gets terrified with his country and doesn't know what he is going to do with his life, I decided that I wanted to emigrate to Canada (it was a good country to emigrate to if you were an Argentinean at that time).&lt;/p&gt;

&lt;p&gt;I investigated, and I figured that one of the jobs with the best salaries and relocation possibilities was software development. Surprise, surprise, Natz was a software developer. I ran to my Discord account and wrote: "Hey Natz, can you teach me how to code?" His answer was something like: "Complete these courses, and if you do it, we'll talk again about this." Just one week later, I finished them. I asked him again about it, and this was his answer: "Normally, no one finishes them and asks me back." He gave me more courses and helped me develop my first JavaScript bot for Discord. Just a few months later, Natz came to me with this message: "Hey Juan, I have a project, and I need help. Do you want to help me code it?"&lt;/p&gt;

&lt;p&gt;There I was, I got my first project with basic knowledge of HTML, CSS, and JavaScript. I couldn't believe it, and he was even going to pay me. We finished it; nothing special, just a web page with basic CSS and JS for an e-sport team that I think now doesn't even exist. The important part is, that's when I realized that I could really do this—coding for a living.&lt;/p&gt;

&lt;p&gt;I decided to get more projects for myself, and that's how I started. Buying courses on Udemy, reading books from the internet, and watching every possible course along the way. I started to develop my first side project, Smart-Restaurant, and I was working with any local business that wanted a web page, system, or application. I wasn't afraid to tackle projects way over my head. I kind of loved the pressure it gives you, knowing that you need to finish something that you don't even know how to start (this is something that I do until now, and sometimes it is great and sometimes it destroys me).&lt;/p&gt;

&lt;p&gt;My parents couldn't understand it; they thought I was getting money from God knows where. When I was 16 years old, I landed my first "big" job with a start-up from Buenos Aires. That was my first time experiencing the feeling of having a real job—coding on demand, doing things how they asked me, and working on things that maybe were out of my scope of interest. I was lucky. My parents never forced me to go to school, and I would stay at home as much as I wanted. Obviously, there was a minimum number of times that I had to fulfill if I wanted to finish school, and the guys I worked for understood it. For that reason, I was working for objectives and not hours. They were really open-minded, and we are friends until now. They taught me most of the things that helped me land my next job.&lt;/p&gt;

&lt;p&gt;Just a couple of months later, after my 18th birthday, I landed one of my biggest jobs at an international company. It was my first full-time job as a full-stack developer working on a USA project. Also, it was a face-to-face job, so I had to attend the office. Due to that and the fact that I couldn't study what I wanted, I decided to drop out of university and dedicate myself full-time to my job (I was studying computer science). The pay was really good at that time. I was a junior trainee, and they were paying me something around $1500. That amount in Argentina is a bunch of money.&lt;/p&gt;

&lt;p&gt;The conflict in my house persisted, so I decided it was time to get out of my parents' house and live on my own. That's how, at just 18 years old, I quit university, separated from my family (not in the most peaceful way), and moved out. It took me just a couple of months to get my first raise that year. My performance was so good that they had to move me from junior trainee to junior advanced. That year, I got nine raises, going from junior trainee to project lead in just one year. I know, extreme, but you need to take into consideration that at this point, I had been doing this for almost five years. Also, I knew how to speak English better than most of my team members, something really helpful in a company that gave us close contact with the client.&lt;/p&gt;

&lt;p&gt;And that's the story of how, at just 19 years old, I was completely alone, having a high-paying job and living entirely on my own.&lt;/p&gt;

&lt;h3&gt;
  
  
  Then is When it Struck Me
&lt;/h3&gt;

&lt;p&gt;I can remember it as if it happened yesterday. I woke up to prepare myself to go to work, but I felt different—tired, sad. I felt an emptiness like I had never felt before. I went to my job anyway (like I could not do it). I finished my day and went home. I worked out. I didn't feel quite good, but I ignored it. I was really stressed. I sat on my couch and ate dinner. Then I started crying. I couldn't explain it. I wasn't where I wanted to be. This feeling wasn't going anywhere; it came to stay for a long time. Every week it was becoming worse. Until one week, I felt completely empty. Then is when I said to myself that this had been enough, and I decided to go to therapy.&lt;/p&gt;

&lt;p&gt;My therapist is fantastic, and even now that I don't necessarily need to go, I visit her from time to time just to talk. If you are feeling things like the ones I'm describing, I strongly encourage you to go and find a therapist.&lt;/p&gt;

&lt;p&gt;My therapist helped me, and I tried to help myself by watching YouTube videos, reading books, and listening to podcasts. I was feeling worse and worse every day. I didn't want to do anything at all, but I forced myself to keep doing it through willpower. After a time, I couldn't exactly say when my therapist came to the conclusion that I was going through a personal and professional crisis.&lt;/p&gt;

&lt;p&gt;I was lacking purpose in my life, feeling that what I was doing wasn't interesting at all—"leading" a team and developing projects for a company that I didn't care about. I wanted to do something more interesting, more challenging, something that helped people.&lt;/p&gt;

&lt;p&gt;Then is when I tried to do things outside of my job, only to realize I had something around three hours free in my day during the week. I woke up at 8:45 to go to work around 9:00, got out at 18:00, arrived home at 18:15, did my necessities, it's 19:00, worked out, it's 20:00, made dinner, and there you go—you are too tired to do anything, and the day is almost over.&lt;/p&gt;

&lt;p&gt;That destroyed me. The math was against me. There weren't enough hours in the day to do anything. But I didn't give up. I put in all the effort that I could to push as many activities as I could to get something out of that time. I was studying, trying things, making plans, developing side projects. At the same time, my therapist was asking me to be more&lt;/p&gt;

&lt;p&gt;social, so I started to code after my job at a coffee shop (good idea, you'll understand why later).&lt;/p&gt;

&lt;p&gt;It's worth mentioning that in my job, I did all that I could to get even more out of those hours—reading, watching courses, and secretly programming my own things. Even with all that effort and neglecting my health, I couldn't do enough to escape from it. To add even more complexity to the process, I suffered a medical problem (I don't like talking about this) that required a medical intervention that almost made me lose a leg and was kind of complex (I insist, I don't like talking about this). Because of that, I was feeling so physically sick, and the stress and psychological problems didn't help. I had to go through an extensive time of recovery to be able to walk again and an even longer process to be able to work out again. Thanks to this, I'll always have some pain in my leg, but I feel much better now.&lt;/p&gt;

&lt;h3&gt;
  
  
  It's Coming to an End
&lt;/h3&gt;

&lt;p&gt;Yep, I know you are probably asking yourself how old I am now. The answer: 20, almost 21. In two weeks, it's my birthday. The last three years have been a roller coaster. If you are anything like me, you love a happy ending. I really do. And that's the case. Now I work much more relaxed, I have a personal and social life, I feel physically and psychologically better, I have my partner who I've been dating for a year and a half now, and we are already living together (very happily). So if you want to know what I did to get to this point, just keep reading.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Did and Am Still Doing to Solve It
&lt;/h2&gt;

&lt;p&gt;As you read before, it took me a while to transform my life into a mess, and fixing it is also taking a considerable amount of time. I'm saying this because if you are going through the same process, you need to understand that this is not going to be easy.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Do You Want?
&lt;/h3&gt;

&lt;p&gt;This is probably the question I should have asked myself back then when I started studying software development. I didn't decide to study software development because I really loved it, but instead, I did it out of necessity. Now I invite you to ask yourself what you really want and be honest; no one is judging you.&lt;/p&gt;

&lt;p&gt;Ready? I hope so. Below is my answer.&lt;/p&gt;

&lt;p&gt;Now, after seven years, I can say that software development can be extremely boring and also extremely exciting. But after so much time, it is already part of me, so I know for sure that I want to keep doing this (with some changes, obviously). At the same time, I want something else. While leading a project for the company where I used to work before, I discovered that I'm really good at teaching people and I'm also really good at finding talent. So I would like to do something that connects both of those things. Last but not least, I want to do something related to science. I'll probably try to get a degree in math or physics once all this is more stable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Refine the Details
&lt;/h3&gt;

&lt;p&gt;Okay, I hope you answered the previous question. Now we are going to polish the details. This is something like trying to create a mind map. Please write down the things you like about the things you are already doing and also write down the things that you want to do.&lt;/p&gt;

&lt;p&gt;This is mine:&lt;/p&gt;

&lt;h4&gt;
  
  
  Right Now:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Love coding&lt;/li&gt;
&lt;li&gt;Love solving hard problems&lt;/li&gt;
&lt;li&gt;Love communicating with people in other languages&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  In the Future:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Science&lt;/li&gt;
&lt;li&gt;Leading projects and teaching people&lt;/li&gt;
&lt;li&gt;Having freedom&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ok, we have our list. Now I invite you to think of the easiest solution for this problem. Most people will jump straight to entrepreneurship and stuff like that, but most of the time, that's the hardest solution. So hopefully, you can come up with a different answer. Here are some solutions that may apply:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Changing jobs&lt;/li&gt;
&lt;li&gt;Renegotiating in your current job&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The previous two options are pretty good for most people, and many of them don't even consider them.&lt;/p&gt;

&lt;p&gt;In my case, and most likely in your case too, the best answer is entrepreneurship. Given that it's the hardest solution, we'll have to make many sacrifices, and we'll need a good plan.&lt;/p&gt;

&lt;h3&gt;
  
  
  It's Not About Yourself
&lt;/h3&gt;

&lt;p&gt;Sadly, if you are inclined towards entrepreneurship, let me tell you the harsh truth. Nobody cares about your plan or your business. And don't get me wrong; I would love to hear your idea, and probably many people out there will too. But most of the time, the ideas that we think are going to rock it don't end up that way.&lt;/p&gt;

&lt;p&gt;If you are picking entrepreneurship instead of changing jobs or renegotiating, it's probably because you want the ideal freedom that comes with it. Sadly, that's the fruit that comes from sacrificing many things. If we want to achieve that, we'll need to understand something really basic, but that evades most of us. We'll need someone's money. If we want someone to give us money, we'll need to offer something in exchange, and it ideally will be something that our customer wants. So it's not about ourselves or our idea; it's about what our potential customer wants. So don't waste too much time working on something that nobody wants to pay for. If you want more information about this, read my post &lt;a href="https://medium.com/@theprof301/48hs-is-all-you-need-15083345c5d5" rel="noopener noreferrer"&gt;48hs is all you need for your project&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;And finally, when you are pricing something, think about this. Let's say your barber is asking you for $10,000 for a haircut. What would you feel? Probably you'll feel that this guy is trying to make himself rich with you. I hate when something like that happens. So often, when I have to put a price on something, I take that into consideration.&lt;/p&gt;

&lt;h3&gt;
  
  
  It's Going to Be a Long Run
&lt;/h3&gt;

&lt;p&gt;Whatever you choose and whatever you are doing, if you want to change your life, you'll need time, plenty of time. If you are thinking that you can do this on the first try or just in one month, sorry, my boy, you are not being realistic. It will be better if you accept upfront that it is going to be hard.&lt;/p&gt;

&lt;p&gt;Once you accept it, you can make a plan. Right now, I'm still trying to stabilize my businesses. I have a coffee shop, I'm developing two projects, writing blogs, and working for a big company as a senior developer. I'm not telling you this because I want to show off how full my schedule is, but instead because I know my plan is going to take a lot of time, and because I know I'm doing too many things. Next month, I'll have to reduce the number of activities that I'm doing because I'm a human being, and I need to breathe, eat, do sports, and have a life in general, and you do too. So when you are making your plan, be realistic. Estimate for the long term, don't give yourself too many options to quit, and take into consideration that you need to have a life outside of your projects and your "dreams."&lt;/p&gt;

&lt;h3&gt;
  
  
  Give Yourself Space to Breathe
&lt;/h3&gt;

&lt;p&gt;I know I mention this too many times, but most people don't realize that this is a possibility. In the previous point, I mentioned that you have to plan for the long term and take it easy. Most likely, if you are in a situation similar to the one I was in, you want to run from your job and change your life tomorrow. A really good option is to start looking for a job that is less demanding. Even if you have to do the "same" kind of job, I did exactly that.&lt;/p&gt;

&lt;p&gt;One day I was exhausted. My boss threw the blame for something I didn't do at me. The company was going through a hard time, and my team was feeling the pressure. So when I got home, I updated my curriculum and looked for places where I could do a similar job for similar pay and work fewer hours. Now I'm working there, and from time to time, I want to run because, let's be honest, I don't want to do what I'm doing for a living, but it's much more relaxed, and I have enough time to work on my escape plan, and at the same time, I have a job that is paying the bills.&lt;/p&gt;

&lt;p&gt;So go out there and look for a better option. Probably someone else is willing to offer you a better deal.&lt;/p&gt;

&lt;h3&gt;
  
  
  Having Ways to Socialize
&lt;/h3&gt;

&lt;p&gt;If you pay enough attention, you'll notice that I mentioned that I have a girlfriend and that it's a good idea to go to a coffee shop to do your things. That's how I met my girlfriend; she was working there, and I was a regular customer because I was going there to code.&lt;/p&gt;

&lt;p&gt;What I'm trying to share with this is that socializing doesn't imply going to a club or a party. You can find ways to put yourself out there and at the same time keep doing your stuff. Anything that puts you close to other human beings and forces you to interact with other people is a good idea. We are extremely social beings, and it's amazing how much our interpersonal relationships can affect our lives.&lt;/p&gt;

&lt;h3&gt;
  
  
  Having Your Escape Number
&lt;/h3&gt;

&lt;p&gt;A good way to structure your plan is first to find your escape number. This is pretty easy. It varies a little bit from country to country because of the taxes, so I'll just give you the concept, and later you can polish the number. It goes something like this: for one month, keep track of how much you need to pay for rent, your food, and everything else that you strictly need to live.&lt;/p&gt;

&lt;p&gt;That's your escape number. Find ways to produce that every month, and you are out.&lt;/p&gt;

&lt;h3&gt;
  
  
  Being Logical About the Future
&lt;/h3&gt;

&lt;p&gt;When you are making decisions like this, it's important to stay calm, control your emotions, and think as logically as you can about it. Let's say you have your plan, you know what you truly want to do, how much time it's going to take you, and how much money you need. Ok, now let's be calm and realistic.&lt;/p&gt;

&lt;p&gt;You need to save money and be prepared for it to fail. What are you going to do if everything goes wrong? In my case, I have enough savings to survive for three months. In the meantime, if everything fails, I'm looking for another job, and if I can't get it in that time, I have enough money to go back to my parents' house to start all over again. I know, I know, it's easy for me to say—I'm just 21, and I don't have children, but believe me, no one wants to fail.&lt;/p&gt;

&lt;h3&gt;
  
  
  Not Giving Yourself a Way to Fail
&lt;/h3&gt;

&lt;p&gt;Normally, most people quit&lt;/p&gt;

&lt;p&gt;before getting to the end. Have you ever noticed that your phone takes almost the same time to go from 80% to 100% as it does from 0% to 80%? That's because the potential difference of the battery is going down the closer you get to 100%. We can extrapolate that to any project. What took you to go from 0% to 80% is probably the same amount of effort and time that you are going to need to go from 80% to 100%. So if you apply the same rules for both parts, it's most likely that you are going to lose.&lt;/p&gt;

&lt;p&gt;Then let's change the rules. Let me give you another example. I love playing the piano, but I suck at it. So I started taking classes. I already want to quit, but I put a challenge to myself. I can only quit after 100 lessons. If I don't want to play after 100 lessons, I'm more than free to quit. The thing is, I'm pretty sure that after the 100th lesson, I'll want to play.&lt;/p&gt;

&lt;p&gt;In that way, there is no way for me to lose because I changed the rules of the game, and just like a casino, the chance of the house losing is extremely low.&lt;/p&gt;

&lt;h3&gt;
  
  
  You Don't Need to Do All of This
&lt;/h3&gt;

&lt;p&gt;Finally, probably the best advice of all: you don't need to do all of this. I would love to be rich, and I used to think that everybody wants to be rich. To my surprise, one day I decided to ask my cousin (I'm really close with my cousin). You know what he said? He said: "No Juan, I don't want to be rich, I just want to be a medic and help people, I don't care about that." I replied: "But you understand that if you are not wealthy enough, you'll have to work for the rest of your life under someone else's desires and rules." He answered: "I don't care. I have no problem working for hours if I'm doing something good and productive that can be admired." Finally, I asked: "Ok, that's great. But then, how do you want to live?" His answer: "I just want to have enough time to be with my girlfriend, enough money to not worry about the bills, and some nice vacations and time for my children." I think my cousin's answer was beautiful.&lt;/p&gt;

&lt;p&gt;Maybe you are more like my cousin. Just because everybody wants to be rich or because everybody wants to be an entrepreneur or a software developer doesn't mean you have to do the same. So be free to decide what you think is better for yourself. Also, don't repeat my mistake and don't let others tell you what is worth doing and what's not, and don't let the circumstances of your surroundings determine what you are going to do, as if we were capable of predicting the future.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;I hope you find this post useful. It has been an adventure for me to write about this. It's something extremely personal, but I really wanted to share it. If you found it helpful, please leave me a comment telling me what's going on with your life.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before You Go
&lt;/h2&gt;

&lt;p&gt;I'm thinking of posting on X. Would you follow me? Thank you in advance, and if you really enjoyed the post, would you help me pay my rent?&lt;/p&gt;

&lt;p&gt;[---------------------------------------------------------------------------] 0% of $400, &lt;a href="https://buymeacoffee.com/juanemilio" rel="noopener noreferrer"&gt;let's pay my rent&lt;/a&gt;&lt;/p&gt;

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