<?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: Jacob</title>
    <description>The latest articles on DEV Community by Jacob (@jacob_gawlik).</description>
    <link>https://dev.to/jacob_gawlik</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%2F2330303%2F72181143-a7a5-440c-8b6a-19f927cabc41.jpg</url>
      <title>DEV Community: Jacob</title>
      <link>https://dev.to/jacob_gawlik</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jacob_gawlik"/>
    <language>en</language>
    <item>
      <title>GroupSyncer annoucement</title>
      <dc:creator>Jacob</dc:creator>
      <pubDate>Fri, 27 Jun 2025 13:03:06 +0000</pubDate>
      <link>https://dev.to/jacob_gawlik/groupsyncer-annoucement-9p7</link>
      <guid>https://dev.to/jacob_gawlik/groupsyncer-annoucement-9p7</guid>
      <description>&lt;p&gt;I am excited to share the launch of my first open source project: &lt;a href="https://groupsyncer.sh" rel="noopener noreferrer"&gt;GroupSyncer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GroupSyncer is a tool designed to streamline AWS Security Group IP management with a single shell command. The idea was born from my own challenges in keeping security groups updated across multiple AWS CLI profiles—a common scenario for anyone juggling multiple projects or frequently switching networks, such as when using a VPN.&lt;/p&gt;

&lt;p&gt;With GroupSyncer, you can update all relevant security groups across all or selected AWS profiles effortlessly, saving time and reducing manual overhead. &lt;/p&gt;

&lt;p&gt;This project reflects my ongoing commitment to open source, security automation and efficient cloud management.&lt;/p&gt;

&lt;p&gt;I look forward to feedback from the community and hope GroupSyncer proves valuable to others facing similar challenges.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Conduct Effective Code Reviews</title>
      <dc:creator>Jacob</dc:creator>
      <pubDate>Sun, 05 Jan 2025 14:28:27 +0000</pubDate>
      <link>https://dev.to/jacob_gawlik/how-to-conduct-effective-code-reviews-3dmm</link>
      <guid>https://dev.to/jacob_gawlik/how-to-conduct-effective-code-reviews-3dmm</guid>
      <description>&lt;p&gt;Code reviews are an essential part of the software development process. They ensure that code adheres to best practices, is maintainable, and works as expected. However, conducting an effective code review can be challenging, especially for teams balancing speed and quality. In this article, we’ll explore best practices for code reviews that can help you and your team improve code quality and foster better collaboration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Are Code Reviews Important?
&lt;/h2&gt;

&lt;p&gt;Code reviews help developers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Identify bugs early: Catching errors in code before it reaches production saves time and reduces costly fixes.&lt;/li&gt;
&lt;li&gt;Improve code quality: Reviews help ensure adherence to coding standards, maintainability, and readability.&lt;/li&gt;
&lt;li&gt;Knowledge sharing: Code reviews enable team members to learn from each other’s work and improve their understanding of the codebase.&lt;/li&gt;
&lt;li&gt;Team collaboration: It’s a great opportunity to collaborate, mentor, and keep the entire team aligned on coding practices.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  1. Focus on the Big Picture, Not Just the Syntax
&lt;/h3&gt;

&lt;p&gt;When conducting code reviews, it’s easy to get caught up in the details—variable names, formatting issues, or small coding quirks. While these things matter, the big picture is even more critical. Focus on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Architecture&lt;/strong&gt;: Is the code designed in a way that scales well? Does it fit within the overall application structure?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Logic flow&lt;/strong&gt;: Does the logic make sense? Are there any redundant or overly complex operations that could be simplified?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance&lt;/strong&gt;: Will this code create performance bottlenecks? Could it be optimized for speed or memory usage?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By focusing on these high-level concepts first, you can ensure the code works as intended without being distracted by minor issues.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Be Kind and Constructive with Your Feedback
&lt;/h3&gt;

&lt;p&gt;Giving feedback is one of the most important—and sometimes difficult—parts of code reviews. It’s important to keep the following in mind:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Avoid criticizing the developer, critique the code&lt;/strong&gt;: Say, “This approach could be improved by…” instead of “You did this wrong.”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Praise where appropriate&lt;/strong&gt;: Positive feedback on clean code or a smart solution goes a long way in building team morale.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Be specific&lt;/strong&gt;: Instead of saying, “This doesn’t look right,” explain why something might be a concern. For example, “This loop might cause a performance issue when handling large data sets.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is to create a collaborative and supportive environment where everyone can improve.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Use Tools to Automate Tedious Parts
&lt;/h3&gt;

&lt;p&gt;Automated tools can handle many of the repetitive and objective parts of a code review, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Linting and style enforcement&lt;/strong&gt;: Use tools like ESLint, Prettier, or RuboCop to catch styling issues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unit testing&lt;/strong&gt;: Ensure all tests pass before even starting a review. CI tools like Jenkins, CircleCI, or GitHub Actions can automate this.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Static code analysis&lt;/strong&gt;: Tools like SonarQube or CodeClimate can find common errors, security issues, and performance bottlenecks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By automating these aspects, the human reviewer can focus on more complex and nuanced issues.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Review Smaller, More Frequent Code Changes
&lt;/h3&gt;

