<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Franciele Stefani da Costa</title>
    <description>The latest articles on DEV Community by Franciele Stefani da Costa (@fscosta1).</description>
    <link>https://dev.to/fscosta1</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%2F3427697%2Fbfd62fe2-8bff-4358-892c-2dd6fddc7dd4.jpeg</url>
      <title>DEV Community: Franciele Stefani da Costa</title>
      <link>https://dev.to/fscosta1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fscosta1"/>
    <language>en</language>
    <item>
      <title>Code is the execution. Thinking is the strategy.</title>
      <dc:creator>Franciele Stefani da Costa</dc:creator>
      <pubDate>Tue, 10 Feb 2026 19:08:40 +0000</pubDate>
      <link>https://dev.to/fscosta1/code-is-the-executionthinking-is-the-strategy-im2</link>
      <guid>https://dev.to/fscosta1/code-is-the-executionthinking-is-the-strategy-im2</guid>
      <description>&lt;h1&gt;
  
  
  💡 The Smart Student’s Epiphany
&lt;/h1&gt;

&lt;p&gt;Recently, while studying, I realized something that completely changed the way I look at SQL.&lt;br&gt;&lt;br&gt;
In one class, I watched the instructor building complex queries and thought:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“He doesn’t start with SQL… he starts with THINKING.”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And that’s when it clicked.&lt;/p&gt;

&lt;p&gt;We spend a lot of time learning &lt;strong&gt;syntax&lt;/strong&gt;, but we almost never learn &lt;strong&gt;how to think before coding&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
And that makes &lt;strong&gt;all the difference&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 The problem: why do we freeze?
&lt;/h2&gt;

&lt;p&gt;If you study SQL, you’ve probably been here:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You receive a complex problem
&lt;/li&gt;
&lt;li&gt;You open the SQL editor
&lt;/li&gt;
&lt;li&gt;You type &lt;code&gt;SELECT * FROM...&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Freeze.&lt;/strong&gt; “Now what?”
&lt;/li&gt;
&lt;li&gt;You start trying some &lt;code&gt;JOIN&lt;/code&gt;s
&lt;/li&gt;
&lt;li&gt;You get confused
&lt;/li&gt;
&lt;li&gt;You feel frustrated
&lt;/li&gt;
&lt;li&gt;You end up on Stack Overflow
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt; messy code, wrong results, and wasted time.&lt;/p&gt;

&lt;p&gt;For a long time, I thought this was:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;lack of practice
&lt;/li&gt;
&lt;li&gt;or lack of technical knowledge
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But it wasn’t.&lt;/p&gt;

&lt;p&gt;The problem was &lt;strong&gt;before SQL&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;👉 &lt;strong&gt;In the next post&lt;/strong&gt;, I’ll share the analogy that finally organized this way of thinking —&lt;br&gt;&lt;br&gt;
and why jumping straight into code is often &lt;strong&gt;exactly what slows us down the most&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;&lt;code&gt;#ThinkBeforeYouCode&lt;/code&gt; &lt;code&gt;#SQL&lt;/code&gt; &lt;code&gt;#RealLearning&lt;/code&gt; &lt;code&gt;#DataEngineering&lt;/code&gt; &lt;code&gt;#Data&lt;/code&gt;&lt;/p&gt;

</description>
      <category>sql</category>
      <category>dataengineering</category>
      <category>mysql</category>
      <category>developer</category>
    </item>
    <item>
      <title>🚀 How I Learned That Thinking “Small” Can Save Hours of SQL Headaches</title>
      <dc:creator>Franciele Stefani da Costa</dc:creator>
      <pubDate>Tue, 30 Sep 2025 19:16:44 +0000</pubDate>
      <link>https://dev.to/fscosta1/how-i-learned-that-thinking-small-can-save-hours-of-sql-headaches-2n9b</link>
      <guid>https://dev.to/fscosta1/how-i-learned-that-thinking-small-can-save-hours-of-sql-headaches-2n9b</guid>
      <description>&lt;p&gt;The day I realized building a query is like playing with Lego  &lt;/p&gt;

&lt;p&gt;Professors always said: &lt;strong&gt;“build and test, build and test.”&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
And I &lt;em&gt;thought&lt;/em&gt; I was already doing that. But honestly, I wasn’t.&lt;br&gt;&lt;br&gt;
My mindset was &lt;strong&gt;linear&lt;/strong&gt;: I wanted to write the entire query at once, hit run, and only then check if it worked.  &lt;/p&gt;

