<?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: Sura</title>
    <description>The latest articles on DEV Community by Sura (@surak).</description>
    <link>https://dev.to/surak</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%2F2438669%2Ff95cf885-19d2-4c92-8abd-291df16144bf.jpg</url>
      <title>DEV Community: Sura</title>
      <link>https://dev.to/surak</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/surak"/>
    <language>en</language>
    <item>
      <title>From React to =&gt; Angular - a developer's guide to TypeScript modularity</title>
      <dc:creator>Sura</dc:creator>
      <pubDate>Sat, 21 Jun 2025 15:43:44 +0000</pubDate>
      <link>https://dev.to/surak/from-react-to-angular-a-developers-guide-to-typescript-modularity-3kje</link>
      <guid>https://dev.to/surak/from-react-to-angular-a-developers-guide-to-typescript-modularity-3kje</guid>
      <description>&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%2Fhedg9wltdugecou7vsxf.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%2Fhedg9wltdugecou7vsxf.png" alt="Image description" width="800" height="491"&gt;&lt;/a&gt;&lt;br&gt;
In web development one of the decisions you will face is choosing between frameworks like Angular and React. I always had used React for the past 5 years, until lately when I wasn't given a choice but dive in into Angular. As part of understanding Angular I focus on the commonality of typescript between the 2 frameworks.&lt;/p&gt;

&lt;p&gt;I'm focusing on modularity as it's the foundation, Think of modularity like organizing your fridge by fruit &amp;amp; vegetables instead of throwing all your fruits into one big drawer, you separate them into different sections: apples in one drawer, oranges in another basket or something etc.. In programming modularity mean breaking your applications into smaller pieces that handles specific responsibility, following in mind engineering principles like separation of concern - separating business logic from presentation. &lt;/p&gt;

&lt;p&gt;Angular's approach - Built in Modularity &lt;br&gt;
Angular already comes with structured approach right of the box. &lt;br&gt;
NgNodules - the foundation&lt;br&gt;
Angular uses something called NgModules to organize the application. Think of NgModule as containers that group related components, services. and other code together. &lt;br&gt;
However since Angular 17, there's another way of modularity which is a hybrid approach with something called Standalone components. I will explain more as we go along. &lt;/p&gt;

&lt;p&gt;Ng Module example&lt;br&gt;
`&lt;br&gt;
// app.module.ts&lt;br&gt;
import { NgModule } from '@angular/core';&lt;br&gt;
import { BrowserModule } from '@angular/platform-browser';&lt;br&gt;
import { FruitComponent } from './fruit/fruit.component';&lt;br&gt;
import { FruitService } from './fruit/fruit.service';&lt;/p&gt;

&lt;p&gt;@NgModule({&lt;br&gt;
  declarations: [FruitComponent],&lt;br&gt;
  imports: [BrowserModule],&lt;br&gt;
  providers: [FruitService],&lt;br&gt;
  bootstrap: [AppComponent]&lt;br&gt;
})&lt;br&gt;
export class AppModule { }&lt;br&gt;
`&lt;/p&gt;

&lt;p&gt;**React's Approach - Flexible modularity:&lt;br&gt;
**React doesn't enforce a specific module system to organize code, so you can organize code however you like. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
&lt;/code&gt;import React from 'react';&lt;br&gt;
import { FruitCard } from './FruitCard';&lt;br&gt;
import { useFruits } from './hooks/useFruits';&lt;/p&gt;

&lt;p&gt;export const FruitList: React.FC = () =&amp;gt; {&lt;br&gt;
  const { fruits, loading } = useFruits();&lt;/p&gt;

&lt;p&gt;if (loading) return &lt;/p&gt;Loading...;

&lt;p&gt;return (&lt;br&gt;
    &lt;/p&gt;
&lt;br&gt;
      {fruits.map(fruit =&amp;gt; (&lt;br&gt;
        &lt;br&gt;
      ))}&lt;br&gt;
    &lt;br&gt;
  );&lt;br&gt;
};&lt;code&gt;&lt;br&gt;
&lt;/code&gt;

&lt;p&gt;custom hooks for logic sharing&lt;br&gt;
React uses custom hooks to share logic between components. &lt;/p&gt;

&lt;p&gt;For transitioning from React to Angular&lt;br&gt;
Angular 17 introduced a more component-centric approach with standalone components that feels much more familiar to React developers.&lt;/p&gt;