&lt;p&gt;Large pull requests are time-consuming and harder to review effectively. A massive block of code makes it difficult to focus on key areas, and reviewers can easily miss important issues. Encourage frequent, smaller pull requests (PRs). This approach has several benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Faster reviews&lt;/strong&gt;: Smaller chunks of code are easier and quicker to review.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Easier to spot issues&lt;/strong&gt;: Reviewers can dive deeper into smaller changes and catch potential problems.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Less merge conflicts&lt;/strong&gt;: Merging smaller changes more frequently reduces the chance of complicated merge conflicts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Make reviewing part of the team’s regular workflow so that it doesn’t build up into unmanageable tasks.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Ask Questions, Don’t Assume
&lt;/h3&gt;

&lt;p&gt;If you’re unsure about a particular piece of code, ask questions rather than assuming the developer made a mistake. This approach leads to better understanding and open dialogue. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Why did you choose this approach?"&lt;/li&gt;
&lt;li&gt;"Could you explain how this method works with the existing feature?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By asking questions, you may uncover a new perspective, or you may point out something that was overlooked. Either way, it promotes healthy collaboration and learning.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Ensure Test Coverage
&lt;/h3&gt;

&lt;p&gt;Code that isn’t tested properly is a recipe for future bugs. Make sure that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unit tests&lt;/strong&gt; are included to verify individual pieces of code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration tests&lt;/strong&gt; are present to ensure new features work well with existing systems.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Edge cases&lt;/strong&gt; are considered to avoid unexpected behaviour in uncommon scenarios.
If tests are missing, suggest that the developer add them before approving the review.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  7. Limit Review Time to Stay Focused
&lt;/h3&gt;

&lt;p&gt;Code reviews can be mentally draining, especially if they take too long. Studies show that reviewers are most effective when they spend between &lt;strong&gt;30 and 60 minutes&lt;/strong&gt; reviewing code. After that, attention and focus can drop significantly. Encourage short, focused review sessions to avoid fatigue and ensure better results.&lt;/p&gt;

&lt;h3&gt;
  
  
  8. Leave Comments In Context
&lt;/h3&gt;

&lt;p&gt;Most code review platforms, such as GitHub, GitLab, and Bitbucket, allow you to leave comments directly on lines of code. Make sure you’re using this feature to leave &lt;strong&gt;contextual comments&lt;/strong&gt; instead of vague, general feedback. This practice makes it easier for the developer to understand what you’re referring to and speeds up the review process.&lt;/p&gt;

&lt;h3&gt;
  
  
  9. Approve Changes with Clear Communication
&lt;/h3&gt;

&lt;p&gt;Once the review is complete, it’s important to communicate your approval or requests clearly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Approve the PR&lt;/strong&gt; if everything looks good.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Request changes&lt;/strong&gt; and leave comments detailing the specific areas that need work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Leave follow-up instructions&lt;/strong&gt; for what needs to happen next, like adding tests or fixing a specific bug.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Clear communication prevents confusion and ensures that reviews move forward smoothly.&lt;/p&gt;




&lt;h4&gt;
  
  
  Conclusion
&lt;/h4&gt;

&lt;p&gt;Code reviews are a crucial part of producing high-quality software. By focusing on the big picture, offering constructive feedback, leveraging automation, and maintaining regular, manageable reviews, you’ll not only improve the code but also foster a stronger, more collaborative team culture. When done right, code reviews become more than just a task—they become an opportunity for growth and learning.&lt;/p&gt;

</description>
      <category>code</category>
      <category>codequality</category>
    </item>
    <item>
      <title>Fork, Pull, and Push: A Step-by-Step Guide to GitHub</title>
      <dc:creator>Jacob</dc:creator>
      <pubDate>Sat, 02 Nov 2024 23:18:01 +0000</pubDate>
      <link>https://dev.to/jacob_gawlik/fork-pull-and-push-a-step-by-step-guide-to-github-aap</link>
      <guid>https://dev.to/jacob_gawlik/fork-pull-and-push-a-step-by-step-guide-to-github-aap</guid>
      <description>&lt;p&gt;&lt;a href="https://caasi.dev/blog/fork-pull-and-push-a-step-by-step-guide-to-github/" rel="noopener noreferrer"&gt;Originally published here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub is the go-to platform for version control, collaboration, and open-source contributions. Whether you’re working on your own project or contributing to someone else’s, mastering the basics of forking, pulling, and pushing is essential. These core concepts allow developers to collaborate efficiently, manage project versions, and contribute to the open-source community.&lt;/p&gt;

&lt;p&gt;In this article, we’ll walk through the process of forking a repository, making changes locally, and pushing those changes back to GitHub, all while using the pull request (PR) workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Are Forking, Pulling, and Pushing?
&lt;/h2&gt;

