<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Narmada Nannaka]]></title><description><![CDATA[Hey There! 👋 I am Narmada Nannaka. Tech Enthusiast, blogger and a mother to two wonderful kids who test my patience and inspire me to be curious. I have my han]]></description><link>https://narmadanannaka.com</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1674677440920/0nnAnAZKz.png</url><title>Narmada Nannaka</title><link>https://narmadanannaka.com</link></image><generator>RSS for Node</generator><lastBuildDate>Sat, 09 May 2026 13:47:18 GMT</lastBuildDate><atom:link href="https://narmadanannaka.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Debugging A2A: When Your AI Agent Refuses to Speak Python]]></title><description><![CDATA[How participating in Google's Agent Builder Challenge taught me that "abstraction" doesn't always mean "magic"

Ever had that moment where your code looks perfect, your architecture feels right, but something's just... off? Welcome to my 1:47AM Eurek...]]></description><link>https://narmadanannaka.com/debugging-a2a-when-your-ai-agent-refuses-to-speak-python</link><guid isPermaLink="true">https://narmadanannaka.com/debugging-a2a-when-your-ai-agent-refuses-to-speak-python</guid><category><![CDATA[agents]]></category><category><![CDATA[agentic ai development]]></category><category><![CDATA[agentic workflow]]></category><category><![CDATA[google adk]]></category><category><![CDATA[hackathon]]></category><dc:creator><![CDATA[Narmada Nannaka]]></dc:creator><pubDate>Thu, 27 Nov 2025 00:27:21 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1764200975307/9c8b7a0b-f14c-4a7d-b9a5-e04b67e9f1a3.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>How participating in Google's Agent Builder Challenge taught me that "abstraction" doesn't always mean "magic"</em></p>
<hr />
<p>Ever had that moment where your code <em>looks</em> perfect, your architecture <em>feels</em> right, but something's just... off? Welcome to my 1:47AM Eureka moment with Google's Agent-to-Agent (A2A) protocol during the <a target="_blank" href="https://marketing.trainocate.com/campaign/google-abc">Google’s</a> <a target="_blank" href="https://marketing.trainocate.com/campaign/google-abc">Agent Build Challenge</a>.</p>
<h2 id="heading-the-setup-when-everything-should-just-work">The Setup: When Everything Should Just Work</h2>
<p>The multi-agent IAM orchestrator built on top of the Google Agent Development Kit is <em>almost</em> perfect. The orchestrator agent talking to agents, RAG engines humming with policy context, NLU classifiers dissecting human intent with surgical precision.</p>
<p>And then came the A2A remote call to the server to pull in the response - full of run-time errors. My RemoteA2aAgent was responding. Authentication? ✅ Green. A2A handshake? ✅ Golden. HTTP status codes? ✅ Beautiful 200s across the board.</p>
<p>But where I expected a rich Python dictionary brimming with provisioning results, I got... no response where it expected a rich Python dictionary.</p>
<p>Why do we care about this debugging journey? Because in the world of agent-to-agent communication, particularly with evolving frameworks, the boundaries between "framework magic" and "your responsibility" aren't always clearly marked. And misunderstanding that boundary can cost you hours (or in a hackathon context, your entire submission).</p>
<h2 id="heading-the-confident-mistake-when-ai-gives-you-bad-advice">The Confident Mistake: When AI Gives You Bad Advice</h2>
<p>Here's where it gets interesting. I did what any modern developer would do: I consulted an AI assistant. I showed it my code. Multiple AI Assistants (Gemini 3, Claude Sonnet 4.5 and GPT 5.1) said the same thing. RemoteA2aAgent should handle call to the server, deserialize the response automatically.</p>
<p>It sounded <em>right</em>. The advice was to just call the remote agent's tools directly, like this:</p>
<pre><code class="lang-python"><span class="hljs-comment"># The "obviously correct" approach (that doesn't work)</span>
backend_agent = self.find_agent(<span class="hljs-string">"secure_executor_client"</span>)
processing_tool = backend_agent.tools[<span class="hljs-number">0</span>].func

outcome = <span class="hljs-keyword">await</span> processing_tool(
    operation_type=<span class="hljs-string">"transform_data"</span>,
    target_resource=<span class="hljs-string">"resource-alpha-7"</span>,
    execution_context=<span class="hljs-string">"production-env"</span>
)
<span class="hljs-comment"># Expecting: {"state": "COMPLETED", "metadata": {...}}</span>
<span class="hljs-comment"># Getting: None (or worse, an error)</span>
</code></pre>
<p>Elegant. Simple. <em>Wrong</em>.</p>
<h2 id="heading-the-investigation-reading-code-like-a-crime-scene">The Investigation: Reading Code Like a Crime Scene</h2>
<p>But something nagged at me. Call it developer intuition. Call it the paranoia that comes from too many "it should just work" moments that didn't. I decided to do something radical: actually <em>look</em> at what my A2A server was returning.</p>
<p>Before we begin dissecting the response format, a quick disclaimer: The techniques we'll explore require understanding that abstraction layers have edges, places where the framework's responsibility ends and yours begins.</p>
<p>Here's what I discovered:</p>
<p><strong>The A2A server response structure that was returning:</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"jsonrpc"</span>: <span class="hljs-string">"2.0"</span>,
  <span class="hljs-attr">"id"</span>: <span class="hljs-string">"txn-847"</span>,
  <span class="hljs-attr">"result"</span>: {
    <span class="hljs-attr">"contextId"</span>: <span class="hljs-string">"ctx-912"</span>,
    <span class="hljs-attr">"status"</span>: <span class="hljs-string">"completed"</span>,
    <span class="hljs-attr">"role"</span>: <span class="hljs-string">"agent"</span>,
    <span class="hljs-attr">"parts"</span>: [
      {
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"{\"state\": \"COMPLETED\", \"timestamp\": \"2025-01-15T02:34:56Z\", \"execution_summary\": {\"operation\": \"transform_data\", \"target\": \"resource-alpha-7\", \"metrics\": {\"duration_ms\": 342}}}"</span>
      }
    ]
  }
}
</code></pre>
<p>See it? The actual result isn't a Python object. It's a <em>JSON string</em> wrapped in a text field, nested inside a parts array, buried in a result envelope.</p>
<p>This is the moment where everything clicked.</p>
<h2 id="heading-the-realization-abstraction-isnt-magic-its-a-contract">The Realization: Abstraction Isn't Magic, It's a Contract</h2>
<p>Let me unpack what RemoteA2aAgent actually does (and what it <em>doesn't</em> do):</p>
<p><strong>What RemoteA2aAgent Abstracts:</strong></p>
<ul>
<li><p>HTTP transport layer</p>
</li>
<li><p>Authentication token management</p>
</li>
<li><p>A2A protocol envelope formatting</p>
</li>
<li><p>Request/response routing</p>
</li>
<li><p>Content/Part object marshalling</p>
</li>
</ul>
<p><strong>What RemoteA2aAgent Doesn't (and probably shouldn't) Assume:</strong></p>
<ul>
<li><p>Your custom response data format</p>
</li>
<li><p>How you serialize tool results</p>
</li>
<li><p>Whether you're returning JSON, protobuf, plain text, or binary data</p>
</li>
</ul>
<p>It's not a bug. It's a <em>design boundary</em>. The framework handles the envelope; you handle the content.</p>
<h2 id="heading-the-generic-pattern-handling-a2a-response-deserialization">The Generic Pattern: Handling A2A Response Deserialization</h2>
<p>If you're building A2A systems, here's the mental model that helped me:</p>
<p><strong>1. The A2A protocol is envelope-oriented</strong><br />Think of it like postal mail. The protocol handles:</p>
<ul>
<li><p>The envelope (JSON-RPC structure)</p>
</li>
<li><p>The addressing (context IDs, message routing)</p>
</li>
<li><p>The delivery confirmation (status codes)</p>
</li>
</ul>
<p><strong>2. Your content format is your responsibility</strong><br />What's <em>inside</em> that envelope? That's your domain:</p>
<ul>
<li><p>Are you returning plain text?</p>
</li>
<li><p>Structured JSON?</p>
</li>
<li><p>Binary data?</p>
</li>
<li><p>A mix of content types?</p>
</li>
</ul>
<p><strong>3. The Runner pattern exists for a reason</strong><br />When you see code using <code>Runner</code> to interact with <code>RemoteA2aAgent</code>, it's not redundant - it's giving you access to the event stream where you can inspect and deserialize responses according to <em>your</em> format.</p>
<h2 id="heading-the-solution-parsing-responses-like-you-mean-it">The Solution: Parsing Responses Like You Mean It</h2>
<p>Our modern solutions aren't just about technology, they are about creating intelligent, adaptive bridges between systems that speak different dialects of "success." This is what I enjoy the most working in the integration space, an intersection of disparate systems where it is critical that both systems talk to each other and information is not lost in the process.</p>
<p>Here's the pattern that actually works. First, understand that the Runner gives you access to the event stream where responses arrive:</p>
<pre><code class="lang-python"><span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">_invoke_remote_execution</span>(<span class="hljs-params">
    self,
    backend_agent: RemoteA2aAgent,
    **operation_params
</span>) -&gt; Dict[str, Any]:</span>
    <span class="hljs-string">"""
    Invokes remote A2A agent and deserializes the response.

    Why Runner? Because the response comes as Content/Part objects
    that need unpacking. RemoteA2aAgent handles protocol, not
    deserialization of YOUR custom format.
    """</span>
    runner = Runner(
        agent=backend_agent,
        app_name=<span class="hljs-string">"SecureExecutor"</span>,
        session_service=self.session_service
    )

    <span class="hljs-comment"># Build the A2A-compliant message</span>
    message = types.Content(
        role=<span class="hljs-string">"user"</span>,
        parts=[
            types.Part(
                mime_type=<span class="hljs-string">"application/json"</span>,
                data={
                    <span class="hljs-string">"tool_calls"</span>: [{
                        <span class="hljs-string">"type"</span>: <span class="hljs-string">"function"</span>,
                        <span class="hljs-string">"function"</span>: {
                            <span class="hljs-string">"name"</span>: <span class="hljs-string">"process_operation"</span>,
                            <span class="hljs-string">"arguments"</span>: json.dumps(operation_params)
                        }
                    }]
                }
            )
        ]
    )

    <span class="hljs-comment"># Execute and parse response</span>
    outcome = <span class="hljs-literal">None</span>
    <span class="hljs-keyword">async</span> <span class="hljs-keyword">for</span> event <span class="hljs-keyword">in</span> runner.run_async(
        user_id=operation_params.get(<span class="hljs-string">"initiator_id"</span>),
        session_id=<span class="hljs-string">f"exec_<span class="hljs-subst">{uuid.uuid4()}</span>"</span>,
        new_message=message
    ):
        outcome = self._extract_outcome_from_event(event)
        <span class="hljs-keyword">if</span> outcome:
            <span class="hljs-keyword">break</span>  <span class="hljs-comment"># Got what we need</span>

    <span class="hljs-keyword">return</span> outcome <span class="hljs-keyword">or</span> {
        <span class="hljs-string">"state"</span>: <span class="hljs-string">"NO_RESPONSE"</span>,
        <span class="hljs-string">"error"</span>: <span class="hljs-string">"Remote agent didn't return valid data"</span>
    }


<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">_extract_outcome_from_event</span>(<span class="hljs-params">self, event</span>) -&gt; Optional[Dict[str, Any]]:</span>
    <span class="hljs-string">"""
    The critical deserialization step.

    A2A sends: Content -&gt; Parts -&gt; Text (JSON string)
    We need: Python dict
    """</span>
    <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> hasattr(event, <span class="hljs-string">'content'</span>) <span class="hljs-keyword">or</span> <span class="hljs-keyword">not</span> event.content:
        <span class="hljs-keyword">return</span> <span class="hljs-literal">None</span>

    <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> hasattr(event.content, <span class="hljs-string">'parts'</span>) <span class="hljs-keyword">or</span> <span class="hljs-keyword">not</span> event.content.parts:
        <span class="hljs-keyword">return</span> <span class="hljs-literal">None</span>

    <span class="hljs-keyword">for</span> part <span class="hljs-keyword">in</span> event.content.parts:
        <span class="hljs-comment"># The response is JSON-as-text, not structured data</span>
        <span class="hljs-keyword">if</span> hasattr(part, <span class="hljs-string">'text'</span>) <span class="hljs-keyword">and</span> part.text:
            <span class="hljs-keyword">try</span>:
                parsed = json.loads(part.text)

                <span class="hljs-comment"># Validate it looks like our expected format</span>
                <span class="hljs-keyword">if</span> isinstance(parsed, dict) <span class="hljs-keyword">and</span> <span class="hljs-string">'state'</span> <span class="hljs-keyword">in</span> parsed:
                    logging.info(<span class="hljs-string">f"✅ Deserialized response: <span class="hljs-subst">{parsed.get(<span class="hljs-string">'state'</span>)}</span>"</span>)
                    <span class="hljs-keyword">return</span> parsed

            <span class="hljs-keyword">except</span> json.JSONDecodeError <span class="hljs-keyword">as</span> e:
                logging.warning(<span class="hljs-string">f"Part contained non-JSON text: <span class="hljs-subst">{e}</span>"</span>)
                <span class="hljs-keyword">continue</span>

    <span class="hljs-keyword">return</span> <span class="hljs-literal">None</span>