&lt;p&gt;**Why it makes a difference?&lt;br&gt;
**No NgModules traditional way needed, components can manage their own dependencies &amp;amp; it's simpler model, and direct imports, you can import what you need. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key difference in modularity between Angular and React:&lt;/strong&gt;&lt;br&gt;
*&lt;em&gt;Angular&lt;br&gt;
*&lt;/em&gt;- Services are singleton by default within modules&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;clear boundaries make it easy to extract reusable modules&lt;/li&gt;
&lt;li&gt;Modules can be easily shared between applications&lt;/li&gt;
&lt;li&gt;Steeper learning curve due to more concepts (modules, decorators, dependency injection)&lt;/li&gt;
&lt;li&gt;Once learned, provides clear guidelines for any project&lt;/li&gt;
&lt;li&gt;Consistency across different Angular applications&lt;/li&gt;
&lt;li&gt;Use Angular when working on large, complex projects and you'd prefer clear guidelines and structure. &lt;/li&gt;
&lt;li&gt;If you choose the non traditional path in Angular, you can use Standalone Components which is  Similar to React's approach &amp;amp; flexible imports.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;React&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;components and hooks are shared across projects&lt;/li&gt;
&lt;li&gt;community eco system provides many reusable packages.&lt;/li&gt;
&lt;li&gt;Easier learning curve, start with components and gradually learn patterns&lt;/li&gt;
&lt;li&gt;More decisions to make about project structure &amp;amp; different React projects might look very different&lt;/li&gt;
&lt;li&gt;Use react when it's small project, you work independently.  You can still also use React in very big projects, when there's internal guidelines provided where everyone can agree on a structure. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;**Getting started tips:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Angular: start with Angular Cli - it sets up the module structure for you &amp;amp; learn about NgModules early they are the fundamental difference and strength. &lt;/li&gt;
&lt;li&gt;React: start with Create React or Vite for simple setup, focus on components first.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;br&gt;
Both angular and react handle typescript modularity differently, Angular provides a structured very opinionated approach, while React provides a flexible simple approach, making it easy to start something and grow with it. I'd recommend React as a start and then transition to Angular. However, since ANgular 17, you now have more choices than ever. Angular's standalone components offer a gentler learning curve, while traditional NgModules provide structure for complex applications. React continues to offer maximum flexibility.&lt;/p&gt;

&lt;p&gt;What matters at the end is that you choose something that excites you!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>angular</category>
      <category>react</category>
      <category>angular17</category>
    </item>
    <item>
      <title>Creating a react game on AWS</title>
      <dc:creator>Sura</dc:creator>
      <pubDate>Tue, 14 Jan 2025 22:09:24 +0000</pubDate>
      <link>https://dev.to/surak/creating-a-react-game-on-aws-2fo1</link>
      <guid>https://dev.to/surak/creating-a-react-game-on-aws-2fo1</guid>
      <description>&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%2Fl8ksap8iokkecys5vkvh.jpeg" 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%2Fl8ksap8iokkecys5vkvh.jpeg" alt="Image description" width="800" height="759"&gt;&lt;/a&gt;**Prerequisites&lt;br&gt;
**AWS Account&lt;br&gt;
Installed Node.js and npm&lt;br&gt;
&lt;code&gt;React Vite project created (npx create-vite@latest)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Setup the React + Vite Game&lt;br&gt;
Initialize React Vite Project&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npx create-vite@latest my-game --template react&lt;br&gt;
cd my-game&lt;br&gt;
npm install&lt;br&gt;
npm run dev&lt;/code&gt;&lt;br&gt;
Ensure your game works locally.&lt;/p&gt;

&lt;p&gt;Install Amplify CLI:&lt;br&gt;
Initialize Amplify&lt;br&gt;
&lt;code&gt;npm install -g @aws-amplify/cli&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Configure Amplify CLI:&lt;br&gt;
&lt;code&gt;amplify configure&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Use either:&lt;/p&gt;

&lt;p&gt;Frontend Secrets: For frontend access &lt;code&gt;(AMPLIFY_API_VAR)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;IAM Keys: For backend-specific operations (e.g., server-to-server communication).&lt;/p&gt;

&lt;p&gt;Tip: If your game only fetches API data, use frontend secrets &lt;code&gt;(AMPLIFY_API_VAR)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Configure CI/CD for Deployment&lt;br&gt;
Connect Git Repository:&lt;/p&gt;

&lt;p&gt;Link your GitHub/Bitbucket/GitLab repository to Amplify via the Amplify Console.&lt;/p&gt;

&lt;p&gt;Set up the build process in the Build Settings (Amplify auto-generates &lt;code&gt;amplify.yml&lt;/code&gt; for deployment).&lt;/p&gt;