&lt;p&gt;Before diving into the guide, it’s important to understand these three terms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Forking&lt;/strong&gt;: This is the process of creating a personal copy of someone else’s repository. Forking allows you to make changes to a project without affecting the original codebase.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pulling&lt;/strong&gt;: This involves retrieving updates from the original repository (or a remote branch) into your local codebase to ensure you're working with the latest version.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pushing&lt;/strong&gt;: Once you’ve made changes to your fork, pushing refers to sending those changes to your remote forked repository on GitHub.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together, these steps form the basic workflow for contributing to a GitHub project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Forking a Repository
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why Fork a Repository?
&lt;/h3&gt;

&lt;p&gt;Forking a repository is useful when you want to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Contribute to an open-source project.&lt;/li&gt;
&lt;li&gt;Experiment with the codebase before submitting your changes.&lt;/li&gt;
&lt;li&gt;Create your version of a project that you don’t own.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How to Fork a Repository:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Find the repository&lt;/strong&gt; you want to fork on GitHub.&lt;/li&gt;
&lt;li&gt;In the top-right corner, click the &lt;strong&gt;“Fork”&lt;/strong&gt; button. GitHub will create a copy of the original repository in your GitHub account.&lt;/li&gt;
&lt;li&gt;You now have a forked version of the project that you can modify without affecting the original repository.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Step 2: Cloning Your Fork Locally
&lt;/h2&gt;

&lt;p&gt;Now that you've forked the repository, you need to clone it to your local machine to make changes.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to your forked repository on GitHub.&lt;/li&gt;
&lt;li&gt;Click the &lt;strong&gt;“Code”&lt;/strong&gt; button and copy the HTTPS URL.&lt;/li&gt;
&lt;li&gt;Open your terminal or command prompt and run the following command:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &amp;lt;your-forked-repository-URL&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command will clone the repository to your local machine.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Change to the repository directory:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; &amp;lt;repository-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 3: Making Changes Locally
&lt;/h2&gt;

&lt;p&gt;Now that you have the project on your machine, you can start making changes.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create a new branch&lt;/strong&gt;: It’s best practice to make changes on a separate branch, especially when contributing to a shared project. To create and switch to a new branch, run:
&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 &lt;span class="nt"&gt;-b&lt;/span&gt; &amp;lt;new-branch-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;&amp;lt;new-branch-name&amp;gt;&lt;/code&gt; with a descriptive name for your changes.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Make your changes&lt;/strong&gt;: Edit files, add new features, or fix bugs in your local environment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check the status&lt;/strong&gt; of your changes by running:
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;/div&gt;



&lt;p&gt;This command shows which files have been modified. 4. &lt;strong&gt;Stage your changes&lt;/strong&gt; for commit by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &amp;lt;file-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or, to add all changed files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: Committing Your Changes
&lt;/h2&gt;

&lt;p&gt;After making changes and staging them, the next step is to commit those changes locally.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Run the following command to commit the changes:
&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;"Your detailed commit message"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace the placeholder text with a meaningful description of the changes you made.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Pushing Your Changes to GitHub
&lt;/h2&gt;

&lt;p&gt;Now that you’ve committed the changes locally, you need to push them to your forked repository on GitHub.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;To push your branch to GitHub, run:
&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 &amp;lt;new-branch-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command pushes your changes to your forked repository under the new branch you created. 2. After the push is complete, GitHub will display a link in your repository where you can open a &lt;strong&gt;Pull Request&lt;/strong&gt; (PR).&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Creating a Pull Request (PR)
&lt;/h2&gt;

&lt;p&gt;A pull request is the process of notifying the original repository’s maintainers that you’ve made changes and want them to review and potentially merge those changes into the main project.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to your forked repository on GitHub.&lt;/li&gt;
&lt;li&gt;You’ll see a message prompting you to create a pull request for the branch you just pushed. Click the &lt;strong&gt;“Compare &amp;amp; pull request”&lt;/strong&gt; button.&lt;/li&gt;
&lt;li&gt;In the pull request form:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Write a title and description&lt;/strong&gt; of your changes.&lt;/li&gt;
&lt;li&gt;Include any necessary context to help the maintainers understand what your PR addresses.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Submit the pull request by clicking &lt;strong&gt;“Create pull request.”&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Step 7: Updating Your Fork with New Changes
&lt;/h2&gt;

&lt;p&gt;Over time, the original repository may receive new commits. It’s important to keep your fork up to date with these changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Syncing Your Fork:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Add the original repository as a remote&lt;/strong&gt; in your local repository:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git remote add upstream &amp;lt;original-repository-URL&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Fetch the latest changes&lt;/strong&gt; from the original repository:
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Merge the changes&lt;/strong&gt; into your local fork:
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;main&lt;/code&gt; with the correct branch name if the project uses a different default branch (e.g., &lt;code&gt;master&lt;/code&gt;).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Push the updated changes&lt;/strong&gt; to your forked repository on GitHub:
&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 main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Forking, pulling, and pushing are fundamental GitHub concepts that allow developers to contribute to projects in an organised and efficient way. By following this guide, you’ll have the necessary skills to fork repositories, make changes locally, and submit pull requests to contribute to open-source projects or collaborate on private repositories.&lt;/p&gt;

&lt;p&gt;The more you practice this workflow, the more seamless it becomes, making you a more effective and confident contributor to any GitHub project.&lt;/p&gt;

</description>
      <category>github</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