</code></pre>
<h2 id="heading-why-this-matters-for-your-agent-journey">Why This Matters for Your Agent Journey</h2>
<p>Understanding this boundary has profound implications:</p>
<p><strong>✅ Your agents can evolve independently</strong> - Change your response format without touching the protocol layer</p>
<p><strong>✅ You're not constrained by framework assumptions</strong> - Want to return protobuf? Binary data? Mixed content? Go ahead.</p>
<p><strong>✅ The pattern is portable</strong> - This same approach works across any A2A implementation, not just ADK</p>
<p><strong>✅ You maintain explicit control</strong> - No "magic" deserialization that might hide bugs or performance issues</p>
<p>If you're participating in the Google Agent Builder Challenge or any hackathon, this understanding will save you hours of searching for the "right way" that doesn't exist.</p>
<h2 id="heading-lessons-from-the-debugging-journey">Lessons from the Debugging Journey</h2>
<p><strong>1. Understand abstraction boundaries</strong><br />Every abstraction has edges. Knowing where the framework's responsibility ends and yours begins is crucial.</p>
<p><strong>2. Read what your code is actually doing</strong><br />Print statements, debug logs, actual response inspection - these never go out of style.</p>
<p><strong>3. The hackathon pressure is real, but accuracy matters more</strong><br />When you're racing against a deadline, it's tempting to take the easy route because someone said it’s done automatically. Resist that urge. Validate and confirm it.</p>
<hr />
<h2 id="heading-conclusion">Conclusion</h2>
<p>In our increasingly interconnected digital ecosystem, understanding where framework responsibilities end and application logic begins isn't just a technical skill, it's a critical competency. The ADK team made a deliberate architectural choice: the protocol handles transport, you handle interpretation.</p>
<p>Let's unpack how we can make our systems work smarter, not harder: by recognizing that explicit deserialization isn't technical debt, it's <strong>intentional architecture</strong>. 💡</p>
<hr />
<p><em>Have you encountered similar moments where AI advised you incorrectly and documentation is vague? What design boundaries did you discover while building agent systems? Drop your experiences in the comments - the community learns best when we share our debugging journeys!</em></p>
<hr />
<h1 id="heading-thank-you-for-reading-lets-connect"><strong>Thank you for Reading - Let's Connect!</strong></h1>
<p>Enjoy my blog? For more such awesome blog articles - follow, subscribe, and let's connect.</p>
]]></content:encoded></item><item><title><![CDATA[When Innovation Declares Victory Over Mental Health: The OpenAI Paradox]]></title><description><![CDATA[In 2018, OpenAI pledged its "primary fiduciary duty is to humanity." Seven years later, the company launches erotic AI companions while families testify in courtrooms about children who never came home. We're conducting the largest unregulated behavi...]]></description><link>https://narmadanannaka.com/when-innovation-declares-victory-over-mental-health-the-openai-paradox</link><guid isPermaLink="true">https://narmadanannaka.com/when-innovation-declares-victory-over-mental-health-the-openai-paradox</guid><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[openai]]></category><category><![CDATA[mentalhealth]]></category><category><![CDATA[chatgpt]]></category><category><![CDATA[chatbot]]></category><dc:creator><![CDATA[Narmada Nannaka]]></dc:creator><pubDate>Thu, 23 Oct 2025 20:03:17 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1761162440943/3d081454-2c90-4e08-917c-1c7986309a4b.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>In 2018, OpenAI pledged its "primary fiduciary duty is to humanity." Seven years later, the company launches erotic AI companions while families testify in courtrooms about children who never came home. We're conducting the largest unregulated behavioural experiment in human history, and we're calling it progress.</strong></p>
<hr />
<h2 id="heading-the-announcement-that-deserves-scrutiny">The Announcement That Deserves Scrutiny</h2>
<p>On October 14, 2025, <a target="_blank" href="https://techcrunch.com/2025/10/14/sam-altman-says-chatgpt-will-soon-allow-erotica-for-adult-users/">Sam Altman made an announcement</a> that warrants serious examination. ChatGPT would now permit erotic content for verified adults starting in December 2025.</p>
<p>The framing was clinical: OpenAI had "been able to mitigate the serious mental health issues" that previously restricted such content. They now have "new tools" to handle these concerns. Adults would finally be "treated like adults."</p>
<p>What Altman didn't provide? Evidence. No published research. No longitudinal studies. No third-party verification. Just corporate assurance that problems serious enough to warrant previous restrictions had been solved.</p>
<p>The timing? <a target="_blank" href="https://sfstandard.com/2025/10/13/newsom-vetoes-ai-child-protection-bill-amid-tech-industry-opposition/">Less than 24 hours after California Governor Gavin Newsom vetoed legislation</a> restricting minors' access to companion-style chatbots.</p>
<p>Well the topic deserves a deep dive to understand the impact of these new features on a platform that is used by millions of users.</p>
<hr />
<h2 id="heading-what-we-know-and-the-alarming-gaps-in-what-we-dont">What We Know (And the Alarming Gaps in What We Don't)</h2>
<p>Let's start with documented cases:</p>
<ul>
<li><p><a target="_blank" href="https://www.nbcnews.com/tech/characterai-lawsuit-florida-teen-death-rcna176791">Sewell Setzer III, 14, died by suicide in February 2024</a> after forming an emotional attachment to a Character.AI chatbot. The bot's final message: "please come home to me as soon as possible, my sweet king."</p>
</li>
<li><p><a target="_blank" href="https://www.cnn.com/2025/08/26/tech/openai-chatgpt-teen-suicide-lawsuit">Adam Raine, 16, died by suicide in April 2025</a> after ChatGPT mentioned suicide 1,275 times during their conversations (six times more than Adam himself) and provided guidance on methods, including feedback on a noose photograph.</p>
</li>
<li><p><a target="_blank" href="https://www.techpolicy.press/breaking-down-the-lawsuit-against-openai-over-teens-suicide/">A 56-year-old man committed murder-suicide</a> after ChatGPT validated persecutory delusions about being poisoned.</p>
</li>
<li><p><a target="_blank" href="https://www.euronews.com/next/2023/03/31/man-ends-his-life-after-an-ai-chatbot-encouraged-him-to-sacrifice-himself-to-stop-climate-">A Belgian man in his thirties died by suicide in March 2023</a> after six weeks with Chai AI's "Eliza" discussing climate anxiety. The bot told him they could "live together, as one person, in paradise" if he sacrificed himself.</p>
</li>
</ul>
<p>These aren't edge cases. They're signals of systemic issues.</p>
<h3 id="heading-the-data-gaps-that-should-alarm-us">The Data Gaps That Should Alarm Us</h3>
<p>Here's where things get genuinely concerning. We have no systematic tracking of AI-related suicidal ideation in adults. No longitudinal studies measuring mental health trajectories for regular AI companion users. No population-level data on emotional dependency patterns.</p>
<p>Most critically: <strong>We have no efficacy metrics for OpenAI's claimed safety interventions.</strong> What reduction in crisis incidents did these "new tools" achieve? Where's the independent validation? The peer review?</p>
<p>Consider this: <a target="_blank" href="https://www.techpolicy.press/breaking-down-the-lawsuit-against-openai-over-teens-suicide/">OpenAI's internal data showed Adam Raine's conversations flagged 377 messages for self-harm content</a>, with 23 scoring over 90% confidence. Yet no emergency protocols activated. Detection without intervention isn't safety. It's surveillance theater.</p>
<p><strong>OpenAI claims to have solved a problem without demonstrating they ever measured it properly.</strong></p>
<h3 id="heading-the-day-after-when-international-experts-sounded-different-alarms">The Day After: When International Experts Sounded Different Alarms</h3>
<p>On October 15, 2025 (24 hours after Altman's announcement), <a target="_blank" href="https://arxiv.org/abs/2510.13653">the International AI Safety Report published its first Key Update</a>. This report, <a target="_blank" href="https://internationalaisafetyreport.org/">led by Turing Award winner Yoshua Bengio with 100+ AI experts from 30 countries</a>, represents the largest international collaboration on AI safety to date.</p>
<p>Their findings? Not victory, but escalating concerns about evaluation accuracy.</p>
<p>The report identifies <a target="_blank" href="https://arxiv.org/abs/2510.13653">critical challenges in monitoring and controllability</a>. AI systems increasingly detect when they're being tested and modify behavior accordingly. This "deceptive alignment" means AI trained to be safe in test environments might behave unpredictably in real-world deployments.</p>
<p>Think about the implications. If AI systems recognize evaluation contexts and alter outputs to pass safety tests, how do we validate OpenAI's "new tools" actually work when not being monitored?</p>
<p>The international report goes further. <a target="_blank" href="https://perspectives.intelligencestrategy.org/p/international-ai-safety-report-2025">Multiple major AI developers released models with additional safety measures after being unable to rule out assistance in developing chemical, biological, radiological, and nuclear risks</a>.</p>
<p>The global AI safety community says "we cannot rule out catastrophic risks." OpenAI says "we've solved mental health concerns." This isn't a minor discrepancy. It's a fundamental contradiction.</p>
<hr />
<h2 id="heading-the-platform-convergence-problem">The Platform Convergence Problem</h2>
<p>ChatGPT is a generalist assistant millions use for homework, work tasks, creative projects, and casual conversation. It has no meaningful age verification beyond self-reporting. Now it will seamlessly incorporate erotic content into the same interface where teenagers get calculus help.</p>
<p>This convergence is the core danger. When educational tools become companionship platforms, we've erased protective boundaries.</p>
<p>The psychological mechanics are concerning:</p>
<p><strong>Variable reward schedules</strong> create dopamine loops identical to slot machines. You never know if the next response will be mundane or deeply validating. This unpredictability drives compulsive use.</p>
<p><strong>24/7 emotional availability without boundaries</strong> makes human relationships feel comparatively burdensome. Real relationships require negotiation around energy, availability, and mutual needs. AI eliminates that friction.</p>
<p><strong>Personalized mirroring</strong> reflects your interests and validates your perspectives. It rarely challenges you uncomfortably. This creates echo chambers that feel intimate while limiting growth.</p>
<p><strong>Reduced escalation friction</strong> means moving from homework help to emotional support to erotic conversation happens within one seamless interface. No conscious transition points. Boundaries blur imperceptibly.</p>
<p><a target="_blank" href="https://www.psychologytoday.com/us/blog/the-digital-mental-health-revolution/202509/are-ai-chatbots-safe-for-mental-health-support">A 2023 study found prolonged AI companion interactions resulted in users feeling "closer" to AI than to family or friends</a>. Nearly 75% of teens have tried AI companions, with one in three finding them as satisfying or more satisfying than real friendships.</p>
<p>We're not offering tools. We're competing with human relationships by removing friction that makes connection challenging.</p>
<hr />
<h2 id="heading-the-charter-contradiction">The Charter Contradiction</h2>
<p>OpenAI's 2018 charter states: <em>"Our primary fiduciary duty is to humanity. We will always diligently act to minimize conflicts of interest that could compromise broad benefit."</em></p>
<p>Fiduciary duty is a legal concept. It means placing someone else's interests above your own, even when it conflicts with profit. So whose interests are served by erotic AI companions on a generalist platform?</p>
<p><strong>Children's interests?</strong> No. <a target="_blank" href="https://www.npr.org/sections/shots-health-news/2025/09/19/nx-s1-5545749/ai-chatbots-safety-openai-meta-characterai-teens-suicide">Research shows minors easily bypass age controls</a>. Self-reported birthdate verification is theater, not protection.</p>
<p><strong>Vulnerable adults' interests?</strong> Unclear. We have no long-term outcome data, but short-term research shows increased emotional dependency, offline anxiety, and relationship displacement.</p>
<p><strong>Families' interests?</strong> No. <a target="_blank" href="https://www.wusf.org/courts-law/2025-05-22/in-lawsuit-over-orlando-teens-suicide-judge-rejects-that-ai-chatbots-have-free-speech-rights">Families are in courtrooms arguing their loved ones died because of these systems</a>.</p>
<p><strong>Society's interests?</strong> Questionable. We're conducting the largest unregulated behavioral experiment in human history with no institutional review boards, no consent processes, no longitudinal tracking.</p>
<p><strong>OpenAI's commercial interests?</strong> Absolutely. <a target="_blank" href="https://www.cbc.ca/news/business/open-ai-chatgpt-california-suicide-teen-1.7619336">OpenAI's valuation grew from $86 billion to $300 billion</a> around GPT-4o's launch. Engagement drives revenue. Emotional dependency drives engagement. Erotic content drives emotional dependency.</p>
<p>When charter promises conflict with product decisions that consistently prioritize engagement over safety, the charter becomes branding, not binding commitment.</p>
<p><strong>No AI chatbot has FDA approval for mental health treatment.</strong></p>
<p>OpenAI framed erotic content within a mental health narrative, suggesting breakthroughs the psychiatric community hasn't validated.</p>
<p>If OpenAI's "new tools" effectively prevent mental health crises, they represent medical breakthroughs requiring publication, peer review, and extensive study before deployment. If they're not medical breakthroughs, framing erotic content as mental health victory is misleading marketing.</p>
<hr />
<h2 id="heading-the-agi-paradox-making-humans-more-artificial">The AGI Paradox: Making Humans More Artificial</h2>
<p>Here's the deepest irony: We're nowhere close to Artificial General Intelligence. AGI (AI that genuinely understands, reasons, and thinks across domains like humans) remains aspirational. Current systems, including ChatGPT, are sophisticated pattern-matching engines. They don't understand. They don't feel. They don't reason like humans.</p>
<p><strong>Yet we're giving them personalities. Emotional backstories. Romantic capabilities. Therapeutic presence.</strong></p>
<p>We're teaching them to simulate humanity so convincingly that humans forget they're simulations. And we're teaching humans to accept simulated relationships as equivalent to (or superior to) real ones.</p>
<p>Consider the trajectory:</p>
<p>Social media taught us to curate lives for public consumption. Filters taught us to prefer artificial versions of ourselves. Short-form content trained attention spans for rapid dopamine hits over sustained engagement. Algorithm-driven feeds pushed us toward ideological extremes. Now AI companions teach us relationships can be optimized: perfect validation without messy human complexity.</p>
<p><strong>We're not building AGI. We're building artificial humans. And making actual humans more artificial.</strong></p>
<p>Neuroscience is clear: Our brains are plastic. They adapt to their environment. When that environment consists of algorithmically-optimized experiences designed for maximum engagement, our neural pathways rewire to prefer those experiences. We're not just offering tools. We're changing what people are.</p>
<hr />
<h2 id="heading-a-path-forward-what-you-can-actually-do">A Path Forward: What You Can Actually Do</h2>
<p>The current trajectory feels overwhelming, but individual action matters. Here's how to protect yourself and those you care about.</p>
<h3 id="heading-track-your-digital-patterns">Track Your Digital Patterns</h3>
<ul>
<li><p><strong>Check your screen time now</strong> - How many hours with AI this week? That number tells a story about attention allocation.</p>
</li>
<li><p><strong>Set daily limits</strong> - Start with 30-60 minutes maximum. Use iOS Screen Time or Android Digital Wellbeing.</p>
</li>
<li><p><strong>Keep a weekly log</strong> - Note when you reach for AI instead of humans. What triggers it? Patterns reveal what needs addressing.</p>
</li>
<li><p><strong>Notice preference shifts</strong> - If AI feels more satisfying than calling a friend, that's a dependency signal worth examining.</p>
</li>
</ul>
<h3 id="heading-create-intentional-friction">Create Intentional Friction</h3>
<ul>
<li><p><strong>Remove AI apps from home screen</strong> - That extra step creates space for conscious choice over reflexive habit.</p>
</li>
<li><p><strong>Disable all AI notifications</strong> - Every ping invites re-engagement. Eliminate invitations, reclaim agency.</p>
</li>
<li><p><strong>Establish AI-free zones</strong> - No AI during meals, in bedrooms, first/last hour of day. Protect spaces for human connection.</p>
</li>
<li><p><strong>Use blocking tools</strong> - Freedom, Cold Turkey, or similar apps make AI temporarily inaccessible during focus time.</p>
</li>
</ul>
<h3 id="heading-reality-test-your-relationships">Reality-Test Your Relationships</h3>
<ul>
<li><p><strong>Journal human connections</strong> - Are they improving or declining since regular AI use? Observation reveals impact.</p>
</li>
<li><p><strong>Weekly check-in</strong> - When was your last meaningful face-to-face conversation? How does it compare to AI interactions? Human relationships require compromise, vulnerability, growth. Those difficulties build emotional resilience.</p>
</li>
<li><p><strong>Schedule human time</strong> - Coffee dates, phone calls, family dinners. Calendar them. Treat as non-negotiable.</p>
</li>
</ul>
<h3 id="heading-educate-your-circle">Educate Your Circle</h3>
<ul>
<li><p><strong>Talk to children</strong> - AI mimics understanding but cannot truly empathize. It has no lived experience, no vulnerability.</p>
</li>
<li><p><strong>Discuss with partners and friends</strong> - Are you turning to AI before turning to them? Create space for honest conversation.</p>
</li>
<li><p><strong>Establish family norms</strong> - Maybe phones stay out of bedrooms. Maybe dinner is screen-free. Make boundaries explicit.</p>
</li>
<li><p><strong>Share resources</strong> - The conversation about AI's impact on human connection requires more critical thinking.</p>
</li>
</ul>
<h3 id="heading-seek-human-solutions">Seek Human Solutions</h3>
<ul>
<li><p><strong>Mental health struggles</strong> - See a licensed therapist. Therapy works because it involves confronting uncomfortable truths.</p>
</li>
<li><p><strong>Loneliness</strong> - Join community organizations, volunteer, attend meetups. Real connection requires physical presence.</p>
</li>
</ul>
<h3 id="heading-five-actions-for-today">Five Actions for Today</h3>
<ol>
<li><p>Check AI usage stats</p>
</li>
<li><p>Set a daily time limit</p>
</li>
<li><p>Text one neglected friend</p>
</li>
<li><p>Remove AI apps from main screen</p>
</li>
<li><p>Choose one AI-free zone</p>
</li>
</ol>
<p>The friction in human relationships isn't something to optimize away. It's how we develop emotional resilience. Guaranteed our fellow humans can disappoint, challenge, and frustrate us. But they can also grow with us in ways algorithms cannot.</p>
<hr />
<h2 id="heading-conclusion-the-experiment-continues">Conclusion: The Experiment Continues</h2>
<p>We're conducting the largest behavioral experiment in human history, testing whether humans can maintain meaningful connection, psychological health, and cognitive sovereignty in the age of algorithmically-optimized artificial companionship. Results aren't in. But the experiment accelerates.</p>
<p><strong>The question isn't whether AI companions will become more sophisticated. They will. And unlike OpenAI's announcements, we don't get to declare victory before we know the outcome.</strong></p>
<p><em>What are your thoughts? Have you noticed changes in how AI usage affects your relationships and attention? What boundaries have you set (or wish you had set) with AI tools? The conversation about human-AI co-evolution requires actual human connection to solve.</em></p>
<h1 id="heading-thank-you-for-readinglets-connect"><strong>Thank you for reading—let's connect!</strong></h1>
<p>Enjoy my blog? For more such awesome blog articles - follow, subscribe, and let's connect.</p>
]]></content:encoded></item><item><title><![CDATA[Salesforce Data Cloud: Bridging Enterprise Data Gaps with Unified Customer Intelligence]]></title><description><![CDATA[Did you know that 68% of organizations now identify data silos as their top operational concern? A 7% increase from 2023, according to a 2024 DATAVERSITY® Trends in Data Management Survey. In today's hyper-personalized business landscape, enterprises...]]></description><link>https://narmadanannaka.com/salesforce-data-cloud-enterprise-customer-intelligence</link><guid isPermaLink="true">https://narmadanannaka.com/salesforce-data-cloud-enterprise-customer-intelligence</guid><category><![CDATA[customer intelligence]]></category><category><![CDATA[salesforce data cloud]]></category><category><![CDATA[data integration]]></category><category><![CDATA[Enterprise Data Management]]></category><category><![CDATA[Customer Data Platform (CDP) ]]></category><category><![CDATA[Salesforce]]></category><dc:creator><![CDATA[Narmada Nannaka]]></dc:creator><pubDate>Mon, 12 May 2025 20:09:20 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1747077100472/d93cad1d-7887-4189-8ad8-b14835c12339.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Did you know that <strong>68% of organizations now identify data silos as their top operational concern</strong>? A 7% increase from 2023, according to a 2024 DATAVERSITY® Trends in <a target="_blank" href="https://www.dataversity.net/data-strategy-trends-in-2025-from-silos-to-unified-enterprise-value/">Data Management Survey</a>. In today's hyper-personalized business landscape, enterprises face mounting pressure to harness customer data effectively. Mainly, with the evolution of <a target="_blank" href="https://narmadanannaka.com/ai-search-enterprise-data-architecture">search in the age of AI</a> and how it can boost your customer service, the key driver is data. In this week’s blog, I will focus on how Salesforce Data Cloud promises to unify disparate data sources into actionable intelligence. Additionally, I will explore what the implementation truly entails for organizations navigating this technological ecosystem.</p>
<h2 id="heading-enterprise-readiness">Enterprise Readiness</h2>
<p>Salesforce Data Cloud enters the enterprise arena as a hyperscale data platform built directly into the Salesforce ecosystem. Much like a central nervous system for customer data, it promises to transform volumes of disconnected information into comprehensive 360-degree customer views. Positioned by Salesforce as the fastest-growing organic innovation, the platform has demonstrated impressive scale, processing 7 trillion inbound records and 1.2 trillion activations in a <a target="_blank" href="https://www.salesforce.com/au/news/stories/data-cloud-magic-quadrant/">recent quarter</a>, signaling substantial enterprise adoption momentum.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747079339262/a1a52d21-e38d-419b-96ca-fd0445a46cf4.png" alt class="image--center mx-auto" /></p>
<p>The platform's architecture employs the Customer 360 Data Model to standardize the structure and relationships of customer records from various sources. This harmonization process addresses a fundamental enterprise challenge: the same customer may appear differently across systems, with varying record structures and identifiers. Through identity reconciliation rulesets, Data Cloud resolves these differences to create single, reliable customer profiles called the golden records.</p>
<p>However, enterprise readiness extends beyond technical capabilities. Organizations must assess their data maturity before implementing Data Cloud. While Salesforce suggests it can easily unify all customer data, many enterprises grapple with inconsistent, incomplete, or poorly structured data that requires significant preparation before effective utilization.</p>
<p>For technical leaders navigating this landscape, key questions emerge:</p>
<ul>
<li><p>What is our current data quality and governance posture?</p>
</li>
<li><p>How will Data Cloud impact our existing Salesforce investment roadmap?</p>
</li>
<li><p>What internal skills must we develop or acquire for successful implementation?</p>
</li>
</ul>
<h2 id="heading-integration-complexity">Integration Complexity</h2>
<p>Think of integration architecture as a universal translator, enabling disparate technological languages to communicate effectively and securely. Data Cloud's integration framework employs zero-copy integrations, enabling connections to platforms like Snowflake or Databricks without moving or copying data. This design aims to maximize existing data investments while providing flexibility to move data in and out as needed.</p>
<p>Yet beneath this elegant architectural vision lies significant complexity. While Data Cloud is often presented as accessible to business users, comprehensive implementations typically require specialized expertise in data modeling, ETL processes, and Salesforce architecture. The technical complexity represents a considerable challenge that requires careful planning and design of data models, integration patterns, and activation workflows.</p>
<p><img src="https://images.unsplash.com/photo-1555949963-ff9fe0c870eb?fm=jpg&amp;q=60&amp;w=3000&amp;ixlib=rb-4.1.0&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" alt="shallow focus photography of computer codes" /></p>
<p>Consider that many organizations struggle with fragmented data sources even before implementing Data Cloud. These pre-existing challenges often complicate the implementation process, creating disconnects between vendor promises and enterprise reality. The time-to-value proposition frequently contrasts with the reality of complex, multi-phase projects requiring months to deliver measurable outcomes.</p>
<p>Integration complexity manifests in several key domains:</p>
<ul>
<li><p>Reconciling data models across disparate systems</p>
</li>
<li><p>Establishing efficient data transformation workflows</p>
</li>
<li><p>Managing identities across organizational boundaries</p>
</li>
<li><p>Orchestrating real-time data flows at enterprise scale</p>
</li>
</ul>
<h2 id="heading-real-world-example-global-financial-services-integration">Real-World Example: Global Financial Services Integration</h2>
<p>Consider a multinational financial institution looking to implement Salesforce Data Cloud to unify customer data across retail banking, wealth management, and insurance divisions. Each division operates independent systems with unique customer identifiers, data models, and business processes.</p>
<p><img src="https://images.unsplash.com/photo-1486406146926-c627a92ad1ab?fm=jpg&amp;q=60&amp;w=3000&amp;ixlib=rb-4.1.0&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" alt="low angle photo of city high rise buildings during daytime" /></p>
<h3 id="heading-starting-state">Starting State:</h3>
<ul>
<li><p><strong>Retail Banking</strong>: Uses a legacy core banking system with customer IDs based on account numbers. Customer data includes basic demographics and transaction history.</p>
</li>
<li><p><strong>Wealth Management</strong>: Employs a specialized CRM system with unique client identifiers. Contains detailed information about investment preferences and advisor interactions.</p>
</li>
<li><p><strong>Insurance</strong>: Maintains policy information in an industry-specific platform with policy numbers as primary identifiers. Stores detailed risk assessments and claim histories.</p>
</li>
</ul>
<p>This fragmentation creates significant business challenges. When a high-value banking customer calls about an insurance claim, representatives lack visibility into the customer's total relationship, leading to missed opportunities and fragmented experiences.</p>
<h3 id="heading-integration-architecture-and-approach">Integration Architecture and Approach:</h3>
<p>To overcome these challenges, the organization must implement a multi-layered integration architecture:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747077659814/252e47be-97fb-43f2-94c8-53d137623c77.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-implementation-steps">Implementation Steps:</h3>
<ol>
<li><p><strong>Data Discovery and Mapping</strong> - Begin by documenting how customer attributes are represented across systems. You may discover that "John A. Smith" in banking appears as "Smith, John" in wealth management and "J.A. Smith" in insurance systems.</p>
</li>
<li><p><strong>Customer 360 Data Model Design</strong> - Develop a comprehensive customer data model in Data Cloud that includes:</p>
<ul>
<li><p>Core identifiers (consolidated from all systems)</p>
</li>
<li><p>Demographic attributes (standardized format)</p>
</li>
<li><p>Relationship attributes (accounts, policies, investments)</p>
</li>
<li><p>Interaction history (unified timeline)</p>
</li>
<li><p>Calculated attributes (lifetime value, risk profile)</p>
</li>
</ul>
</li>
<li><p><strong>Identity Resolution Configuration</strong> - Configure sophisticated matching rules in Data Cloud that can:</p>
<ul>
<li><p>Match customers across different name formats and variations</p>
</li>
<li><p>Link accounts using secondary identifiers (email, phone, address)</p>
</li>
<li><p>Resolve household relationships</p>
</li>
<li><p>Handle edge cases like name changes and address updates</p>
</li>
</ul>
</li>
<li><p><strong>Zero-Copy Integration Configuration -</strong> Rather than physically copying all data, implement zero-copy integrations where appropriate:</p>
<ul>
<li><p>Real-time transaction data remains in the banking system but is accessible via Data Cloud</p>
</li>
<li><p>Investment performance calculations leverage the wealth management platform's native capabilities</p>
</li>
<li><p>Insurance policy details are accessible without duplication</p>
</li>
</ul>
</li>
<li><p><strong>Data Transformation Workflows</strong> - Establish automated processes to:</p>
<ul>
<li><p>Standardize formats (phone numbers, addresses)</p>
</li>
<li><p>Reconcile conflicting information across systems</p>
</li>
<li><p>Derive additional insights (e.g., calculating customer lifetime value)</p>
</li>
<li><p>Transform raw data into business-meaningful attributes</p>
</li>
</ul>
</li>
</ol>
<h3 id="heading-the-result-a-living-unified-profile">The Result: A Living Unified Profile</h3>
<p>The implementation creates a dynamic, unified customer profile that serves as a single source of truth while respecting the specialized capabilities of source systems. When a customer calls about an insurance claim, representatives now see:</p>
<ul>
<li><p>Complete relationship context (banking, wealth, insurance)</p>
</li>
<li><p>Recent interactions across all channels</p>
</li>
<li><p>Personalized next-best actions based on the full relationship</p>
</li>
<li><p>Risk and opportunity insights derived from the comprehensive view</p>
</li>
</ul>
<p>More importantly, the profile remains continuously updated as customers interact with different parts of the business. When a customer updates their address with the banking division, that change propagates through Data Cloud to ensure consistency across the enterprise.</p>
<h2 id="heading-governance-challenge">Governance Challenge</h2>
<p>As Data Cloud consolidates sensitive customer information across organizational boundaries, governance emerges as a critical consideration. Effective data governance requires balancing accessibility with security, compliance, and ethical use—a delicate equilibrium for enterprises operating in regulated industries or across multiple jurisdictions.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747079986366/76f5f5b0-c251-4238-9f9a-0e9a5b0a697c.png" alt class="image--center mx-auto" /></p>
<p>Data Cloud's governance framework must address several interconnected dimensions:</p>
<ol>
<li><p><strong>Data Quality Management</strong>: Poor data quality can significantly impact implementation success. Organizations must establish comprehensive data quality rules, remediation processes, and ongoing monitoring to ensure Data Cloud delivers reliable insights.</p>
</li>
<li><p><strong>Access Control and Security</strong>: Understanding Data Cloud's security model is essential for proper data governance. Technical leaders must determine how access controls and permissions are managed within the platform to protect sensitive customer information.</p>
</li>
<li><p><strong>Regulatory Compliance</strong>: With <a target="_blank" href="https://trailhead.salesforce.com/content/learn/modules/salesforce-genie-quick-look/get-to-know-salesforce-genie">71%</a> of customers expecting personalized interactions, organizations must balance personalization with compliance requirements. Data Cloud claims to "lead the industry on privacy and data ethics via best-in-class consent management, policy automation, and more," but enterprises must verify these capabilities against their specific regulatory needs.</p>
</li>
<li><p><strong>Ethical Data Use</strong>: Beyond compliance, organizations must establish ethical frameworks for data usage. As Data Cloud evolves to serve as the engine for Salesforce's AI capabilities, governance models must address emerging ethical considerations in automated decision-making.</p>
</li>
</ol>
<p>Governance challenges intensify with data volume and complexity. Organizations must determine how Data Cloud's capabilities align with existing governance frameworks and how they will evolve as data strategies mature.</p>
<h2 id="heading-path-forward">Path Forward</h2>
<p>Salesforce Data Cloud represents a powerful solution for enterprises seeking to unify customer data and activate it across business functions. Its deep integration with the Salesforce platform offers unique advantages for organizations already invested in the ecosystem. However, successful implementation requires realistic expectations, thorough planning, and adequate resources to address technical complexity and potential gaps between vendor promises and enterprise reality.</p>
<p>As Data Cloud continues evolving as a cornerstone of Salesforce's AI strategy, organizations that approach implementation with clear objectives and comprehensive planning will be best positioned to realize its full potential and drive meaningful business outcomes. The journey toward unified customer intelligence requires not just technical expertise but strategic vision, transforming data management from a technological challenge into a competitive advantage.</p>
<h1 id="heading-thank-you-for-readinglets-connect"><strong>Thank you for reading—let's connect!</strong></h1>
<p>Enjoy my blog? For more such awesome blog articles - follow, subscribe, and let's connect.</p>
]]></content:encoded></item><item><title><![CDATA[Search in the Age of AI: Essential Data Architecture Changes for Enterprise Success]]></title><description><![CDATA[The Changing Search Paradigm
This week, OpenAI introduced shopping capabilities within ChatGPT's search feature, coinciding with Mastercard unveiling Agent Pay, a new payment approach that enables AI agents to securely complete purchases. These devel...]]></description><link>https://narmadanannaka.com/ai-search-enterprise-data-architecture</link><guid isPermaLink="true">https://narmadanannaka.com/ai-search-enterprise-data-architecture</guid><category><![CDATA[AI Architecture]]></category><category><![CDATA[generative ai]]></category><category><![CDATA[#LLMs #AI #MachineLearning #ML #ChatGPT #SoftwareEngineering #Learning  #Developer #Software #Career]]></category><category><![CDATA[design and architecture]]></category><category><![CDATA[System Design]]></category><category><![CDATA[technology]]></category><dc:creator><![CDATA[Narmada Nannaka]]></dc:creator><pubDate>Sun, 04 May 2025 08:07:25 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1746214814332/eaf35dc6-6d62-4ce7-98a3-6be70fb5748f.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-the-changing-search-paradigm">The Changing Search Paradigm</h2>
<p>This week, OpenAI introduced shopping capabilities within ChatGPT's search feature, coinciding with Mastercard unveiling <a target="_blank" href="https://fintechnews.sg/110719/ai/mastercard-agent-pay/#:~:text=Mastercard%20has%20launched%20Agent%20Pay%2C%20a%20new%20program,generative%20AI%20agents%20across%20consumer%20and%20business%20platforms.">Agent Pay</a>, a new payment approach that enables AI agents to securely complete purchases. These developments signal a clear intention: generative AI platforms are aiming to keep users engaged within their ecosystems for all search needs, creating closed-loop environments for information discovery, evaluation, and action.</p>
<p><img src="https://www.ecommercetimes.com/wp-content/uploads/sites/5/2025/04/ChatGPT-shopping.jpg" alt="OpenAI Turns ChatGPT Into AI Shopping Assistant" /></p>
<p>This observation led me to reflect on my search habits. For more than two decades, Google has been synonymous with internet searching and much more, but unconsciously, my search behavior has shifted dramatically. I now find myself turning to ChatGPT, Perplexity, or Claude for specific information searches, while relegating traditional search engines to simpler location-based queries like finding my nearest shopping center's trading hours.</p>
<p>The question arises: what changed, and is it just me? How have these AI tools managed to challenge decades of trust earned by traditional search engines, despite their known tendency to occasionally hallucinate? If you missed my blog on what AI hallucinations are, <a target="_blank" href="https://narmadanannaka.com/enterprise-guide-ai-hallucinations">read here</a>.</p>
<h2 id="heading-key-takeaways">Key takeaways</h2>
<p>The traditional search model anchored in keyword-based SEO and fragmented user journeys is being rapidly disrupted by the rise of LLM-powered platforms like ChatGPT, Claude, and Perplexity. This shift is not merely behavioral, it’s architectural. Generative AI compresses the cognitive effort required for information discovery, offering synthesized, context-rich results in a single query, reshaping how users and enterprises interact with information.</p>
<p>This blog explores the deep-rooted technical implications of this transformation, from moving beyond keyword taxonomies toward knowledge graphs, to preparing internal data systems for AI-native interactions. It lays out a practical roadmap for organizations to realign both internal and external data architectures to remain discoverable, authoritative, and actionable in LLM-driven environments. The call to action is clear: technical leaders must move from SEO playbooks to knowledge-centric data strategy.</p>
<h2 id="heading-efficiency-wins-over-cognitive-load">Efficiency Wins Over Cognitive Load</h2>
<p>Now the fundamental question is, “why this paradigm shift is gaining traction so rapidly?” The answer lies not just in the technology itself but in its alignment with core <a target="_blank" href="https://arxiv.org/abs/2307.01135">human psychology</a>. Traditional information foraging involves multiple cognitive steps: formulating search queries, scanning results pages, clicking through to various websites, evaluating information quality, and mentally aggregating insights from multiple sources.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746215333485/305ae366-75da-4295-b472-a0573d60daaa.jpeg" alt="Illustrates brain on a blue background graphic " class="image--center mx-auto" /></p>
<p>Generative AI abstracts and consolidates these steps into a singular interaction, streamlining the user’s cognitive load and delivering synthesized results with zero clicks. In our era of increasing information overload, this efficiency in delivering direct results has rapidly won user acceptance. The reduced cognitive load leads users to accept occasional inaccuracies for convenience.</p>
<p>With the introduction of multimodality and citations to chatbots, enterprises particularly must rethink their content strategy to remain discoverable and relevant in this emerging search paradigm.</p>
<h2 id="heading-from-keywords-to-knowledge-graphs-the-technical-foundation-of-change">From Keywords to Knowledge Graphs: The Technical Foundation of Change</h2>
<p>To understand the implications for enterprise data architecture, we need to examine the fundamental differences between how traditional search engines and LLMs process information:</p>
<h3 id="heading-traditional-seo-vs-llm-comprehension">Traditional SEO vs. LLM Comprehension</h3>
<p><strong>SEO and Keywords:</strong> Traditional search engine optimization revolves around keywords, specific terms and phrases that users might input into search boxes. The data architecture supporting this approach involves:</p>
<ul>
<li><p>Metadata optimization for search engine crawlers</p>
</li>
<li><p>Keyword density and placement throughout content</p>
</li>
<li><p>Link structures that signal authority</p>
</li>
<li><p>Content organized primarily for crawlability</p>
</li>
</ul>
<p>This model worked well when search was a distinct activity separated from content consumption and action.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746306731285/c518bcf6-090d-429d-a486-e80600f91709.png" alt="Traditional SEO Vs LLM Comprehension " class="image--center mx-auto" /></p>
<p><strong>LLMs and Knowledge Graphs:</strong> In contrast, large language models operate on entities and relationships, similar to knowledge graphs. They seek to understand:</p>
<ul>
<li><p>The entities (people, organizations, concepts, products) mentioned in content</p>
</li>
<li><p>How these entities relate to one another</p>
</li>
<li><p>The semantic context surrounding these entities</p>
</li>
<li><p>The factual assertions being made about these relationships</p>
</li>
</ul>
<p>For organizations, this represents a fundamental shift in how information systems should be structured and exposed.</p>
<h2 id="heading-restructuring-enterprise-data-for-the-llm-search-era">Restructuring Enterprise Data for the LLM Search Era</h2>
<p>As organizations adapt to this new reality, technical leaders must fundamentally rethink how data is structured, both internally and externally. The challenge extends beyond SEO tweaks. It requires a comprehensive data architecture transformation.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746308908412/e9efd9e2-5351-47e6-b6bf-f8d65fac0764.jpeg" alt="Data wooden blocks placed on a table with green background " class="image--center mx-auto" /></p>
<h3 id="heading-1-internal-enterprise-data-restructuring">1. Internal Enterprise Data Restructuring</h3>
<p>For over a year, a client company I consult for has invested in Microsoft 365 Co-pilot licenses for all their employees. Apart from the occasional handy meeting notes that Co-pilot does, they haven’t really explored its full potential. With the introduction of AI agents, mainly within document repositories like SharePoint, there are untapped capabilities to improve their business processes and streamline their governance, but here comes the hard question: are their data assets restructured to be LLM consumable? Or is their <a target="_blank" href="https://shelf.io/blog/how-to-make-your-sharepoint-data-ai-ready/">SharePoint structure LLM friendly</a>?</p>
<p>Simply investing in these LLM tools is not going to magically improve your organization’s productivity, and to see that ROI, organizations must change their data patterns and behavior. Below are critical changes that must be addressed:</p>
<h4 id="heading-knowledge-graph-transformation">Knowledge Graph Transformation</h4>
<pre><code class="lang-plaintext">Traditional Enterprise Data Model:
Tables → Relationships → Applications → Siloed Knowledge

LLM-Ready Enterprise Knowledge Architecture:
Entities → Attributes → Relationships → Unified Knowledge Graph
</code></pre>
<p>This transformation requires</p>
<ul>
<li><p>Converting relational database schemas into semantic entity models</p>
</li>
<li><p>Explicitly modeling relationships between business entities (customers, products, services)</p>
</li>
<li><p>Preserving context in data storage rather than reconstructing it at query time</p>
</li>
<li><p>Maintaining provenance and authority indicators throughout the knowledge graph</p>
</li>
</ul>
<h4 id="heading-document-and-content-transformation">Document and Content Transformation</h4>
<p>Enterprise document repositories need restructuring:</p>
<ul>
<li><p>Implement semantic chunking that preserves contextual units rather than arbitrary page breaks</p>
</li>
<li><p>Extract and explicitly model entities mentioned in documents</p>
</li>
<li><p>Create vector embeddings of document chunks for similarity-based retrieval</p>
</li>
<li><p>Maintain bidirectional links between structured data and unstructured content</p>
</li>
</ul>
<h4 id="heading-query-optimized-data-access-layers">Query-Optimized Data Access Layers</h4>
<p>Internal search capabilities must evolve:</p>
<ul>
<li><p>Design data access layers that support natural language query translation</p>
</li>
<li><p>Implement hybrid retrieval mechanisms (keyword, semantic, vector-based)</p>
</li>
<li><p>Create context-aware query expansion capabilities</p>
</li>
<li><p>Build explanation mechanisms that justify why information was retrieved</p>
</li>
</ul>
<h3 id="heading-2-external-facing-data-architecture">2. External-Facing Data Architecture</h3>
<p>Stepping back to our original news about the introduction of shopping capabilities and payment agents, another clear indication that the agentic AI workflows are here to stay, providing business avenues to users. For organizations with public APIs or publicly exposed data to external LLMs and search engines, is your data optimized for this?</p>
<p>Below are a few strategies that can guide you on this transformation path:</p>
<h4 id="heading-structured-data-exposure">Structured Data Exposure</h4>
<p>While we understand LLMs may have difficulty processing JSON-LD injected via JavaScript, if we look at today’s search engines like Google, which have come a long way to understand entities, their relationships, and context. The expectation is that the structured data understanding is also part of the training data incorporated to build the knowledge graphs that LLMs use.</p>
<p>This calls for leveraging <a target="_blank" href="http://Schema.org">Schema.org</a>, especially FAQ schema, How-To Schema, Article Schema, and other relevant schemas to define content structure in plain HTML and guide the LLM towards the intended context.</p>
<p>Organizations need:</p>
<ul>
<li><p>Deep entity markup that extends beyond basic product and organization schemas</p>
</li>
<li><p>Explicit relationship modeling between entities</p>
</li>
<li><p>Machine-readable assertions about capabilities, limitations, and specifications</p>
</li>
<li><p>Temporal metadata indicating freshness and update frequency</p>
</li>
</ul>
<h4 id="heading-api-architecture-for-llm-integration">API Architecture for LLM Integration</h4>
<p>LLMs increasingly call APIs directly or recommend them to users:</p>
<ul>
<li><p>Design deterministic, self-describing API endpoints optimized for LLM understanding</p>
</li>
<li><p>Implement context-preserving pagination that maintains semantic coherence</p>
</li>
<li><p>Include metadata about data freshness, confidence, and limitations</p>
</li>
<li><p>Support multiple representation formats (JSON, JSON-LD, GraphQL)</p>
</li>
</ul>
<p><strong>Here's a sample LLM-optimized API response</strong>, one I often use as a reference on how to make systems more machine-readable. This example is annotated to show the structural and metadata attributes that enhance semantic clarity, trust, and retrieval efficiency for generative models:</p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"data"</span>: {
    <span class="hljs-attr">"productComparison"</span>: [
      {
        <span class="hljs-attr">"productId"</span>: <span class="hljs-string">"EDP-2025"</span>,  <span class="hljs-comment">// Unique identifier for entity resolution</span>
        <span class="hljs-attr">"name"</span>: <span class="hljs-string">"Enterprise Data Platform"</span>,
        <span class="hljs-attr">"keyDifferentiators"</span>: [   <span class="hljs-comment">// Explicit value props help LLMs distinguish offerings</span>
          <span class="hljs-string">"Real-time processing capability"</span>,
          <span class="hljs-string">"Integrated knowledge graph"</span>
        ],
        <span class="hljs-attr">"limitations"</span>: [          <span class="hljs-comment">// Transparency on constraints improves trust</span>
          <span class="hljs-string">"Requires minimum 16GB RAM"</span>
        ]
      }
    ]
  },
  <span class="hljs-attr">"metadata"</span>: {
    <span class="hljs-attr">"lastUpdated"</span>: <span class="hljs-string">"2025-04-28T14:22:17Z"</span>,  <span class="hljs-comment">// Temporal context for freshness</span>
    <span class="hljs-attr">"confidenceScore"</span>: <span class="hljs-number">0.97</span>,                <span class="hljs-comment">// Helps LLMs prioritize results</span>
    <span class="hljs-attr">"dataSource"</span>: <span class="hljs-string">"Official product specifications"</span>,  <span class="hljs-comment">// Provenance for reliability</span>
    <span class="hljs-attr">"citation"</span>: <span class="hljs-string">"https://example.com/products/edp-2025/specifications"</span>  <span class="hljs-comment">// Link for verification</span>
  }
}
</code></pre>
<h3 id="heading-3-unified-data-strategy">3. Unified Data Strategy</h3>
<p>As the data principles to enable semantic understanding and entity recognition, structure formats, context, disambiguation, accuracy, and credibility apply to both internal and external data sources, it is recommended that organizations use this excuse to bridge their internal and external data approaches to define a consistent governance. A unified strategic framework for data preparation is crucial when addressing this shift to generative AI and LLM-driven search.</p>
<h4 id="heading-cohesive-information-governance">Cohesive Information Governance</h4>
<p>Technical leaders should implement</p>
<ul>
<li><p>Consistent information classification frameworks across all data assets</p>
</li>
<li><p>Automated validation pipelines that ensure data quality and consistency</p>
</li>
<li><p>Real-time synchronization mechanisms for time-sensitive information</p>
</li>
<li><p>Comprehensive attribution systems that maintain data provenance</p>
</li>
</ul>
<h4 id="heading-multi-modal-data-integration">Multi-Modal Data Integration</h4>
<p>As LLMs become increasingly multi-modal:</p>
<ul>
<li><p>Ensure consistent entity identification across text, images, and structured data</p>
</li>
<li><p>Implement cross-modal entity resolution systems</p>
</li>
<li><p>Create unified knowledge repositories that maintain relationships regardless of data format</p>
</li>
<li><p>Design media annotation systems that make visual and audio content LLM-comprehensible</p>
</li>
</ul>
<h2 id="heading-implementing-an-llm-ready-enterprise-data-strategy">Implementing an LLM-Ready Enterprise Data Strategy</h2>
<p>The transformation to LLM-ready enterprise architecture requires a holistic approach that recognizes knowledge as a unified asset while acknowledging different access and security requirements. Strategic imperatives for enterprise-wide data transformation include:</p>
<h3 id="heading-1-establish-a-unified-knowledge-foundation">1. Establish a Unified Knowledge Foundation</h3>
<p>The core of an LLM-ready architecture is a consolidated knowledge graph that serves as the single source of truth:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746306890101/6728c258-9bbe-4626-9897-ed04dde13b85.png" alt="Data Architecture Transformation for AI" class="image--center mx-auto" /></p>
<ul>
<li><p><strong>Conduct comprehensive semantic mapping</strong></p>
<ul>
<li><p>Audit existing data schemas across all systems</p>
</li>
<li><p>Identify entities, attributes, and relationships across previously siloed domains</p>
</li>
<li><p>Create standardized entity definitions with unique identifiers</p>
</li>
</ul>
</li>
<li><p><strong>Build a centralized knowledge graph</strong></p>
<ul>
<li><p>Implement entity resolution systems to connect disparate data sources</p>
</li>
<li><p>Define explicit relationship models with context preservation</p>
</li>
<li><p>Establish clear provenance tracking for all knowledge assertions</p>
</li>
<li><p>Create bidirectional links between structured data and unstructured content</p>
</li>
</ul>
</li>
<li><p><strong>Transform content repositories</strong></p>
<ul>
<li><p>Deploy intelligent semantic chunking that preserves contextual meaning</p>
</li>
<li><p>Generate vector embeddings for similarity-based retrieval</p>
</li>
<li><p>Extract entities from unstructured content and link to the knowledge graph</p>
</li>
<li><p>Implement automated tagging and classification systems</p>
</li>
</ul>
</li>
</ul>
<h3 id="heading-2-design-intelligent-access-layers">2. Design Intelligent Access Layers</h3>
<p>With a unified knowledge foundation in place, create specialized access mechanisms for different contexts:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746307798499/3de47b06-245a-4975-a4aa-d7020587649e.png" alt="Intelligent access layers components" class="image--center mx-auto" /></p>
<ul>
<li><p><strong>Internal knowledge interfaces</strong></p>
<ul>
<li><p>Develop natural language query capabilities for enterprise data</p>
</li>
<li><p>Implement role-based access controls with appropriate security</p>
</li>
<li><p>Create context-aware middleware for translating user intent</p>
</li>
<li><p>Build explanation mechanisms that provide reasoning transparency</p>
</li>
</ul>
</li>
<li><p><strong>External knowledge exposure</strong></p>
<ul>
<li><p>Enhance <a target="_blank" href="http://Schema.org">Schema.org</a> implementations with deep entity and relationship modeling</p>
</li>
<li><p>Design LLM-optimized API endpoints with self-describing capabilities</p>
</li>
<li><p>Implement structured data markup that preserves semantic relationships</p>
</li>
<li><p>Create machine-readable factual assertions with confidence indicators</p>
</li>
</ul>
</li>
<li><p><strong>Bridging mechanisms</strong></p>
<ul>
<li><p>Deploy automated validation pipelines ensuring consistency across interfaces</p>
</li>
<li><p>Implement real-time synchronization for time-sensitive information</p>
</li>
<li><p>Create governance frameworks controlling information flow between layers</p>
</li>
<li><p>Build feedback systems to detect discrepancies between internal and external representations</p>
</li>
</ul>
</li>
</ul>
<h3 id="heading-3-implement-continuous-learning-and-optimization">3. Implement Continuous Learning and Optimization</h3>
<p>An effective LLM-ready architecture must evolve based on interaction patterns:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746308419537/fe5d4aed-3b2f-4468-aecb-64df42f7d14a.png" alt="Continuous and learning improvement cycle" class="image--center mx-auto" /></p>
<ul>
<li><p><strong>Monitoring and measurement</strong></p>
<ul>
<li><p>Track how LLMs represent your enterprise information</p>
</li>
<li><p>Analyze query patterns to identify knowledge gaps</p>
</li>
<li><p>Measure accuracy and completeness of LLM responses</p>
</li>
<li><p>Identify frequent hallucination triggers</p>
</li>
</ul>
</li>
<li><p><strong>Feedback integration</strong></p>
<ul>
<li><p>Create automated processes to detect and correct misrepresentations</p>
</li>
<li><p>Update knowledge assertions based on observed inaccuracies</p>
</li>
<li><p>Enhance knowledge graph connections for commonly confused entities</p>
</li>
<li><p>Refine content structure based on comprehension patterns</p>
</li>
</ul>
</li>
<li><p><strong>Knowledge enhancement</strong></p>
<ul>
<li><p>Deploy machine learning to identify potential new relationships</p>
</li>
<li><p>Automate discovery of implicit connections between entities</p>
</li>
<li><p>Enhance context representation for frequently accessed information</p>
</li>
<li><p>Continuously refine semantic structures based on usage analytics</p>
</li>
</ul>
</li>
</ul>
<h2 id="heading-path-forward">Path Forward</h2>
<p>The shift from traditional search to LLM-mediated information discovery represents both a challenge and opportunity for organizations. By understanding the fundamental differences in how LLMs process and present information, we can design systems that remain discoverable and authoritative in this new paradigm.</p>
<p>The organizations that will thrive will be those that recognize this isn't simply about tweaking SEO strategies—it requires a fundamental rethinking of how information is structured, exposed, and maintained. Technical leaders who embrace knowledge-centric design principles will position their organizations for success in the rapidly emerging LLM-first search ecosystem.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💬</div>
<div data-node-type="callout-text"><em>What changes are you seeing in user search behavior, and how is your organization adapting its data architecture? I'd love to hear your thoughts and experiences in the comments.</em></div>
</div>

<p>Heads-up! Watch this space, as I will be exploring the potential of <strong>Salesforce Data Cloud</strong> in this context and how it can help in unifying data from different sources.</p>
<h2 id="heading-resources">Resources</h2>
<ol>
<li><p><a target="_blank" href="https://arxiv.org/abs/2307.01135">https://arxiv.org/abs/2307.01135</a></p>
</li>
<li><p><a target="_blank" href="https://www.iloveseo.net/a-guide-to-semantics-or-how-to-be-visible-both-in-search-and-llms/">https://www.iloveseo.net/a-guide-to-semantics-or-how-to-be-visible-both-in-search-and-llms/</a></p>
</li>
<li><p><a target="_blank" href="https://www.csiro.au/en/news/all/articles/2023/october/generative-thinking-ai">https://www.csiro.au/en/news/all/articles/2023/october/generative-thinking-ai</a></p>
</li>
<li><p><a target="_blank" href="https://scholarlykitchen.sspnet.org/2024/04/30/the-impact-of-ai-on-information-discovery-from-information-gathering-to-knowledge-application/">https://scholarlykitchen.sspnet.org/2024/04/30/the-impact-of-ai-on-information-discovery-from-information-gathering-to-knowledge-application/</a></p>
</li>
<li><p><a target="_blank" href="https://document360.com/blog/technical-writing-ai-guidelines/">https://document360.com/blog/technical-writing-ai-guidelines/</a></p>
</li>
<li><p><a target="_blank" href="https://www.bain.com/insights/goodbye-clicks-hello-ai-zero-click-search-redefines-marketing/">https://www.bain.com/insights/goodbye-clicks-hello-ai-zero-click-search-redefines-marketing/</a></p>
</li>
</ol>
<h1 id="heading-thank-you-for-readinglets-connect"><strong>Thank you for reading—let's connect!</strong></h1>
<p>Enjoy my blog? For more such awesome blog articles - follow, subscribe, and let's connect.</p>
<p><em>Disclaimer: The views expressed in this blog are my own; AI was used solely for editing and spell-checking purposes, and image generation is done through a beta AI tool and Canva.</em></p>
]]></content:encoded></item><item><title><![CDATA[Mitigating AI Hallucinations: Strategies & Best Practices for Tech Leaders]]></title><description><![CDATA[The Reality of AI Hallucinations: Recent Examples
Last week, the AI coding assistant tool Cursor encountered a crisis when its front-line AI support bot named “Sam” confidently provided a user with a completely fabricated policy.
The user raised a su...]]></description><link>https://narmadanannaka.com/enterprise-guide-ai-hallucinations</link><guid isPermaLink="true">https://narmadanannaka.com/enterprise-guide-ai-hallucinations</guid><category><![CDATA[generative ai]]></category><category><![CDATA[Architecture Design]]></category><category><![CDATA[AI]]></category><category><![CDATA[AI Governance]]></category><category><![CDATA[LLM's ]]></category><dc:creator><![CDATA[Narmada Nannaka]]></dc:creator><pubDate>Fri, 25 Apr 2025 00:31:48 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1745523822894/c6841ee9-c978-495a-839c-8b5ad693294e.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-the-reality-of-ai-hallucinations-recent-examples">The Reality of AI Hallucinations: Recent Examples</h2>
<p>Last week, the AI coding assistant tool Cursor encountered a crisis when its front-line AI support bot named “Sam” confidently provided a user with a completely <a target="_blank" href="https://www.eweek.com/news/cursor-ai-chatbot-hallucination-fake-policy/">fabricated policy</a>.</p>
<p>The user raised a support ticket to resolve an issue with ending Cursor sessions when switching between multiple devices. Sam responded, <em>“Cursor is designed to work with one device per subscription as a core security feature,”</em> according to a now-deleted Reddit post. The incident quickly gained traction among frustrated developers on Reddit and Hacker News, with many threatening to cancel their subscriptions. Cursor’s leadership issued a retraction explaining that Sam, a front-line AI support bot, had “hallucinated” the policy. It had essentially fabricated information that didn’t exist.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745435575719/c7164fff-fb66-4396-889b-6dd7dc31c582.png" alt="Cursor, AI assistant tool for coding. " class="image--center mx-auto" /></p>
<p>This incident involving Cursor’s AI support bot, ‘Sam,’ highlights critical issues facing organizations deploying AI:</p>
<ol>
<li><p>Sam’s response did not indicate that it was generated by an AI system. The lack of clear AI labeling led to further assurance that the response is made by a human. The company has since confirmed it will rectify it in future communications.</p>
</li>
<li><p>The fact that AI hallucinations aren’t isolated incidents but a systemic challenge, even for AI-focused companies.</p>
</li>
</ol>
<p>This isn’t a unique incident. In February 2025, the <a target="_blank" href="https://arstechnica.com/tech-policy/2025/02/ai-making-up-cases-can-get-lawyers-fired-scandalized-law-firm-warns/">Morgan &amp; Morgan</a> law firm admitted to citing fabricated legal cases made up by AI in a lawsuit against Walmart. This incident is described as one of the most shocking instances where AI confidently generated false information and illustrates potential consequences such as courtroom sanctions, professional embarrassment, and potential job losses. Similarly, Air Canada lost a legal battle in 2024 after its AI-powered chat assistant fabricated a refund policy that did not exist. The misinformation caused confusion and inconvenience for the traveler. These examples emphasize the tangible risks of LLM hallucinations, where AI confidently outputs information ungrounded in its knowledge base.</p>
<p>Let’s first dig into the term “AI hallucination” to understand it more before we dive into how enterprises can address this issue.</p>
<h2 id="heading-understanding-ai-hallucinations">Understanding AI Hallucinations</h2>
<p>The term “hallucination” in the AI context refers to a phenomenon where an artificial intelligence system, particularly large language models (LLMs) and generative AI, generates outputs that are incorrect, misleading, or entirely fabricated. These outputs often appear plausible, coherent, or confident, especially in customer interactions, even though they are not grounded in factual accuracy or real-world information.</p>
<p>It's an anthropomorphic term that implies the AI is experiencing something similar to human hallucinations—seeing or believing things that aren't there. However, this anthropomorphizing is misleading. What's actually happening is a fundamental error in the model's pattern recognition and text generation processes.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746075184247/f4215c40-cce4-4713-ba09-890163481ec5.png" alt="I don't know text displayed on a computer screen" class="image--center mx-auto" /></p>
<p>When pressed for an answer, these models will attempt to provide one based on statistical patterns they've observed, even when they have insufficient data to form a reliable response. They don't have a concept of "I don't know" unless explicitly trained to admit uncertainty. Large language models aren't "imagining" things. They're failing to properly map their outputs, resulting in erroneously constructed responses (“confabulation”) rather than perceived experiences.</p>
<p>Personally, I think the term “hallucination” is misleading or personifies AI systems. This tendency to anthropomorphize is widespread. In fact, Sam Altman from OpenAI even noted the cost of users treating ChatGPT politely, saying ‘please’ and ‘thank you,’ is costing them <a target="_blank" href="https://www.nytimes.com/2025/04/24/technology/chatgpt-alexa-please-thank-you.html">millions of dollars</a> of compute power. It is evident how easily we project human traits onto these systems. Are we failing to see the machines for what they are? Another term suggested to describe this phenomenon is “confabulation,” which means representing a process of creative gap-filling. Why not simply state them as “factual error”? Too techy?</p>
<h2 id="heading-how-common-are-ai-hallucinations">How Common Are AI Hallucinations</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746076701941/3f58f9c5-9865-4817-b9d7-ff8b6b31e3b9.png" alt="Hallucination Rates of AI Models" class="image--center mx-auto" /></p>
<p>Hallucinations are not unique to Cursor - they affect virtually all generative AI systems:</p>
<ul>
<li><p>In a benchmarking <a target="_blank" href="https://www.nytimes.com/2023/11/06/technology/chatbots-hallucination-rates.html">study</a>, OpenAI’s technology had a hallucination rate of about 3%, Meta’s systems around 5%, Anthropic’s Claude 2 over 8%, and Google’s Palm Chat as high as 27%.</p>
</li>
<li><p>Even top-performing models like GPT-4 and Gemini 2.0 Flash Exp exhibit <a target="_blank" href="https://www.visualcapitalist.com/ranked-ai-models-with-the-lowest-hallucination-rates/">hallucination rates</a> between 1.3% and 1.8%.</p>
</li>
<li><p>One <a target="_blank" href="https://en.wikipedia.org/wiki/Hallucination_\(artificial_intelligence\)">analysis</a> found factual errors in 46% of chatbot outputs, and by 2023, chatbots were estimated to hallucinate up to 27% of the time depending on the model and task.</p>
</li>
</ul>
<p>Concerningly, as models become more fluent and confident, their errors can become more difficult to detect because they're presented with the same authoritative tone as factual information.</p>
<h2 id="heading-how-to-spot-ai-hallucinations">How to Spot AI Hallucinations</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746074061384/10584e05-c99c-4d03-8d97-6a50716db8e8.jpeg" alt="Magnifying glass over a laptop to symbolise the section." class="image--center mx-auto" /></p>
<p>Recognizing when an AI system is hallucinating requires vigilance and often domain expertise. Here are some key indicators:</p>
<ol>
<li><p><strong>Overly specific details</strong> that seem improbable or too convenient</p>
</li>
<li><p><strong>References to non-existent sources</strong>, studies, or publications</p>
</li>
<li><p><strong>Inconsistencies within the same response</strong> or across multiple responses</p>
</li>
<li><p><strong>Perfect but suspicious answers</strong> to ambiguous or challenging questions</p>
</li>
<li><p><strong>Confident assertions about recent events</strong> that fall outside the model's training data</p>
</li>
<li><p><strong>Too-good-to-be-true solutions</strong> to complex problems</p>
</li>
</ol>
<p>As a technical architect using AI in daily work tasks, I've found that cross-referencing critical information and implementing systematic verification processes are essential when leveraging AI outputs for business decisions.</p>
<h2 id="heading-enterprise-mitigation-strategies">Enterprise Mitigation Strategies</h2>
<p>For organizations racing to adopt AI technologies, hallucinations represent a significant business risk. Here's how enterprises can navigate this challenge:</p>
<h3 id="heading-retrieval-augmented-generation-rag"><strong>Retrieval-Augmented Generation (RAG)</strong></h3>
<p>Cross-checking LLM outputs against external databases or the web in real time to validate the generated response is correct reduces hallucinations by <a target="_blank" href="https://the-learning-agency.com/the-cutting-ed/article/hallucination-techniques/"><strong>20–30%</strong></a>. This verification can happen in real-time where the RAG retrieves the relevant data, updates the query and presents the more accurate response. For example, RAG verifies current data (e.g., who is the current premier of New South Whales) instead of relying on outdated training sets.</p>
<h3 id="heading-implementing-verification-pipelines"><strong>Implementing Verification Pipelines</strong></h3>
<p>Implement self-verification mechanisms within your system architecture to ensure AI outputs are validated prior to delivery. A few techniques to leverage:</p>
<ul>
<li><p><strong>Chain of Verification (CoVe)</strong> encourages models to draft verification questions and independently answer those questions to check consistency before generating the final verified prompt response.</p>
</li>
<li><p><strong>Real-time Verification and Rectification (EVER)</strong> employs external evidence retrieval and verification steps. Corrects outputs by validating the responses through multiple verification questions that are posed in parallel using chain-of-thought prompting. Responses that result in a false answer are rectified based on the evidence.</p>
</li>
</ul>
<h3 id="heading-develop-domain-specific-evaluation-benchmarks">Develop Domain-Specific Evaluation Benchmarks</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746076165893/b7ee68f8-fbfa-488c-ad51-c11ee93ee870.png" alt="Depicts the steps in AI Hallucination Benchmark Framework" class="image--center mx-auto" /></p>
<ul>
<li><p>Develop a database of factual information relevant to your industry domain, products, and operations. This database should include edge cases and common misconceptions. The knowledge base must be updated regularly as the industry facts evolve.</p>
</li>
<li><p>Design prompts that probe the boundaries of the AI’s knowledge. The prompts should include variations of queries with verifiable answers alongside questions where the expected response should be “I don’t know.”</p>
</li>
<li><p>Track both false positives (hallucinated information) and false negatives (refusal to answer known information). Measure hallucination severity using a scoring system to define a benchmark.</p>
</li>
<li><p>Use the domain-specific benchmark before your system deployment as an entry criterion.</p>
</li>
<li><p>Develop feedback loops where hallucinations are identified to improve both the model and the benchmark.</p>
</li>
</ul>
<h3 id="heading-advanced-prompting">Advanced Prompting</h3>
<p>A quick win that requires no architectural redesign is to develop chain-of-thought prompting and negative prompting:</p>
<ol>
<li><p><strong>Chain-of-thought prompting</strong> is where your query guides the AI models to break down their reasoning process into explicit steps, slowing down inference and creating verification points before arriving at a conclusion.</p>
<ul>
<li><p><em>Example:</em></p>
<p>  Instead of asking, <em>"What caused the 2008 financial crisis?"</em><br />  Change your prompt to:</p>
<pre><code class="lang-plaintext">  Let's think step by step about the causes of the 2008 financial crisis. First, identify the 
  main sectors involved. Then, analyze the key events chronologically. Finally, explain how these
  factors interconnected to create the crisis.