&lt;p&gt;Guess what? It usually didn’t. 😅  &lt;/p&gt;

&lt;p&gt;Then one day I watched a video from &lt;a href="https://www.youtube.com/watch?v=Iv9qBz-cyVA&amp;amp;ab_channel=AnkitBansal" rel="noopener noreferrer"&gt;Ankit Bansal&lt;/a&gt; (SQL expert), and that’s when it clicked. 💥&lt;br&gt;&lt;br&gt;
It’s not about going slow—it’s about &lt;strong&gt;changing the way of thinking&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
👉 Instead of finishing everything and testing later, it’s way better to enjoy the process: build step by step and debug along the way.  &lt;/p&gt;

&lt;p&gt;And here’s how he did it:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;He started with something simple:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;department_id&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;IN&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;dep_id&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;dept&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;Then, he expanded it with a &lt;strong&gt;LEFT JOIN&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;LEFT&lt;/span&gt; &lt;span class="k"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;dept&lt;/span&gt;
&lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;emp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;department_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dept&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dep_id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;Next, he pulled in the full data:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;emp&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="n"&gt;dept&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dep_name&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;emp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;Finally, he filtered just what he needed:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;dept&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dep_name&lt;/span&gt; &lt;span class="k"&gt;IS&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;So instead of trying to write everything in one go, he &lt;strong&gt;validated each block&lt;/strong&gt; until the solution was crystal clear.  &lt;/p&gt;


&lt;h2&gt;
  
  
  💡 What I Learned
&lt;/h2&gt;

&lt;p&gt;This style has a fancy name: &lt;strong&gt;incremental thinking&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
But for me, it simply means: &lt;strong&gt;“don’t lose your mind.”&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fewer mistakes:&lt;/strong&gt; you test each piece before moving on.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Easier debugging:&lt;/strong&gt; when something breaks, you know exactly where.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lighter brain load:&lt;/strong&gt; it’s easier to reason in smaller chunks.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real learning:&lt;/strong&gt; you understand the journey, not just the final query.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And since my dream is to become a &lt;strong&gt;Data Engineer&lt;/strong&gt;, I can see how this mindset will be essential.&lt;br&gt;&lt;br&gt;
Data engineering is all about dealing with complex systems, huge datasets, and tricky transformations — and there’s no way to survive without building things step by step.  &lt;/p&gt;


&lt;h2&gt;
  
  
  🎯 How to Train This Mindset
&lt;/h2&gt;

&lt;p&gt;If you also tend to write giant queries all at once, here’s a better way to practice:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Step 1: look at all the data&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="k"&gt;table&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;-- Step 2: add filters&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="k"&gt;table&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;-- Step 3: join tables&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;table1&lt;/span&gt;
&lt;span class="k"&gt;LEFT&lt;/span&gt; &lt;span class="k"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;table2&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;-- Step 4: refine with window functions, groupings, etc.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The idea is: &lt;strong&gt;build and test each step&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Don’t try to be “Neo from the Matrix” writing a massive query and only checking if it works at the end.  &lt;/p&gt;




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

&lt;p&gt;I used to think “build and test” meant &lt;strong&gt;slowing down&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
But now I see it’s the opposite: it’s actually faster, because you make fewer mistakes.  &lt;/p&gt;

&lt;p&gt;Now, whenever I write a query, I remind myself:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;“Take it easy, Fran. Build the Lego one piece at a time.”&lt;/strong&gt; 🧩  &lt;/p&gt;

&lt;p&gt;And who knows — one day, as a Data Engineer, I’ll look back and thank myself for training this mindset early on.  &lt;/p&gt;

&lt;p&gt;How about you? Do you still try to write it all at once, or have you embraced the incremental path? I’d love to hear your experience! 😅  &lt;/p&gt;




&lt;p&gt;✍️ &lt;em&gt;If you enjoyed this post, drop a comment, share it, and follow me here — I’m sharing my journey as a junior dev on the path to becoming a Data Engineer.&lt;/em&gt; 🚀  &lt;/p&gt;

</description>
      <category>sql</category>
      <category>dataengineering</category>
      <category>learning</category>
      <category>career</category>
    </item>
    <item>
      <title>Going Back to a Previous Commit: How I Turned a Simple Git Reset Into a Horror Show (and What I Learned)</title>
      <dc:creator>Franciele Stefani da Costa</dc:creator>
      <pubDate>Wed, 13 Aug 2025 14:00:48 +0000</pubDate>
      <link>https://dev.to/fscosta1/going-back-to-a-previous-commit-how-i-turned-a-simple-git-reset-into-a-horror-show-and-what-i-i8l</link>
      <guid>https://dev.to/fscosta1/going-back-to-a-previous-commit-how-i-turned-a-simple-git-reset-into-a-horror-show-and-what-i-i8l</guid>
      <description>&lt;h3&gt;
  
  
  The day I almost deleted my dignity along with my code