&lt;p&gt;Checkout my current in progress development: &lt;a href="https://main.d28exdxgub7wqp.amplifyapp.com/" rel="noopener noreferrer"&gt;https://main.d28exdxgub7wqp.amplifyapp.com/&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftjuvk0vhl7t8t527tnyg.jpeg" 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%2Ftjuvk0vhl7t8t527tnyg.jpeg" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>aws</category>
      <category>webdev</category>
      <category>vite</category>
    </item>
    <item>
      <title>Git Tips and Tricks: 10 Years of Using Git</title>
      <dc:creator>Sura</dc:creator>
      <pubDate>Mon, 06 Jan 2025 15:22:06 +0000</pubDate>
      <link>https://dev.to/surak/git-best-practices-tips-and-tricks-5fjl</link>
      <guid>https://dev.to/surak/git-best-practices-tips-and-tricks-5fjl</guid>
      <description>&lt;p&gt;Happy new year!&lt;br&gt;
Git is an essential tool for version control in modern development workflows. &lt;/p&gt;

&lt;p&gt;While many developers are familiar with basic commands like &lt;code&gt;git add&lt;/code&gt; and &lt;code&gt;git commit&lt;/code&gt;, there are other commands that are not difficult to use, but it takes curiosity to try them and help manage complex codebases. &lt;br&gt;
This blog post dives into practical Git commands and tips to help you level up your Git game, also focuses on a node based app assuming you're using npm/yarn.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Adding files&lt;/strong&gt;&lt;br&gt;
Git add: Why git add -p is Better Than git add .&lt;/p&gt;

&lt;p&gt;When working with Git, adding changes to the staging area is a critical step before committing your work. While git add . is commonly used for convenience, git add -p offers more control and insight into your changes. Here's why git add -p is often the better choice.&lt;/p&gt;

&lt;p&gt;When to use git add -p&lt;/p&gt;

&lt;p&gt;You’ve made multiple changes, but only want to commit some of them.&lt;br&gt;
You want to separate unrelated changes into different commits.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git add -p
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When to Use git add .&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;can be useful when: You’ve made simple, isolated changes, and you’re confident all of them should be staged. &lt;/li&gt;
&lt;li&gt;You’re in a rush to stage everything quickly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Reverting to a Previous Commit: Targeted Rollbacks&lt;/strong&gt;&lt;br&gt;
To restore your working directory to the state of a specific commit, use in bash:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git checkout COMMIT_NUMBER .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace COMMIT_NUMBER with the SHA of the desired commit I.e. commit # e78897844.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git commit e78897844
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Resolving Main Branch Issues: Common Fixes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you're on the main branch and encounter issues, sometimes after merging code, you just need to remove and install your packages, try these steps:&lt;br&gt;
Clear &lt;code&gt;yarn&lt;/code&gt;/&lt;code&gt;npm&lt;/code&gt;’s cache:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Remove/delete with bash &lt;code&gt;node_modules&lt;/code&gt;, make sure you use the right version of &lt;code&gt;node&lt;/code&gt; use &lt;code&gt;nvm use&lt;/code&gt; if the project has a defined one and reinstall dependencies:&lt;br&gt;
bash&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rm -rf node_modules &amp;amp;&amp;amp; npm install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Interactive Rebase: Rewrite History Like a Pro&lt;/strong&gt;&lt;br&gt;
Interactive rebasing is a powerful way to edit, squash, or remove commits from your branch. Here's how you can use it i.e branch name is &lt;code&gt;main&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git rebase -i main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Git will open a text editor (usually Vim). You'll see a list of commits with options like &lt;code&gt;pick&lt;/code&gt;.&lt;br&gt;
To remove a commit, replace pick with &lt;code&gt;d&lt;/code&gt;.&lt;br&gt;
Press &lt;code&gt;ESC&lt;/code&gt; followed by &lt;code&gt;:wq&lt;/code&gt; to save and quit.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git push -f
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Combine All Commits into One: Clean Up History&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To squash multiple commits into one—or undo a commit—you can use soft and hard resets:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Soft reset moves back to a previous commit while keeping changes unstaged.&lt;/li&gt;
&lt;li&gt;Hard reset moves back and removes all changes permanently.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Example: Squashing the Last 5 Commits into One&lt;/em&gt;&lt;br&gt;
Reset the last 5 commits (replace 5 with your number):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git reset --soft HEAD~5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Stage your changes:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Commit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git commit -m "Your new commit message"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Push forcefully:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git push -f
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Working in progress files, moving them from one to another branch
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git stash save "Working on DIGGROW-2610 BPI modals"
git checkout feature/another-branch
git stash list  # Find your stash (e.g., stash@{0})
git stash apply stash@{0}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Doing Code Reviews&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Code reviews are a critical part of collaborative development, helping teams maintain code quality, share knowledge, and catch issues early. When conducting a review, you should first understand the feature requirements, then systematically examine all changed files.&lt;/p&gt;