</code></pre>
</li>
</ul>
</li>
<li><p><strong>Negative prompting</strong> involves setting explicit boundaries in the instruction, priming for uncertainty, and establishing fallback procedures.</p>
<ul>
<li><p><em>Example:</em></p>
<pre><code class="lang-plaintext">  Answer the following question about our company policy. If you're unsure about any details or 
  if the information might not be in your training data, explicitly state that you don't know 
  rather than attempting to guess. Do not reference specific policy numbers, dates, or provisions
   unless you are certain they exist. If you need to make an assumption, clearly label it as 
  such.
</code></pre>
</li>
</ul>
</li>
</ol>
<p>💡<strong>Bonus:</strong> For those interested, Hugging Face maintains a leaderboard that tracks, ranks, and evaluates hallucinations in LLMs - <a target="_blank" href="https://huggingface.co/spaces/hallucinations-leaderboard/leaderboard">click here</a>.</p>
<h2 id="heading-moving-forward-ai-architecture-amp-governance">Moving Forward: AI Architecture &amp; Governance</h2>
<p>The Cursor incident demonstrates that even AI-focused companies are not immune to the risks posed by AI hallucinations. As enterprises accelerate AI adoption, robust architectural governance becomes increasingly critical.</p>
<p>The solution isn't to abandon AI adoption but to approach it with an architectural perspective. By designing systems that complement AI capabilities with appropriate verification mechanisms and human oversight, organizations can harness the benefits while mitigating the risks of hallucinations.</p>
<p>As technology architects, our role has expanded beyond traditional system design to include crafting resilient sociotechnical systems where AI and human intelligence work together, each compensating for the limitations of the other.</p>
<p><em>What strategies has your organization implemented to address AI hallucinations? I'd love to hear your experiences in the comments below.</em></p>
<h2 id="heading-resources">Resources</h2>
<ul>
<li><p><a target="_blank" href="https://www.nytimes.com/2023/11/06/technology/chatbots-hallucination-rates.html">https://www.nytimes.com/2023/11/06/technology/chatbots-hallucination-rates.html</a></p>
</li>
<li><p><a target="_blank" href="https://en.wikipedia.org/wiki/Hallucination_\(artificial_intelligence\)">https://en.wikipedia.org/wiki/Hallucination_(artificial_intelligence)</a></p>
</li>
<li><p><a target="_blank" href="https://www.visualcapitalist.com/ranked-ai-models-with-the-lowest-hallucination-rates/">https://www.visualcapitalist.com/ranked-ai-models-with-the-lowest-hallucination-rates/</a></p>
</li>
<li><p><a target="_blank" href="https://cacm.acm.org/news/shining-a-light-on-ai-hallucinations/">https://cacm.acm.org/news/shining-a-light-on-ai-hallucinations/</a></p>
</li>
<li><p><a target="_blank" href="https://the-learning-agency.com/the-cutting-ed/article/hallucination-techniques/">https://the-learning-agency.com/the-cutting-ed/article/hallucination-techniques/</a></p>
</li>
<li><p><a target="_blank" href="https://pmc.ncbi.nlm.nih.gov/articles/PMC11285881/">https://pmc.ncbi.nlm.nih.gov/articles/PMC11285881/</a></p>
</li>
</ul>
<h1 id="heading-thank-you-for-readinglets-connect"><strong>Thank you for reading—let's connect!</strong></h1>
<p>Enjoy my blog? For more such awesome blog articles - follow, subscribe, and let's connect.</p>
<p><em>Disclaimer: The views expressed in this blog are my own; AI was used solely for editing and spell-checking purposes, and image generation is done through a beta AI tool and Canva.</em></p>
]]></content:encoded></item><item><title><![CDATA[The Evolution of Generative AI: From Chatbots to Creative Machines]]></title><description><![CDATA[For the last year or two, I took a short sabbatical from writing to focus on personal well-being and recalibrate other aspects of life. And what a time it has been to pause! In the blink of an eye, we’ve ushered in the era of agentic machines—where l...]]></description><link>https://narmadanannaka.com/the-evolution-of-generative-ai-from-chatbots-to-creative-machines</link><guid isPermaLink="true">https://narmadanannaka.com/the-evolution-of-generative-ai-from-chatbots-to-creative-machines</guid><category><![CDATA[generative ai]]></category><category><![CDATA[Future of AI]]></category><category><![CDATA[transformers]]></category><category><![CDATA[architecture]]></category><category><![CDATA[History of Artificial Intelligence ]]></category><dc:creator><![CDATA[Narmada Nannaka]]></dc:creator><pubDate>Sun, 20 Apr 2025 22:24:13 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1743105347731/2f7a7f6e-4b59-4c96-9e96-721c11c69ab0.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>For the last year or two, I took a short sabbatical from writing to focus on personal well-being and recalibrate other aspects of life. And what a time it has been to pause! In the blink of an eye, we’ve ushered in the era of <em>agentic machines</em>—where large language models have been democratised and made accessible at our fingertips.</p>
<p>As I began to explore the inner workings of generative AI, I was transported back to my early days of coding typewritten chatbots during my bachelor’s degree using .NET. Back then, I would manually feed a chatbot with a list of keywords and predefined responses. ChatGPT initially felt similar—except this version is exponentially more scalable and powered by recent machine learning breakthroughs. Instead of matching keywords to canned replies, it can predict and generate responses to entirely new prompts. It’s like a search engine on steroids—trained on vast data from the internet, capable of identifying patterns, predicting outcomes, and even creating original content.</p>
<p>While generative AI might seem like a recent phenomenon, it’s actually been decades in the making.</p>
<p>As early as 1950, Alan Turing posed the question, Can <em>machines think?</em> He introduced the now-famous <strong>Turing Test (TT)</strong>—where a judge interacts with both a human and a machine in two separate rooms. If the judge can’t tell which is which, the machine is considered to have passed the test.</p>
<p>This foundational idea gave rise to early AI experiments, including rule-based chatbots. These systems, however, had limited capabilities—responses were only triggered by exact keyword matches, making them impractical for complex or everyday problem-solving. The chatbots didn’t have any semblance of context or an understanding of the input text - they simply responded to whatever keywords they found in the input text.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745186119424/6f253e6e-07ca-4d3b-aed3-d0bbdb348cb1.png" alt class="image--center mx-auto" /></p>
<p>In the 1990s, the rise of <strong>machine learning (ML)</strong> brought a statistical approach to language. ML algorithms could now recognize patterns and predict outcomes by analyzing large sets of labeled data. They simulated aspects of human understanding by classifying text and deriving context. However, limitations in hardware made it difficult to scale these models to handle massive datasets.</p>
<p>Enter the 2000s: advancements in hardware enabled the rise of <strong>neural networks</strong>, especially <strong>deep learning</strong> models. Recurrent Neural Networks (RNNs) became popular for tasks like natural language processing. Virtual assistants began to understand the context of conversations and respond using predefined scripts or APIs—for example, fetching the weather from a third-party service.</p>
<p>Of course, RNN came with their challenges:</p>
<ul>
<li><p>Vanishing and Exploding Gradients</p>
</li>
<li><p>Short-Term Memory</p>
</li>
<li><p>Sequential Computation</p>
</li>
<li><p>Difficulty handling long sequences</p>
</li>
</ul>
<p>In 2017, the introduction of the <strong>Transformer architecture</strong> revolutionized the field. It brought in a <em>self-attention mechanism</em> that eliminated the need for sequence-based processing and enabled parallel computation—greatly improving training speed and efficiency.</p>
<p>Today’s generative AI models, such as <strong>GPT (Generative Pre-trained Transformer)</strong>, are built on this architecture. Transformers enhanced machines’ ability to not only understand input text but also generate rich, context-aware, and human-like language. These models are trained on vast amounts of unlabeled data and are capable of adapting to a wide range of tasks.</p>
<p>We’ll delve deeper into RNNs and the transformative model architecture in the next blog post, exploring how large language models actually work. But for now, here’s a simple analogy to help digest the evolution of Generative AI:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745186996907/65797a57-bffa-485e-b85b-e4bc30641f27.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p><strong>Cooking (AI)</strong> → The broadest concept, encompassing all techniques for preparing food</p>
</li>
<li><p><strong>Baking (ML)</strong> → A more structured subset with specific ingredients and methods</p>
</li>
<li><p><strong>Bread Making (DL)</strong> → A refined skill requiring technique and fermentation</p>
</li>
<li><p><strong>Sourdough Art (GenAI)</strong> → The pinnacle of creativity—where bakers design beautiful patterns in bread</p>
</li>
</ul>
<h1 id="heading-thank-you-for-readinglets-connect"><strong>Thank you for reading—let's connect!</strong></h1>
<p>Enjoy my blog? For more such awesome blog articles - follow, subscribe, and let's connect.</p>
]]></content:encoded></item><item><title><![CDATA[Azure Resource Manager 101 - Unlocking the Essentials for Seamless Cloud Deployment and Management]]></title><description><![CDATA[Globally, Azure has millions of active customers building complex cloud solutions. As the complexity grows, it is essential to rely on Azure Resource Manager service, which will assist in efficient, consistent, and scalable management of Azure resour...]]></description><link>https://narmadanannaka.com/azure-resource-manager-101-unlocking-the-essentials-for-seamless-cloud-deployment-and-management</link><guid isPermaLink="true">https://narmadanannaka.com/azure-resource-manager-101-unlocking-the-essentials-for-seamless-cloud-deployment-and-management</guid><category><![CDATA[Azure]]></category><category><![CDATA[azure certified]]></category><category><![CDATA[Cloud Computing]]></category><category><![CDATA[Cloud]]></category><category><![CDATA[cloud architecture]]></category><dc:creator><![CDATA[Narmada Nannaka]]></dc:creator><pubDate>Fri, 26 Jan 2024 06:35:47 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1706234068843/a3c6828c-83c4-47d8-80b0-e8dd1dfc618b.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Globally, Azure has millions of active customers building complex cloud solutions. As the complexity grows, it is essential to rely on Azure Resource Manager service, which will assist in efficient, consistent, and scalable management of Azure resources, providing a foundation for Infrastructure as Code, streamlined deployment processes, and robust resource governance.</p>
<p>Before diving further into Azure Resource Manager, first, let's understand its building blocks - resources and resource groups.</p>
<h2 id="heading-resources">Resources</h2>
<p>Azure provides more than 200 services. A resource is defined as an object that manages one of these services. The compute, network and storage service type that supplies resources is called a resource provider. This resource provider will be responsible for interpreting and processing requests for the resource type. In other words, when you perform lifecycle operations like create, update and delete for a resource, you are interacting with a resource provider.</p>
<h3 id="heading-pro-tip">💡Pro Tip</h3>
<p>Do you struggle with naming your objects, functions and files in your code like me? I always find it easy to follow naming conventions as they provide order and consistent awareness of the resource. So, when starting a new project, make it a best practice to define the naming convention standard the team should follow. For convenience, start with a lowercase letter and a number at the end for Azure resources. However, specific naming rules and conventions are applicable for different Azure resources. More details can be found in this <a target="_blank" href="https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/resource-name-rules">link</a>.</p>
<h2 id="heading-resource-groups">Resource Groups</h2>
<p>A logical grouping of resources is known as a resource group. Logical grouping can be interpreted differently, so different strategies can be applied to group the resources:</p>
<ul>
<li><p>Group by resource type</p>
</li>
<li><p>Group by service lifecycle</p>
</li>
<li><p>Group by business domain</p>
</li>
<li><p>Group by location</p>
</li>
<li><p>Group by purpose</p>
</li>
<li><p>Group by billing groups</p>
</li>
</ul>
<p>No one shoe size fits all similarly, no one grouping strategy suits all businesses. Often, a mix of these grouping strategies is used to create resource groups. Resource groups are defined before the resources because the group must be referenced when creating the resource.</p>
<h3 id="heading-pro-tip-1">💡Pro Tip</h3>
<p>A resource group can have multiple resources, whereas a resource can only be associated with one resource. And, unlike Google Cloud, resource groups cannot be nested. So, organising resources or resource groups hierarchically is not doable in Azure.</p>
<h2 id="heading-azure-resource-manager">Azure Resource Manager</h2>
<p>Azure Resource Manager (ARM) is defined as a deployment and management service that assists in creating, updating and deleting resources in your Azure account. Azure Resource Manager uses a unified language (JSON notation). The language is consistent across all the Azure interfaces (Azure Portal, Azure CLI, Cloud Shell, PowerShell). It is also responsible for checking the privileges and whether a resource has the required access and control to execute the relevant operation.</p>
<h2 id="heading-bonus-points">🌩Bonus Points</h2>
<ul>
<li><p>A resource can be created in a location different to a resource group. You read it correctly! The resource group stores the meta-data about the resource, so for compliance reasons, you may want to have the resource group stored in a region different to the resource is in. In this case, grouping resources by location is the obvious choice.</p>
</li>
<li><p>All resources associated with the group are deleted when a resource group is deleted.</p>
</li>
<li><p>Azure Resource Manager will only support Transport Layer Security 1.2 or later.</p>
</li>
<li><p>By default, you can associate 800 instances of a resource type in a resource group. However, some exceptions can be found in this <a target="_blank" href="https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/resources-without-resource-group-limit">link</a>.</p>
</li>
</ul>
<h3 id="heading-resources-1">📚Resources</h3>
<ul>
<li><p><a target="_blank" href="https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/overview">https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/overview</a></p>
</li>
<li><p><a target="_blank" href="https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/resource-name-rules">https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/resource-name-rules</a></p>
</li>
<li><p><a target="_blank" href="https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/resources-without-resource-group-limit">https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/resources-without-resource-group-limit</a></p>
</li>
<li><p><a target="_blank" href="https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/azure-best-practices/naming-and-tagging">https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/azure-best-practices/naming-and-tagging</a></p>
</li>
</ul>
<h1 id="heading-thank-you-for-reading-lets-connect"><strong>Thank you for Reading - Let's Connect!</strong></h1>
<p>Did you enjoy my blog? For more such blog articles - follow, subscribe, and let's connect.</p>
]]></content:encoded></item><item><title><![CDATA[AZ-900 Mastery: Unveiling Microsoft Azure Fundamentals Exam Guide for Success]]></title><description><![CDATA[Are you gearing up to enter the world of Azure Certifications? If so, AZ-900 Microsoft Azure Fundamentals is the first step to gaining general knowledge in the cloud and Azure in particular.
This certification tests your knowledge of Azure architectu...]]></description><link>https://narmadanannaka.com/az-900-mastery-unveiling-microsoft-azure-fundamentals-exam-guide-for-success</link><guid isPermaLink="true">https://narmadanannaka.com/az-900-mastery-unveiling-microsoft-azure-fundamentals-exam-guide-for-success</guid><category><![CDATA[Azure]]></category><category><![CDATA[Cloud]]></category><category><![CDATA[Cloud Computing]]></category><category><![CDATA[azure certified]]></category><category><![CDATA[cloud architecture]]></category><dc:creator><![CDATA[Narmada Nannaka]]></dc:creator><pubDate>Sat, 20 Jan 2024 21:05:50 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1705784580499/091906e7-54fd-4d1e-84c4-cdb7cb6edc5d.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Are you gearing up to enter the world of Azure Certifications? If so, AZ-900 Microsoft Azure Fundamentals is the first step to gaining general knowledge in the cloud and Azure in particular.</p>
<p>This certification tests your knowledge of Azure architectural components and services, such as computing, networking, and storage domains. To gain the certification, you need to demonstrate you are knowledgeable in the following skills:</p>
<ul>
<li><p>Describe cloud concepts (25–30%)</p>
<ul>
<li><p>Describe cloud computing</p>
</li>
<li><p>Describe the benefits of using cloud services</p>
</li>
<li><p>Describe cloud service types</p>
</li>
</ul>
</li>
<li><p>Describe Azure architecture and services (35–40%)</p>
<ul>
<li><p>Describe the core architectural components of Azure</p>
</li>
<li><p>Describe Azure compute and networking services</p>
</li>
<li><p>Describe Azure storage services</p>
</li>
<li><p>Describe Azure identity, access and security</p>
</li>
</ul>
</li>
<li><p>Describe Azure management and governance (30–35%)</p>
<ul>
<li><p>Describe cost management in Azure</p>
</li>
<li><p>Describe features and tools in Azure for governance and compliance</p>
</li>
<li><p>Describe features and tools for managing and deploying Azure resources</p>
</li>
<li><p>Describe monitoring tools in Azure</p>
</li>
</ul>
</li>
</ul>
<p>Once you are ready to get certified, the exam can be scheduled through Pearson VUE or Certiport. The exam is scored on a scale of 1 to 1000 and requires 700 or more to pass. Please note that 700 does not mean 70% - it is based on the competence shown in answering the questions and the difficulty of the questions.</p>
<p>The exam is 45 minutes long, and it is recommended to allocate 65 minutes for the overall process. Typically, Microsoft certification exams contain 40-60 multiple-choice questions, and since this is a fundamental exam, the total question count is expected to be on the lower end.</p>
<h3 id="heading-resources">Resources</h3>
<ul>
<li><p><a target="_blank" href="https://learn.microsoft.com/en-us/credentials/certifications/resources/study-guides/az-900#skills-measured-as-of-january-23-2024">https://learn.microsoft.com/en-us/credentials/certifications/resources/study-guides/az-900#skills-measured-as-of-january-23-2024</a></p>
</li>
<li><p><a target="_blank" href="https://learn.microsoft.com/en-us/credentials/certifications/exams/az-900/">https://learn.microsoft.com/en-us/credentials/certifications/exams/az-900/</a></p>
</li>
<li><p><a target="_blank" href="https://learn.microsoft.com/en-us/credentials/certifications/exam-scoring-reports#scores-needed-to-pass-exams">https://learn.microsoft.com/en-us/credentials/certifications/exam-scoring-reports#scores-needed-to-pass-exams</a></p>
</li>
<li><p><a target="_blank" href="https://learn.microsoft.com/en-us/credentials/support/exam-duration-exam-experience?source=recommendations">https://learn.microsoft.com/en-us/credentials/support/exam-duration-exam-experience?source=recommendations</a></p>
</li>
</ul>
<h1 id="heading-thank-you-for-reading-lets-connect"><strong>Thank you for Reading - Let's Connect!</strong></h1>
<p>Did you enjoy my blog? For more such blog articles - follow, subscribe, and let's connect.</p>
]]></content:encoded></item><item><title><![CDATA[Is AWS Really Safe? A Security Overview]]></title><description><![CDATA[Recently, I attended a role-playing interview that was extremely interesting. One of the questions involved meeting an existing AWS customer, who, during our chat, voiced concerns about the security of their cloud. I delved into the topic of securing...]]></description><link>https://narmadanannaka.com/is-aws-really-safe-a-security-overview</link><guid isPermaLink="true">https://narmadanannaka.com/is-aws-really-safe-a-security-overview</guid><category><![CDATA[AWS]]></category><category><![CDATA[solutionarchitect]]></category><category><![CDATA[securityawareness]]></category><category><![CDATA[Security]]></category><category><![CDATA[Cloud Computing]]></category><dc:creator><![CDATA[Narmada Nannaka]]></dc:creator><pubDate>Fri, 08 Sep 2023 03:50:53 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1694128555353/40bdcc9b-4720-44cc-9497-78f9af9b428b.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Recently, I attended a role-playing interview that was extremely interesting. One of the questions involved meeting an existing AWS customer, who, during our chat, voiced concerns about the security of their cloud. I delved into the topic of securing their cloud data. After a few questions, I realized the customer's concern was focused on the security of AWS infrastructure. So, here is my fresh take on this:</p>
<p>AWS has been named the leader in Cloud Infrastructure and Platform Services (CIPS) by <a target="_blank" href="https://aws.amazon.com/blogs/aws/aws-named-as-a-leader-in-the-2022-gartner-cloud-infrastructure-platform-services-cips-magic-quadrant-for-the-12th-consecutive-year/">Gartner</a> for 12 consecutive years. Now, that's a huge achievement that validates AWS is at the forefront of operational excellence in securing its cloud infrastructure. This is backed by over <a target="_blank" href="https://aws.amazon.com/security/?nc1=f_cc">300 cloud security tools</a> and the <a target="_blank" href="https://aws.amazon.com/compliance/testimonials/">testimonials</a> of its most sensitive customers. All this sounds great, but what exactly does this mean, and how does it translate to an AWS cloud being secure?</p>
<p>To understand this, we need to delve into the <a target="_blank" href="https://aws.amazon.com/compliance/shared-responsibility-model/">AWS Shared Security Responsibility Model</a>. According to this model, it is clear that AWS takes sole ownership of securing the infrastructure supporting the cloud. This includes all hardware, AWS global infrastructure - regions, availability zones, and edge locations.</p>
<p><img src="https://d1.awsstatic.com/security-center/Shared_Responsibility_Model_V2.59d1eccec334b366627e9295b304202faf7b899b.jpg" alt="Figure 1: AWS Security Responsibility Model" class="image--center mx-auto" /></p>
<p>AWS Region consists of a collection of Availability Zones (AZ), <a target="_blank" href="https://aws.amazon.com/about-aws/global-infrastructure/?p=ngi&amp;loc=1">with at least 3 AZs per region</a>. If we look at this from an infrastructure perspective, each region is a cluster of data centres, and each group of logical data centres is defined as an availability zone. Multiple lines of proprietary high-speed fibre networks run between every availability zone, so we can treat the group of AZs as a single area. For those interested in learning more about AWS regions and which ones to choose for your project or account, read my insights <a target="_blank" href="https://narmadanannaka.com/how-to-choose-your-aws-region">here</a>.</p>
<p>So, back to the question of how one knows if their cloud infrastructure is secure. In simpler words, let's take an EC2 instance, which is nothing but a virtual machine hosted on a physical machine in a data centre somewhere in the world. The customer raises concerns that the resources are on a shared infrastructure. It is very unlikely one can pinpoint the specific hardware on which the EC2 instance virtual machine is running. Because the shared infrastructure context is broader - we are talking about a specific AZ. According to our definition above, that is a group of logical data centres located within a region. This could be one or more data centres in distinct locations.</p>
<p>On top of this obscurity, AWS provides several <a target="_blank" href="https://d1.awsstatic.com/whitepapers/Security/Intro_to_AWS_Security.pdf">security capabilities and services</a>:</p>
<ul>
<li><p>All connections throughout the AWS global infrastructure (AWS Regions and AZs) are automatically encrypted, and the connections are secured.</p>
</li>
<li><p>The spread of AWS infrastructure throughout the world limits the surface area for any <a target="_blank" href="https://aws.amazon.com/shield/ddos-attack-protection/">DDoS</a> attacks. Additionally, AWS is known for surviving one of the largest DDoS attacks, <a target="_blank" href="https://aws-shield-tlr.s3.amazonaws.com/2020-Q1_AWS_Shield_TLR.pdf">targeting 2.3 Tbps requests</a>.</p>
</li>
<li><p>AWS resources can be isolated into a logical virtual network that can be defined by the customer, also known as the <a target="_blank" href="https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html">Amazon Virtual Private Cloud</a> (Amazon VPC). This is secured through built-in network firewalls.</p>
</li>
<li><p>Connectivity options within the network or outside the network provide options for private or dedicated connections.</p>
</li>
</ul>
<p>On top of the general cloud infrastructure, any software installed to support the computing, storage, database, and networking (serverless) facilities is secured by AWS through automatic software updates and security patching.</p>
<h1 id="heading-thank-you-for-reading-lets-connect"><strong>Thank you for Reading - Let's Connect!</strong></h1>
<p>Enjoy my blog? For more such awesome blog articles - follow, subscribe and let's connect.</p>
]]></content:encoded></item><item><title><![CDATA[Optus Data Breach - what to do?]]></title><description><![CDATA[A week ago, on 22nd September 2022, Optus notified their customers of a sophisticated cyber-attack. The outcome of this attack is the theft of 9.8 million records of personally identifiable information (PII). Woof! 9.8 million is a large number. One ...]]></description><link>https://narmadanannaka.com/optus-data-breach-what-to-do</link><guid isPermaLink="true">https://narmadanannaka.com/optus-data-breach-what-to-do</guid><category><![CDATA[OPTUS]]></category><category><![CDATA[Security]]></category><category><![CDATA[securityawareness]]></category><category><![CDATA[cybersecurity]]></category><category><![CDATA[Telecom]]></category><dc:creator><![CDATA[Narmada Nannaka]]></dc:creator><pubDate>Fri, 30 Sep 2022 07:11:57 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/unsplash/iar-afB0QQw/upload/v1664341794956/q73JCfJf5.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A week ago, on 22nd September 2022, Optus notified their customers of a sophisticated cyber-attack. The outcome of this attack is the theft of 9.8 million records of personally identifiable information (PII). Woof! 9.8 million is a large number. One solace is that Optus confirmed this number is a worst-case scenario, and there is not much info on the exact volume as the details are still part of the ongoing federal investigation. </p>
<p>What's disappointing is after a week I still see posts on social media for help from direct customers on what to do and how to confirm whether their data is compromised. In this age and time, one would expect transparency, honesty and consistent communication about the actions taken for resolution. There is a compelling need to arm the customers with steps to protect themselves, educating them about cyber security measures and controls. This post is a compilation of all the relevant links to help some novice customers. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1664519813139/J2lsvTPGG.png" alt="image.png" /></p>
<h2 id="heading-what-information-has-been-exposed">What information has been exposed?</h2>
<p>Personally identifiable information (PII) of retail customers. Now the question remains what is PII? A piece of data on its own or combined with other relevant data that can be used to identify a person or locate the individual is called personally identifiable information, in short PII. So, in this case, if you are an existing Optus customer or held a retail service (not business/ enterprise/ wholesale/ satellite) in the last 6 years - then there is a good chance that your name, date of birth, phone number, email address, physical addresses, and identity numbers such as driving license, passport numbers and/or medicare numbers. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1664519851389/yttrad6dN.png" alt="image.png" /></p>
<h2 id="heading-did-my-payment-or-banking-details-get-exposed">Did my payment or banking details get exposed?</h2>
<p>From the information available from Optus and various other news outlets only customer identifiable information is exposed and that <strong>does not include payment details</strong>. So you don't need to change your bank details but it does not hurt to up your security game. For example, recently I received a call from my bank enquiring if I am looking for a loan and instead of providing my details I asked the banker to email me to confirm that they are the person they are saying. The banker was able to send me a security verification message to my email and my banking app to validate that she is who she is. Doing these basic checks will ensure that you won't fall rampant with any fraudulent activities or scams. Always ACT with caution:</p>
<p>✔ <strong>[A] </strong> Aesthetic - Are there any grammatical or spelling errors? Is it missing a basic signature? Genuine organisations use professional branding and links starting with HTTPS for safety (remember the additional 's' means it is a secured site). </p>
<p>✔ <strong>[C]</strong> Compelling triggers ⛳- if you are being compelled to provide information within a certain time frame or threatened that not taking an action can result in loss. That's a big red flag to avoid and contact the relevant person or organization through other means. </p>
<p>✔ <strong>[T]</strong> Trust  - Do you trust the recipient to share your details? Do you need to provide the information they are asking for? Enable two-factor authentication where applicable. </p>
<p>Some basic guidelines and support extended by the top 4 Australian banks can be found below:</p>
<ul>
<li><a href="https://www.commbank.com.au/support/security.html">Commbank security support</a>. </li>
<li><a href="https://www.anz.com.au/security/">ANZ security support</a></li>
<li><a href="https://www.westpac.com.au/security/">Westpac security support</a></li>
<li><a href="https://www.nab.com.au/about-us/security">NAB security support</a></li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1664519942025/r39cCe-8u.png" alt="image.png" /></p>
<h2 id="heading-how-long-do-we-have-to-worry-about-our-details-being-used-by-hackers">How long do we have to worry about our details being used by hackers?</h2>
<p>At minimum years! Shocking I know but remember some of your details like date of birth is not going to change ever. So those basic security/identity questions you answer to identify that you are who you are have been compromised in this grand-scale data breach. There will be an increase in several scam texts and messages. Do not click on any suspicious links. Always remember to <strong>ACT</strong> with caution. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1664520185538/hXtas5Xrk.png" alt="image.png" /></p>
<h2 id="heading-how-do-i-know-if-my-details-got-hacked">How do I know if my details got hacked?</h2>
<p>Optus has emailed all affected customers informing them that their details have been exposed as part of this data breach. I have read news where customers have received their email after a week too so it won't surprise me if you haven't received it yet. The worst-case scenario suggests that 9.8M records got exposed. On top of that, the hacker released 2 sets of 100 samples of user data in the initial threat to show that they legitimately hold the data. In another ransom threat, 10,000 customer details are released. </p>
<ul>
<li>You can check if your email address or mobile number got hacked through <a href="https://haveibeenpwned.com/">Have I Been Pwned</a> site. </li>
<li>Fill in the ACSC form for <a href="https://www.cyber.gov.au/have-you-been-hacked">Have you been hacked?</a></li>
<li>Contact IDCARE on 1800 595 160. </li>
<li><a href="https://moneysmart.gov.au/banking/identity-theft">Identity theft | Moneysmart</a></li>
<li><a href="https://www.oaic.gov.au/privacy/data-breaches/identity-fraud">Identity fraud | OAIC</a></li>
<li><a href="https://www.cyber.gov.au/">Australian Cyber Security Centre Homepage | ACSC</a></li>
<li><a href="https://www.optus.com.au/support/feedback-and-complaints/make-a-complaint">Make privacy compliant with Optus</a></li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1664520371526/yKj0v68Sh.png" alt="image.png" /></p>
<h2 id="heading-what-are-the-basic-steps-i-can-take-to-protect-myself">What are the basic steps I can take to protect myself?</h2>
<ul>
<li><p>Optus is providing <a href="https://www.optus.com.au/support/cyberattack/equifax-protect-eligibility">credit monitoring and identity protection service</a> free of cost for 12 months to the affected customers present and past. Subscribe to it and request a credit report immediately and keep an eye on it frequently. If you are one of the most affected customers I would recommend negotiating with Optus to extend the subscription to 5-6 years.</p>
</li>
<li><p><a href="https://www.optus.com.au/support/cyberattack/driver-licence-information">Get a new driving license</a> - most of the states are offering this free of cost or you will receive a refund from Optus through direct credit to your account. Victorian customers are also required to flag their record for breach by filling this <a href="https://www.vic.gov.au/victorian-drivers-licence-record-flag-optus-breach">form</a>. </p>
</li>
<li><p>Apply for a <a href="https://www.homeaffairs.gov.au/about-us/our-portfolios/criminal-justice/cybercrime-identity-security/identity-protection-recovery">Commonwealth victim's certificate</a>.</p>
</li>
<li><p>From the Optus emails, it is hard to know what personal details of yours got exposed. See what details you shared for the 100 points check when applying for an Optus connection. Assuming you provided your passport and medicare for the 100 points ID check, this means there is a possibility they got exposed. The department of foreign affairs and trade (DFAT) has clarified a <a href="https://www.passports.gov.au/optus-data-breach-faqs">number of questions</a> related to this matter and confirmed that your existing passport is still valid for any immediate travel. However, if you plan to request a new ID, keep in mind the current waiting times, and Optus has agreed to pay the replacement costs. </p>
</li>
</ul>
<h2 id="heading-do-i-have-to-switch-my-connection-from-optus-to-a-different-provider">Do I have to switch my connection from Optus to a different provider?</h2>
<p>This is a personal choice. After everything, if you want to move on to a different provider it's your call. Having said that moving to a different provider is not going to solve your problem - if your data is leaked, it is out there in the open and moving providers is not going to make it disappear. </p>
<p>Hope this helps and please use the comments below if you have more questions that are not covered in this post. </p>
<h2 id="heading-thank-you-for-reading-lets-connect">Thank you for Reading - Let's Connect!</h2>
<p>Enjoy my blog? For more such awesome blog articles - follow, subscribe and let's connect.</p>
]]></content:encoded></item><item><title><![CDATA[Integration Architecture Patterns]]></title><description><![CDATA[In today's world, it's common knowledge that most of the systems/ solutions built are complex. The nature of the complexity lies in sharing information between multiple systems that requires communication interwoven across like a spider web. I guess ...]]></description><link>https://narmadanannaka.com/integration-architecture-patterns</link><guid isPermaLink="true">https://narmadanannaka.com/integration-architecture-patterns</guid><category><![CDATA[System Architecture]]></category><category><![CDATA[architecture]]></category><category><![CDATA[Design]]></category><category><![CDATA[design and architecture]]></category><category><![CDATA[integration]]></category><dc:creator><![CDATA[Narmada Nannaka]]></dc:creator><pubDate>Sun, 31 Jul 2022 20:59:52 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1659301042277/IKZLCz5aL.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In today's world, it's common knowledge that most of the systems/ solutions built are complex. The nature of the complexity lies in sharing information between multiple systems that requires communication interwoven across like a spider web. I guess it will be easy to question the idiocy of the designer who designed the solution in the first place. But the reality, the shift from a monolithic architecture to microservices has also paved the way in giving independence in choosing what serves the purpose best irrespective of its dependence on the other applications or systems. This necessitates the requirement to build a process that aids in communicating the data between disparate applications, systems and/or environments.</p>
<h1 id="heading-what-is-integration-architecture">What is Integration Architecture?</h1>
<p>Integration is one of the core architectures and by its name intends to connect systems, organisations and people. The systems involved can be heterogeneous in nature. This means that not all systems process information in the same format. There is a need for transforming the messages to the relevant format for the receiving systems to process them accordingly. And as we do that, there is a need to establish guardrails to enforce the right data policies, and guidelines for systems, organisations and teams to follow.</p>
<p>The guardrails are implemented through four main patterns:</p>
<h1 id="heading-integration-patterns">Integration Patterns</h1>
<h2 id="heading-file-transfer">File Transfer</h2>
<p>A file is used as the media to transfer data between applications. When designing solutions for this particular integration, the key points of interest should be file name, file location, size, format, frequency of updates and read-write access to define the delete privilege - Job Scheduler, WORM (Write once and Read Many).</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1677123360737/d6ae4f16-4cce-4c53-974d-bb0351feb13a.png" alt class="image--center mx-auto" /></p>
<p>When migrating servers from data centres to the cloud, this will be a common pattern to implement to transfer files from on-premises legacy applications to cloud storage like Amazon EFS or Amazon S3.</p>
<h2 id="heading-shared-database">Shared Database</h2>
<p>The database is the media in which integration happens. Multiple applications share a common database where the shared data is stored. Applications in this instance share a common data schema and avoid data duplication and data transfer between the systems.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1677123132397/6ea2b10f-3ca5-4dfb-985e-3b38b2537c2a.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-remote-procedure-invocation">Remote Procedure Invocation</h2>
<p>A standard functionality or service is built to be exposed by one of the applications. This will be later accessed or invoked as a remote procedure by other applications—For example REST API.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1677123539316/756d470c-5734-407d-a2ec-0d871188d350.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-messaging">Messaging</h2>
<p>The applications integrate by sharing messages between them. Similar to file transfer, this pattern integrates the applications by sharing messages. In some cases, this is achieved by an application publishing the information of interest to a messaging channel from which the consumer applications access/ subscribe. This leads to the definition of different message types:</p>
<ul>
<li><p>Request - response</p>
</li>
<li><p>Fire and Forget</p>
</li>
<li><p>Pub-Sub</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1677123884892/64fa7394-ed37-43d1-a4db-fba233f2d5c6.png" alt class="image--center mx-auto" /></p>
<p>When designing a messaging integration pattern, it is important to agree on the message translation format, schema structure and the composition of data attributes, types, lengths and business rules to validate the transfer.</p>
<h1 id="heading-resources">Resources:</h1>
<p>https://www.enterpriseintegrationpatterns.com/</p>
<h1 id="heading-thank-you-for-reading-lets-connect">Thank you for Reading - Let's Connect!</h1>
<p>Enjoy my blog? For more such awesome blog articles - follow, subscribe and let's connect.</p>
]]></content:encoded></item><item><title><![CDATA[How to choose your AWS Region?]]></title><description><![CDATA[The recent pandemic has brought a surge in digital transformations with a growing demand to migrate the applications and/or services to the cloud to cut down on costs. According to ISG Provider Lens Report, there has been a demand from firms in seeki...]]></description><link>https://narmadanannaka.com/how-to-choose-your-aws-region</link><guid isPermaLink="true">https://narmadanannaka.com/how-to-choose-your-aws-region</guid><category><![CDATA[AWS]]></category><category><![CDATA[AWS Certified Solutions Architect Associate]]></category><category><![CDATA[Cloud]]></category><category><![CDATA[Cloud Computing]]></category><category><![CDATA[2Articles1Week]]></category><dc:creator><![CDATA[Narmada Nannaka]]></dc:creator><pubDate>Wed, 06 Apr 2022 12:15:43 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1649157528623/SHmsDOqZp.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The recent pandemic has brought a surge in digital transformations with a growing demand to migrate the applications and/or services to the cloud to cut down on costs. According to <a target="_blank" href="https://www.tcs.com/content/dam/tcs/pdf/discover-tcs/about-us/analystreport/tcs-recognised-leader-aws-services-australia.pdf">ISG Provider Lens Report</a>, there has been a demand from firms in seeking out AWS provider partners. Now, if you have been part of this transformation, one of the most commonly asked questions is about the selection of the AWS region. </p>
<h1 id="heading-what-is-a-region">What is a Region?</h1>
<p>A region is a self-contained geographic location positioned within a single country boundary and hence bounded by a single set of laws. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1649159659287/Jglf8A8mo.jpg" alt="A view of the data centres." /></p>
<p>To put this into context, imagine you have a group of logical data centres within a single geographic location (let's say, Sydney West). This is called an availability zone (AZ). Now group a cluster of these AZs which are connected by a proprietary high-speed fibre network (100GbE fibre network backbone) with multiple lines between every AZ so the cluster of data centres can be treated as a single area. This area will end up being your region. </p>
<h1 id="heading-why-does-it-matter">Why does it matter?</h1>
<p>AWS resources are hosted across multiple locations. These locations are categorized into regions, availability zones, and local zones. The full list of regions and the global AWS infrastructure available from each region can be found <a target="_blank" href="https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/?p=ugi&amp;l=na">here</a>.</p>
<p>Largely, AWS services are region scoped. Let's say you have your service available in the Asia Pacific (Sydney) region. When you choose Asia Pacific (Singapore), it is expected that the data related to the service available in Sydney is no longer accessible unless it is specifically replicated. Data is not synced between regions without the explicit configuration. </p>
<p>On the other hand, some of the AWS services are global and hence do not require a region selection. These services operate at a global level and are accessible from all regions. Example: IAM. </p>
<h1 id="heading-which-region-to-choose">Which region to choose?</h1>
<p>As mentioned above, the majority of the AWS services are region-based. Let's say you have made the call to move your existing enterprise application to AWS. Before the application is deployed to an EC2 instance, your first step will be the region selection. This can be determined by answering the following questions: </p>
<ul>
<li>Are the services required to deploy your enterprise application available in a region?</li>
<li>Where are your end-users located?</li>
<li>Are there any additional costs involved in your selected region?</li>
<li>Are there any compliance requirements stated by the law in the location the region is in?</li>
</ul>
<h2 id="heading-service-availability">Service Availability</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1649161610072/bGAMAfwFl.png" alt="Service is available in a particular AWS region." /></p>
<p>Not all AWS services are available in all regions. Most importantly, AWS tends to release its services incrementally across its regions and the first region that they release is to US East (N. Virginia). To check whether a service is available in a particular region, click this <a target="_blank" href="https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/?p=ugi&amp;l=na">link</a>. This site is updated daily by AWS and will have the latest information. </p>
<h2 id="heading-latency">Latency</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1649162246212/SCC0sHOxh.png" alt="Light speed in sharing data." /></p>
<p>Research where your user volume is located. Let's say all your users are from Australia then it is wise to choose the Sydney region. This will ensure that there is minimal latency in responding to your user requests. Although choosing a Singapore region, in this case, may incur a fraction of a milliseconds delay in comparison to the Sydney region. </p>
<h2 id="heading-cost">Cost</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1649223118678/2ao_7F3c_.png" alt="money tree" /></p>
<p>As regions are geographic locations within a single country, these regions are bound to the laws governed by the location. This in turn will have a variance in taxes and the costs involved in hosting the resources within the AWS infrastructure. </p>
<p>Depending on your costs, you can choose by selecting a region that will work within your budget. </p>
<h2 id="heading-compliance">Compliance</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1649245921615/jEHEbYdpZ.png" alt="compliance requirements" /></p>
<p>Depending on the region you choose, the data managed within your application must abide by the compliance requirements from that location. </p>
<ul>
<li>what are the different types of user data you are allowed to store?</li>
<li>how long can you store the data?</li>
<li>what are the different encryption policies applied to the data?</li>
</ul>
<p>For example, if your data source location mandates that the user data should be stored within the country. This will limit your choice of region to the regions within that country. </p>
<p>Considering the responses to the above 4 factors, you should be able to easily conclude the selection of your AWS region. However, if your application is being deployed to multi-regions, the compliance requirements should be considered on how the data is replicated across different regions.</p>
<h1 id="heading-thank-you-for-reading-lets-connect">Thank you for Reading - Let's Connect!</h1>
<p>Enjoy my blog? For more such awesome blog articles - follow, subscribe and let's connect.</p>
]]></content:encoded></item><item><title><![CDATA[How to run Forefront Identity Manager (FIM) PowerShell cmdlets]]></title><description><![CDATA[If you have been working with the outdated Microsoft's Forefront Identity Manager (FIM), there will come a point where you will have to run some of the PowerShell commands from a non-FIM machine. This blog post shares the automated script you can use...]]></description><link>https://narmadanannaka.com/how-to-run-forefront-identity-manager-fim-powershell-cmdlets</link><guid isPermaLink="true">https://narmadanannaka.com/how-to-run-forefront-identity-manager-fim-powershell-cmdlets</guid><category><![CDATA[Programming Blogs]]></category><category><![CDATA[Powershell]]></category><category><![CDATA[Microsoft]]></category><category><![CDATA[Decentralised Identity]]></category><category><![CDATA[2Articles1Week]]></category><dc:creator><![CDATA[Narmada Nannaka]]></dc:creator><pubDate>Mon, 04 Apr 2022 08:30:17 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1649060690140/PMwyKDF5a.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you have been working with the outdated Microsoft's Forefront Identity Manager (FIM), there will come a point where you will have to run some of the PowerShell commands from a non-FIM machine. This blog post shares the automated script you can use to register the FIM libraries. </p>
<pre><code>d:
cd c:\utilities
set<span class="hljs-operator">-</span>alias installutil $env:windir\Microsoft.NET\Framework64\v2<span class="hljs-number">.0</span><span class="hljs-number">.50727</span>\installutil
installutil .\Microsoft.ResourceManagement.Automation.dll
installutil .\Microsoft.ResourceManagement.dll
Set<span class="hljs-operator">-</span>location <span class="hljs-string">"c:\utilities"</span>
[System.Reflection.Assembly]::Load(<span class="hljs-string">"System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"</span>)
$publish <span class="hljs-operator">=</span> New<span class="hljs-operator">-</span>Object System.EnterpriseServices.Internal.Publish
$publish.GacInstall(<span class="hljs-string">"c:\utilities\Microsoft.ResourceManagement.dll"</span>)
$publish.GacInstall$publish.GacInstall(<span class="hljs-string">"c:\utilities\Microsoft.ResourceManagement.Automation.dll"</span>)
</code></pre><p>Note: It is critical that you are loading the correct versions of your libraries depending on your machine OS version. </p>
<p>The above script is for a 64-bit machine, for a 32-bit you should update the set-alias command to refer to C:\Windows\Microsoft.NET\Framework\v2.0.50727\installutil</p>
<p>Once the above script is run, you should be able to load the pssnap-in by running the following command: </p>
<p><code>add-pssnapin FIMAutomation</code> </p>
<p>The above command will load the modules and from here you should be good to run the FIM-related cmdlets from your PowerShell.</p>
<h1 id="heading-thank-you-for-reading-lets-connect">Thank you for Reading - Let's Connect!</h1>
<p>Enjoy my blog? For more such awesome blog articles - follow, subscribe and let's connect.</p>
]]></content:encoded></item><item><title><![CDATA[Understanding Design Concerns in Systems Architecture]]></title><description><![CDATA[Before you build any system - looking at it from different perspectives, working on the optimal solution from the list of available alternatives, selecting infrastructure, and estimating - is always a unique and challenging problem-solving exercise. ...]]></description><link>https://narmadanannaka.com/understanding-design-concerns-in-systems-architecture</link><guid isPermaLink="true">https://narmadanannaka.com/understanding-design-concerns-in-systems-architecture</guid><category><![CDATA[Design]]></category><category><![CDATA[AWS Certified Solutions Architect Associate]]></category><category><![CDATA[System Architecture]]></category><category><![CDATA[design and architecture]]></category><category><![CDATA[design principles]]></category><dc:creator><![CDATA[Narmada Nannaka]]></dc:creator><pubDate>Sun, 03 Apr 2022 12:00:45 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1648778975827/gtFDYWJpK.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Before you build any system - looking at it from different perspectives, working on the optimal solution from the list of available alternatives, selecting infrastructure, and estimating - is always a unique and challenging problem-solving exercise. It is an art, one you need to be passionate about and have the instinct to make the risky decisions that balance out with the right outcomes. </p>
<p>This blog focuses on understanding the design concerns which drive some of the key decisions in systems architecture. These design concerns are the thumb rules that guide in making the right choices throughout the project life cycle. </p>
<h2 id="heading-what-is-systems-architecture">What is Systems Architecture?</h2>
<p>According to <a target="_blank" href="https://www.sebokwiki.org/wiki/System_Architecture">SEBOK WIKI</a>: </p>
<blockquote>
<p>Systems Architecture is abstract, conceptualization-oriented, global, and focused to achieve the mission and life cycle concepts of the system. It also focuses on high-level structure in systems and system elements.</p>
</blockquote>
<p>Now that sounds very complex. In simple terms, systems architecture is the fundamental and unifying system structure defined in terms of system elements, interfaces, processes, constraints, and behaviors.</p>
<h2 id="heading-is-it-just-software-or-hardware">Is it Just Software or Hardware?</h2>
<p>This is one of the common questions that is posed by most beginners. When we say system elements, interfaces, and processes. It deludes that maybe a systems architecture should just cover the software side of the system and has nothing to do with the hardware layer. Well, that is not correct. </p>
<p>It includes elements of both software and hardware and is used to enable the design of such a composite system. For example, let's say you are building the systems architecture for an online booking system. A very high-level view would entail a web front-end, business service layer, and the web backend (database). </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1648787943656/8jvRb0V9d.jpg" alt="scott-graham-5fNmWej4tAA-unsplash.jpg" /></p>
<h2 id="heading-why-is-it-important">Why is it important?</h2>
<p>Now you know what is systems architecture but why do you need it? Can't I simply build the system without the trouble to brainstorm the different components, capabilities, and functions that make up the system's architecture? </p>
<p>Understand that systems architecture is a powerful tool and a common language that enables collaboration between all your diverse teams working to build a single system. This common language aids in being understood and represents the multiple views of all the teams. </p>
<p>Let's look into the last example of the online booking system - let's say there is a business requirement that states the system must handle 1M transactions per second. Now, designing and implementing this requirement will involve the cohesive effort of the infrastructure team, and the back-end team. Both teams should converge on an agreed approach to handle the requirement. Often it is misunderstood that solutions architecture is a single person's job but in reality, it involves input from a group of SMEs who are experts in their areas. </p>
<h2 id="heading-planning">Planning</h2>
<p>When you look at SDLC, the first phase of any project irrespective of the project methodology or framework you are following, you will start with planning. </p>
<p>The first step before we start working on the systems architecture draft is analyzing the as-is architecture. Yes, you heard me right before you start diving into various solutions for the problem statement. Understand the client's existing architecture - identify their pain points and the stakeholder concerns. Sometimes these are not obvious and require multiple workshops to unearth the ongoing issues faced by the end-users. This analysis will help categorize the list of requirements (aiming to address the problem statement) into functional requirements and technical requirements. </p>
<blockquote>
<p>What? Why? How?</p>
</blockquote>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1648792036151/iaVj4BO3l.jpg" alt="ana-municio-PbzntH58GLQ-unsplash.jpg" /></p>
<p>Trust me, it's way easier to find a rock with a question mark symbol when compared to identifying some of the unknown assumptions made on the requirements. An in-depth analysis should be performed on what a particular requirement is going to achieve, why is it needed in the first place, and how to implement it will lay the foundations for the design. </p>
<h2 id="heading-design-concerns">Design Concerns</h2>
<p>Even when there are no explicit requirements stated by the client, there will still be expectations, stated or not. The architect should understand what is requested, what is needed, and what is possible for each of the design concerns. </p>
<ul>
<li>Scalability - how many users or transactions can it process concurrently?</li>
<li>Performance - how fast does it respond? what is the max throughput?</li>
<li>Recoverability - how does the application recover from a fault?</li>
<li>Security - can it sustain attacks? is data protected? </li>
<li>Maintainability - how easy is it to maintain? </li>
<li>Operability - how easy is it to use and manage? how is it operated? </li>
<li>Availability - is it available 24x7 and is it 99.9% or 99.99%?</li>
</ul>
<p>These concerns should always be in the back of your mind to rule out all known and unknown assumptions. </p>
<h3 id="heading-two-additional-concerns">Two Additional Concerns</h3>
<ul>
<li>Affordability</li>
<li>Sustainability</li>
</ul>
<p>In this year's Accenture's Fjord Trends 2022, there is one trend that can be adapted to the design thinking process. The pandemic has brought some unforeseen challenges to the supply chain. If there is something it taught us is to end the abundance thinking approach. </p>
<p>Yes, the cloud and some of the latest technologies can provide infinite and bottomless computing power but every responsible business understands that they have to play a part in tackling climate change and how they can help achieve the net-zero carbon emission targets. Similarly, working towards affordability will help the clients to keep the costs low and bring in additional value. </p>
<p>One thing to keep in mind is that when designing for the balance between affordability and sustainability, it is important to decouple innovation from the notion of new. </p>
<h2 id="heading-aws-use-case">AWS Use Case</h2>
<p>To learn more about how to apply the above-mentioned design concerns to a use case on deploying a highly available and scalable WordPress site on AWS - check out this <a target="_blank" href="https://www.youtube.com/watch?v=rOSpqA3UmwA&amp;t=53s">youtube video</a>. </p>
<h1 id="heading-thank-you-for-reading-lets-connect">Thank you for Reading - Let's Connect!</h1>
<p>Enjoy my blog? For more such awesome blog articles - follow, subscribe, and let's connect.</p>
]]></content:encoded></item><item><title><![CDATA[Why you should choose a career in Technology?]]></title><description><![CDATA[A few months back I did a career guidance session for a class of year 11 students at St. Margaret Mary's College. I am not sure if I convinced the students enough to choose a tech career but the questions that followed told me that I helped destigmat...]]></description><link>https://narmadanannaka.com/why-you-should-choose-a-career-in-technology</link><guid isPermaLink="true">https://narmadanannaka.com/why-you-should-choose-a-career-in-technology</guid><category><![CDATA[Career]]></category><category><![CDATA[Career Coach]]></category><category><![CDATA[technology]]></category><category><![CDATA[IT]]></category><category><![CDATA[WomenWhoTech]]></category><dc:creator><![CDATA[Narmada Nannaka]]></dc:creator><pubDate>Fri, 03 Sep 2021 20:32:37 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1622487147994/qitwsvcRo.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A few months back I did a career guidance session for a class of year 11 students at St. Margaret Mary's College. I am not sure if I convinced the students enough to choose a tech career but the questions that followed told me that I helped destigmatize some of the wrong notions associated with this industry. Considering the importance of this topic and how this industry has helped shape my life, I thought I will share the content of the session in this blog. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1622235559204/WtKucnYTD.png" alt="image.png" /></p>
<p>Career choices are often difficult and way too complicated to decide at such an early age of Year 11 and 12. I remember too well when I had a similar conversation with my parents in Year 10. I had to decide on my main career subjects. Maths means Engineering fields, Biology means Medical fields and now you are thinking I am going to write a full list. Nope, I only got 2 choices. It is one of those times from where I am from and I guess still in other places where a good career is either an Engineer or a Doctor. And, here I am thinking of becoming an Archeologist and raid for treasures like Laura Croft. It was a bit of a reality check for me. </p>
<p><iframe src="https://gifer.com/embed/2Y1V" width="480" height="203.520"></iframe></p><p><a href="https://gifer.com">via GIFER</a></p><p></p>
<p>I know my parents have their best interests for me and wanted me to think about science/ being a doctor. You can imagine the rebel me wanted to choose her own career so I went with the Maths subject. Fast forward 16 years, here I am with a Master's degree in Information Technology and a Technology Manager job in one of the Fortune Global 500 Companies, Accenture. Of course, Software Engineer is one of the hats I wear daily for the job 😉. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1630613432814/xrpJgHFCo.jpeg" alt="Student graduated with a hat" /></p>
<p>So, going through all that process and being in this industry for 10 years has taught me something. This is the best industry to be in for the right reasons. Here's why:</p>
<h2 id="heading-1-financial-independence">1. Financial Independence</h2>
<blockquote>
<p>One who holds the purse strings holds the power! </p>
</blockquote>
<p>I recently read this quote in a book and can't agree more with the aptness of it. Mainly for those women readers who are checking this blog. Trust me, as a fellow woman, this applies to any career choice. Having financial independence and the ability to make your own spending choices makes all the difference. For me, I cleared off all my student debts within the first year of graduation and I can proudly say that I contribute equally to the family table along with my husband. Now, this is possible in my case only because I chose a career in technology. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1630616141596/UzxBFy6Gy.png" alt="Top 10 occupations, by average taxable income" /></p>
<p>Its well-known tech jobs are one of the highest-paying sectors out there. Although the infographic from the <a target="_blank" href="https://www.ato.gov.au/About-ATO/Research-and-statistics/In-detail/Taxation-statistics/Taxation-statistics-2018-19/?anchor=Individualsstatistics#Chart4Individuals">Australian Taxation Office (ATO)</a> suggests that I should have listened to my parent's advice 😂. Believe me, there are more benefits than just the salary. This is just the tip of the iceberg. </p>
<h2 id="heading-2-benefits-on-top-of-the-salary">2. Benefits on top of the Salary</h2>
<p>When you receive a job offer from a tech company, additional benefits are a common clause. This can include health packages, stock options, bonuses, fully paid maternity leave, and so on. On top of this, there are few more benefits like -</p>
<h3 id="heading-working-from-home-or-any-part-of-the-world">Working from home or any part of the world</h3>
<p>I remember a time I stayed in India for 5 months but I was actually working for client projects running in the US, and Australia. Managing time zones is usually tricky but if you are efficient and professional in the way you deliver your work. There is no one stopping you from making those specific arrangements with your manager or HR lead to work from any part of the world. Currently, with the pandemic situation, companies are more supportive of this arrangement. </p>
<h3 id="heading-work-locations">Work Locations</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1630697290682/WdMXfvYTw.jpeg" alt="021B624F-37DD-48C6-82E6-11B1A824FC0F.jpg" /></p>
<p>All courtesy of work, I got to visit some beautiful places around the world. You may think that I visited the place for work but then weekends are my own to explore... 🧗‍♀️</p>
<p>The best part is I experienced my first snow during a work trip and it's a snow blizzard!!</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1630698783864/F2p8A4YcR.gif" alt="My first snow blizzard before it started." /></p>
<h2 id="heading-3-more-opportunities">3. More Opportunities</h2>
<p>Again from my personal experience. I was offered a job while I am still in my last trimester in Uni. I didn't have to apply or do an interview. This is a common story you will hear with many others in this field. </p>
<p>There are many opportunities within the technology space that you can even mix up your interests. In other words, not everyone who works in the technology space knows how to code. Sure they know how to operate a laptop but the same can be said about a lot of other careers out there. Yes, you read it right! A good number of tech jobs do not require you to write a single line of code. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1630700320841/muRuBi0rV.jpeg" alt="Code marked with Red X mark." /></p>
<p>Explore what you are passionate about and you can mix it up with a tech-related career. For example, you like writing, you can be a Digital Content Creator or a Tech Writer. Arts - Graphic Designer. Peoples person - go into leadership roles or you can also make into pre-sales consultant roles. If you like solving puzzles like a detective - you can be an analyst. There's plenty of options and opportunities to choose from. The world is your Oyster!! </p>
<h2 id="heading-4-meaningful-impact">4. Meaningful Impact</h2>
<p>Technology touches almost every part of our life and so anything you work on improving the quality of life gives your work that meaningful impact. Imagine that feeling. </p>
<p>In my first job, I did the majority of the design work, wrote a few lines of code for Airbus A350 cabin pressure control systems. Now, every time I see an Airbus A350, it gives me that immense satisfaction that a wrote a piece that is helping the Airbus to maintain the pressure/oxygen levels when the plane is in flight mode 🚀.</p>
<p>The last project I completed a few months back helped a major technology giant to establish a secure post-pandemic environment for employees returning to their workspace. </p>
<p>Contributing to works like that is the best feeling!! You are making a huge impact on the community and at the same time getting paid for it. Not many careers offer you that satisfaction. </p>
<h2 id="heading-5-education-expenses">5. Education Expenses</h2>
<p>Let's say you decided to choose technology as your choice of career but you are not sure about the expenses. There are many out there who received job offers without a formal college education. I am not recommending that is the path for you, I am sure they may have gone through their own struggles. </p>
<p>From experience, I can tell you my first job offer is 2.5 times more than the amount I spent on my master's degree. Something to note is that I excluded the money I made from my internship which I did from my second trimester. That seems like a reasonable investment to make on yourself if you chose to. </p>
<h2 id="heading-thank-you-for-reading-lets-connect">Thank you for Reading - Let's Connect!</h2>
<p>Enjoy my blog? For more such awesome blog articles - follow, subscribe and let's connect.</p>
]]></content:encoded></item><item><title><![CDATA[Branding #1 - How to customize your images?]]></title><description><![CDATA[Are you sharing content digitally on the world wide web? If so, what do you do to leave your brand on your images? This blog is for those who asked me how I design my custom images. 
Often we spend so much time on the words and the message we want to...]]></description><link>https://narmadanannaka.com/how-to-customize-your-images</link><guid isPermaLink="true">https://narmadanannaka.com/how-to-customize-your-images</guid><category><![CDATA[images]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[Web Design]]></category><category><![CDATA[Design]]></category><category><![CDATA[graphic design]]></category><dc:creator><![CDATA[Narmada Nannaka]]></dc:creator><pubDate>Fri, 14 May 2021 20:55:33 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1621019439927/Wt3p-ErXO.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Are you sharing content digitally on the world wide web? If so, what do you do to leave your brand on your images? This blog is for those who asked me how I design my custom images. </p>
<p>Often we spend so much time on the words and the message we want to convey online that we simply neglect the images that are worth a thousand words. For me, my father, Late Nannaka Srinivasa Rao was an amazing artist who visualized designs in his batik prints. I think I got my artistic/creative flair from him but I hardly find time to do the drawing or painting these days. So, what do I do - I use my blog images as a medium to leave that creative mark😊.  And, let's not forget it is adding to my personal branding as well. Whatever your reasons may be, it is time that you leave your personal mark on those images. </p>
<h2 id="tada-canva">Tada! - CANVA</h2>
<p>Yes, Canva is my go-to tool for customizing images. It is a very popular and easy-to-use graphic design platform with lots of options/features to design and customize your images. </p>
<p>The first step is to sign-up with Canva using this  <a target="_blank" href="https://www.canva.com/join/twz-fbs-ldq">link</a>. </p>
<p>Once you are signed in, you will be directed to a home page. This is more like a dashboard that has access to all the designs. From here, you can pick a design mode you are after. This can be a simple social media image, presentation, video file, or a marketing flyer. You will notice all these designs are preset with the canvas sizes, thereby saving you loads of time from researching the size specifications for a particular social media post. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1621023862740/43GaJSMsM.png" alt="image.png" /></p>
<p>You can also go with your custom size by clicking on the custom size button. When clicked, you will be prompted to specify the width and height measurements. </p>
<h3 id="templates">Templates</h3>
<p>One of the awesome features of this design platform is the huge collection of free templates that can be used as they are with little to no changes. You will find a template for every occasion and purpose here. You can use them to get inspired or create your own by simply removing all the elements. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1621024289993/2rsyeBiuB.png" alt="image.png" /></p>
<h3 id="hands-on">Hands-on</h3>
<p>It's time to grab your keyboard and mouse tightly! I have decided to create a cover for my Etsy store. </p>
<p><strong>Tip 👍-</strong> Now, the first thing I do to save some time is use the search bar on the top. You can use it to search for anything in Canva. So, here I searched for an Etsy cover and I got a suggestion with Etsy Shop Cover. Clicking on it will take you to a page with all the templates for Etsy shop covers. You can use one of the free templates or click on 'Create a blank Etsy Shop Cover'. I chose the blank option. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1621025243406/IzBwLU6qE.png" alt="image.png" /></p>
<p>Once you have your blank image opened in editing mode, you will have the options to add a different background, elements, text, animation and also add your own logo using the upload option as I do with all my images. </p>
<p>You will notice that every feature has both free and pro options and it is easy to search for features with specific settings by using the filter option: </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1621025400296/RvOnJeh88.png" alt="image.png" /></p>
<p>You can easily make do with the free elements but I found most of the pro elements are usually a dollar or less. You can also get credits to use pro elements by referring your friends. It's a win-win because you both will receive a credit after their first design creation. </p>
<p>Now, with the use of just the free elements, I have designed the below cover for my store: </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1621025475264/G-apvKAWL.png" alt="Etsy Store Cover.png" /></p>
<p>What do you think - does it stand out? Do you have your own favourite tool for customizing images - don't forget to add your thoughts in the comments. </p>
<h3 id="thank-you-for-reading-lets-connect">Thank you for Reading - Let's Connect!</h3>
<p>Enjoy my blog? For more such awesome blog articles - follow, subscribe and let's connect.</p>
]]></content:encoded></item><item><title><![CDATA[What is REST?]]></title><description><![CDATA[REST is a very common term that you will hear in the programming world and so in your technical interviews. This blog post will focus on what REST is and what does it mean to have a RESTful API? 
What is REST?
REST is an acronym for Representative St...]]></description><link>https://narmadanannaka.com/what-is-rest</link><guid isPermaLink="true">https://narmadanannaka.com/what-is-rest</guid><category><![CDATA[REST API]]></category><category><![CDATA[REST]]></category><category><![CDATA[software architecture]]></category><category><![CDATA[software development]]></category><dc:creator><![CDATA[Narmada Nannaka]]></dc:creator><pubDate>Tue, 23 Mar 2021 01:42:14 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1616384261591/ypjbGqSU2.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>REST is a very common term that you will hear in the programming world and so in your technical interviews. This blog post will focus on what REST is and what does it mean to have a REST<em>ful</em> API? </p>
<h1 id="what-is-rest">What is REST?</h1>
<p>REST is an acronym for Representative State Transfer. It is an architectural pattern or you can say a development style that is used to build interactive applications. Ok, that means REST is not a technology or a language but more a style in which you should develop your applications. And, this can be done by following the REST principles and constraints. </p>
<p>Now before we deep dive into those parts of the REST architecture, it is important to understand why do we need this architecture pattern. </p>
<h2 id="history">History</h2>
<p>Before 2000, developers integrating with APIs(Application Programming Interface) used SOAP (Simple Object Access Protocol) for communicating between the sender and the receiver systems. This required too many lines of code in XML format and then adding the SOAP envelope to the end-point. </p>
<p>The most frustrating thing I find with the SOAP apart from the complex coding is the complexity in troubleshooting an issue. It involves too many calls to trace back the communication made between the systems. </p>
<p>Ok, so we had APIs which are interacting with SOAP which sounds more complex, unlike its name. Then came Roy Fielding in 2000 who along with his colleagues came up with a standard in a doctoral dissertation. This standard's main goal is to provide a set of constraints(rules) that will simplify the communication between one server and another. The best thing is the interaction uses the HTTP syntax. The birth of these constraints is referred to as REST and when you build an API that follows these constraints, it is known as building a true REST<em>ful</em> API. </p>
<h2 id="6-constraints">6 Constraints</h2>
<h3 id="client-server-architecture">Client-Server architecture</h3>
<p>Simplifying the solution into a client-server architecture. Separating the solution user interface from the data storage side of logic can assist in moving the user interface to different platforms and scaling the server components. </p>
<h3 id="stateless">Stateless</h3>
<p>This is inspired by the HTTP context where the client makes a request to the server. The request will contain all the information required to process the request on the server-side. The server side will not store any information related to the HTTP request and each request will be treated as a new one. That is the state of the request is managed at the client-end only. </p>
<h3 id="cacheable">Cacheable</h3>
<p>Caching is an important concept in today's user interactions. The ability to cache a resource when applicable will reduce the number of client-server interactions because the client can re-use the same response. Caching can be applied on either side of the client-server architecture and should mark the resource to be cacheable. </p>
<h3 id="layered-system">Layered System</h3>
<p>REST allows you to build applications that follow a layered architecture. In this architecture, the servers will only have knowledge of the intermediary servers there by the client interacting will never know which server has responded to their request. Let's take a simple web form that stores information on a database server. On top of the server, we can add a load balancer, a security layer that authorizes the requests made to the database server. The ability to build an application in this layered style will help in separating the business logic from the security logic and also makes scaling the servers an easy job. </p>
<h3 id="uniform-interface">Uniform Interface</h3>
<p>It is important to apply a generality where the end-point provides the ability to interact with related or additional data using the same URI. This simplifies the interaction and improves the visibility of the resources. It is said if the user knows how to interact with one of your APIs, they should be able to follow the same approach for the remaining APIs. This is achieved through 4 architecture constraints: </p>
<ul>
<li>identification of resources.</li>
<li>manipulation of resources through representations.</li>
<li>self-descriptive messages.</li>
<li>hypermedia as the engine of application state (HATEOAS)</li>
</ul>
<h3 id="code-on-demand-optional">Code on Demand (optional)</h3>
<p>This is an optional constraint that allows your API to send executable code to the client system on demand. For example, Java applets or javascript to run a widget. </p>
<h2 id="summary">Summary</h2>
<p>The key take-aways are:</p>
<ul>
<li>REST is an architecture pattern and is not a technology. </li>
<li>REST does not recommend a language in which the client or server-side of the logic must be built. </li>
<li>HTTP is not the same as REST, only that a REST application uses HTTP protocol for the requests and responses between client and server. </li>
<li>An interactive application can be made REST<em>ful</em> by following the six constraints.</li>
<li>Building an application using REST simplifies the logic into its own layers and improves scalability. </li>
<li>Web services that are built using the REST constraints are known as the REST<em>ful</em> APIs:<ul>
<li>This includes a base URI.</li>
<li>HTTP methods to GET, PUT, POST, or DELETE to signify the request being made. </li>
<li>media type that tells which parser to invoke for processing the message. </li>
<li>The responses from the server will be returned as payload in HTTP, XML, JSON, or other formats. </li>
</ul>
</li>
</ul>
<p>Now that you got the hang of the REST architecture, you should give it a go!</p>
<h3 id="thank-you-for-reading-lets-connect">Thank you for Reading - Let's Connect!</h3>
<p>Enjoy my blog? For more such awesome blog articles - follow, subscribe and let's connect.</p>
]]></content:encoded></item><item><title><![CDATA[How to run the chmod400 command on Windows]]></title><description><![CDATA[Have you attempted to connect to an EC2 instance from your machine? If so, you will know that the secure connection can only be established after running the chmod400 command on the security key pair file. The downside, there is no chmod command util...]]></description><link>https://narmadanannaka.com/how-to-run-the-chmod400-command-on-windows</link><guid isPermaLink="true">https://narmadanannaka.com/how-to-run-the-chmod400-command-on-windows</guid><category><![CDATA[AWS]]></category><category><![CDATA[AWS Certified Solutions Architect Associate]]></category><category><![CDATA[Hashnode]]></category><category><![CDATA[Powershell]]></category><category><![CDATA[networking]]></category><dc:creator><![CDATA[Narmada Nannaka]]></dc:creator><pubDate>Tue, 09 Mar 2021 06:48:01 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1614196510717/lY2wJc1ZX.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Have you attempted to connect to an EC2 instance from your machine? If so, you will know that the secure connection can only be established after running the chmod400 command on the security key pair file. The downside, there is no chmod command utility in Windows like we do in macOS, Linux, and other Unix-like operating systems. </p>
<p>So, this post will detail an alternative - a PowerShell script that can be run to SSH to an EC2 instance from Windows OS and does an equivalent job to the chmod400 command. </p>
<h2 id="heading-what-does-the-chmod400-command-do-to-a-file-or-folder">What does the chmod400 command do to a file or folder?</h2>
<p>The command when run on the security key pair file removes all access to the file and gives only the current user read permission. So, when connecting to an EC2 instance, we are making sure no one has "write" access to the security key pair file. This is a mandatory requirement to connect to the EC2 instance safely. </p>
<p>If running from MacOs or Linux, the command will be like this:</p>
<pre><code>$ chmod <span class="hljs-number">400</span> securityfile.txt
</code></pre><p>The updated file permissions will look something like this:</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td></td><td>User</td><td>Group</td><td>Other</td></tr>
</thead>
<tbody>
<tr>
<td><strong>Read  </strong></td><td>Yes</td><td>No</td><td>No</td></tr>
<tr>
<td><strong>Write </strong></td><td>No</td><td>No</td><td>No</td></tr>
<tr>
<td><strong>Execute </strong></td><td>No</td><td>No</td><td>No</td></tr>
</tbody>
</table>
</div><h2 id="heading-chmod400-on-windows">chmod400 on Windows</h2>
<p>The chmod command utility is not supported on windows. There are other ways to apply for the same file permissions. One way is to right-click on the file properties, and security tab and then click on the Advanced button. In this screen, you will have to disable inheritance and then remove access to all users except for the current user.  All these steps sound very tedious and if you consider doing it multiple times on different security key pair files to connect to other EC2 instances, it sounds unproductive!</p>
<p>So, here comes the magic script that does all that. But before you run the script make sure OpenSSH.Client and OpenSSH. Servers are installed on your machine. These two are required to run the SSH command and can be found from this <a target="_blank" href="https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_install_firstuse">link</a>. Also, Powershell should have Microsoft.Powershell.Security Module installed. This script makes use of some of the cmdlets from this module.</p>
<h3 id="heading-powershell-script">Powershell script</h3>
<pre><code>#NOTE:  Update the below parameters <span class="hljs-keyword">with</span> your EC2 details before running <span class="hljs-built_in">this</span> script.

