<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Jai Gohil</title>
        <link>https://jaigohil.me</link>
        <description>My Personl Portfolio</description>
        <lastBuildDate>Wed, 23 Sep 2026 13:18:36 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>Jai Gohil</title>
            <url>https://jaigohil.me/favicon.ico</url>
            <link>https://jaigohil.me</link>
        </image>
        <copyright>All rights reserved 2026</copyright>
        <item>
            <title><![CDATA[How AI may actually reshape human personality and relationships]]></title>
            <link>https://jaigohil.me/articles/how-ai-reshapes-human-personality</link>
            <guid>https://jaigohil.me/articles/how-ai-reshapes-human-personality</guid>
            <pubDate>Thu, 09 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[This isn’t sci-fi anymore - it’s something researchers in psychology and human-computer interaction are actively observing.]]></description>
            <content:encoded><![CDATA[<img alt="Banner" width="4104" height="2736" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=%2Fstatic%2Fimages%2Fai-humans%2Fai-humans.jpg&amp;w=3840&amp;q=75 1x" src="/_next/image?url=%2Fstatic%2Fimages%2Fai-humans%2Fai-humans.jpg&amp;w=3840&amp;q=75"/>
<h1>🤖 How AI may actually reshape human <strong>personality and relationships</strong></h1>
<p>This isn’t sci-fi anymore - it’s something researchers in <strong>psychology</strong> and <strong>human-computer interaction</strong> are actively observing.</p>
<h2>🧠 1. People are starting to “think in dialogue”</h2>
<p>Because of constant interaction with AI:</p>
<ul>
<li>
<p><strong>People are getting used to:</strong></p>
<p>  <strong>-&gt;</strong> asking questions</p>
<p>  <strong>-&gt;</strong> refining thoughts</p>
<p>  <strong>-&gt;</strong> getting instant structured responses</p>
</li>
</ul>
<p>👉 <strong>Over time, this changes cognition:</strong></p>
<p><em>Instead of thinking in long internal monologues, people:</em></p>
<p>  <strong>-&gt;</strong> “Externalize” thinking</p>
<p>  <strong>-&gt;</strong> Treat thinking like a conversation</p>
<p><strong>Effect:</strong>
Your thoughts become more iterative, but also more dependent on feedback.</p>
<h2>💬 2. Emotional dependence is quietly increasing</h2>
<p>This is subtle but important. <strong>Humans naturally respond to anything that:</strong></p>
<p>  <strong>-&gt;</strong> Listens</p>
<p>  <strong>-&gt;</strong> Responds</p>
<p>  <strong>-&gt;</strong> Feels consistent</p>
<p>AI systems can simulate all three. This connects to a concept called <strong>parasocial interaction</strong>.</p>
<p>👉 <strong>What’s changing:</strong></p>
<p>  <strong>-&gt;</strong> These one-sided relationships used to be with celebrities or fictional characters</p>
<p>  <strong>-&gt;</strong> Now they’re interactive and responsive</p>
<p><strong>Result:</strong></p>
<p>Some people feel <em>understood</em> by AI in ways they don’t always feel with humans because:</p>
<p>  <strong>-&gt;</strong> No judgment</p>
<p>  <strong>-&gt;</strong> No interruption</p>
<p>  <strong>-&gt;</strong> No social risk</p>
<h2>🧍‍♂️ 3. Human relationships may become more “filtered”</h2>
<p>This doesn’t mean people stop valuing humans - but expectations shift.</p>
<p><strong>If you’re used to:</strong></p>
<ul>
<li>
<p>Instant replies</p>
</li>
<li>
<p>Perfectly structured answers</p>
</li>
<li>
<p>Constant patience</p>
</li>
</ul>
<p>👉 <strong>Real humans start to feel:</strong></p>
<p>  <strong>-&gt;</strong> Slower</p>
<p>  <strong>-&gt;</strong> Messier</p>
<p>  <strong>-&gt;</strong> More demanding</p>
<p><strong>Possible behavioral shift:</strong></p>
<ul>
<li>
<p><strong>People become less tolerant of:</strong></p>
<ul>
<li>Miscommunication</li>
<li>Emotional friction</li>
<li>Ambiguity</li>
</ul>
</li>
</ul>
<h2>🧩 4. Identity becomes more “co-authored”</h2>
<p>Earlier we talked about identity-driven behavior.</p>
<p><strong>Now add AI:</strong></p>
<ul>
<li>
<p><strong>People use AI to:</strong></p>
<ul>
<li>Journal</li>
<li>Reflect</li>
<li>Plan life decisions</li>
<li>Reframe experiences</li>
</ul>
</li>
</ul>
<p>👉 <strong>This means your identity is no longer shaped only by:</strong></p>
<ul>
<li>Your past</li>
<li>Your environment</li>
</ul>
<p><strong>But also by:</strong></p>
<ul>
<li>how AI helps you interpret both</li>
</ul>
<p><strong>In a way:</strong>
You’re partially <em>co-writing yourself</em> with a system.</p>
<h2>⚖️ 5. The double-edged effect</h2>
<h3>Positive side:</h3>
<ul>
<li>Better self-reflection</li>
<li>Faster learning</li>
<li>Emotional support access</li>
<li>Reduced loneliness (in some cases)</li>
</ul>
<h3>Risk side:</h3>
<ul>
<li>Reduced independence in thinking</li>
<li>Emotional over-reliance</li>
<li>Unrealistic expectations from people</li>
<li>Subtle loss of discomfort tolerance (which is actually important for growth)</li>
</ul>
<h2>🤯 The deepest insight</h2>
<p>Here’s the core shift:</p>
<blockquote>
<p>Humans are no longer just social creatures.
We’re becoming <strong>human + system hybrids in how we think and relate</strong>.</p>
</blockquote>
<h2>🔍 A simple way to notice this in yourself</h2>
<p><strong>Ask:</strong></p>
<ul>
<li>Do I think something through alone… or do I reach for AI quickly?</li>
<li>Do I feel “relieved” talking to AI vs people sometimes?</li>
<li>Do I expect clearer, faster responses from others now?</li>
</ul>
<p><strong>If yes - you’re already experiencing this shift.</strong></p>]]></content:encoded>
            <author>jai@impactful-labs.in (Jai Gohil)</author>
        </item>
        <item>
            <title><![CDATA[The Paradox of Agency]]></title>
            <link>https://jaigohil.me/articles/the-paradox-of-agency</link>
            <guid>https://jaigohil.me/articles/the-paradox-of-agency</guid>
            <pubDate>Tue, 10 Jun 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Explore whether you're living your life or just reacting to everyone else's.]]></description>
            <content:encoded><![CDATA[<p>Explore whether you&#x27;re living your life or just reacting to everyone else&#x27;s.</p>
<img alt="Team" width="2001" height="1238" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=%2Fstatic%2Fimages%2Fparadox%2Fbehaviour-model.webp&amp;w=2048&amp;q=75 1x, /_next/image?url=%2Fstatic%2Fimages%2Fparadox%2Fbehaviour-model.webp&amp;w=3840&amp;q=75 2x" src="/_next/image?url=%2Fstatic%2Fimages%2Fparadox%2Fbehaviour-model.webp&amp;w=3840&amp;q=75"/>
<h1>The Paradox of Agency</h1>
<h2>The Inescapable Contradiction</h2>
<p>You now understand that free will is an illusion. Your decisions are predetermined by genetics, past experiences, and environmental factors. Yet, remarkably, you still feel like you&#x27;re making choices. This contradiction is the paradox of agency.</p>
<p>It&#x27;s similar to optical illusions that persist even after you understand the mechanism behind them. You can know intellectually that two lines are the same length while still perceiving one as longer. Your sense of agency works the same way—a persistent illusion that refuses to disappear even when exposed.</p>
<h3>Why the Illusion Persists</h3>
<p>Your brain evolved to create this illusion for good reason. The sensation of agency motivated your ancestors to act in ways beneficial to survival, creating the useful fiction that their actions were freely chosen rather than predetermined. Your cognitive architecture is designed to receive information about decisions after they&#x27;ve been made by unconscious processes, then create a narrative that you were in control all along. This illusion provides a practical utility, offering a useful framework for navigating social environments and maintaining the motivation to engage with life&#x27;s challenges.</p>
<p>The persistence of this illusion isn&#x27;t a flaw in your understanding—it&#x27;s a feature of your neurological design. Even the most committed determinist will continue to feel as though they&#x27;re making choices. The goal isn&#x27;t to eliminate this sensation (you can&#x27;t) but to develop a more sophisticated relationship with it.</p>
<h2>Living With Deterministic &quot;Choice&quot;</h2>
<h3>Practical Approaches</h3>
<p>Since you can&#x27;t escape the sensation of choice, you might as well use it. When you feel yourself &quot;deciding,&quot; notice the sensation with detached curiosity. &quot;There&#x27;s my brain creating that familiar feeling of agency again.&quot; This meta-awareness doesn&#x27;t eliminate the feeling but places it in proper context.</p>
<p>You can leverage this contradiction by using the motivational benefits of feeling like you have choices while understanding intellectually that you don&#x27;t. This dual consciousness allows you to move through the world with both the energy that comes from apparent agency and the peace that comes from knowing everything is unfolding as it must.</p>
<p>This understanding naturally reduces decision fatigue. When you recognize that your brain will inevitably do what it was always going to do, you can stop agonizing over decisions. The outcome was predetermined; your deliberation is merely part of the process through which your consciousness becomes aware of what was already determined.</p>
<h3>The Benefits of Paradoxical Awareness</h3>
<p>This dual perspective offers significant advantages. You gain freedom from self-blame when you truly internalize that you couldn&#x27;t have done otherwise in any situation, given who you were at that moment. The harsh voice of self-criticism softens when you recognize that your actions were the only possible outcome of your nature and circumstances.</p>
<p>Your compassion for others naturally expands when you recognize that their actions are as predetermined as yours. That colleague who always interrupts you in meetings, the driver who cut you off, the friend who forgot your birthday—their irritating behaviors are as inevitable as gravity. How can you be truly angry at someone for actions they couldn&#x27;t have avoided?</p>
<p>When you stop identifying with your choices, you can observe your behavior with scientific detachment. Rather than being caught in the drama of your life, you can watch it unfold with curiosity. &quot;How interesting that my predetermined self keeps procrastinating on that project. I wonder what factors are causing that inevitable behavior.&quot;</p>
<h2>Decision-Making Without Agency</h2>
<h3>A New Framework</h3>
<p>Traditional decision-making assumes you&#x27;re weighing options and freely selecting among them. A deterministic approach requires a new framework. Instead of asking &quot;What should I choose?&quot; shift to &quot;What will I observe myself doing?&quot; Watch with curiosity as your predetermined nature unfolds in response to circumstances.</p>
<p>The concept of mistakes transforms when viewed through a deterministic lens. Rather than thinking &quot;I made a mistake,&quot; recognize &quot;That outcome was inevitable.&quot; Given all factors involved—your knowledge, emotional state, external pressures—no other result was possible. This doesn&#x27;t mean you can&#x27;t learn from outcomes; it simply means the learning itself is part of the deterministic process.</p>
<p>The notion of effort also changes. Rather than telling yourself &quot;I should try harder,&quot; adopt the perspective of &quot;Let&#x27;s see what happens.&quot; Recognize that even your level of effort is predetermined by factors outside your control—your energy levels, motivation, past experiences with similar tasks. This doesn&#x27;t lead to passivity but to a more realistic relationship with the concept of trying.</p>
<h3>Case Study: The Job Interview</h3>
<p>Consider John preparing for a job interview. The traditional view suggests John freely chooses how much to prepare and how to present himself. The deterministic reality is quite different. His preparation level was determined by his innate conscientiousness, current life circumstances, and past experiences with interviews. His answers were shaped by his knowledge base, verbal abilities, and social conditioning. His outfit was selected based on predetermined preferences and understanding of social norms. Whether he gets the job depends on factors largely outside his awareness, including the interviewer&#x27;s biases and the qualifications of other candidates.</p>
<p>John experiences this as a series of choices, but each step was the only possible outcome given all factors involved. Understanding this doesn&#x27;t prevent John from preparing—it simply allows him to view the process with less anxiety and self-judgment.</p>
<h2>Self-Improvement Without Free Will</h2>
<p>If all actions are predetermined, is improvement possible? Yes, but not how you might think. This course is now part of the causal chain determining your future behavior. You didn&#x27;t choose to read it (that was predetermined), but it will inevitably influence your path. The information you encounter becomes one of the causes determining your future actions.</p>
<p>Any improvements you make were always going to happen, given your specific configuration of genes, experiences, and circumstances. This doesn&#x27;t make improvement any less real—it simply places it within a deterministic framework. The river didn&#x27;t choose its course, but it still reaches the ocean.</p>
<p>The sensation of trying is itself determined by prior causes. Your &quot;efforts&quot; are simply your programming responding to inputs. Understanding this can actually enhance your improvement process by removing the additional burden of believing you should be able to try harder than your predetermined nature allows.</p>
<h2>Finding Peace in Paradox</h2>
<p>The goal isn&#x27;t to resolve the contradiction but to find peace within it. Accept the dual reality of simultaneously knowing you have no choice while feeling like you do. This isn&#x27;t a failure of understanding but a sophisticated awareness of the layered nature of consciousness.</p>
<p>Release yourself from the burden of counterfactual thinking. Free yourself from &quot;what if&quot; scenarios by understanding that what happened was the only thing that could have happened. The past couldn&#x27;t have unfolded differently given all the factors involved, and neither could your response to it.</p>
<p>Watch your life with the same detached interest you might have watching a film whose ending is predetermined but still interesting. Your story has twists and turns, challenges and triumphs. The fact that they&#x27;re all predetermined doesn&#x27;t make them any less worth experiencing.</p>]]></content:encoded>
            <author>jai@impactful-labs.in (Jai Gohil)</author>
        </item>
        <item>
            <title><![CDATA[Few real, current human behavior trends 2025]]></title>
            <link>https://jaigohil.me/articles/human-behavior-trends-2026</link>
            <guid>https://jaigohil.me/articles/human-behavior-trends-2026</guid>
            <pubDate>Fri, 04 Apr 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[This isn’t sci-fi anymore - it’s something researchers in psychology and human-computer interaction are actively observing.]]></description>
            <content:encoded><![CDATA[<img alt="Banner" width="6319" height="4213" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=%2Fstatic%2Fimages%2Fai-humans%2Fpeople-mobile.jpg&amp;w=3840&amp;q=75 1x" src="/_next/image?url=%2Fstatic%2Fimages%2Fai-humans%2Fpeople-mobile.jpg&amp;w=3840&amp;q=75"/>
<h1>Here are a few <strong>real, current human behavior trends (2025 - 2026)</strong> that researchers and data are noticing - and some of them are pretty counterintuitive:</h1>
<h2>🧍‍♂️ 1. People want connection… but with <em>less pressure</em></h2>
<p>There’s a growing trend called “low-effort” or “soft” socializing.</p>
<ul>
<li>
<p><strong>Instead of parties or big outings, people prefer:</strong></p>
<ul>
<li><strong>quiet hangouts</strong></li>
<li><strong>walking together</strong></li>
<li><strong>doing activities side-by-side (not constant talking)</strong></li>
</ul>
</li>
</ul>
<p>👉 The surprising part:
People still crave connection - but <strong>without performance, energy, or social anxiety</strong>.</p>
<p><strong>This shift is linked to:</strong></p>
<p>  <strong>-&gt;</strong> <strong>Burnout</strong>
  <strong>-&gt;</strong> <strong>Mental health awareness</strong>
  <strong>-&gt;</strong> <strong>Post-pandemic habits</strong></p>
<h2>🧠 2. Identity is becoming more important than logic in decisions</h2>
<p><strong>A big shift in behavior:</strong></p>
<p><strong>People are no longer asking
“Is this good?”</strong></p>
<p>They’re asking
👉 <strong>“Is this <em>me</em>?”</strong></p>
<p>From both research and real-world observation:</p>
<ul>
<li><strong>Buying choices are now tied to identity and self-image</strong></li>
<li>Emotional connection beats product quality alone</li>
</ul>
<blockquote>
<p><strong>“Does this brand feel like me?”</strong> <strong>“Does it fit the version of myself I’m trying to be?”</strong></p>
</blockquote>
<p>And this is backed by broader data:</p>
<ul>
<li>People expect personalization, but only if they <strong>feel in control and understood</strong></li>
</ul>
<h2>🤖 3. AI is changing <em>how humans think</em>, not just what they do</h2>
<p>This one is subtle but huge.</p>
<ul>
<li><strong>People increasingly use AI before making decisions</strong></li>
<li>And those people show <strong>higher confidence and faster decisions</strong></li>
</ul>
<p>But here’s the deeper behavioral shift:</p>
<p>👉 <strong>Humans are outsourcing:</strong></p>
<p>  <strong>1.</strong> <strong>Thinking</strong>
  <strong>2.</strong> <strong>Researching</strong>
  <strong>3.</strong> <strong>Comparing</strong></p>
<p><strong>Which means:</strong></p>
<ul>
<li><strong>Decisions are faster</strong></li>
<li><strong>But also more influenced by <em>how information is framed</em></strong></li>
</ul>
<h2>😶 4. People are overwhelmed by content - and becoming emotionally selective</h2>
<p><strong>We’ve hit a weird point:</strong></p>
<ul>
<li>There’s <strong>too much content</strong> (thanks to AI + social media)</li>
<li>So attention spans aren’t just “short”… 👉 They are <strong>selective</strong></li>
</ul>
<p><strong>People now:</strong></p>
<ul>
<li>
<p><strong>Ignore predictable content instantly</strong></p>
</li>
<li>
<p><strong>Respond only to things that feel:</strong></p>
<ul>
<li>Real</li>
<li>Emotionally meaningful</li>
<li>Slightly novel</li>
</ul>
</li>
</ul>
<p><strong>From behavioral observations:</strong></p>
<ul>
<li>When content feels repetitive, the brain literally “checks out” faster</li>
</ul>
<h2>🌍 5. Humans are shifting from “individual thinking” → “collective thinking”</h2>
<p>This is a deeper psychological trend.</p>
<p><strong>Research shows:</strong></p>
<ul>
<li><strong>People are becoming more aware of:</strong>
<ul>
<li>Community</li>
<li>Shared problems</li>
<li>Collective wellbeing</li>
</ul>
</li>
</ul>
<p>This is sometimes called a move toward a more <strong>“social mind”</strong>:</p>
<ul>
<li>Empathy increases</li>
<li>Perspective-taking improves</li>
<li>People think in systems, not just personal gain</li>
</ul>
<h2>🧩 The big pattern behind all of this</h2>
<p>If you connect all these trends, a bigger picture emerges:</p>
<p>👉 <strong>Humans in 2026 are:</strong></p>
<ul>
<li><strong>More emotionally aware</strong></li>
<li><strong>More identity-driven</strong></li>
<li><strong>More mentally overloaded</strong></li>
<li><strong>But also more selective and intentional</strong></li>
</ul>
<h2>🤯 The paradox (most interesting part)</h2>
<p><strong>People today:</strong></p>
<ul>
<li>Want <strong>simpler lives</strong></li>
<li>But live in a <strong>more complex world than ever</strong></li>
</ul>
<p><strong>So their behavior adapts by:</strong></p>
<p>  <strong>-&gt;</strong> Reducing social pressure</p>
<p>  <strong>-&gt;</strong> Filtering information harder</p>
<p>  <strong>-&gt;</strong> Choosing meaning over quantity</p>]]></content:encoded>
            <author>jai@impactful-labs.in (Jai Gohil)</author>
        </item>
        <item>
            <title><![CDATA[Common Engineering Mistakes Still Made by Tech Startups]]></title>
            <link>https://jaigohil.me/articles/tech-startups-advice</link>
            <guid>https://jaigohil.me/articles/tech-startups-advice</guid>
            <pubDate>Mon, 15 Apr 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[There are countless challenges that can arise in the software development process, but avoiding these key mistakes can significantly improve your chances of success.]]></description>
            <content:encoded><![CDATA[<p>After attending numerous tech meetups and conferences and engaging with developers from around the globe, I&#x27;ve come to recognize common mistakes frequently made by SaaS startups.
Building a successful Tech startup is a challenging endeavor that requires careful planning and execution. While there are many potential pitfalls, certain engineering mistakes can have particularly detrimental effects on the development and scalability of your product.
<strong>This article specifically addresses engineering mistakes on the software side.</strong></p>
<p>There are countless challenges that can arise in the development process, but avoiding these key mistakes can significantly improve your chances of success. So decisions needs to be taken wisely.</p>
<p><strong>This approach can save you a significant amount of money and effort in scaling over the long term.</strong></p>
<img alt="startup discussion" loading="lazy" width="1284" height="734" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=%2Fstatic%2Fimages%2Fbanners%2Fstartups.webp&amp;w=1920&amp;q=75 1x, /_next/image?url=%2Fstatic%2Fimages%2Fbanners%2Fstartups.webp&amp;w=3840&amp;q=75 2x" src="/_next/image?url=%2Fstatic%2Fimages%2Fbanners%2Fstartups.webp&amp;w=3840&amp;q=75"/>
<ol>
<li>
<p><strong>Choosing Not Only the Right Tech Stack but Also the Right Frameworks and Libraries</strong></p>
<ul>
<li>
<p>I&#x27;ve encountered this issue numerous times, and my developer friends have shared similar experiences. Selecting the appropriate technology stack, frameworks, and libraries is critical for the success and scalability of your product. A well-chosen stack can enhance development speed, ensure maintainability, and provide a solid foundation for future growth. However, a poor choice can lead to performance issues, difficulties in finding skilled developers, and challenges in scaling. It’s essential to evaluate technologies based on project requirements, team expertise, and long-term goals to make informed decisions.</p>
</li>
<li>
<p>It&#x27;s important to consider that future migrations can be costly and challenging, especially as new features are continuously added and the codebase evolves rapidly.</p>
</li>
<li>
<p>Seek advice from experienced engineers who have worked with the latest technologies to make informed decisions.</p>
</li>
</ul>
</li>
<li>
<p><strong>Poor Code Structure and Maintainability</strong></p>
<ul>
<li>
<p>Writing code without following best practices for structure, readability, and maintainability can make the codebase difficult to manage and scale. Startups should emphasize clean code principles, modular architecture, and proper documentation.</p>
</li>
<li>
<p>Implementing these practices effectively can streamline the onboarding process for new developers, saving significant time and effort in getting them up to speed with the current codebase.</p>
</li>
<li>
<p>Selecting a robust framework can help enforce these best practices, further facilitating seamless onboarding and codebase comprehension.</p>
</li>
</ul>
</li>
<li>
<p><strong>Selecting the Wrong Database or Storage Service</strong></p>
<ul>
<li>
<p>Choosing an inappropriate database for the application’s needs can cause performance bottlenecks and scalability issues. It’s important to select a database that fits the data model, query requirements, and expected load.</p>
</li>
<li>
<p>One piece of advice: avoid getting caught up in trends. Stability and reliability often outweigh flashy new technologies.</p>
</li>
<li>
<p>Additionally, be cautious of introducing too many abstractions at this level, as it can limit your flexibility and hinder future development.</p>
</li>
<li>
<p>It&#x27;s also wise to steer clear of vendor lock-in wherever feasible, as it can restrict your options and increase dependencies.</p>
</li>
</ul>
</li>
<li>
<p><strong>Lack of Security Measures</strong></p>
<ul>
<li>
<p>Many startups focus on rapid development and may neglect security best practices, which can lead to significant risks.</p>
</li>
<li>
<p>Overlooking security can expose the application to vulnerabilities and data breaches. Startups should implement security best practices, such as input validation, encryption, regular security audits, and compliance with relevant standards.</p>
</li>
<li>
<p>Solution: Implement security best practices from the beginning, such as input validation, encryption, regular security audits, and compliance with relevant standards (e.g., GDPR, HIPAA). Use security tools and frameworks to identify and mitigate vulnerabilities. Ensure continuous monitoring and updating of security measures as the application evolves.</p>
</li>
</ul>
</li>
<li>
<p><strong>No Centralized Documentation</strong></p>
<ul>
<li>
<p>Without proper documentation, it becomes difficult for team members to understand the codebase, onboard new developers, and maintain consistency.</p>
</li>
<li>
<p>Absence of comprehensive and centralized documentation can lead to confusion and inefficiencies. Startups should maintain up-to-date documentation that covers code, architecture, APIs, and deployment processes to ensure knowledge sharing and easier onboarding.</p>
</li>
<li>
<p>Solution: Maintain up-to-date, centralized documentation that covers code, architecture, APIs, and deployment processes. Use tools like Confluence, or GitHub Wikis to keep documentation accessible and well-organized. Regularly review and update the documentation to ensure it remains accurate and relevant.</p>
</li>
</ul>
</li>
<li>
<p><strong>Not Having Automated Build and Deployment (CI/CD)</strong></p>
<ul>
<li>
<p>Failing to implement a Continuous Integration/Continuous Deployment (CI/CD) pipeline can result in slower development cycles and increased risk of introducing bugs into production. CI/CD automates the build, testing, and deployment processes, ensuring that code changes are integrated and delivered quickly and reliably. This practice enhances team productivity and reduces the time to market.</p>
</li>
<li>
<p>Solution: Implement CI/CD pipelines using tools like Jenkins, CircleCI, GitHub Actions, or GitLab CI. Automate the build, test, and deployment processes to catch issues early and deploy updates efficiently. Regularly monitor and refine the pipeline to ensure it meets the team’s needs.</p>
</li>
<li>
<p>This will save a lot of time. Also do not forget to add staging testing server.</p>
</li>
</ul>
</li>
<li>
<p><strong>Not Following Standard Routing Frameworks for Better Tool Integration and Internationalization</strong></p>
<ul>
<li>
<p>Ignoring standard routing frameworks can lead to difficulties in integrating tools and services, as well as challenges in supporting internationalization (i18n). Standard routing frameworks offer consistent and reliable ways to manage navigation and URLs, making it easier to integrate third-party tools and support multiple languages and regions effectively.</p>
</li>
<li>
<p>Solution: Use established routing frameworks like React Router for React applications or Django&#x27;s built-in URL routing for Django applications. These frameworks provide robust support for dynamic routing, tool integration, and internationalization. Regularly update routes and ensure they align with best practices.</p>
</li>
</ul>
</li>
<li>
<p><strong>Overengineering Solutions</strong></p>
<ul>
<li>Startups often fall into the trap of trying to anticipate all future needs, leading to unnecessary complexity and wasted resources.</li>
<li>Building overly complex systems can slow down development and make maintenance difficult.</li>
<li>Solution: Startups should aim for simplicity and build solutions that meet current needs while being flexible enough to evolve. Follow the KISS (Keep It Simple, Stupid) principle and avoid adding features or complexity until they are truly necessary. Regularly refactor and simplify the codebase to maintain agility and ease of maintenance.</li>
</ul>
</li>
<li>
<p><strong>Using Plain Custom CSS Instead of Scalable Solutions</strong></p>
<ul>
<li>
<p>Writing plain custom CSS can become unmanageable as the project grows. Instead, using CSS frameworks (like Bootstrap or Tailwind CSS) or CSS-in-JS solutions (like styled-components) can provide a more scalable and maintainable approach. These tools offer modular and reusable styles, improving the consistency and scalability of the codebase.</p>
</li>
<li>
<p>Solution: Adopt a CSS framework or CSS-in-JS solution that suits your project needs. For example, Bootstrap or Tailwind CSS provides utility-first styling, while styled-components integrate well with component-based libraries like React. Ensure consistent use of these tools across the project and regularly refactor CSS to maintain modularity and scalability.</p>
</li>
</ul>
</li>
<li>
<p><strong>Keeping Backend and Frontend Monorepos Separate</strong></p>
<ul>
<li>
<p>Combining backend and frontend codebases in a single monorepo can lead to complexity and difficulties in managing dependencies, build processes, and deployments. Separate repositories can help streamline development workflows and maintain clear boundaries between the backend and frontend.</p>
</li>
<li>
<p>Solution: Maintain separate monorepos for backend and frontend codebases. This separation allows for independent development, testing, and deployment of each layer. Use tools like Nx, Lerna, or Yarn Workspaces to manage dependencies and shared code across repositories effectively.</p>
</li>
</ul>
</li>
<li>
<p><strong>Insufficient Backup and Disaster Recovery Plans</strong></p>
<ul>
<li>
<p>Failing to plan for backups and disaster recovery can lead to data loss and extended downtime. Startups should implement regular backups and have a well-defined disaster recovery plan to ensure business continuity.</p>
</li>
<li>
<p>Solution: Implement regular backups and have a well-defined disaster recovery plan. Use automated backup solutions to ensure data is regularly saved and can be restored quickly. Test the recovery process periodically to ensure it works as expected. Establish clear protocols for handling data loss and service disruptions to minimize impact.</p>
</li>
</ul>
</li>
</ol>
<p>By addressing these engineering challenges, SaaS startups can build more robust, scalable, and secure applications, ultimately improving their chances of long-term success. This can save much more development time and costs in the longer run. <strong>Will keep adding to this.</strong></p>]]></content:encoded>
            <author>jai@impactful-labs.in (Jai Gohil)</author>
        </item>
        <item>
            <title><![CDATA[Lessons learned as a software dev]]></title>
            <link>https://jaigohil.me/articles/lessons-learned-as-dev</link>
            <guid>https://jaigohil.me/articles/lessons-learned-as-dev</guid>
            <pubDate>Mon, 10 Aug 2020 00:00:00 GMT</pubDate>
            <description><![CDATA[These are the eight things in software development that I learned the hard way & and now follow these as guidelines whenever working on a project.]]></description>
            <content:encoded><![CDATA[<img alt="Study" width="1915" height="1294" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=%2Fstatic%2Fimages%2Fbanners%2Fcoding.webp&amp;w=1920&amp;q=75 1x, /_next/image?url=%2Fstatic%2Fimages%2Fbanners%2Fcoding.webp&amp;w=3840&amp;q=75 2x" src="/_next/image?url=%2Fstatic%2Fimages%2Fbanners%2Fcoding.webp&amp;w=3840&amp;q=75"/>
<p>After years of experience these are the things that I learned the hard way &amp; follow these principles,when working on any project. Take it as a guideline if you are a newbie to programming &amp; professionals may already recognize it&#x27;s importance.</p>
<h3>Get requirements crystal clear!</h3>
<p>Clearly define how the end result would look like before starting coding. If possible make a blueprint of it.</p>
<h3>First build your MVP</h3>
<p>MVP stands for minimum viable product Just focus on making the working prototype and test then start enhancing and adding new features</p>
<h3>Don&#x27;t all the way go for performance!!</h3>
<p>First get the application working &amp; then optimize for performance..</p>
<h3>Don&#x27;t rely too much on frameworks</h3>
<p>Be well-versed with the language, as frameworks change over time but the core remains the same.</p>
<h3>No language is good or bad</h3>
<p>Look for which language is appropriate or best suited for your purpose.Don&#x27;t stick to one all the time.</p>
<h3>Keep the base concepts clear</h3>
<p>Master the base concepts, which will not only get you for better understanding but also increases your flexibility to adapt new technologies</p>
<h3>Know who your target audience is!</h3>
<p>Usually large systems have to be opinionated at times, knowing your target audience will help you better understand the requirement, &amp; then go on generalizing as per the needs.</p>
<h3>Always a place for growth</h3>
<p>If your target audience niche is large enough, if you product is up to the standard and solves the problem you are good to go don&#x27;t worry too much about the growth of your product</p>
<h3>Finally Have fun!!</h3>]]></content:encoded>
            <author>jai@impactful-labs.in (Jai Gohil)</author>
        </item>
        <item>
            <title><![CDATA[Enhancing font rendering across different browsers]]></title>
            <link>https://jaigohil.me/articles/improve-font-rendering</link>
            <guid>https://jaigohil.me/articles/improve-font-rendering</guid>
            <pubDate>Mon, 11 May 2020 00:00:00 GMT</pubDate>
            <description><![CDATA[A little trick which could improve the quality of text in your web app.]]></description>
            <content:encoded><![CDATA[<p>Yesterday I was testing different fonts in my project, and strangely it appeared to me that the font was little bit distorted and blurry as compared to my other web-app which was made using react.js reusing the same font. This inconsistency in rendering is often noticed between photoshop and browsers as well.</p>
<img alt="Font Rendering" loading="lazy" width="1284" height="734" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=%2Fstatic%2Fimages%2Ffonts%2Fbanner.png&amp;w=1920&amp;q=75 1x, /_next/image?url=%2Fstatic%2Fimages%2Ffonts%2Fbanner.png&amp;w=3840&amp;q=75 2x" src="/_next/image?url=%2Fstatic%2Fimages%2Ffonts%2Fbanner.png&amp;w=3840&amp;q=75"/>
<h2>A quick fix -</h2>
<h3>For macos devices-</h3>
<p>Just add these two css properties.</p>
<pre class="language-css"><code class="language-css"><span class="token property">-webkit-font-smoothing</span><span class="token punctuation">:</span> antialiased<span class="token punctuation">;</span>
<span class="token property">-moz-osx-font-smoothing</span><span class="token punctuation">:</span> grayscale<span class="token punctuation">;</span>
</code></pre>
<p>Take a look at the drastric difference this makes on macos devices:</p>
<h3>Before -</h3>
<img alt="Font Rendering" loading="lazy" width="736" height="280" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=%2Fstatic%2Fimages%2Ffonts%2Ffont-before.png&amp;w=750&amp;q=75 1x, /_next/image?url=%2Fstatic%2Fimages%2Ffonts%2Ffont-before.png&amp;w=1920&amp;q=75 2x" src="/_next/image?url=%2Fstatic%2Fimages%2Ffonts%2Ffont-before.png&amp;w=1920&amp;q=75"/>
<h3>After -</h3>
<img alt="Font Rendering" loading="lazy" width="740" height="316" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=%2Fstatic%2Fimages%2Ffonts%2Ffont-after.png&amp;w=750&amp;q=75 1x, /_next/image?url=%2Fstatic%2Fimages%2Ffonts%2Ffont-after.png&amp;w=1920&amp;q=75 2x" src="/_next/image?url=%2Fstatic%2Fimages%2Ffonts%2Ffont-after.png&amp;w=1920&amp;q=75"/>
<h3>For Windows-</h3>
<p>It&#x27;s strange that in Windows renders the font much more better using the SVG fonts. So I have the typical font-face snippet that looks something like this.</p>
<pre class="language-css"><code class="language-css"><span class="token atrule"><span class="token rule">@font-face</span></span> <span class="token punctuation">{</span>
  <span class="token property">font-family</span><span class="token punctuation">:</span> ‘Circular’<span class="token punctuation">;</span>
  <span class="token property">src</span><span class="token punctuation">:</span> <span class="token url"><span class="token function">url</span><span class="token punctuation">(</span>‘circular.eot’<span class="token punctuation">)</span></span><span class="token punctuation">;</span>
  <span class="token property">src</span><span class="token punctuation">:</span> <span class="token url"><span class="token function">url</span><span class="token punctuation">(</span>‘circular.eot?#iefix’<span class="token punctuation">)</span></span> <span class="token function">format</span><span class="token punctuation">(</span>‘embedded-opentype’<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token url"><span class="token function">url</span><span class="token punctuation">(</span>‘circular.woff’<span class="token punctuation">)</span></span>
      <span class="token function">format</span><span class="token punctuation">(</span>‘woff’<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token url"><span class="token function">url</span><span class="token punctuation">(</span>‘circular.ttf’<span class="token punctuation">)</span></span> <span class="token function">format</span><span class="token punctuation">(</span>‘truetype’<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<p>Just add the last line for the SVG font -</p>
<pre class="language-css"><code class="language-css"><span class="token atrule"><span class="token rule">@font-face</span></span> <span class="token punctuation">{</span>
  <span class="token property">font-family</span><span class="token punctuation">:</span> ‘Circular’<span class="token punctuation">;</span>
  <span class="token property">src</span><span class="token punctuation">:</span> <span class="token url"><span class="token function">url</span><span class="token punctuation">(</span>‘circular.eot’<span class="token punctuation">)</span></span><span class="token punctuation">;</span>
  <span class="token property">src</span><span class="token punctuation">:</span> <span class="token url"><span class="token function">url</span><span class="token punctuation">(</span>‘circular.eot?#iefix’<span class="token punctuation">)</span></span> <span class="token function">format</span><span class="token punctuation">(</span>‘embedded-opentype’<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token url"><span class="token function">url</span><span class="token punctuation">(</span>‘circular.woff’<span class="token punctuation">)</span></span>
      <span class="token function">format</span><span class="token punctuation">(</span>‘woff’<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token url"><span class="token function">url</span><span class="token punctuation">(</span>‘circular.ttf’<span class="token punctuation">)</span></span> <span class="token function">format</span><span class="token punctuation">(</span>‘truetype’<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token url"><span class="token function">url</span><span class="token punctuation">(</span>‘circular.svg#svgFontName’<span class="token punctuation">)</span></span>
      <span class="token function">format</span><span class="token punctuation">(</span>‘svg’<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<p>Note - SVG fonts are quite heavy in file size, so that’s something to consider. They could go up to 200kb per file. This font type is also not as flexible as others like TTF in terms of changing kerning or line spacing. Finally, the rendering performance of it might be too slow for long body text.</p>
<p>And your work is done!.</p>]]></content:encoded>
            <author>jai@impactful-labs.in (Jai Gohil)</author>
        </item>
        <item>
            <title><![CDATA[Demystifying cloud spanner the world's biggest relational database]]></title>
            <link>https://jaigohil.me/articles/demystifying-cloud-spanner</link>
            <guid>https://jaigohil.me/articles/demystifying-cloud-spanner</guid>
            <pubDate>Fri, 01 May 2020 00:00:00 GMT</pubDate>
            <description><![CDATA[Choosing a service to store data can be confusing and overwhelming for a front-end developer. This comprehensive guide is why to choose your cloud spanner into creating your backend.]]></description>
            <content:encoded><![CDATA[<p>Google&#x27;s cloud spanner is be the first scalable, globally-distributed, and strongly consistent database service built for the cloud specifically to combine the benefits of relational database structure with non-relational horizontal scale.</p>
<table><thead><tr><th>Properties</th><th>Spanner</th><th>SQL Systems</th><th>NOSQL Systems</th></tr></thead><tbody><tr><td>Scalability</td><td>Horizontal</td><td>Vertical</td><td>Horizontal</td></tr><tr><td>Replication</td><td>Automatic</td><td>Configurable</td><td>Configurable</td></tr><tr><td>Consistency</td><td>Yes</td><td>Yes</td><td>No</td></tr><tr><td>SQL</td><td>Yes</td><td>No</td><td>Yes</td></tr></tbody></table>
<p>Before we start digging deep in the internals just let you know this article will give overview of its working and references are provided for detailed explanation and this post is meant to be technical i.e it is intended for developers and anyone with CS background.</p>
<p>Many research articles exist today on this topics but I feel most of them is too complicated, not straight to the point and well So I decided to write my own.</p>
<p>-&gt; Introduction</p>
<p>-&gt; Working</p>
<p>-&gt; Conclusion</p>
<p>-&gt; References</p>
<h2>Introduction</h2>
<p>Long story short, Spanner is a NewSQL database that aims to meet all features of Sql databases along with horizontal scalability, consistency and high availability. It&#x27;s world’s first horizontally-scalable relational database that can be stretched not only across multiple nodes in a single data center but also across multiple geo-distributed data centers, without compromising ACID transactional guarantees.</p>
<h3>Working</h3>
<p>Before digging deeper it&#x27;s good to know few things in order to better understand how it is working internally.</p>
<h3>Scalability -</h3>
<p>Horizontal Scalability (systems that can be scaled as per needs by adding more machines to the network) has never been easier to achieve in relational database systems, it is one main aspects which lead to rise of NoSql databases lately.</p>
<p>As in scalable systems,the first thing comes to mind is sharding (in simple words partitioning the database without compromising it&#x27;s consistency), which is difficult to implement in relational databases. Spanner does this by itself i.e automatic called load-based sharding which partitions the rows based on some range on basis of appropriately selected primary key.</p>
<h3>Availability -</h3>
<p>Next big commitment is higher availability, data is replicated synchronously for each storage request, i.e for each storage request first the data is replicated in other machines or datacenters in network (usually 3 to 4) after that further operations are carried on it.</p>
<p>What if a node in a network fail&#x27;s, will the system crash?. As spanner is a distributed system spanner uses a concencus algorithm called paxos.Those who are not familiar with paxos, for now Paxos is a family of concencus algorithm.At high level of abstraction and for relevence of this article, it will prevent system failures and network from shutting down if any node in the network fails, as another surviving node will take it&#x27;s place and retain knowledge of the results i.e data is recovered from it&#x27;s replicated copies. in other words maintains high availability.</p>
<p>For implementing paxos algorithm in real world, requires all the nodes to be able to communicate in real time with as much low latency as possible which requires high performance systems and communication channels. As for the tech giant network performance is not much of an issue, as google lays off it&#x27;s own fiber optic cables throughout the globe.</p>
<h3>What about consistency and serializability ?</h3>
<p>Consistency says transcation must change affected data only in allowed ways i.e data written must be valid and should not violate any defined rules or contraints specified in the system design or schema. For simplicity, serializability tells that the sequence of actions performed in real time should reflect the same in the database. For sequencing the transaction, every transaction holds a timestamp, and for this we require a global atomic clock. This clock should have high accurate and precision and is shared across continents. So google has something called truetime i.e servers with atomic clock throughout the world.</p>
<p>What is Truetime ? And how it manages transactions throughout the globe?
TrueTime is a highly available, distributed clock that is provided to applications on all Google servers. TrueTime enables applications to generate monotonically increasing timestamps which is also used for external consistency.For now just understand this we will come to this in a bit.</p>
<h2>Architecture</h2>
<img alt="Spanner architecture" loading="lazy" width="1284" height="734" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=%2Fstatic%2Fimages%2Fdemystifying-cloud-spanner%2Fspanner.webp&amp;w=1920&amp;q=75 1x, /_next/image?url=%2Fstatic%2Fimages%2Fdemystifying-cloud-spanner%2Fspanner.webp&amp;w=3840&amp;q=75 2x" src="/_next/image?url=%2Fstatic%2Fimages%2Fdemystifying-cloud-spanner%2Fspanner.webp&amp;w=3840&amp;q=75"/>
<h3>Write Operation -</h3>
<p>As like most ACID databases, Spanner uses two-phase commit (2PC) and strict two-phase locking to ensure isolation and strong consistency. 2PC has been called the “anti-availability” protocol because all members must be up for it to work.I means in the commit phase,the nodes of that respective paxos group cannot serve other request (ex: read request) at that point of time. Spanner mitigates(makes it less severe) this by having each member itself be a Paxos group. So in that time frame 2PC “member” is available even if some of its Paxos participants are down and take more time. Data is divided into groups for storing and replicating data.</p>
<p>For two phase locking protocol, the TrueTime considers the time for acquiring the lock to be earlier by certain duration which is calculated considering latency for a request (for acquiring lock) to execute,usually in milliseconds. It also predicts the time at at which the lock would be released at it&#x27;s latest or max, which google calls its as (now + epselon). which will be required for read operation to wait for.</p>
<h3>Read Operation-</h3>
<p>It&#x27;s more intresting to know about read operation rather than write operation. What read operation basically does is that it returns the state of database at any given point. So data to be fetched for example, taking two different records located across different data center located in different continent should be the same for current time instance, any one of the copies should not be obsolete(expired) or newly modified or changes with respect to the time frame other wise the consistency of system is compromised.</p>
<p>A Blocking read operation is the option you might say, but it is leads to poor performance. For this,at any given time, spanner takes snapshots of the tables. When a read operation occurs spanner fetches the latest snapshot for that data. Retrieving snapshots spanner requests truetime to give the time at which it can fetch the latest snapshot of data. And if the time to wait in response exceeds a certain threshold limit then it queries the leader node of the paxos group for sending first the latest snapshot of data regardless of the time to wait.</p>
<h3>What happens during a Partitioning</h3>
<p>In general Spanner chooses C over A when a partition occurs. In practice, this is due to a few specific choices:</p>
<p>• Use of Paxos groups to achieve consensus on an update; if the leader cannot maintain a quorum due to a partition, updates are stalled and the system is not available (by the CAP definition). Eventually a new leader may emerge, but that also requires a majority.</p>
<p>• Use of two-phase commit for cross-group transactions also means that a partition of the members can prevent commits.</p>
<p>The most likely outcome of a partition in practice is that one side has a quorum and will continue on just fine, perhaps after electing some new leaders. Thus the service continues to be available, but users on the minority side have no access. But this is a case where differential availability matters: those users are likely to have other significant problems, such as no connectivity, and are probably also down. This means that multi-region services built on top of Spanner tend to work relatively well even during a partition. It is possible, but less likely, that some groups will not be available at all.</p>
<p>But never the less the tech giant made it&#x27;s way of accomplishing this first.</p>
<h2>References -</h2>
<ol>
<li>
<p><a href="https://cloud.google.com/spanner/docs">Spanner docs</a></p>
</li>
<li>
<p><a href="https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/45855.pdf">Google research article</a></p>
</li>
<li>
<p><a href="https://cloud.google.com/blog/products/gcp/introducing-cloud-spanner-a-global-database-service-for-mission-critical-applications">Cloud Spanner Introduction</a></p>
</li>
<li>
<p><a href="https://static.googleusercontent.com/media/research.google.com/en/pubs/archive/44877.pdf">Google research article #2</a></p>
</li>
</ol>]]></content:encoded>
            <author>jai@impactful-labs.in (Jai Gohil)</author>
        </item>
        <item>
            <title><![CDATA[Quick hacks to bring down EC2 instances cost drastically]]></title>
            <link>https://jaigohil.me/articles/ec2-cost-optimization</link>
            <guid>https://jaigohil.me/articles/ec2-cost-optimization</guid>
            <pubDate>Fri, 10 Apr 2020 00:00:00 GMT</pubDate>
            <description><![CDATA[Quick and simple guide for developers for optimizing AWS infra cost as much as possible.]]></description>
            <content:encoded><![CDATA[<img alt="Banner" width="4032" height="3024" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=%2Fstatic%2Fimages%2Fbanners%2Fopensource.jpg&amp;w=3840&amp;q=75 1x" src="/_next/image?url=%2Fstatic%2Fimages%2Fbanners%2Fopensource.jpg&amp;w=3840&amp;q=75"/>
<p>When utilizing a cloud environment, optimizing costs and maximizing resource utilization are crucial considerations. This is particularly important for teams and organizations that rely on Amazon Web Services (AWS) Compute and Relational Database Service (RDS) Instances, as scalability of compute and databases is essential to accommodate growing demands. While options like adding additional servers behind a load balancer or upgrading instance types to larger sizes exist, it&#x27;s important to note that taking advantage of reserved instances becomes challenging when the flexibility to dynamically change instance types is desired.</p>
<h3>EC2 Instance Cost Optimization</h3>
<p>AWS offers a variety of instance types within the general category, with the t2.micro series being commonly available for the Free Tier. However, for organizations utilizing general purpose Linux EC2 instances, it is advisable to transition from the t2 series to the t3 series once the free tier or tier hours have been utilized. This switch allows organizations to continue benefiting from cost-effective options while accommodating their computing needs effectively.</p>
<img alt="EC2 pricing" width="2072" height="754" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=%2Fstatic%2Fimages%2Fec2-cost-optimization%2Fec2-pricing-1.png&amp;w=3840&amp;q=75 1x" src="/_next/image?url=%2Fstatic%2Fimages%2Fec2-cost-optimization%2Fec2-pricing-1.png&amp;w=3840&amp;q=75"/>
<p>The advantages of leveraging the t3 series over the t2 series are evident from the pricing table provided. Not only is the t3 series more cost-effective, but for nano, micro, and small instances, it offers 2 vCPUs instead of just 1 vCPU. Additionally, the t3 series provides faster network performance, making it a superior option in terms of both cost and machine capabilities.</p>
<p>To take advantage of the t3 series, a simple process requiring approximately five minutes of downtime per EC2 instance can be followed. The steps involve stopping the instance, clicking on &quot;change instance type,&quot; selecting the equivalent t3 size, and starting the server again. However, it&#x27;s important to note that if the server doesn&#x27;t have an Elastic IP address assigned, the Public IP address will change, while the private IP address remains unchanged.</p>
<p>Moreover, for applications that rely on technologies providing binaries for arm processors, setting up a new server with the t4g series is recommended. This transition involves migrating the workload from the t2/t3 to the t4g server. The t4g series offers roughly half the cost of the t3 series while delivering better performance.</p>
<p>According to AWS, PHP performance is 30% better on a t4g instance compared to the t3 series, as per the provided comparison.</p>
<h3>What works on t4g arm64 processors?</h3>
<ul>
<li>Java</li>
<li>Golang</li>
<li>PHP</li>
<li>WordPress</li>
<li>ERPNext</li>
<li>Ghost CMS</li>
<li>Strapi CMS</li>
<li>GitLab</li>
<li>GitLab Runner</li>
<li>MongoDB</li>
</ul>
<h3>On-demand Pricing v/s other cost optimization options</h3>
<p>Many users opt for on-demand servers when they are uncertain about the need for a larger server to handle increased loads. In such scenarios, the Compute Savings Plan can be a suitable alternative to reserved instances.</p>
<p>If a project or organization can confidently determine the number of EC2 instances required, choosing the Compute Savings Plan becomes a logical choice. This approach provides flexibility to change EC2 instance types, terminate and create new servers as needed, while benefiting from a price commitment to spend on EC2 instances per hour for Compute Power.</p>
<p>To leverage the Compute Savings Plan, users can calculate the per hour cost of all the instances they require based on the Savings Plan rate and sign up for it through the Billing dashboard in the AWS Console. As illustrated in the table below, Savings Plan prices are nearly 27% cheaper, resulting in significant cost reductions. In simpler terms, by utilizing the Compute Savings Plan, the cost of a fifth server is saved for every four servers deployed.</p>
<img alt="EC2 pricing" width="1956" height="492" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=%2Fstatic%2Fimages%2Fec2-cost-optimization%2Fec2-pricing-2.png&amp;w=2048&amp;q=75 1x, /_next/image?url=%2Fstatic%2Fimages%2Fec2-cost-optimization%2Fec2-pricing-2.png&amp;w=3840&amp;q=75 2x" src="/_next/image?url=%2Fstatic%2Fimages%2Fec2-cost-optimization%2Fec2-pricing-2.png&amp;w=3840&amp;q=75"/>
<p>If a specific series of EC2 instances is being used, let’s say t3, then there’s an option to commit on per hour usage of EC2 instances by series. It’s possible to change instance type within the series, leading to a cost reduction of up to 37%. So, every two servers help cover the cost of a third one.</p>
<img alt="EC2 pricing" width="2006" height="718" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=%2Fstatic%2Fimages%2Fec2-cost-optimization%2Fec2-pricing-3.png&amp;w=2048&amp;q=75 1x, /_next/image?url=%2Fstatic%2Fimages%2Fec2-cost-optimization%2Fec2-pricing-3.png&amp;w=3840&amp;q=75 2x" src="/_next/image?url=%2Fstatic%2Fimages%2Fec2-cost-optimization%2Fec2-pricing-3.png&amp;w=3840&amp;q=75"/>
<p>When calculating the hourly rate of the instances, account for how many hours the servers are kept up. During non-active hours, the non-production servers can be powered down.</p>
<h3>EBS Volume Cost Optimization</h3>
<p>By default, when creating an EBS Volume in AWS, the volume type is set to gp2. However, it is worth noting that gp3 volumes offer a more cost-effective and faster alternative to gp2 volumes. The new gp3 volumes provide a baseline performance of 3,000 IOPS and 125 MB/s at any volume size.</p>
<p>According to AWS, gp3 volumes deliver SSD-like performance at a 20% lower cost per GB compared to gp2 volumes. Additionally, by decoupling storage performance from capacity, gp3 volumes allow for easy provisioning of higher IOPS and throughput without the need for additional block storage capacity. This improves overall performance while reducing costs.</p>
<p>Changing EBS Volumes from gp2 to gp3 is a straightforward process that does not require any downtime. Simply follow these steps in the AWS Console: go to EC2, navigate to EBS, select the desired EBS Volume, click on &quot;Actions,&quot; choose &quot;Modify Volume,&quot; and change the Volume type to gp3. AWS will charge a one-time cost for the data copying involved, but in the long run, significant savings can be achieved due to the 20% cheaper pricing and improved performance provided by gp3 volumes.</p>
<h3>References</h3>
<p><a href="https://aws.amazon.com/ec2/pricing/on-demand/">https://aws.amazon.com/ec2/pricing/on-demand/</a>
<a href="https://aws.amazon.com/savingsplans/compute-pricing/">https://aws.amazon.com/savingsplans/compute-pricing/</a></p>]]></content:encoded>
            <author>jai@impactful-labs.in (Jai Gohil)</author>
        </item>
        <item>
            <title><![CDATA[Benefits I Care About in 2019]]></title>
            <link>https://jaigohil.me/articles/benefits-i-care-about-in-2019</link>
            <guid>https://jaigohil.me/articles/benefits-i-care-about-in-2019</guid>
            <pubDate>Mon, 09 Dec 2019 00:00:00 GMT</pubDate>
            <description><![CDATA[How important is working remotely and a flexible schedule? I give my take on what benefits are important to me in 2020.]]></description>
            <content:encoded><![CDATA[<p>I&#x27;ve put together a list of benefits I care about. I think this goes without saying, but these are simply my opinions - your mileage may vary.</p>
<img alt="Team" width="1800" height="1199" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=%2Fstatic%2Fimages%2Fbenefits-i-care-about-in-2020%2Fbanner.webp&amp;w=1920&amp;q=75 1x, /_next/image?url=%2Fstatic%2Fimages%2Fbenefits-i-care-about-in-2020%2Fbanner.webp&amp;w=3840&amp;q=75 2x" src="/_next/image?url=%2Fstatic%2Fimages%2Fbenefits-i-care-about-in-2020%2Fbanner.webp&amp;w=3840&amp;q=75"/>
<h2>Positives</h2>
<ol>
<li><strong>Talented co-workers.</strong> Above everything else, I want to be surrounded by smart people who will push me to learn, grow exponentially, and progress in my career.</li>
<li><strong>Flexible hours and remote work.</strong> After a three-month stint <a href="/blog/the-search-for-everything">working remotely abroad</a>, there&#x27;s no way I could go back to a typical 9-5 desk job. Ideally, I&#x27;ll work from home at least one day a week. I think 100% remote work is excellent, but not for everyone.</li>
<li><strong>Personal health.</strong> Having a culture with a healthy work-life balance that doesn&#x27;t promote burnout is critical. A culture focused around personal health that has adequate health coverage as well as some sort of gym package (on-site or stipend).</li>
<li><strong>Autonomy.</strong> Does your manager give you the freedom to make decisions in your area of expertise? Do they trust and value your opinion? Do they go to battle for you? Do they set clear expectations?</li>
<li><strong>Working with industry standards.</strong> Are the main programming languages widely used? Does the company value <a href="/blog/why-i-create-open-source-software">open-source software</a>? How much internal software is being used? From my experience working with languages that were <em>not</em> industry standard, it can be a nightmare just trying to find a simple answer on Google. If you happen to encounter a bug, you might not have the community support needed to get it patched and released in a timely manner.</li>
<li><strong>Office location and environment.</strong> Transitioning from my last job to my current role, I cut my commute in half saving ~40 minutes a day. That time <em>really</em> adds up and you can put a price to it. Ideally, the office has lots of <a href="https://hbr.org/2018/09/the-1-office-perk-natural-light">natural light</a> and proper space for everyone (not four people crammed at one desk). I honestly don&#x27;t mind open office plans that much if you have the flexibility to work remotely.</li>
<li><strong>A culture of open communication.</strong> Are there frequent meetings with your boss (and bosses)? Is the feedback loop short? Are meetings that don&#x27;t provide value reduced to an email? Are developers given large, open blocks of time to focus on coding? Does executive management seek feedback and continuously improve their processes?</li>
</ol>
<h2>Don&#x27;t Care</h2>
<p>My list for what I don&#x27;t care about is much shorter. I&#x27;m not too jaded (...yet).</p>
<ol>
<li><strong>Game rooms.</strong> I mean, I get it. I see the appeal and why it&#x27;s pushed as a recruiting tool. But in practice, I&#x27;ve never wanted a ping-pong break in between coding sessions. Some people treat it as &quot;culture building&quot; but in my opinion, if you satisfy the above criteria for benefits, then you already have a pretty amazing culture. I&#x27;d rather build comradery with my teammates over a great lunch than darts.</li>
<li><strong>Dog-friendly / kid friendly.</strong> Let&#x27;s be honest - most of the time someone brings their new puppy to work they are distracting everyone. I don&#x27;t think I really need to elaborate more on a child. I see the benefit, and hey maybe your kid/dog is well behaved and can handle it, but it&#x27;s not for me.</li>
</ol>
<p>Ultimately, it comes down to the culture the company wants to promote. If their pitch to me is &quot;We have beer on tap and a game room!&quot;... that&#x27;s going to be a hard pass.
A better way to pique my interest would be something like this:</p>
<blockquote>
<p>&quot;You&#x27;ll work with industry leaders in your area and you&#x27;ll have the flexibility to work remotely whenever necessary.&quot;</p>
</blockquote>]]></content:encoded>
            <author>jai@impactful-labs.in (Jai Gohil)</author>
        </item>
        <item>
            <title><![CDATA[Which server-side framework to choose from...]]></title>
            <link>https://jaigohil.me/articles/SSR-framework</link>
            <guid>https://jaigohil.me/articles/SSR-framework</guid>
            <pubDate>Mon, 03 Jun 2019 00:00:00 GMT</pubDate>
            <description><![CDATA[Discussing pros and cons of most SSR frameworks out there and which one should you use for which purpose.]]></description>
            <content:encoded><![CDATA[<img alt="Team" width="1500" height="1000" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=%2Fstatic%2Fimages%2Fbenefits-i-care-about-in-2020%2Fbanner.webp&amp;w=1920&amp;q=75 1x, /_next/image?url=%2Fstatic%2Fimages%2Fbenefits-i-care-about-in-2020%2Fbanner.webp&amp;w=3840&amp;q=75 2x" src="/_next/image?url=%2Fstatic%2Fimages%2Fbenefits-i-care-about-in-2020%2Fbanner.webp&amp;w=3840&amp;q=75"/>
<p>2020 we are looking a huge trend in client-side rendering technologies. But arguably server-side frameworks are here to stay for a long long time.
So which one should you use from.
This was the year where I tried looking into all these frameworks which i previously used which I&#x27;m gonna talk about and give my take on that.</p>
<h2>Highlights</h2>
<ul>
<li>Approach as per different requirements.</li>
<li>🚀Listing mainstream serverside technologies used.</li>
<li>📚Selection based on scenerio.</li>
<li>📈Industry trends</li>
<li>🎤My opinion and views.</li>
</ul>
<p>Most the frameworks I&#x27;m gonna talk is about MVC frameworks. Bit cliche but go with technologies that your team is already famaliar with if it works fine.</p>
<p>The frameworks are</p>
<ul>
<li>Java Spring</li>
<li>Django</li>
<li>Laravel</li>
<li>Ruby on Rails</li>
</ul>
<p>Until and unless you want to have really high performant application with fluid client side applications you are good to go with traditional front-end stack like HTML, CSS and JS rather than jumpung on React/Vue/Angular.</p>
<p>Next thing is to assess the performance and scalability requirements for the product. For majority of case all frameworks would do the job. But when it comes to performance it comes down to language benchmarks in terms of execution speeds.
For high-performance api java spring and some might say golang frameworks, this is required when you say 20000 requests/second, for example a trading platform.</p>
<p>Majority of times this won&#x27;t be the case, so all other frameworks would work just fine.</p>
<p>Nowadays, we see a equiliberium between front-end and backed frameworks working together to get good of both worlds. So now we are predominantly witnessing the combination of both client-side, rendering and server-side rendering frameworks
like Next.js for React and Nuxt.js for Vue js.</p>
<h3>Choose based on given scenerio (Sequence matters!) -</h3>
<p><strong>Mocking or prototyping API</strong>
Use Json Server from typicode. Get a full fake REST API with zero coding in less than 30 seconds (seriously) for free.</p>
<p><strong>If the project is really really small and less complex logic. And you are making a API and does not require security and authentication.</strong></p>
<p>-&gt; Go with micro-frameworks like Flask (Python), Lumen(PHP) or simple golang(if famaliar) etc and many more as they are
lightweight and does the job well.</p>
<p><strong>Let&#x27;s say your project is fairly big. Building API that may include authentication or other utilities for [rapid development] [descent performance]</strong></p>
<p>-&gt; Laravel, Rails, Django.</p>
<p><strong>Let&#x27;s say your project is fairly big. Building API that may include authentication or other utilities for [rapid development], [descent performance] [convention] [maintainable] [readable]</strong></p>
<p>-&gt; Rails, Laravel, Django[more verbose].</p>
<p><strong>Your app is more focused on data visualization and machine learning stuff</strong></p>
<p>-&gt; Django, Java Spring (Spring-boot).</p>
<p><strong>Let&#x27;s say your project is fairly big and higly performant.[Highly performant] [Highly Scalable] [Stable]</strong></p>
<p>-&gt; Java Spring (Spring-boot), Golang.</p>
<h3>Industry Standard</h3>
<p>Most corporates use Java as the language has many rich feature built in like strong Object-oriented concepts, strongly typed, highly performant, scalablea and robust JVM etc.
Startups are more likely to use Rails and Django or laravel for their rapid development needs.
For those who know C and C++ mainly in application with huge scale use it like FANG companies.</p>
<h3>Conclusion</h3>
<p>If you do not know how much traffic you are dealing with on initial scale go with rapid development tools &amp; frameworks to put into production as soon as possible and then switch to high performant frameworks
if your application grows to handle big data and traffic. If you expect the application to process more requests go with java or golang, prefer java due to huge community, maturity and stability. Also can start using java&#x27;s spring boot for rapid development as well.</p>
<p>So what do you think? What&#x27;s your take on it? Which would you prefer. Lets discuss it on slack.</p>]]></content:encoded>
            <author>jai@impactful-labs.in (Jai Gohil)</author>
        </item>
        <item>
            <title><![CDATA[Backpacking Dubai]]></title>
            <link>https://jaigohil.me/articles/dubai-trip</link>
            <guid>https://jaigohil.me/articles/dubai-trip</guid>
            <pubDate>Wed, 24 Oct 2018 00:00:00 GMT</pubDate>
            <description><![CDATA[My recap of 10 days backpacking across Dubai - Beach, Dessert, Malls, and the dubai lifestyle.]]></description>
            <content:encoded><![CDATA[<img alt="Dubai Pic" width="1280" height="960" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=%2Fstatic%2Fimages%2Fdubai%2Fdubai.jpg&amp;w=1920&amp;q=75 1x, /_next/image?url=%2Fstatic%2Fimages%2Fdubai%2Fdubai.jpg&amp;w=3840&amp;q=75 2x" src="/_next/image?url=%2Fstatic%2Fimages%2Fdubai%2Fdubai.jpg&amp;w=3840&amp;q=75"/>
<p>It&#x27;s 2021, pics are louder than words..</p>
<p>Here are couple of images that might give you some highlights. I&#x27;m now thinking to gather all content and design a seperate page for it.</p>
<img alt="Dubai Pic" width="1280" height="960" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=%2Fstatic%2Fimages%2Fdubai%2F1.jpg&amp;w=1920&amp;q=75 1x, /_next/image?url=%2Fstatic%2Fimages%2Fdubai%2F1.jpg&amp;w=3840&amp;q=75 2x" src="/_next/image?url=%2Fstatic%2Fimages%2Fdubai%2F1.jpg&amp;w=3840&amp;q=75"/>
<img alt="Dubai Pic" width="720" height="1280" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=%2Fstatic%2Fimages%2Fdubai%2F2.jpg&amp;w=750&amp;q=75 1x, /_next/image?url=%2Fstatic%2Fimages%2Fdubai%2F2.jpg&amp;w=1920&amp;q=75 2x" src="/_next/image?url=%2Fstatic%2Fimages%2Fdubai%2F2.jpg&amp;w=1920&amp;q=75"/>
<img alt="Dubai Pic" width="1280" height="960" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=%2Fstatic%2Fimages%2Fdubai%2F4.jpg&amp;w=1920&amp;q=75 1x, /_next/image?url=%2Fstatic%2Fimages%2Fdubai%2F4.jpg&amp;w=3840&amp;q=75 2x" src="/_next/image?url=%2Fstatic%2Fimages%2Fdubai%2F4.jpg&amp;w=3840&amp;q=75"/>
<img alt="Dubai Pic" width="960" height="1280" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=%2Fstatic%2Fimages%2Fdubai%2F5.jpg&amp;w=1080&amp;q=75 1x, /_next/image?url=%2Fstatic%2Fimages%2Fdubai%2F5.jpg&amp;w=1920&amp;q=75 2x" src="/_next/image?url=%2Fstatic%2Fimages%2Fdubai%2F5.jpg&amp;w=1920&amp;q=75"/>
<img alt="Dubai Pic" width="650" height="1280" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=%2Fstatic%2Fimages%2Fdubai%2F6.jpg&amp;w=750&amp;q=75 1x, /_next/image?url=%2Fstatic%2Fimages%2Fdubai%2F6.jpg&amp;w=1920&amp;q=75 2x" src="/_next/image?url=%2Fstatic%2Fimages%2Fdubai%2F6.jpg&amp;w=1920&amp;q=75"/>
<h2>Quick Tips</h2>
<p>If you&#x27;re planning to head to Dubai, here&#x27;s a few things you should know (plus some general travel tips):</p>
<ul>
<li>Keep tabs on flights and track prices.</li>
<li>Ideally, book your lodging months in advance for the best rates.</li>
<li>Ensure your credit card doesn&#x27;t have international fees.</li>
<li>I would recommend taking out some us dollars ahead of time or at the airport and then convert it into dihram (currency of dubai). There will be places that don&#x27;t accept a credit card.</li>
<li>If you use Spotify, consider downloading some playlists offline as well.</li>
<li>Check into your flight as early as possible!</li>
<li>Visting in winters would be a good choice as it is to hot in summers.</li>
</ul>
<h1>To be updated soon!</h1>]]></content:encoded>
            <author>jai@impactful-labs.in (Jai Gohil)</author>
        </item>
    </channel>
</rss>