&lt;/h3&gt;

&lt;p&gt;You know that day when you think: &lt;em&gt;“This will be quick, just install Husky, configure commitlint, and done”&lt;/em&gt;?&lt;br&gt;&lt;br&gt;
Yeah… it was supposed to be that simple.&lt;/p&gt;

&lt;p&gt;The request was easy: install Husky (pre-commit, pre-push, and commit-msg) and commitlint. I installed everything, set it up nicely… but, being a beginner, I had to make a few test commits to see if it was working.&lt;br&gt;&lt;br&gt;
Result? The commit history ended up messier than a drawer full of random cables that nobody knows what they’re for.&lt;/p&gt;

&lt;p&gt;Then came the &lt;strong&gt;new mission&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
&lt;em&gt;"Franciele, we need to clean up the commit history."&lt;/em&gt;&lt;br&gt;&lt;br&gt;
And I thought: &lt;em&gt;“Piece of cake, I saw this on Google.”&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  The fatal mistake
&lt;/h3&gt;

&lt;p&gt;I went straight to a &lt;strong&gt;git reset&lt;/strong&gt;… and friend, that was the beginning of the tragedy.&lt;br&gt;&lt;br&gt;
The command I chose &lt;strong&gt;deleted all the changes on my local machine&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
And no, of course, I &lt;strong&gt;didn’t have a backup&lt;/strong&gt;. Who hasn’t, right? (Seriously, always have one.)&lt;/p&gt;

&lt;p&gt;In desperation, I dug around and discovered that, luckily, the original branch with the correct code was still intact. I breathed, cloned it, and this time, I actually researched &lt;strong&gt;before&lt;/strong&gt; typing commands like I was some hacker in &lt;em&gt;The Matrix&lt;/em&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  What I learned about resetting commits
&lt;/h3&gt;

&lt;p&gt;There are three main ways to use &lt;code&gt;git reset&lt;/code&gt;, and each one can completely change your day (or ruin it):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;git reset --hard &amp;lt;commit&amp;gt;&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Returns your project to the state of that commit and deletes all uncommitted changes.&lt;br&gt;&lt;br&gt;
&lt;em&gt;Perfect for losing code with no backup, not recommended.&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;git reset --soft &amp;lt;commit&amp;gt;&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Moves the HEAD to that commit but keeps your changes staged. Your code is safe, only the history goes back in time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;git reset --mixed &amp;lt;commit&amp;gt;&lt;/code&gt;&lt;/strong&gt; (default)&lt;br&gt;&lt;br&gt;
Like soft, but keeps the changes &lt;strong&gt;unstaged&lt;/strong&gt;. You need to &lt;code&gt;git add&lt;/code&gt; them again.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  My problem and the solution
&lt;/h3&gt;

&lt;p&gt;What I wanted:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remove only the test commits.&lt;/li&gt;
&lt;li&gt;Keep my current code intact.&lt;/li&gt;
&lt;li&gt;Make a new, clean commit with a proper message.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Step by step:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check which branch I was on:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git branch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Make sure I’m on the correct branch:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout branch_name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;See the commits:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Copy the commit number before the test commits and go back to it using soft reset:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git reset &lt;span class="nt"&gt;--soft&lt;/span&gt; commit_number
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Make the new commit:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"chore: configure husky, lint-staged and commitlint properly"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Force push:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git push origin your-branch &lt;span class="nt"&gt;-f&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;The most valuable lesson&lt;br&gt;
In the end, I realized that daily backups are your best friend.&lt;br&gt;
Create a private GitHub repository and push your project at the end of each day.&lt;br&gt;
Don’t trust that your computer will last forever or that you’ll remember every command.&lt;/p&gt;

&lt;p&gt;Because losing a bit of code hurts, but losing everything because you didn’t back up…&lt;br&gt;
It’s like spilling coffee on your keyboard and thinking you can dry it with a hairdryer: it’s gonna go badly.&lt;/p&gt;




&lt;p&gt;And you? Have you ever made a “small disaster” in Git? Share it with me so I can learn from your mistakes too. 😅&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