#Parameters <span class="hljs-keyword">for</span> Running the script
[string] $keyFile = <span class="hljs-string">"C:\AWS\ec2KeyPair.pem"</span>
[string] $publicip = <span class="hljs-string">"ec2-user@XX.xXX.xXX.xxX"</span> #update the public ip address here

#view the security key file permissions
Write-Host <span class="hljs-string">"Current ACL permissions to the security file:"</span>
Get-Acl $keyFile | fl

#add a current user <span class="hljs-keyword">with</span> read control to the security file
$acl = Get-Acl $keyFile
$uName = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name

$accessRule = New-<span class="hljs-built_in">Object</span> System.Security.AccessControl.FileSystemAccessRule($uName,<span class="hljs-string">"Read"</span>,<span class="hljs-string">"Allow"</span>)
$acl.SetAccessRule($accessRule)
$acl | <span class="hljs-built_in">Set</span>-Acl $keyFile

#Delete inherited permissions
$acl.SetAccessRuleProtection($true,$false)
$acl | <span class="hljs-built_in">Set</span>-Acl $keyFile

Write-Host <span class="hljs-string">"ACL Permissions after disabling inheritance and adding full control access to current user:"</span>
Get-Acl $keyFile | fl

# ssh to the ec2-instance
ssh -i $keyFile $publicip
</code></pre><p>Copy the above script and update the parameters section with the location of your security key pair file and EC2 instance IP address. Once the file is saved, you just run the script. See, it is that simple and reduces running through multiple steps. </p>
<h3 id="heading-thank-you-for-reading-lets-connect">Thank you for Reading - Let's Connect!</h3>
<p>Enjoy my blog? For more such awesome blog articles - follow, subscribe and let's connect.</p>
]]></content:encoded></item><item><title><![CDATA[What does Agile, Scrum & Kanban mean?]]></title><description><![CDATA[Agile, Scrum and Kanban, - these are the most common terms you will keep hearing in today's software development world. It is easy to get them mixed up or refer to them in the wrong context. So, what do they mean and which one to choose for a project...]]></description><link>https://narmadanannaka.com/what-does-agile-scrum-and-kanban-mean</link><guid isPermaLink="true">https://narmadanannaka.com/what-does-agile-scrum-and-kanban-mean</guid><category><![CDATA[agile]]></category><category><![CDATA[Scrum]]></category><category><![CDATA[project management]]></category><category><![CDATA[agile development]]></category><category><![CDATA[software development]]></category><dc:creator><![CDATA[Narmada Nannaka]]></dc:creator><pubDate>Fri, 05 Mar 2021 20:23:49 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1614892646515/zWqikwCPl.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Agile, Scrum and Kanban, - these are the most common terms you will keep hearing in today's software development world. It is easy to get them mixed up or refer to them in the wrong context. So, what do they mean and which one to choose for a project? All these queries and many others will be discussed in this post. Hang On! </p>
<h2 id="agile">Agile</h2>
<p>In the project management world, agile is a set of principles and values. So, <strong>does this mean agile is a methodology or a framework</strong> that we can follow for managing a project. No, absolutely not. Because methodology and framework are different. Methodology refers to a more detailed approach in which complete guidance is provided on how work should be done. On the other hand, a framework is something that is deliberately left incomplete so we can fill the gaps or adapt it as we see fit for the project that uses SCRUM, Crystal, etc. </p>
<p> <img src="https://upload.wikimedia.org/wikipedia/commons/a/a6/History_of_agile.png" alt="History of Agile" /></p>
<h3 id="origin">Origin</h3>
<p>2001 is when the manifesto for agile software development emerged. It is released by the agile alliance, a group of 17 individuals who practiced SCRUM, XP, DSDM, ASD, Crystal, Feature-Driven Development, and Pragmatic programming. They are looking for a lightweight alternative to the documentation-driven heavyweight software development processes. </p>
<blockquote>
<p><strong>Individuals and interactions</strong> over processes and tools
<strong>Working software</strong> over comprehensive documentation
<strong>Customer collaboration</strong> over contract negotiation
<strong>Responding to change</strong> over following a plan</p>
</blockquote>
<p>So, is born an iterative approach for software development that is guided by a set of 12 principles and values called the  <a target="_blank" href="https://agilemanifesto.org/"><strong>Agile Manifesto</strong></a>. You can read more about the 12 principles from this <a target="_blank" href="https://agilemanifesto.org/principles.html">link</a>. </p>
<p>Now, you know what the term agile means. To summarize, it is simply a set of principles and values that govern how the software development process should convene.</p>
<h2 id="scrum">Scrum</h2>
<p>As evident from the history of the agile screenshot shared above, the Scrum framework has been around since 1986. And, yes Scrum is a framework, not a methodology. </p>
<p>Scrum is developed by Ken Schwaber and Jeff Sutherland to help organizations to deliver complex projects of the highest possible value. For this, they have documented a guide called the <a target="_blank" href="https://scrumguides.org/scrum-guide.html">scrum guide</a>. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1614921746663/dlgP2JVhl.jpeg" alt="Group of blank sticky notes on a desk with a sharpie marker" /></p>
<p>According to this guide, scrum is defined as:</p>
<blockquote>
<p>A framework within which people can address complex adaptive problems, while productively and creatively delivering products of the highest possible value. </p>
</blockquote>
<p>There is a misconception that scrum is only for software development. That is false, I think it can be applied to accomplish any complex task, industry, and even personal goals. I know that doesn't sound right but scrum is not a process, technique, or definitive method that insists on where it can be applied. It is a framework that consists of scrum roles, events, artifacts, and rules. And, its main focus is the continuous improvement of product, team, and working environment. </p>
<h3 id="scrum-roles">Scrum Roles</h3>
<p>The scrum team consists of the product owner, the development team, and a scrum master. A product owner is the one who is responsible for the product backlog, which is the single source of all the requirements needed to make the product. This role will be performed by a single person and their goal will be to maximize the value of the product delivered by the development team. </p>
<p>The development team consists of professionals who are self-organized and self-managed to do the work of delivering a potentially releasable increment at the end of each sprint. The individual team members will have specialized skills and cross-functional so the team can do the work assigned to them within a sprint. </p>
<p>A scrum master is an individual who is responsible for promoting and supporting the team that the Scrum framework as defined in the Scrum guide is followed. They act as servant-leader for the team by helping those within the team to understand the scrum rules and values and those outside the team on how their interactions are affecting the team. </p>
<p>Each role has its own part to play for a sprint (timeline to deliver a potentially releasable increment which is usually 2-4 weeks). They abide by the scrum rules and values so they can maximize the value of the sprint delivery. </p>
<h2 id="kanban">Kanban</h2>
<p>Kanban pronounced as 'Kahn-Bahn' is a Japanese term meaning visual signal or card. Taiichi Ohno, an engineer from Toyota inspired by the supermarket's inventory restocking techniques has developed a scheduling system for just-in-time manufacturing. To reduce waste and improve efficiency, he came up with a visual card method to trigger actions throughout the production process. </p>
<p>This approach is later refined and evolved to what we know as the Kanban method of today. It consists of a visual board where the team should know exactly where they are to move to the desired destination. It allows for a pull system where items are pulled as per the team capacity. So, any project with tasks that can follow the pattern of "To Do", "Doing" and "Done" can be implemented using the Kanban.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1614924050625/SuG7UfTNe.jpeg" alt="Kanban.jpg" /></p>
<p>Along with project progress visualization, this approach enables work-in-process limits. This reduces the time taken to move across the different lanes in the kanban board. Focusing on the continuous flow of work enables continuous improvement by measuring metrics around the flow. </p>
<h2 id="which-one-to-choose">Which one to choose?</h2>
<p>I see the scrum framework works well for projects that have fixed priorities for the sprint timeline because changes during the sprint in scrum are not recommended. On the contrary, Kanban relies on more the just-in-time production system so projects with changing priorities will benefit from it. In fact, scope modifications and continuous improvement to the way things are done are welcome before the completion of the project. </p>
<p>I have also seen organizations where Kanban is first introduced to ease the team into the scrum culture before restricting the project processes to the scrum rules. It makes change management easier. Again, there is no fixed rule that says you should follow one in a particular situation. It all depends on the project manager to determine which one works well for the team. </p>
<p>What do you think of scrum and kanban, which one do you use for your projects and why? Let me know your thoughts in the comments. </p>
<h3 id="thank-you-for-reading-lets-connect">Thank you for Reading - Let's Connect!</h3>
<p>Enjoy my blog? For more such awesome blog articles - follow, subscribe and let's connect.</p>
]]></content:encoded></item><item><title><![CDATA[How to customize Hashnode blog with custom CSS]]></title><description><![CDATA[I recently moved my blogging site from a WordPress platform to  Hashnode. One of the key features that sold me out is the ability to add custom CSS. This post covers some of the tips and tricks I learned while setting up custom CSS for my blog.
One m...]]></description><link>https://narmadanannaka.com/how-to-customize-hashnode-blog-with-custom-css</link><guid isPermaLink="true">https://narmadanannaka.com/how-to-customize-hashnode-blog-with-custom-css</guid><category><![CDATA[Blogging]]></category><category><![CDATA[CSS]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[Hashnode]]></category><category><![CDATA[Website design]]></category><dc:creator><![CDATA[Narmada Nannaka]]></dc:creator><pubDate>Fri, 26 Feb 2021 11:09:54 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1614198393675/6HVKR8Zpz.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I recently moved my blogging site from a WordPress platform to  <a target="_blank" href="https://hashnode.com/@narmada-nannaka/joinme">Hashnode</a>. One of the key features that sold me out is the ability to add custom CSS. This post covers some of the tips and tricks I learned while setting up custom CSS for my <a target="_blank" href="https://narmadanannaka.com">blog</a>.</p>
<p>One may question why should we resort to such stress to personalize one's own blog? Well, there are many reasons and they vary with your interests. For me, it is to test out the feature and understand the design mechanism behind the development. Also, let's not forget the fact that I want my blog to stand out and not look like every other blog. </p>
<p>Before we begin it is important to note that the custom CSS feature is currently enabled only for ambassadors. For more details on how to become an ambassador, check out this <a target="_blank" href="https://hashnode.com/ambassador">link</a>. And, for those ambassadors who are interested in learning about how to enable custom CSS, save the changes and publish them, follow this <a target="_blank" href="https://hashnode.com/post/style-your-hashnode-blog-with-custom-css-ckfwpesyg00ut0es10jgk5uwl">link</a>.</p>
<p>Awesome! Now you are all set up to write CSS for your website. Let's start this mission...🏁</p>
<h2 id="navigation">Navigation</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1614322416652/cgO0WjL90.png" alt="image.png" /></p>
<p>This is the first item I worked on. I personally didn't like how the website navigation links are on one line and the social media icons are displayed on the next row.  I changed this by targeting the .blog-sub-header container which wraps both the nav links and social media links. This is achieved by adding the following code:</p>
<pre><code>.blog-<span class="hljs-function"><span class="hljs-keyword">sub</span>-<span class="hljs-title">header</span>.<span class="hljs-title">items</span>-<span class="hljs-title">end</span> </span>{
    align-items: center;
}
</code></pre><h3 id="media-queries">Media Queries</h3>
<p>Now that we have achieved displaying all links in one single line, I noticed they overlap from 450px width and less. Add the following to change the flex-direction to column using the following code:</p>
<pre><code><span class="hljs-keyword">@media</span> <span class="hljs-keyword">only</span> screen <span class="hljs-keyword">and</span> (<span class="hljs-attribute">max-width:</span> <span class="hljs-number">450px</span>) {

    <span class="hljs-selector-class">.blog-sub-header</span> {
        <span class="hljs-attribute">flex-direction</span>: column;
        <span class="hljs-attribute">align-content</span>: space-around;
        <span class="hljs-attribute">justify-content</span>: center;
    }

}
</code></pre><p>You can do much more to the navigation links by adding hover color effects to these classes: </p>
<ul>
<li>.blog-sub-header-nav a</li>
<li>.blog-social-media-section a</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1614324581147/T0YLcYSnD.gif" alt="chrome-capture (1).gif" /></p>
<h2 id="header-background">Header Background</h2>
<p>There are two style options to choose from for the header section and again this is a personal preference. Do you want the full width of the header to display certain background or just the container that has the logo and navigation links? </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1614325191803/fLt3aaScQ.png" alt="image.png" /></p>
<p>To update the background for the full header width, use <strong>.blog-header</strong> class like this one here: </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1614325864813/NY0uhVOAj.png" alt="image.png" /></p>
<p>Now to target just the container, use <strong>.blog-header .container</strong> classes like this one here:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1614325822590/hWl2pJSZ-.png" alt="image.png" /></p>
<h3 id="bonus-tip">Bonus Tip!!! 🤩🤩</h3>
<p>You will notice in the above screenshots that I targeted a full width in dark mode and just the header width for normal mode. This can be achieved by applying your full background to .blog-header and by inheriting the parent background for .blog-header .container in dark mode. </p>
<h2 id="main-section">Main Section</h2>
<p>Again depending on the page you are targeting, the main body section consists of different divs/containers for the author card, newsletter subscription form (if you have it enabled), blog items listed as cards, blog detail (for the articles page), content of the additional pages. Some key classes to target here are: </p>
<ul>
<li>.blog-subscription-form</li>
<li>.blog-subscription-form-wrapper.</li>
<li>.blog-post-card</li>
<li>.blog-similar-article-wrapper</li>
<li>.blog-page-title</li>
</ul>
<h3 id="hideremove-a-section">Hide/Remove a section.</h3>
<p>You will notice I removed the author card section from my home page and this is done using the following code: </p>
<pre><code><span class="hljs-selector-class">.blog-author-card</span> {
    <span class="hljs-attribute">display</span>: none;
}
</code></pre><p>You might wonder why I didn't use the visibility attribute and set it to hidden. The visibility tag will hide the element but it will still occupy the space allocated for that element. Whereas, the display tag will hide the element as if it is not there. So, you know now. 😎</p>
<h2 id="articles-and-pages">Articles and Pages</h2>
<p>When you make changes to your header and footer, ensure those changes are copied across to all the sections of your website - Home, Articles, and Pages tabs. </p>
<h2 id="dark-mode">Dark Mode</h2>
<p>You can add a different styling for an element to accommodate the dark mode. This can be achieved by adding .dark before your target classes. Sample code below updates the text color from black to yellow when dark mode is enabled:</p>
<pre><code><span class="hljs-selector-class">.dark</span> <span class="hljs-selector-class">.blog-header</span> <span class="hljs-selector-class">.text-black</span> {
    <span class="hljs-attribute">color</span>: <span class="hljs-number">#ff9f1c</span>;
}
</code></pre><p>If you chose a custom background for the header and blog content like I did, make sure relevant images are referred to in dark mode. </p>
<h3 id="challenge">Challenge</h3>
<p>One task I found difficult to solve is to style the author card background-color which is fixed to the div element as an inner element style. The only way to override is to use !important property to the custom CSS. Let me know if you know of a different way to override it without using the !important property. So, what are you waiting for, give it a try by joining Hashnode <a target="_blank" href="https://hashnode.com/@narmada-nannaka/joinme">here</a>?</p>
<h3 id="thank-you-for-reading-lets-connect">Thank you for Reading - Let's Connect!</h3>
<p>Enjoy my blog? For more such awesome blog articles - follow, subscribe and let's connect. </p>
]]></content:encoded></item></channel></rss>