&lt;p&gt;In GitHub's web interface, there are several ways to compare files between two commits or pull requests. I typically use this URL format:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://github.com/{owner}/{repo}/compare/{older-commit-hash}...{newer-commit-hash}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;an example from a a bootcamp I attended&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://github.com/ExamProCo/free-genai-bootcamp-2025/compare/c890881...70d92251dca35aab4a79003c5f93d5c13efc7f24?diff=split&amp;amp;w=
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you've forked a repository and want to sync with the original author's updates, you can create a pull request comparing the owner's repository and branch to your forked version. The URL structure looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://github.com/{original-owner}/{repo}/compare/{their-branch}...{your-username}:{repo}:{your-branch}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;a real example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://github.com/labeveryday/language-learning-assistant/compare/main...karnawis:language-learning-assistant:main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F3go19ipqux7xyz5ycnf3.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%2F3go19ipqux7xyz5ycnf3.png" alt=" " width="800" height="55"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I hope that helps! These are pretty much the commands I use daily—except for cherry-picking, which I’m not a big fan of. 🙂 But hey, everyone has their own workflow! Let me know if you have any questions or if there's anything you'd add to the list.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Balancing Visual Design and Optimization in Front-End Development</title>
      <dc:creator>Sura</dc:creator>
      <pubDate>Fri, 22 Nov 2024 17:25:39 +0000</pubDate>
      <link>https://dev.to/surak/balancing-visual-design-and-optimization-in-front-end-development-5069</link>
      <guid>https://dev.to/surak/balancing-visual-design-and-optimization-in-front-end-development-5069</guid>
      <description>&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%2Frg8lsuej3d7s85dfs155.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%2Frg8lsuej3d7s85dfs155.jpg" alt="The image features a Yin and Yang symbol created using binary code, with the black side represented by white 1s and the white side by black 0s. The binary numbers form the iconic swirling shapes of the Yin and Yang, giving it a modern, digital aesthetic. The design is clean and minimalist, with no additional shadow effects, emphasizing the balance between aesthetics and optimization in a high-tech, digital format." width="791" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In developing and designing softwares, development, there's an ongoing question: Should visuals or optimization take the lead in design? It's a question I've faced countless times throughout my decade of creating websites, applications, and games. Being both a developer and occasionally a designer has given me a unique perspective—insights into design have made me a better developer, and understanding technical constraints has made me a better designer. Striking the right balance between aesthetics and performance isn't just about compromise; it's about seeing constraints as opportunities. Meeting both visual and technical demands can elevate a digital experience from average to exceptional, provided we understand our audience’s expectations and the platform's limitation &lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Optimization vs. Visual Design: What’s the Priority?&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Why Optimization Matters&lt;br&gt;
Optimization is about functionality—making sure your website or application performs well under any circumstance. Fast-loading pages, smooth animations, intuitive navigation, and solid SEO practices contribute to an experience that feels effortless to users. Here’s why optimization needs to be a priority:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Page Speed Affects User Experience and SEO&lt;/strong&gt; A slow website can lead to user frustration and a high bounce rate. It also negatively impacts SEO, with search engines prioritizing fast-loading sites. Tools like lazy loading, optimizing images, and efficient coding can improve loading times.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mobile Responsiveness&lt;/strong&gt;
With mobile traffic surpassing desktop, mobile-first design has become the norm. If a design looks stunning on a desktop but falls apart on a smartphone, it’s a deal-breaker. Design should flexibly adapt to various screen sizes without sacrificing performance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accessibility and SEO&lt;/strong&gt;
Optimization isn’t just about speed—it's also about accessibility. Ensuring that your code follows best practices like using proper heading structures, adding alt text to images, and designing for keyboard navigation improves both SEO and usability.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Finding the Balance&lt;/strong&gt;&lt;br&gt;
The real challenge is balancing visual aesthetics with optimization. Here are a few tips to help you achieve that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prioritize Content&lt;/strong&gt;
Design around your content, making it the focus. A clean and intuitive layout helps users engage without distractions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design Mobile-First&lt;/strong&gt;
Start by designing for smaller screens and then scale up. This ensures your design performs well on all devices, prioritizing essential content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test and Iterate&lt;/strong&gt;
Constantly test across platforms, collect user feedback, and use analytics to make adjustments. Optimization and design need continuous refinement.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
Balancing visual design and optimization in software development isn't a matter of choosing one over the other—it’s about finding ways for them to enhance each other. By treating constraints as creative challenges, you can create software that is both visually engaging and technically robust. Understanding your audience, adhering to best practices, and embracing platform limitations are essential to crafting a digital experience that truly stands out. When aesthetics and optimization work together, the result is software that delivers on all fronts: performance, usability, and impact.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>frontend</category>
      <category>seo</category>
      <category>a11y</category>
    </item>
  </channel>
</rss>
